From f0362b23322ac64f52d5a6333a571deed1b8d00e Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 14 Aug 2017 17:45:49 +0200 Subject: [PATCH 001/166] Move csync/tests/ownCloud to test/scripts/txpl --- .../tests/ownCloud => test/scripts/txpl}/.gitignore | 0 {csync/tests/ownCloud => test/scripts/txpl}/README | 0 .../ownCloud => test/scripts/txpl}/exclude.cfg | 0 .../ownCloud => test/scripts/txpl}/ownCloud/Test.pm | 0 .../tests/ownCloud => test/scripts/txpl}/t1.cfg.in | 0 {csync/tests/ownCloud => test/scripts/txpl}/t1.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t2.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t3.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t4.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t5.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t6.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t7.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t8.pl | 0 {csync/tests/ownCloud => test/scripts/txpl}/t9.pl | 0 .../ownCloud => test/scripts/txpl}/t_recall.pl | 0 .../ownCloud => test/scripts/txpl}/testfiles.tar.xz | Bin .../scripts/txpl}/testfiles/church.jpg | Bin .../scripts/txpl}/testfiles/red_is_the_rose.jpg | Bin .../scripts/txpl}/testfiles/test.txt | 0 .../scripts/txpl}/testfiles/zerofile.txt | 0 .../scripts/txpl}/toremote1/My Document.doc | 0 .../scripts/txpl}/toremote1/kernelcrash.txt | 0 .../scripts/txpl}/toremote1/kraft_logo.gif | Bin .../scripts/txpl}/toremote1/rtl1/La ced | 0 .../scripts/txpl}/toremote1/rtl1/rtl11/file.txt | 0 .../scripts/txpl}/toremote1/rtl2/kb1.jpg | Bin .../scripts/txpl}/toremote1/rtl4/quitte.pdf | Bin .../txpl}/toremote1/rtl4/red_is_the_rose.jpg | Bin .../scripts/txpl}/toremote1/special_chars.tar.gz | Bin 29 files changed, 0 insertions(+), 0 deletions(-) rename {csync/tests/ownCloud => test/scripts/txpl}/.gitignore (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/README (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/exclude.cfg (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/ownCloud/Test.pm (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t1.cfg.in (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t1.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t2.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t3.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t4.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t5.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t6.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t7.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t8.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t9.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/t_recall.pl (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/testfiles.tar.xz (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/testfiles/church.jpg (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/testfiles/red_is_the_rose.jpg (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/testfiles/test.txt (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/testfiles/zerofile.txt (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/My Document.doc (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/kernelcrash.txt (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/kraft_logo.gif (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/rtl1/La ced (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/rtl1/rtl11/file.txt (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/rtl2/kb1.jpg (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/rtl4/quitte.pdf (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/rtl4/red_is_the_rose.jpg (100%) rename {csync/tests/ownCloud => test/scripts/txpl}/toremote1/special_chars.tar.gz (100%) diff --git a/csync/tests/ownCloud/.gitignore b/test/scripts/txpl/.gitignore similarity index 100% rename from csync/tests/ownCloud/.gitignore rename to test/scripts/txpl/.gitignore diff --git a/csync/tests/ownCloud/README b/test/scripts/txpl/README similarity index 100% rename from csync/tests/ownCloud/README rename to test/scripts/txpl/README diff --git a/csync/tests/ownCloud/exclude.cfg b/test/scripts/txpl/exclude.cfg similarity index 100% rename from csync/tests/ownCloud/exclude.cfg rename to test/scripts/txpl/exclude.cfg diff --git a/csync/tests/ownCloud/ownCloud/Test.pm b/test/scripts/txpl/ownCloud/Test.pm similarity index 100% rename from csync/tests/ownCloud/ownCloud/Test.pm rename to test/scripts/txpl/ownCloud/Test.pm diff --git a/csync/tests/ownCloud/t1.cfg.in b/test/scripts/txpl/t1.cfg.in similarity index 100% rename from csync/tests/ownCloud/t1.cfg.in rename to test/scripts/txpl/t1.cfg.in diff --git a/csync/tests/ownCloud/t1.pl b/test/scripts/txpl/t1.pl similarity index 100% rename from csync/tests/ownCloud/t1.pl rename to test/scripts/txpl/t1.pl diff --git a/csync/tests/ownCloud/t2.pl b/test/scripts/txpl/t2.pl similarity index 100% rename from csync/tests/ownCloud/t2.pl rename to test/scripts/txpl/t2.pl diff --git a/csync/tests/ownCloud/t3.pl b/test/scripts/txpl/t3.pl similarity index 100% rename from csync/tests/ownCloud/t3.pl rename to test/scripts/txpl/t3.pl diff --git a/csync/tests/ownCloud/t4.pl b/test/scripts/txpl/t4.pl similarity index 100% rename from csync/tests/ownCloud/t4.pl rename to test/scripts/txpl/t4.pl diff --git a/csync/tests/ownCloud/t5.pl b/test/scripts/txpl/t5.pl similarity index 100% rename from csync/tests/ownCloud/t5.pl rename to test/scripts/txpl/t5.pl diff --git a/csync/tests/ownCloud/t6.pl b/test/scripts/txpl/t6.pl similarity index 100% rename from csync/tests/ownCloud/t6.pl rename to test/scripts/txpl/t6.pl diff --git a/csync/tests/ownCloud/t7.pl b/test/scripts/txpl/t7.pl similarity index 100% rename from csync/tests/ownCloud/t7.pl rename to test/scripts/txpl/t7.pl diff --git a/csync/tests/ownCloud/t8.pl b/test/scripts/txpl/t8.pl similarity index 100% rename from csync/tests/ownCloud/t8.pl rename to test/scripts/txpl/t8.pl diff --git a/csync/tests/ownCloud/t9.pl b/test/scripts/txpl/t9.pl similarity index 100% rename from csync/tests/ownCloud/t9.pl rename to test/scripts/txpl/t9.pl diff --git a/csync/tests/ownCloud/t_recall.pl b/test/scripts/txpl/t_recall.pl similarity index 100% rename from csync/tests/ownCloud/t_recall.pl rename to test/scripts/txpl/t_recall.pl diff --git a/csync/tests/ownCloud/testfiles.tar.xz b/test/scripts/txpl/testfiles.tar.xz similarity index 100% rename from csync/tests/ownCloud/testfiles.tar.xz rename to test/scripts/txpl/testfiles.tar.xz diff --git a/csync/tests/ownCloud/testfiles/church.jpg b/test/scripts/txpl/testfiles/church.jpg similarity index 100% rename from csync/tests/ownCloud/testfiles/church.jpg rename to test/scripts/txpl/testfiles/church.jpg diff --git a/csync/tests/ownCloud/testfiles/red_is_the_rose.jpg b/test/scripts/txpl/testfiles/red_is_the_rose.jpg similarity index 100% rename from csync/tests/ownCloud/testfiles/red_is_the_rose.jpg rename to test/scripts/txpl/testfiles/red_is_the_rose.jpg diff --git a/csync/tests/ownCloud/testfiles/test.txt b/test/scripts/txpl/testfiles/test.txt similarity index 100% rename from csync/tests/ownCloud/testfiles/test.txt rename to test/scripts/txpl/testfiles/test.txt diff --git a/csync/tests/ownCloud/testfiles/zerofile.txt b/test/scripts/txpl/testfiles/zerofile.txt similarity index 100% rename from csync/tests/ownCloud/testfiles/zerofile.txt rename to test/scripts/txpl/testfiles/zerofile.txt diff --git a/csync/tests/ownCloud/toremote1/My Document.doc b/test/scripts/txpl/toremote1/My Document.doc similarity index 100% rename from csync/tests/ownCloud/toremote1/My Document.doc rename to test/scripts/txpl/toremote1/My Document.doc diff --git a/csync/tests/ownCloud/toremote1/kernelcrash.txt b/test/scripts/txpl/toremote1/kernelcrash.txt similarity index 100% rename from csync/tests/ownCloud/toremote1/kernelcrash.txt rename to test/scripts/txpl/toremote1/kernelcrash.txt diff --git a/csync/tests/ownCloud/toremote1/kraft_logo.gif b/test/scripts/txpl/toremote1/kraft_logo.gif similarity index 100% rename from csync/tests/ownCloud/toremote1/kraft_logo.gif rename to test/scripts/txpl/toremote1/kraft_logo.gif diff --git a/csync/tests/ownCloud/toremote1/rtl1/La ced b/test/scripts/txpl/toremote1/rtl1/La ced similarity index 100% rename from csync/tests/ownCloud/toremote1/rtl1/La ced rename to test/scripts/txpl/toremote1/rtl1/La ced diff --git a/csync/tests/ownCloud/toremote1/rtl1/rtl11/file.txt b/test/scripts/txpl/toremote1/rtl1/rtl11/file.txt similarity index 100% rename from csync/tests/ownCloud/toremote1/rtl1/rtl11/file.txt rename to test/scripts/txpl/toremote1/rtl1/rtl11/file.txt diff --git a/csync/tests/ownCloud/toremote1/rtl2/kb1.jpg b/test/scripts/txpl/toremote1/rtl2/kb1.jpg similarity index 100% rename from csync/tests/ownCloud/toremote1/rtl2/kb1.jpg rename to test/scripts/txpl/toremote1/rtl2/kb1.jpg diff --git a/csync/tests/ownCloud/toremote1/rtl4/quitte.pdf b/test/scripts/txpl/toremote1/rtl4/quitte.pdf similarity index 100% rename from csync/tests/ownCloud/toremote1/rtl4/quitte.pdf rename to test/scripts/txpl/toremote1/rtl4/quitte.pdf diff --git a/csync/tests/ownCloud/toremote1/rtl4/red_is_the_rose.jpg b/test/scripts/txpl/toremote1/rtl4/red_is_the_rose.jpg similarity index 100% rename from csync/tests/ownCloud/toremote1/rtl4/red_is_the_rose.jpg rename to test/scripts/txpl/toremote1/rtl4/red_is_the_rose.jpg diff --git a/csync/tests/ownCloud/toremote1/special_chars.tar.gz b/test/scripts/txpl/toremote1/special_chars.tar.gz similarity index 100% rename from csync/tests/ownCloud/toremote1/special_chars.tar.gz rename to test/scripts/txpl/toremote1/special_chars.tar.gz From 5c9827a33c92dbf14b16a22e1cac3d1b324492ed Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 14 Aug 2017 18:49:44 +0200 Subject: [PATCH 002/166] Move csync/tests to test/csync --- CMakeLists.txt | 16 +- config.h.in | 2 +- csync/CMakeLists.txt | 18 - csync/CTestConfig.cmake | 12 - csync/CTestCustom.cmake | 4 - csync/config_test.h.cmake | 7 - src/libsync/excludedfiles.cpp | 1 + src/libsync/utility.cpp | 2 +- test/CMakeLists.txt | 6 + test/csync/AUTHORS | 3 + {csync/tests => test/csync}/CMakeLists.txt | 1 + test/csync/COPYING | 502 ++++++++++++++++++ {csync/tests => test/csync}/cmdline.c | 0 .../csync}/csync_tests/check_csync_commit.c | 0 .../csync}/csync_tests/check_csync_create.c | 0 .../csync}/csync_tests/check_csync_exclude.c | 0 .../csync}/csync_tests/check_csync_init.c | 0 .../csync}/csync_tests/check_csync_log.c | 0 .../csync}/csync_tests/check_csync_misc.c | 0 .../csync_tests/check_csync_statedb_load.c | 0 .../csync_tests/check_csync_statedb_query.c | 0 .../csync}/csync_tests/check_csync_update.c | 0 .../csync}/csync_tests/check_csync_util.c | 0 .../csync}/encoding_tests/check_encoding.c | 0 .../csync}/log_tests/check_log.c | 0 .../csync}/std_tests/check_std_c_alloc.c | 0 .../csync}/std_tests/check_std_c_jhash.c | 0 .../csync}/std_tests/check_std_c_path.c | 0 .../csync}/std_tests/check_std_c_rbtree.c | 0 .../csync}/std_tests/check_std_c_str.c | 0 .../csync}/std_tests/check_std_c_time.c | 0 {csync/tests => test/csync}/torture.c | 0 {csync/tests => test/csync}/torture.h | 0 .../tests => test/csync}/valgrind-csync.supp | 0 .../csync}/vio_tests/check_vio.c | 0 .../csync}/vio_tests/check_vio_ext.c | 0 .../csync}/vio_tests/check_vio_file_stat.c | 0 37 files changed, 524 insertions(+), 50 deletions(-) delete mode 100644 csync/CTestConfig.cmake delete mode 100644 csync/CTestCustom.cmake delete mode 100644 csync/config_test.h.cmake create mode 100644 test/csync/AUTHORS rename {csync/tests => test/csync}/CMakeLists.txt (98%) create mode 100644 test/csync/COPYING rename {csync/tests => test/csync}/cmdline.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_commit.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_create.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_exclude.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_init.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_log.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_misc.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_statedb_load.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_statedb_query.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_update.c (100%) rename {csync/tests => test/csync}/csync_tests/check_csync_util.c (100%) rename {csync/tests => test/csync}/encoding_tests/check_encoding.c (100%) rename {csync/tests => test/csync}/log_tests/check_log.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_alloc.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_jhash.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_path.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_rbtree.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_str.c (100%) rename {csync/tests => test/csync}/std_tests/check_std_c_time.c (100%) rename {csync/tests => test/csync}/torture.c (100%) rename {csync/tests => test/csync}/torture.h (100%) rename {csync/tests => test/csync}/valgrind-csync.supp (100%) rename {csync/tests => test/csync}/vio_tests/check_vio.c (100%) rename {csync/tests => test/csync}/vio_tests/check_vio_ext.c (100%) rename {csync/tests => test/csync}/vio_tests/check_vio_file_stat.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 38193d006..d4b2a52ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,8 +180,6 @@ if (NOT DEFINED APPLICATION_ICON_NAME) set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) endif() -configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) - include(OwnCloudCPack.cmake) add_definitions(-DUNICODE) @@ -213,6 +211,14 @@ endif() file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts) set(TRANSLATIONS ${TRANS_FILES}) +if(UNIT_TESTING) + # Make sure we set this before recursing into child folders. + set(WITH_TESTING ON) + include(CTest) + enable_testing() + add_subdirectory(test) +endif(UNIT_TESTING) + add_subdirectory(csync) add_subdirectory(src) if(NOT BUILD_LIBRARIES_ONLY) @@ -222,11 +228,7 @@ add_subdirectory(doc/dev) add_subdirectory(admin) endif(NOT BUILD_LIBRARIES_ONLY) -if(UNIT_TESTING) - include(CTest) - enable_testing() - add_subdirectory(test) -endif(UNIT_TESTING) +configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) if(BUILD_OWNCLOUD_OSX_BUNDLE) install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/) diff --git a/config.h.in b/config.h.in index 0cc0ab9cd..dfd243a09 100644 --- a/config.h.in +++ b/config.h.in @@ -24,6 +24,6 @@ #cmakedefine SYSCONFDIR "@SYSCONFDIR@" #cmakedefine SHAREDIR "@SHAREDIR@" -#cmakedefine WITH_UNIT_TESTING 1 +#cmakedefine WITH_TESTING 1 #endif diff --git a/csync/CMakeLists.txt b/csync/CMakeLists.txt index d5be43a29..8b36dde86 100644 --- a/csync/CMakeLists.txt +++ b/csync/CMakeLists.txt @@ -22,30 +22,12 @@ find_package(SQLite3 3.8.0 REQUIRED) include(ConfigureChecks.cmake) - -set(SOURCE_DIR ${CMAKE_SOURCE_DIR}) - include_directories(${CMAKE_CURRENT_BINARY_DIR}) -macro_copy_file(${CMAKE_CURRENT_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake) - if (MEM_NULL_TESTS) add_definitions(-DCSYNC_MEM_NULL_TESTS) endif (MEM_NULL_TESTS) add_subdirectory(src) -if (UNIT_TESTING) - set(WITH_TESTING ON) - - find_package(CMocka) - if (CMOCKA_FOUND) - include(AddCMockaTest) - add_subdirectory(tests) - endif (CMOCKA_FOUND) -endif (UNIT_TESTING) - configure_file(config_csync.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_csync.h) -configure_file(config_test.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_test.h) - - diff --git a/csync/CTestConfig.cmake b/csync/CTestConfig.cmake deleted file mode 100644 index a65999e68..000000000 --- a/csync/CTestConfig.cmake +++ /dev/null @@ -1,12 +0,0 @@ -set(UPDATE_TYPE "true") - -set(MEMORYCHECK_SUPPRESSIONS_FILE ${CMAKE_SOURCE_DIR}/tests/valgrind-csync.supp) - -set(CTEST_PROJECT_NAME "csync") -set(CTEST_NIGHTLY_START_TIME "01:00:00 UTC") - -set(CTEST_DROP_METHOD "http") -set(CTEST_DROP_SITE "mock.cryptomilk.org") -set(CTEST_DROP_LOCATION "/submit.php?project=${CTEST_PROJECT_NAME}") -set(CTEST_DROP_SITE_CDASH TRUE) - diff --git a/csync/CTestCustom.cmake b/csync/CTestCustom.cmake deleted file mode 100644 index 4afc9ab6a..000000000 --- a/csync/CTestCustom.cmake +++ /dev/null @@ -1,4 +0,0 @@ -set(CTEST_CUSTOM_MEMCHECK_IGNORE - ${CTEST_CUSTOM_MEMCHECK_IGNORE} - check_std_c_jhash -) diff --git a/csync/config_test.h.cmake b/csync/config_test.h.cmake deleted file mode 100644 index 118676b6c..000000000 --- a/csync/config_test.h.cmake +++ /dev/null @@ -1,7 +0,0 @@ - -/* mind to have trailing slashes! */ - -#define TESTFILES_DIR "@SOURCE_DIR@/csync/tests/ownCloud/testfiles/" - -#define TEST_CONFIG_DIR "@SOURCE_DIR@/csync/tests/ownCloud/" - diff --git a/src/libsync/excludedfiles.cpp b/src/libsync/excludedfiles.cpp index 7bd66ac9c..074494ff8 100644 --- a/src/libsync/excludedfiles.cpp +++ b/src/libsync/excludedfiles.cpp @@ -12,6 +12,7 @@ * for more details. */ +#include "config.h" #include "excludedfiles.h" #include "utility.h" diff --git a/src/libsync/utility.cpp b/src/libsync/utility.cpp index b3813f14b..c73b48d91 100644 --- a/src/libsync/utility.cpp +++ b/src/libsync/utility.cpp @@ -275,7 +275,7 @@ void Utility::usleep(int usec) bool Utility::fsCasePreserving() { -#ifndef WITH_TESTING +#ifdef WITH_TESTING QByteArray env = qgetenv("OWNCLOUD_TEST_CASE_PRESERVING"); if (!env.isEmpty()) return env.toInt(); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 860f140e9..ebf349207 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -61,3 +61,9 @@ list(APPEND FolderMan_SRC stub.cpp ) owncloud_add_test(FolderMan "${FolderMan_SRC}") configure_file(test_journal.db "${PROJECT_BINARY_DIR}/bin/test_journal.db" COPYONLY) + +find_package(CMocka) +if (CMOCKA_FOUND) + include(AddCMockaTest) + add_subdirectory(csync) +endif (CMOCKA_FOUND) diff --git a/test/csync/AUTHORS b/test/csync/AUTHORS new file mode 100644 index 000000000..5fd81c08e --- /dev/null +++ b/test/csync/AUTHORS @@ -0,0 +1,3 @@ +Andreas Schneider +Klaas Freitag +Olivier Goffart diff --git a/csync/tests/CMakeLists.txt b/test/csync/CMakeLists.txt similarity index 98% rename from csync/tests/CMakeLists.txt rename to test/csync/CMakeLists.txt index fcfe80a83..e92c15e2d 100644 --- a/csync/tests/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -3,6 +3,7 @@ project(tests C) set(TORTURE_LIBRARY torture) include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} ${CSYNC_PUBLIC_INCLUDE_DIRS} ${CSTDLIB_PUBLIC_INCLUDE_DIRS} ${CMAKE_BINARY_DIR} diff --git a/test/csync/COPYING b/test/csync/COPYING new file mode 100644 index 000000000..4362b4915 --- /dev/null +++ b/test/csync/COPYING @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/csync/tests/cmdline.c b/test/csync/cmdline.c similarity index 100% rename from csync/tests/cmdline.c rename to test/csync/cmdline.c diff --git a/csync/tests/csync_tests/check_csync_commit.c b/test/csync/csync_tests/check_csync_commit.c similarity index 100% rename from csync/tests/csync_tests/check_csync_commit.c rename to test/csync/csync_tests/check_csync_commit.c diff --git a/csync/tests/csync_tests/check_csync_create.c b/test/csync/csync_tests/check_csync_create.c similarity index 100% rename from csync/tests/csync_tests/check_csync_create.c rename to test/csync/csync_tests/check_csync_create.c diff --git a/csync/tests/csync_tests/check_csync_exclude.c b/test/csync/csync_tests/check_csync_exclude.c similarity index 100% rename from csync/tests/csync_tests/check_csync_exclude.c rename to test/csync/csync_tests/check_csync_exclude.c diff --git a/csync/tests/csync_tests/check_csync_init.c b/test/csync/csync_tests/check_csync_init.c similarity index 100% rename from csync/tests/csync_tests/check_csync_init.c rename to test/csync/csync_tests/check_csync_init.c diff --git a/csync/tests/csync_tests/check_csync_log.c b/test/csync/csync_tests/check_csync_log.c similarity index 100% rename from csync/tests/csync_tests/check_csync_log.c rename to test/csync/csync_tests/check_csync_log.c diff --git a/csync/tests/csync_tests/check_csync_misc.c b/test/csync/csync_tests/check_csync_misc.c similarity index 100% rename from csync/tests/csync_tests/check_csync_misc.c rename to test/csync/csync_tests/check_csync_misc.c diff --git a/csync/tests/csync_tests/check_csync_statedb_load.c b/test/csync/csync_tests/check_csync_statedb_load.c similarity index 100% rename from csync/tests/csync_tests/check_csync_statedb_load.c rename to test/csync/csync_tests/check_csync_statedb_load.c diff --git a/csync/tests/csync_tests/check_csync_statedb_query.c b/test/csync/csync_tests/check_csync_statedb_query.c similarity index 100% rename from csync/tests/csync_tests/check_csync_statedb_query.c rename to test/csync/csync_tests/check_csync_statedb_query.c diff --git a/csync/tests/csync_tests/check_csync_update.c b/test/csync/csync_tests/check_csync_update.c similarity index 100% rename from csync/tests/csync_tests/check_csync_update.c rename to test/csync/csync_tests/check_csync_update.c diff --git a/csync/tests/csync_tests/check_csync_util.c b/test/csync/csync_tests/check_csync_util.c similarity index 100% rename from csync/tests/csync_tests/check_csync_util.c rename to test/csync/csync_tests/check_csync_util.c diff --git a/csync/tests/encoding_tests/check_encoding.c b/test/csync/encoding_tests/check_encoding.c similarity index 100% rename from csync/tests/encoding_tests/check_encoding.c rename to test/csync/encoding_tests/check_encoding.c diff --git a/csync/tests/log_tests/check_log.c b/test/csync/log_tests/check_log.c similarity index 100% rename from csync/tests/log_tests/check_log.c rename to test/csync/log_tests/check_log.c diff --git a/csync/tests/std_tests/check_std_c_alloc.c b/test/csync/std_tests/check_std_c_alloc.c similarity index 100% rename from csync/tests/std_tests/check_std_c_alloc.c rename to test/csync/std_tests/check_std_c_alloc.c diff --git a/csync/tests/std_tests/check_std_c_jhash.c b/test/csync/std_tests/check_std_c_jhash.c similarity index 100% rename from csync/tests/std_tests/check_std_c_jhash.c rename to test/csync/std_tests/check_std_c_jhash.c diff --git a/csync/tests/std_tests/check_std_c_path.c b/test/csync/std_tests/check_std_c_path.c similarity index 100% rename from csync/tests/std_tests/check_std_c_path.c rename to test/csync/std_tests/check_std_c_path.c diff --git a/csync/tests/std_tests/check_std_c_rbtree.c b/test/csync/std_tests/check_std_c_rbtree.c similarity index 100% rename from csync/tests/std_tests/check_std_c_rbtree.c rename to test/csync/std_tests/check_std_c_rbtree.c diff --git a/csync/tests/std_tests/check_std_c_str.c b/test/csync/std_tests/check_std_c_str.c similarity index 100% rename from csync/tests/std_tests/check_std_c_str.c rename to test/csync/std_tests/check_std_c_str.c diff --git a/csync/tests/std_tests/check_std_c_time.c b/test/csync/std_tests/check_std_c_time.c similarity index 100% rename from csync/tests/std_tests/check_std_c_time.c rename to test/csync/std_tests/check_std_c_time.c diff --git a/csync/tests/torture.c b/test/csync/torture.c similarity index 100% rename from csync/tests/torture.c rename to test/csync/torture.c diff --git a/csync/tests/torture.h b/test/csync/torture.h similarity index 100% rename from csync/tests/torture.h rename to test/csync/torture.h diff --git a/csync/tests/valgrind-csync.supp b/test/csync/valgrind-csync.supp similarity index 100% rename from csync/tests/valgrind-csync.supp rename to test/csync/valgrind-csync.supp diff --git a/csync/tests/vio_tests/check_vio.c b/test/csync/vio_tests/check_vio.c similarity index 100% rename from csync/tests/vio_tests/check_vio.c rename to test/csync/vio_tests/check_vio.c diff --git a/csync/tests/vio_tests/check_vio_ext.c b/test/csync/vio_tests/check_vio_ext.c similarity index 100% rename from csync/tests/vio_tests/check_vio_ext.c rename to test/csync/vio_tests/check_vio_ext.c diff --git a/csync/tests/vio_tests/check_vio_file_stat.c b/test/csync/vio_tests/check_vio_file_stat.c similarity index 100% rename from csync/tests/vio_tests/check_vio_file_stat.c rename to test/csync/vio_tests/check_vio_file_stat.c From 28a0971cdfbb3fcb77c49df078062d8b3d756fcb Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 14 Aug 2017 19:19:52 +0200 Subject: [PATCH 003/166] Move csync to src/csync --- CMakeLists.txt | 1 - csync/CMakeLists.txt | 33 ------------------- src/CMakeLists.txt | 1 + src/cmd/CMakeLists.txt | 5 ++- {csync => src/csync}/AUTHORS | 0 {csync/src => src/csync}/CMakeLists.txt | 29 +++++++++++++++- {csync => src/csync}/COPYING | 0 {csync => src/csync}/ChangeLog | 0 {csync => src/csync}/ConfigureChecks.cmake | 0 {csync => src/csync}/DefineOptions.cmake | 0 {csync => src/csync}/INSTALL | 0 {csync => src/csync}/README | 0 {csync => src/csync}/config_csync.h.cmake | 0 {csync/src => src/csync}/csync.c | 0 {csync/src => src/csync}/csync.h | 0 {csync/src => src/csync}/csync_exclude.c | 0 {csync/src => src/csync}/csync_exclude.h | 0 {csync/src => src/csync}/csync_log.c | 0 {csync/src => src/csync}/csync_log.h | 0 {csync/src => src/csync}/csync_macros.h | 0 {csync/src => src/csync}/csync_misc.c | 0 {csync/src => src/csync}/csync_misc.h | 0 {csync/src => src/csync}/csync_private.h | 0 {csync/src => src/csync}/csync_reconcile.c | 0 {csync/src => src/csync}/csync_reconcile.h | 0 {csync/src => src/csync}/csync_rename.cc | 0 {csync/src => src/csync}/csync_rename.h | 0 {csync/src => src/csync}/csync_statedb.c | 0 {csync/src => src/csync}/csync_statedb.h | 0 {csync/src => src/csync}/csync_time.c | 0 {csync/src => src/csync}/csync_time.h | 0 {csync/src => src/csync}/csync_update.c | 0 {csync/src => src/csync}/csync_update.h | 0 {csync/src => src/csync}/csync_util.c | 0 {csync/src => src/csync}/csync_util.h | 0 {csync/src => src/csync}/csync_version.h.in | 0 {csync/src => src/csync}/std/CMakeLists.txt | 0 {csync/src => src/csync}/std/asprintf.c | 0 {csync/src => src/csync}/std/asprintf.h | 0 {csync/src => src/csync}/std/c_alloc.c | 0 {csync/src => src/csync}/std/c_alloc.h | 0 {csync/src => src/csync}/std/c_jhash.h | 0 {csync/src => src/csync}/std/c_lib.h | 0 {csync/src => src/csync}/std/c_macro.h | 0 {csync/src => src/csync}/std/c_path.c | 0 {csync/src => src/csync}/std/c_path.h | 0 {csync/src => src/csync}/std/c_private.h | 0 {csync/src => src/csync}/std/c_rbtree.c | 0 {csync/src => src/csync}/std/c_rbtree.h | 0 {csync/src => src/csync}/std/c_string.c | 0 {csync/src => src/csync}/std/c_string.h | 0 {csync/src => src/csync}/std/c_time.c | 0 {csync/src => src/csync}/std/c_time.h | 0 {csync/src => src/csync}/std/c_utf8.cc | 0 {csync/src => src/csync}/vio/csync_vio.c | 0 {csync/src => src/csync}/vio/csync_vio.h | 0 .../csync}/vio/csync_vio_file_stat.c | 0 .../src => src/csync}/vio/csync_vio_local.h | 0 .../csync}/vio/csync_vio_local_unix.c | 0 .../csync}/vio/csync_vio_local_win.c | 0 src/gui/CMakeLists.txt | 6 ++-- src/libsync/CMakeLists.txt | 5 ++- src/libsync/syncjournaldb.cpp | 2 +- test/CMakeLists.txt | 18 +++++++--- test/csync/csync_tests/check_csync_exclude.c | 2 +- test/owncloud_add_test.cmake | 15 --------- test/testexcludedfiles.cpp | 2 +- test/testsyncjournaldb.cpp | 4 +-- 68 files changed, 54 insertions(+), 69 deletions(-) delete mode 100644 csync/CMakeLists.txt rename {csync => src/csync}/AUTHORS (100%) rename {csync/src => src/csync}/CMakeLists.txt (82%) rename {csync => src/csync}/COPYING (100%) rename {csync => src/csync}/ChangeLog (100%) rename {csync => src/csync}/ConfigureChecks.cmake (100%) rename {csync => src/csync}/DefineOptions.cmake (100%) rename {csync => src/csync}/INSTALL (100%) rename {csync => src/csync}/README (100%) rename {csync => src/csync}/config_csync.h.cmake (100%) rename {csync/src => src/csync}/csync.c (100%) rename {csync/src => src/csync}/csync.h (100%) rename {csync/src => src/csync}/csync_exclude.c (100%) rename {csync/src => src/csync}/csync_exclude.h (100%) rename {csync/src => src/csync}/csync_log.c (100%) rename {csync/src => src/csync}/csync_log.h (100%) rename {csync/src => src/csync}/csync_macros.h (100%) rename {csync/src => src/csync}/csync_misc.c (100%) rename {csync/src => src/csync}/csync_misc.h (100%) rename {csync/src => src/csync}/csync_private.h (100%) rename {csync/src => src/csync}/csync_reconcile.c (100%) rename {csync/src => src/csync}/csync_reconcile.h (100%) rename {csync/src => src/csync}/csync_rename.cc (100%) rename {csync/src => src/csync}/csync_rename.h (100%) rename {csync/src => src/csync}/csync_statedb.c (100%) rename {csync/src => src/csync}/csync_statedb.h (100%) rename {csync/src => src/csync}/csync_time.c (100%) rename {csync/src => src/csync}/csync_time.h (100%) rename {csync/src => src/csync}/csync_update.c (100%) rename {csync/src => src/csync}/csync_update.h (100%) rename {csync/src => src/csync}/csync_util.c (100%) rename {csync/src => src/csync}/csync_util.h (100%) rename {csync/src => src/csync}/csync_version.h.in (100%) rename {csync/src => src/csync}/std/CMakeLists.txt (100%) rename {csync/src => src/csync}/std/asprintf.c (100%) rename {csync/src => src/csync}/std/asprintf.h (100%) rename {csync/src => src/csync}/std/c_alloc.c (100%) rename {csync/src => src/csync}/std/c_alloc.h (100%) rename {csync/src => src/csync}/std/c_jhash.h (100%) rename {csync/src => src/csync}/std/c_lib.h (100%) rename {csync/src => src/csync}/std/c_macro.h (100%) rename {csync/src => src/csync}/std/c_path.c (100%) rename {csync/src => src/csync}/std/c_path.h (100%) rename {csync/src => src/csync}/std/c_private.h (100%) rename {csync/src => src/csync}/std/c_rbtree.c (100%) rename {csync/src => src/csync}/std/c_rbtree.h (100%) rename {csync/src => src/csync}/std/c_string.c (100%) rename {csync/src => src/csync}/std/c_string.h (100%) rename {csync/src => src/csync}/std/c_time.c (100%) rename {csync/src => src/csync}/std/c_time.h (100%) rename {csync/src => src/csync}/std/c_utf8.cc (100%) rename {csync/src => src/csync}/vio/csync_vio.c (100%) rename {csync/src => src/csync}/vio/csync_vio.h (100%) rename {csync/src => src/csync}/vio/csync_vio_file_stat.c (100%) rename {csync/src => src/csync}/vio/csync_vio_local.h (100%) rename {csync/src => src/csync}/vio/csync_vio_local_unix.c (100%) rename {csync/src => src/csync}/vio/csync_vio_local_win.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4b2a52ca..976f19aec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -219,7 +219,6 @@ if(UNIT_TESTING) add_subdirectory(test) endif(UNIT_TESTING) -add_subdirectory(csync) add_subdirectory(src) if(NOT BUILD_LIBRARIES_ONLY) add_subdirectory(shell_integration) diff --git a/csync/CMakeLists.txt b/csync/CMakeLists.txt deleted file mode 100644 index 8b36dde86..000000000 --- a/csync/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ - - -# global needed variables -set(APPLICATION_NAME "ocsync") - -set(LIBRARY_VERSION ${MIRALL_VERSION}) -set(LIBRARY_SOVERSION "0") - -# add definitions -include(DefineCMakeDefaults) -include(DefinePlatformDefaults) -include(DefineCompilerFlags) -include(DefineOptions.cmake) - -include(DefineInstallationPaths) - -# add macros -include(MacroAddPlugin) -include(MacroCopyFile) - -find_package(SQLite3 3.8.0 REQUIRED) - -include(ConfigureChecks.cmake) - -include_directories(${CMAKE_CURRENT_BINARY_DIR}) - -if (MEM_NULL_TESTS) - add_definitions(-DCSYNC_MEM_NULL_TESTS) -endif (MEM_NULL_TESTS) - -add_subdirectory(src) - -configure_file(config_csync.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_csync.h) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3cbacd537..f871836cf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,7 @@ if(NOT TOKEN_AUTH_ONLY) find_package(Qt5Keychain REQUIRED) endif() +add_subdirectory(csync) add_subdirectory(libsync) if (NOT BUILD_LIBRARIES_ONLY) add_subdirectory(gui) diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt index 4a0d76d71..26b641f21 100644 --- a/src/cmd/CMakeLists.txt +++ b/src/cmd/CMakeLists.txt @@ -12,9 +12,8 @@ include_directories(${CMAKE_SOURCE_DIR}/src/libsync ) # csync is required. -include_directories(${CMAKE_SOURCE_DIR}/csync/src - ${CMAKE_BINARY_DIR}/csync - ${CMAKE_BINARY_DIR}/csync/src +include_directories(${CMAKE_SOURCE_DIR}/src/csync + ${CMAKE_BINARY_DIR}/src/csync ) # Need tokenizer for netrc parser diff --git a/csync/AUTHORS b/src/csync/AUTHORS similarity index 100% rename from csync/AUTHORS rename to src/csync/AUTHORS diff --git a/csync/src/CMakeLists.txt b/src/csync/CMakeLists.txt similarity index 82% rename from csync/src/CMakeLists.txt rename to src/csync/CMakeLists.txt index 8bce5f418..db99a88d0 100644 --- a/csync/src/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -1,4 +1,31 @@ project(libcsync) +# global needed variables +set(APPLICATION_NAME "ocsync") + +set(LIBRARY_VERSION ${MIRALL_VERSION}) +set(LIBRARY_SOVERSION "0") + +# add definitions +include(DefineCMakeDefaults) +include(DefinePlatformDefaults) +include(DefineCompilerFlags) +include(DefineOptions.cmake) + +include(DefineInstallationPaths) + +# add macros +include(MacroAddPlugin) +include(MacroCopyFile) + +find_package(SQLite3 3.8.0 REQUIRED) + +include(ConfigureChecks.cmake) + +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +if (MEM_NULL_TESTS) + add_definitions(-DCSYNC_MEM_NULL_TESTS) +endif (MEM_NULL_TESTS) add_subdirectory(std) @@ -136,4 +163,4 @@ else() ) endif() - +configure_file(config_csync.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_csync.h) diff --git a/csync/COPYING b/src/csync/COPYING similarity index 100% rename from csync/COPYING rename to src/csync/COPYING diff --git a/csync/ChangeLog b/src/csync/ChangeLog similarity index 100% rename from csync/ChangeLog rename to src/csync/ChangeLog diff --git a/csync/ConfigureChecks.cmake b/src/csync/ConfigureChecks.cmake similarity index 100% rename from csync/ConfigureChecks.cmake rename to src/csync/ConfigureChecks.cmake diff --git a/csync/DefineOptions.cmake b/src/csync/DefineOptions.cmake similarity index 100% rename from csync/DefineOptions.cmake rename to src/csync/DefineOptions.cmake diff --git a/csync/INSTALL b/src/csync/INSTALL similarity index 100% rename from csync/INSTALL rename to src/csync/INSTALL diff --git a/csync/README b/src/csync/README similarity index 100% rename from csync/README rename to src/csync/README diff --git a/csync/config_csync.h.cmake b/src/csync/config_csync.h.cmake similarity index 100% rename from csync/config_csync.h.cmake rename to src/csync/config_csync.h.cmake diff --git a/csync/src/csync.c b/src/csync/csync.c similarity index 100% rename from csync/src/csync.c rename to src/csync/csync.c diff --git a/csync/src/csync.h b/src/csync/csync.h similarity index 100% rename from csync/src/csync.h rename to src/csync/csync.h diff --git a/csync/src/csync_exclude.c b/src/csync/csync_exclude.c similarity index 100% rename from csync/src/csync_exclude.c rename to src/csync/csync_exclude.c diff --git a/csync/src/csync_exclude.h b/src/csync/csync_exclude.h similarity index 100% rename from csync/src/csync_exclude.h rename to src/csync/csync_exclude.h diff --git a/csync/src/csync_log.c b/src/csync/csync_log.c similarity index 100% rename from csync/src/csync_log.c rename to src/csync/csync_log.c diff --git a/csync/src/csync_log.h b/src/csync/csync_log.h similarity index 100% rename from csync/src/csync_log.h rename to src/csync/csync_log.h diff --git a/csync/src/csync_macros.h b/src/csync/csync_macros.h similarity index 100% rename from csync/src/csync_macros.h rename to src/csync/csync_macros.h diff --git a/csync/src/csync_misc.c b/src/csync/csync_misc.c similarity index 100% rename from csync/src/csync_misc.c rename to src/csync/csync_misc.c diff --git a/csync/src/csync_misc.h b/src/csync/csync_misc.h similarity index 100% rename from csync/src/csync_misc.h rename to src/csync/csync_misc.h diff --git a/csync/src/csync_private.h b/src/csync/csync_private.h similarity index 100% rename from csync/src/csync_private.h rename to src/csync/csync_private.h diff --git a/csync/src/csync_reconcile.c b/src/csync/csync_reconcile.c similarity index 100% rename from csync/src/csync_reconcile.c rename to src/csync/csync_reconcile.c diff --git a/csync/src/csync_reconcile.h b/src/csync/csync_reconcile.h similarity index 100% rename from csync/src/csync_reconcile.h rename to src/csync/csync_reconcile.h diff --git a/csync/src/csync_rename.cc b/src/csync/csync_rename.cc similarity index 100% rename from csync/src/csync_rename.cc rename to src/csync/csync_rename.cc diff --git a/csync/src/csync_rename.h b/src/csync/csync_rename.h similarity index 100% rename from csync/src/csync_rename.h rename to src/csync/csync_rename.h diff --git a/csync/src/csync_statedb.c b/src/csync/csync_statedb.c similarity index 100% rename from csync/src/csync_statedb.c rename to src/csync/csync_statedb.c diff --git a/csync/src/csync_statedb.h b/src/csync/csync_statedb.h similarity index 100% rename from csync/src/csync_statedb.h rename to src/csync/csync_statedb.h diff --git a/csync/src/csync_time.c b/src/csync/csync_time.c similarity index 100% rename from csync/src/csync_time.c rename to src/csync/csync_time.c diff --git a/csync/src/csync_time.h b/src/csync/csync_time.h similarity index 100% rename from csync/src/csync_time.h rename to src/csync/csync_time.h diff --git a/csync/src/csync_update.c b/src/csync/csync_update.c similarity index 100% rename from csync/src/csync_update.c rename to src/csync/csync_update.c diff --git a/csync/src/csync_update.h b/src/csync/csync_update.h similarity index 100% rename from csync/src/csync_update.h rename to src/csync/csync_update.h diff --git a/csync/src/csync_util.c b/src/csync/csync_util.c similarity index 100% rename from csync/src/csync_util.c rename to src/csync/csync_util.c diff --git a/csync/src/csync_util.h b/src/csync/csync_util.h similarity index 100% rename from csync/src/csync_util.h rename to src/csync/csync_util.h diff --git a/csync/src/csync_version.h.in b/src/csync/csync_version.h.in similarity index 100% rename from csync/src/csync_version.h.in rename to src/csync/csync_version.h.in diff --git a/csync/src/std/CMakeLists.txt b/src/csync/std/CMakeLists.txt similarity index 100% rename from csync/src/std/CMakeLists.txt rename to src/csync/std/CMakeLists.txt diff --git a/csync/src/std/asprintf.c b/src/csync/std/asprintf.c similarity index 100% rename from csync/src/std/asprintf.c rename to src/csync/std/asprintf.c diff --git a/csync/src/std/asprintf.h b/src/csync/std/asprintf.h similarity index 100% rename from csync/src/std/asprintf.h rename to src/csync/std/asprintf.h diff --git a/csync/src/std/c_alloc.c b/src/csync/std/c_alloc.c similarity index 100% rename from csync/src/std/c_alloc.c rename to src/csync/std/c_alloc.c diff --git a/csync/src/std/c_alloc.h b/src/csync/std/c_alloc.h similarity index 100% rename from csync/src/std/c_alloc.h rename to src/csync/std/c_alloc.h diff --git a/csync/src/std/c_jhash.h b/src/csync/std/c_jhash.h similarity index 100% rename from csync/src/std/c_jhash.h rename to src/csync/std/c_jhash.h diff --git a/csync/src/std/c_lib.h b/src/csync/std/c_lib.h similarity index 100% rename from csync/src/std/c_lib.h rename to src/csync/std/c_lib.h diff --git a/csync/src/std/c_macro.h b/src/csync/std/c_macro.h similarity index 100% rename from csync/src/std/c_macro.h rename to src/csync/std/c_macro.h diff --git a/csync/src/std/c_path.c b/src/csync/std/c_path.c similarity index 100% rename from csync/src/std/c_path.c rename to src/csync/std/c_path.c diff --git a/csync/src/std/c_path.h b/src/csync/std/c_path.h similarity index 100% rename from csync/src/std/c_path.h rename to src/csync/std/c_path.h diff --git a/csync/src/std/c_private.h b/src/csync/std/c_private.h similarity index 100% rename from csync/src/std/c_private.h rename to src/csync/std/c_private.h diff --git a/csync/src/std/c_rbtree.c b/src/csync/std/c_rbtree.c similarity index 100% rename from csync/src/std/c_rbtree.c rename to src/csync/std/c_rbtree.c diff --git a/csync/src/std/c_rbtree.h b/src/csync/std/c_rbtree.h similarity index 100% rename from csync/src/std/c_rbtree.h rename to src/csync/std/c_rbtree.h diff --git a/csync/src/std/c_string.c b/src/csync/std/c_string.c similarity index 100% rename from csync/src/std/c_string.c rename to src/csync/std/c_string.c diff --git a/csync/src/std/c_string.h b/src/csync/std/c_string.h similarity index 100% rename from csync/src/std/c_string.h rename to src/csync/std/c_string.h diff --git a/csync/src/std/c_time.c b/src/csync/std/c_time.c similarity index 100% rename from csync/src/std/c_time.c rename to src/csync/std/c_time.c diff --git a/csync/src/std/c_time.h b/src/csync/std/c_time.h similarity index 100% rename from csync/src/std/c_time.h rename to src/csync/std/c_time.h diff --git a/csync/src/std/c_utf8.cc b/src/csync/std/c_utf8.cc similarity index 100% rename from csync/src/std/c_utf8.cc rename to src/csync/std/c_utf8.cc diff --git a/csync/src/vio/csync_vio.c b/src/csync/vio/csync_vio.c similarity index 100% rename from csync/src/vio/csync_vio.c rename to src/csync/vio/csync_vio.c diff --git a/csync/src/vio/csync_vio.h b/src/csync/vio/csync_vio.h similarity index 100% rename from csync/src/vio/csync_vio.h rename to src/csync/vio/csync_vio.h diff --git a/csync/src/vio/csync_vio_file_stat.c b/src/csync/vio/csync_vio_file_stat.c similarity index 100% rename from csync/src/vio/csync_vio_file_stat.c rename to src/csync/vio/csync_vio_file_stat.c diff --git a/csync/src/vio/csync_vio_local.h b/src/csync/vio/csync_vio_local.h similarity index 100% rename from csync/src/vio/csync_vio_local.h rename to src/csync/vio/csync_vio_local.h diff --git a/csync/src/vio/csync_vio_local_unix.c b/src/csync/vio/csync_vio_local_unix.c similarity index 100% rename from csync/src/vio/csync_vio_local_unix.c rename to src/csync/vio/csync_vio_local_unix.c diff --git a/csync/src/vio/csync_vio_local_win.c b/src/csync/vio/csync_vio_local_win.c similarity index 100% rename from csync/src/vio/csync_vio_local_win.c rename to src/csync/vio/csync_vio_local_win.c diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 2157d3cd6..f7cc0a9db 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -181,11 +181,9 @@ set(3rdparty_INC include_directories(${3rdparty_INC}) # csync is required. -include_directories(${CMAKE_SOURCE_DIR}/csync/src - ${CMAKE_BINARY_DIR}/csync - ${CMAKE_BINARY_DIR}/csync/src +include_directories(${CMAKE_SOURCE_DIR}/src/csync + ${CMAKE_BINARY_DIR}/src/csync ) - include_directories(../libsync ${CMAKE_CURRENT_BINARY_DIR}/../libsync) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 65d68823d..865dad895 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -5,9 +5,8 @@ configure_file( version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" ) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) # csync is required. -include_directories(${CMAKE_SOURCE_DIR}/csync/src - ${CMAKE_BINARY_DIR}/csync - ${CMAKE_BINARY_DIR}/csync/src +include_directories(${CMAKE_SOURCE_DIR}/src/csync + ${CMAKE_BINARY_DIR}/src/csync ) if ( APPLE ) diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index 0eb34e609..203c14988 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -31,7 +31,7 @@ #include "asserts.h" #include "checksums.h" -#include "../../csync/src/std/c_jhash.h" +#include "std/c_jhash.h" namespace OCC { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ebf349207..d6b68cb5c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,17 @@ -include_directories(${CMAKE_BINARY_DIR}/csync ${CMAKE_BINARY_DIR}/csync/src ${CMAKE_BINARY_DIR}/src) -include_directories(${CMAKE_SOURCE_DIR}/csync/src/) -include_directories(${CMAKE_SOURCE_DIR}/csync/src/std ${CMAKE_SOURCE_DIR}/src) -include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer) +include_directories(${QT_INCLUDES} + ${CMAKE_SOURCE_DIR}/src + ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer + ${CMAKE_SOURCE_DIR}/src/csync + ${CMAKE_SOURCE_DIR}/src/csync/std + ${CMAKE_SOURCE_DIR}/src/gui + ${CMAKE_SOURCE_DIR}/src/libsync + ${CMAKE_BINARY_DIR}/src/csync + ${CMAKE_BINARY_DIR}/src/libsync + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ) + +include_directories() include(QtVersionAbstraction) setup_qt() diff --git a/test/csync/csync_tests/check_csync_exclude.c b/test/csync/csync_tests/check_csync_exclude.c index ea9ca0e2f..1d145b240 100644 --- a/test/csync/csync_tests/check_csync_exclude.c +++ b/test/csync/csync_tests/check_csync_exclude.c @@ -27,7 +27,7 @@ #define CSYNC_TEST 1 #include "csync_exclude.c" -#define EXCLUDE_LIST_FILE SOURCEDIR"/../sync-exclude.lst" +#define EXCLUDE_LIST_FILE SOURCEDIR"/../../sync-exclude.lst" static int setup(void **state) { CSYNC *csync; diff --git a/test/owncloud_add_test.cmake b/test/owncloud_add_test.cmake index cefe264ea..7e7cc5057 100644 --- a/test/owncloud_add_test.cmake +++ b/test/owncloud_add_test.cmake @@ -1,11 +1,4 @@ macro(owncloud_add_test test_class additional_cpp) - include_directories(${QT_INCLUDES} - "${PROJECT_SOURCE_DIR}/src/gui" - "${PROJECT_SOURCE_DIR}/src/libsync" - "${CMAKE_BINARY_DIR}/src/libsync" - "${CMAKE_CURRENT_BINARY_DIR}" - ) - set(CMAKE_AUTOMOC TRUE) set(OWNCLOUD_TEST_CLASS ${test_class}) string(TOLOWER "${OWNCLOUD_TEST_CLASS}" OWNCLOUD_TEST_CLASS_LOWERCASE) @@ -27,14 +20,6 @@ macro(owncloud_add_test test_class additional_cpp) endmacro() macro(owncloud_add_benchmark test_class additional_cpp) - include_directories(${CMAKE_CURRENT_SOURCE_DIR} - ${QT_INCLUDES} - "${PROJECT_SOURCE_DIR}/src/gui" - "${PROJECT_SOURCE_DIR}/src/libsync" - "${CMAKE_BINARY_DIR}/src/libsync" - "${CMAKE_CURRENT_BINARY_DIR}" - ) - set(CMAKE_AUTOMOC TRUE) set(OWNCLOUD_TEST_CLASS ${test_class}) string(TOLOWER "${OWNCLOUD_TEST_CLASS}" OWNCLOUD_TEST_CLASS_LOWERCASE) diff --git a/test/testexcludedfiles.cpp b/test/testexcludedfiles.cpp index b52bfb5a9..cfaf73499 100644 --- a/test/testexcludedfiles.cpp +++ b/test/testexcludedfiles.cpp @@ -11,7 +11,7 @@ using namespace OCC; -#define EXCLUDE_LIST_FILE SOURCEDIR"/../sync-exclude.lst" +#define EXCLUDE_LIST_FILE SOURCEDIR"/../../sync-exclude.lst" class TestExcludedFiles: public QObject { diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index 881bb865d..9e412aa85 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -8,8 +8,8 @@ #include -#include "libsync/syncjournaldb.h" -#include "libsync/syncjournalfilerecord.h" +#include "syncjournaldb.h" +#include "syncjournalfilerecord.h" using namespace OCC; From a512586140a2ec0878cfb55b98ba8120f0dd3a64 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 14 Aug 2017 14:32:11 +0200 Subject: [PATCH 004/166] Use .cpp for existing csync .cc files Make this consistent with the rest of the client code. --- src/csync/CMakeLists.txt | 2 +- src/csync/{csync_rename.cc => csync_rename.cpp} | 0 src/csync/std/CMakeLists.txt | 2 +- src/csync/std/{c_utf8.cc => c_utf8.cpp} | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename src/csync/{csync_rename.cc => csync_rename.cpp} (100%) rename src/csync/std/{c_utf8.cc => c_utf8.cpp} (100%) diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index db99a88d0..2bd60e572 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -73,7 +73,7 @@ set(csync_SRCS csync_update.c csync_reconcile.c - csync_rename.cc + csync_rename.cpp vio/csync_vio.c vio/csync_vio_file_stat.c diff --git a/src/csync/csync_rename.cc b/src/csync/csync_rename.cpp similarity index 100% rename from src/csync/csync_rename.cc rename to src/csync/csync_rename.cpp diff --git a/src/csync/std/CMakeLists.txt b/src/csync/std/CMakeLists.txt index 519cada86..8cfd48531 100644 --- a/src/csync/std/CMakeLists.txt +++ b/src/csync/std/CMakeLists.txt @@ -20,7 +20,7 @@ set(cstdlib_SRCS c_rbtree.c c_string.c c_time.c - c_utf8.cc + c_utf8.cpp ) if(NOT HAVE_ASPRINTF AND NOT HAVE___MINGW_ASPRINTF) diff --git a/src/csync/std/c_utf8.cc b/src/csync/std/c_utf8.cpp similarity index 100% rename from src/csync/std/c_utf8.cc rename to src/csync/std/c_utf8.cpp From 4e5898efd76201b104112154be8eca6b2c36a39f Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 14 Aug 2017 16:19:52 +0200 Subject: [PATCH 005/166] Compile almost all of csync as C++ This will allow us to unify data structures between csync and libsync. Utility functions like csync_time and c_std are still compiled as C since we won't need to be coupled with Qt in the short term. --- .../tests/csync_tests/check_csync_update.cpp | 460 ++++++++++++++++++ src/csync/CMakeLists.txt | 24 +- src/csync/{csync.c => csync.cpp} | 4 +- src/csync/csync.h | 10 +- .../{csync_exclude.c => csync_exclude.cpp} | 9 +- src/csync/{csync_log.c => csync_log.cpp} | 0 src/csync/{csync_misc.c => csync_misc.cpp} | 2 +- src/csync/csync_private.h | 2 +- ...{csync_reconcile.c => csync_reconcile.cpp} | 2 + src/csync/csync_rename.cpp | 5 - src/csync/csync_rename.h | 8 - .../{csync_statedb.c => csync_statedb.cpp} | 9 +- src/csync/csync_statedb.h | 8 - src/csync/csync_time.c | 2 + src/csync/csync_time.h | 8 + .../{csync_update.c => csync_update.cpp} | 17 +- src/csync/csync_update.h | 5 +- src/csync/{csync_util.c => csync_util.cpp} | 1 + src/csync/csync_version.h.in | 8 - src/csync/std/asprintf.h | 8 + src/csync/std/c_alloc.h | 9 + src/csync/std/c_path.h | 9 + src/csync/std/c_rbtree.h | 9 + src/csync/std/c_string.h | 9 + src/csync/std/c_time.c | 4 - src/csync/std/c_time.h | 12 + src/csync/vio/{csync_vio.c => csync_vio.cpp} | 0 ...io_file_stat.c => csync_vio_file_stat.cpp} | 0 ..._local_unix.c => csync_vio_local_unix.cpp} | 5 +- ...io_local_win.c => csync_vio_local_win.cpp} | 4 +- src/libsync/excludedfiles.cpp | 2 - src/libsync/excludedfiles.h | 2 - src/libsync/filesystem.cpp | 3 - src/libsync/owncloudpropagator.h | 3 +- src/libsync/syncjournaldb.cpp | 2 - test/csync/CMakeLists.txt | 30 +- ..._csync_commit.c => check_csync_commit.cpp} | 6 +- ..._csync_create.c => check_csync_create.cpp} | 0 ...sync_exclude.c => check_csync_exclude.cpp} | 18 +- ...heck_csync_init.c => check_csync_init.cpp} | 4 +- ...{check_csync_log.c => check_csync_log.cpp} | 4 +- ...heck_csync_misc.c => check_csync_misc.cpp} | 0 ...db_load.c => check_csync_statedb_load.cpp} | 8 +- ..._query.c => check_csync_statedb_query.cpp} | 20 +- ..._csync_update.c => check_csync_update.cpp} | 35 +- ...heck_csync_util.c => check_csync_util.cpp} | 2 +- .../{check_encoding.c => check_encoding.cpp} | 0 .../log_tests/{check_log.c => check_log.cpp} | 0 test/csync/torture.h | 8 + .../vio_tests/{check_vio.c => check_vio.cpp} | 11 +- .../{check_vio_ext.c => check_vio_ext.cpp} | 10 +- ...io_file_stat.c => check_vio_file_stat.cpp} | 0 52 files changed, 654 insertions(+), 167 deletions(-) create mode 100644 csync/tests/csync_tests/check_csync_update.cpp rename src/csync/{csync.c => csync.cpp} (99%) rename src/csync/{csync_exclude.c => csync_exclude.cpp} (98%) rename src/csync/{csync_log.c => csync_log.cpp} (100%) rename src/csync/{csync_misc.c => csync_misc.cpp} (99%) rename src/csync/{csync_reconcile.c => csync_reconcile.cpp} (99%) rename src/csync/{csync_statedb.c => csync_statedb.cpp} (98%) rename src/csync/{csync_update.c => csync_update.cpp} (99%) rename src/csync/{csync_util.c => csync_util.cpp} (99%) rename src/csync/vio/{csync_vio.c => csync_vio.cpp} (100%) rename src/csync/vio/{csync_vio_file_stat.c => csync_vio_file_stat.cpp} (100%) rename src/csync/vio/{csync_vio_local_unix.c => csync_vio_local_unix.cpp} (99%) rename src/csync/vio/{csync_vio_local_win.c => csync_vio_local_win.cpp} (98%) rename test/csync/csync_tests/{check_csync_commit.c => check_csync_commit.cpp} (95%) rename test/csync/csync_tests/{check_csync_create.c => check_csync_create.cpp} (100%) rename test/csync/csync_tests/{check_csync_exclude.c => check_csync_exclude.cpp} (98%) rename test/csync/csync_tests/{check_csync_init.c => check_csync_init.cpp} (96%) rename test/csync/csync_tests/{check_csync_log.c => check_csync_log.cpp} (98%) rename test/csync/csync_tests/{check_csync_misc.c => check_csync_misc.cpp} (100%) rename test/csync/csync_tests/{check_csync_statedb_load.c => check_csync_statedb_load.cpp} (95%) rename test/csync/csync_tests/{check_csync_statedb_query.c => check_csync_statedb_query.cpp} (93%) rename test/csync/csync_tests/{check_csync_update.c => check_csync_update.cpp} (94%) rename test/csync/csync_tests/{check_csync_util.c => check_csync_util.cpp} (95%) rename test/csync/encoding_tests/{check_encoding.c => check_encoding.cpp} (100%) rename test/csync/log_tests/{check_log.c => check_log.cpp} (100%) rename test/csync/vio_tests/{check_vio.c => check_vio.cpp} (95%) rename test/csync/vio_tests/{check_vio_ext.c => check_vio_ext.cpp} (98%) rename test/csync/vio_tests/{check_vio_file_stat.c => check_vio_file_stat.cpp} (100%) diff --git a/csync/tests/csync_tests/check_csync_update.cpp b/csync/tests/csync_tests/check_csync_update.cpp new file mode 100644 index 000000000..cc11bad83 --- /dev/null +++ b/csync/tests/csync_tests/check_csync_update.cpp @@ -0,0 +1,460 @@ +/* + * libcsync -- a library to sync a directory with another + * + * Copyright (c) 2008-2013 by Andreas Schneider + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ +#include "csync_update.cpp" + +extern "C" { + +#include "torture.h" + +#define TESTDB "/tmp/check_csync/journal.db" + +static int firstrun = 1; + +static void statedb_create_metadata_table(sqlite3 *db) +{ + int rc = 0; + + if( db ) { + const char *sql = "CREATE TABLE IF NOT EXISTS metadata(" + "phash INTEGER(8)," + "pathlen INTEGER," + "path VARCHAR(4096)," + "inode INTEGER," + "uid INTEGER," + "gid INTEGER," + "mode INTEGER," + "modtime INTEGER(8)," + "type INTEGER," + "md5 VARCHAR(32)," + "fileid VARCHAR(128)," + "remotePerm VARCHAR(128)," + "filesize BIGINT," + "ignoredChildrenRemote INT," + "contentChecksum TEXT," + "contentChecksumTypeId INTEGER," + "PRIMARY KEY(phash));"; + + rc = sqlite3_exec(db, sql, NULL, NULL, NULL); + //const char *msg = sqlite3_errmsg(db); + assert_int_equal( rc, SQLITE_OK ); + + sql = "CREATE TABLE IF NOT EXISTS checksumtype(" + "id INTEGER PRIMARY KEY," + "name TEXT UNIQUE" + ");"; + rc = sqlite3_exec(db, sql, NULL, NULL, NULL); + assert_int_equal( rc, SQLITE_OK ); + } +} + +static void statedb_insert_metadata(sqlite3 *db) +{ + int rc = 0; + + if( db ) { + char *stmt = sqlite3_mprintf("INSERT INTO metadata" + "(phash, pathlen, path, inode, uid, gid, mode, modtime,type,md5) VALUES" + "(%lld, %d, '%q', %d, %d, %d, %d, %lld, %d, '%q');", + (long long signed int)42, + 42, + "I_was_wurst_before_I_became_wurstsalat", + 619070, + 42, + 42, + 42, + (long long signed int)42, + 0, + "4711"); + + char *errmsg; + rc = sqlite3_exec(db, stmt, NULL, NULL, &errmsg); + sqlite3_free(stmt); + assert_int_equal( rc, SQLITE_OK ); + } +} + +static int setup(void **state) +{ + CSYNC *csync; + int rc; + + unlink(TESTDB); + rc = system("mkdir -p /tmp/check_csync"); + assert_int_equal(rc, 0); + rc = system("mkdir -p /tmp/check_csync1"); + assert_int_equal(rc, 0); + csync_create(&csync, "/tmp/check_csync1"); + csync_init(csync, TESTDB); + + /* Create a new db with metadata */ + sqlite3 *db; + csync->statedb.file = c_strdup(TESTDB); + rc = sqlite3_open(csync->statedb.file, &db); + statedb_create_metadata_table(db); + if( firstrun ) { + statedb_insert_metadata(db); + firstrun = 0; + } + sqlite3_close(db); + + rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); + assert_int_equal(rc, 0); + + *state = csync; + + return 0; +} + +static int setup_ftw(void **state) +{ + CSYNC *csync; + int rc; + + rc = system("mkdir -p /tmp/check_csync"); + assert_int_equal(rc, 0); + rc = system("mkdir -p /tmp/check_csync1"); + assert_int_equal(rc, 0); + csync_create(&csync, "/tmp"); + csync_init(csync, TESTDB); + + sqlite3 *db = NULL; + rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); + assert_int_equal(rc, SQLITE_OK); + statedb_create_metadata_table(db); + rc = sqlite3_close(db); + assert_int_equal(rc, SQLITE_OK); + + rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); + assert_int_equal(rc, 0); + + csync->statedb.file = c_strdup( TESTDB ); + *state = csync; + + return 0; +} + +static int teardown(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + int rc; + + unlink( csync->statedb.file); + rc = csync_destroy(csync); + assert_int_equal(rc, 0); + + *state = NULL; + + return 0; +} + +static int teardown_rm(void **state) { + int rc; + + teardown(state); + + rc = system("rm -rf /tmp/check_csync"); + assert_int_equal(rc, 0); + rc = system("rm -rf /tmp/check_csync1"); + assert_int_equal(rc, 0); + + return 0; +} + +/* create a file stat, caller must free memory */ +static csync_vio_file_stat_t* create_fstat(const char *name, + ino_t inode, + time_t mtime) +{ + csync_vio_file_stat_t *fs = NULL; + time_t t; + + fs = csync_vio_file_stat_new(); + if (fs == NULL) { + return NULL; + } + + if (name && *name) { + fs->name = c_strdup(name); + } else { + fs->name = c_strdup("file.txt"); + } + + if (fs->name == NULL) { + csync_vio_file_stat_destroy(fs); + return NULL; + } + + fs->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; + + fs->type = CSYNC_VIO_FILE_TYPE_REGULAR; + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; + + + if (inode == 0) { + fs->inode = 619070; + } else { + fs->inode = inode; + } + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_INODE; + + + fs->size = 157459; + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; + + + + if (mtime == 0) { + fs->atime = fs->ctime = fs->mtime = time(&t); + } else { + fs->atime = fs->ctime = fs->mtime = mtime; + } + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME; + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME; + fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; + + return fs; +} + +static int failing_fn(CSYNC *ctx, + const char *file, + const csync_vio_file_stat_t *fs, + int flag) +{ + (void) ctx; + (void) file; + (void) fs; + (void) flag; + + return -1; +} + +/* detect a new file */ +static void check_csync_detect_update(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + csync_file_stat_t *st; + csync_vio_file_stat_t *fs; + int rc; + + fs = create_fstat("file.txt", 0, 1217597845); + assert_non_null(fs); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/file.txt", + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, 0); + + /* the instruction should be set to new */ + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); + + /* create a statedb */ + csync_set_status(csync, 0xFFFF); + + csync_vio_file_stat_destroy(fs); +} + +/* Test behaviour in case no db is there. For that its important that the + * test before this one uses teardown_rm. + */ +static void check_csync_detect_update_db_none(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + csync_file_stat_t *st; + csync_vio_file_stat_t *fs; + int rc; + + fs = create_fstat("file.txt", 0, 1217597845); + assert_non_null(fs); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/file.txt", + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, 0); + + /* the instruction should be set to new */ + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); + + + /* create a statedb */ + csync_set_status(csync, 0xFFFF); + + csync_vio_file_stat_destroy(fs); +} + +static void check_csync_detect_update_db_eval(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + csync_file_stat_t *st; + csync_vio_file_stat_t *fs; + int rc; + + fs = create_fstat("file.txt", 0, 42); + assert_non_null(fs); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/file.txt", + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, 0); + + /* the instruction should be set to new */ + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); + + /* create a statedb */ + csync_set_status(csync, 0xFFFF); + + csync_vio_file_stat_destroy(fs); +} + + +static void check_csync_detect_update_db_rename(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + // csync_file_stat_t *st; + + csync_vio_file_stat_t *fs; + int rc = 0; + + fs = create_fstat("wurst.txt", 0, 42); + assert_non_null(fs); + csync_set_statedb_exists(csync, 1); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/wurst.txt", + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, 0); + + /* the instruction should be set to rename */ + /* + * temporarily broken. + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + assert_int_equal(st->instruction, CSYNC_INSTRUCTION_RENAME); + + st->instruction = CSYNC_INSTRUCTION_UPDATED; + */ + /* create a statedb */ + csync_set_status(csync, 0xFFFF); + + csync_vio_file_stat_destroy(fs); +} + +static void check_csync_detect_update_db_new(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + csync_file_stat_t *st; + csync_vio_file_stat_t *fs; + int rc; + + fs = create_fstat("file.txt", 42000, 0); + assert_non_null(fs); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/file.txt", + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, 0); + + /* the instruction should be set to new */ + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); + + + /* create a statedb */ + csync_set_status(csync, 0xFFFF); + + csync_vio_file_stat_destroy(fs); +} + +static void check_csync_detect_update_null(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + csync_vio_file_stat_t *fs; + int rc; + + fs = create_fstat("file.txt", 0, 0); + assert_non_null(fs); + + rc = _csync_detect_update(csync, + NULL, + fs, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, -1); + + rc = _csync_detect_update(csync, + "/tmp/check_csync1/file.txt", + NULL, + CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, -1); + + csync_vio_file_stat_destroy(fs); +} + +static void check_csync_ftw(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + int rc; + + rc = csync_ftw(csync, "/tmp", csync_walker, MAX_DEPTH); + assert_int_equal(rc, 0); +} + +static void check_csync_ftw_empty_uri(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + int rc; + + rc = csync_ftw(csync, "", csync_walker, MAX_DEPTH); + assert_int_equal(rc, -1); +} + +static void check_csync_ftw_failing_fn(void **state) +{ + CSYNC *csync = (CSYNC*)*state; + int rc; + + rc = csync_ftw(csync, "/tmp", failing_fn, MAX_DEPTH); + assert_int_equal(rc, -1); +} + +int torture_run_tests(void) +{ + const struct CMUnitTest tests[] = { + cmocka_unit_test_setup_teardown(check_csync_detect_update, setup, teardown_rm), + cmocka_unit_test_setup_teardown(check_csync_detect_update_db_none, setup, teardown), + cmocka_unit_test_setup_teardown(check_csync_detect_update_db_eval, setup, teardown), + cmocka_unit_test_setup_teardown(check_csync_detect_update_db_rename, setup, teardown), + cmocka_unit_test_setup_teardown(check_csync_detect_update_db_new, setup, teardown_rm), + cmocka_unit_test_setup_teardown(check_csync_detect_update_null, setup, teardown_rm), + + cmocka_unit_test_setup_teardown(check_csync_ftw, setup_ftw, teardown_rm), + cmocka_unit_test_setup_teardown(check_csync_ftw_empty_uri, setup_ftw, teardown_rm), + cmocka_unit_test_setup_teardown(check_csync_ftw_failing_fn, setup_ftw, teardown_rm), + }; + + return cmocka_run_group_tests(tests, NULL, NULL); +} + +} diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index 2bd60e572..09f320202 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -62,30 +62,30 @@ if(NO_RENAME_EXTENSION) endif() set(csync_SRCS - csync.c - csync_exclude.c - csync_log.c - csync_statedb.c + csync.cpp + csync_exclude.cpp + csync_log.cpp + csync_statedb.cpp csync_time.c - csync_util.c - csync_misc.c + csync_util.cpp + csync_misc.cpp - csync_update.c - csync_reconcile.c + csync_update.cpp + csync_reconcile.cpp csync_rename.cpp - vio/csync_vio.c - vio/csync_vio_file_stat.c + vio/csync_vio.cpp + vio/csync_vio_file_stat.cpp ) if (WIN32) list(APPEND csync_SRCS - vio/csync_vio_local_win.c + vio/csync_vio_local_win.cpp ) else() list(APPEND csync_SRCS - vio/csync_vio_local_unix.c + vio/csync_vio_local_unix.cpp ) endif() diff --git a/src/csync/csync.c b/src/csync/csync.cpp similarity index 99% rename from src/csync/csync.c rename to src/csync/csync.cpp index 1f75ac3bd..6ef3d0d1d 100644 --- a/src/csync/csync.c +++ b/src/csync/csync.cpp @@ -86,7 +86,7 @@ void csync_create(CSYNC **csync, const char *local) { CSYNC *ctx; size_t len = 0; - ctx = c_malloc(sizeof(CSYNC)); + ctx = (CSYNC*)c_malloc(sizeof(CSYNC)); ctx->status_code = CSYNC_STATUS_OK; @@ -604,7 +604,7 @@ int csync_set_status(CSYNC *ctx, int status) { CSYNC_STATUS csync_get_status(CSYNC *ctx) { if (ctx == NULL) { - return -1; + return CSYNC_STATUS_ERROR; } return ctx->status_code; diff --git a/src/csync/csync.h b/src/csync/csync.h index daf778c24..73eb5790a 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -40,10 +40,6 @@ #include #include -#ifdef __cplusplus -extern "C" { -#endif - enum csync_status_codes_e { CSYNC_STATUS_OK = 0, @@ -221,7 +217,7 @@ struct csync_vio_file_stat_s { int fields; // actually enum csync_vio_file_stat_fields_e fields; enum csync_vio_file_type_e type; - enum csync_vio_file_flags_e flags; + int flags; char *original_name; // only set if locale conversion fails @@ -504,10 +500,6 @@ int OCSYNC_EXPORT csync_abort_requested(CSYNC *ctx); char OCSYNC_EXPORT *csync_normalize_etag(const char *); time_t OCSYNC_EXPORT oc_httpdate_parse( const char *date ); -#ifdef __cplusplus -} -#endif - /** * }@ */ diff --git a/src/csync/csync_exclude.c b/src/csync/csync_exclude.cpp similarity index 98% rename from src/csync/csync_exclude.c rename to src/csync/csync_exclude.cpp index fea662504..9ab187e71 100644 --- a/src/csync/csync_exclude.c +++ b/src/csync/csync_exclude.cpp @@ -71,7 +71,7 @@ int _csync_exclude_add(c_strlist_t **inList, const char *string) { static const char *csync_exclude_expand_escapes(const char * input) { size_t i_len = strlen(input) + 1; - char *out = c_malloc(i_len); // out can only be shorter + char *out = (char*)c_malloc(i_len); // out can only be shorter size_t i = 0; size_t o = 0; @@ -141,7 +141,7 @@ int csync_exclude_load(const char *fname, c_strlist_t **list) { rc = 0; goto out; } - buf = c_malloc(size + 1); + buf = (char*)c_malloc(size + 1); if (read(fd, buf, size) != size) { rc = -1; goto out; @@ -220,6 +220,7 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch int rc = -1; CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED; CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED; + c_strlist_t *path_components = NULL; /* split up the path */ bname = strrchr(path, '/'); @@ -274,8 +275,7 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch } // Filter out characters not allowed in a filename on windows - const char *p = NULL; - for (p = path; *p; p++) { + for (const char *p = path; *p; p++) { switch (*p) { case '\\': case ':': @@ -331,7 +331,6 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch goto out; } - c_strlist_t *path_components = NULL; if (check_leading_dirs) { /* Build a list of path components to check. */ path_components = c_strlist_new(32); diff --git a/src/csync/csync_log.c b/src/csync/csync_log.cpp similarity index 100% rename from src/csync/csync_log.c rename to src/csync/csync_log.cpp diff --git a/src/csync/csync_misc.c b/src/csync/csync_misc.cpp similarity index 99% rename from src/csync/csync_misc.c rename to src/csync/csync_misc.cpp index d23236113..cf719439f 100644 --- a/src/csync/csync_misc.c +++ b/src/csync/csync_misc.cpp @@ -198,7 +198,7 @@ char *csync_normalize_etag(const char *etag) len -= 2; } - buf = c_malloc( len+1 ); + buf = (char*)c_malloc( len+1 ); strncpy( buf, etag, len ); buf[len] = '\0'; return buf; diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 2edc26019..3d1632e41 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -163,7 +163,7 @@ struct csync_file_stat_s { size_t pathlen; /* u64 */ uint64_t inode; /* u64 */ mode_t mode; /* u32 */ - unsigned int type : 4; + enum csync_ftw_type_e type : 4; unsigned int child_modified : 1; unsigned int has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */ diff --git a/src/csync/csync_reconcile.c b/src/csync/csync_reconcile.cpp similarity index 99% rename from src/csync/csync_reconcile.c rename to src/csync/csync_reconcile.cpp index 59156e800..3b02398fc 100644 --- a/src/csync/csync_reconcile.c +++ b/src/csync/csync_reconcile.cpp @@ -31,6 +31,8 @@ #define CSYNC_LOG_CATEGORY_NAME "csync.reconciler" #include "csync_log.h" +// Needed for PRIu64 on MinGW in C++ mode. +#define __STDC_FORMAT_MACROS #include "inttypes.h" /* Check if a file is ignored because one parent is ignored. diff --git a/src/csync/csync_rename.cpp b/src/csync/csync_rename.cpp index 5cc43ce22..79bb78e34 100644 --- a/src/csync/csync_rename.cpp +++ b/src/csync/csync_rename.cpp @@ -18,10 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -extern "C" { #include "csync_private.h" #include "csync_rename.h" -} #include #include @@ -55,7 +53,6 @@ struct csync_rename_s { std::vector todo; }; -extern "C" { void csync_rename_destroy(CSYNC* ctx) { delete reinterpret_cast(ctx->rename_info); @@ -98,5 +95,3 @@ bool csync_rename_count(CSYNC *ctx) { csync_rename_s* d = csync_rename_s::get(ctx); return d->folder_renamed_from.size(); } - -} diff --git a/src/csync/csync_rename.h b/src/csync/csync_rename.h index 53968324c..7702a1376 100644 --- a/src/csync/csync_rename.h +++ b/src/csync/csync_rename.h @@ -22,10 +22,6 @@ #include "csync.h" -#ifdef __cplusplus -extern "C" { -#endif - /* Return the final destination path of a given patch in case of renames */ char OCSYNC_EXPORT *csync_rename_adjust_path(CSYNC *ctx, const char *path); /* Return the source of a given path in case of renames */ @@ -34,7 +30,3 @@ void OCSYNC_EXPORT csync_rename_destroy(CSYNC *ctx); void OCSYNC_EXPORT csync_rename_record(CSYNC *ctx, const char *from, const char *to); /* Return the amount of renamed item recorded */ bool OCSYNC_EXPORT csync_rename_count(CSYNC *ctx); - -#ifdef __cplusplus -} -#endif diff --git a/src/csync/csync_statedb.c b/src/csync/csync_statedb.cpp similarity index 98% rename from src/csync/csync_statedb.c rename to src/csync/csync_statedb.cpp index 056ca48dd..63eb813e7 100644 --- a/src/csync/csync_statedb.c +++ b/src/csync/csync_statedb.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include "c_lib.h" #include "csync_private.h" @@ -48,6 +47,10 @@ #include "csync_log.h" #include "csync_rename.h" +// Needed for PRIu64 on MinGW in C++ mode. +#define __STDC_FORMAT_MACROS +#include + #define BUF_SIZE 16 #define sqlite_open(A, B) sqlite3_open_v2(A,B, SQLITE_OPEN_READONLY+SQLITE_OPEN_NOMUTEX, NULL) @@ -257,7 +260,7 @@ static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3 /* phash, pathlen, path, inode, uid, gid, mode, modtime */ len = sqlite3_column_int(stmt, 1); - *st = c_malloc(sizeof(csync_file_stat_t) + len + 1); + *st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + len + 1); /* clear the whole structure */ ZERO_STRUCTP(*st); @@ -272,7 +275,7 @@ static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3 (*st)->modtime = strtoul((char*)sqlite3_column_text(stmt, 7), NULL, 10); if(*st && column_count > 8 ) { - (*st)->type = sqlite3_column_int(stmt, 8); + (*st)->type = static_cast(sqlite3_column_int(stmt, 8)); } if(column_count > 9 && sqlite3_column_text(stmt, 9)) { diff --git a/src/csync/csync_statedb.h b/src/csync/csync_statedb.h index 601e34a1b..dc58a9b08 100644 --- a/src/csync/csync_statedb.h +++ b/src/csync/csync_statedb.h @@ -33,10 +33,6 @@ #ifndef _CSYNC_STATEDB_H #define _CSYNC_STATEDB_H -#ifdef __cplusplus -extern "C" { -#endif - #include "c_lib.h" #include "csync_private.h" @@ -96,10 +92,6 @@ int csync_statedb_get_below_path(CSYNC *ctx, const char *path); */ c_strlist_t *csync_statedb_query(sqlite3 *db, const char *statement); -#ifdef __cplusplus -} -#endif - /** * }@ */ diff --git a/src/csync/csync_time.c b/src/csync/csync_time.c index 85bdd5ff4..3092819a3 100644 --- a/src/csync/csync_time.c +++ b/src/csync/csync_time.c @@ -34,6 +34,8 @@ #ifndef _WIN32 #include #include +#else +#include #endif #define CSYNC_LOG_CATEGORY_NAME "csync.time" diff --git a/src/csync/csync_time.h b/src/csync/csync_time.h index 1492bef8d..55aa09841 100644 --- a/src/csync/csync_time.h +++ b/src/csync/csync_time.h @@ -21,6 +21,10 @@ #ifndef _CSYNC_TIME_H #define _CSYNC_TIME_H +#ifdef __cplusplus +extern "C" { +#endif + #include #include "csync_private.h" @@ -28,4 +32,8 @@ int csync_gettime(struct timespec *tp); void csync_sleep(unsigned int msecs); +#ifdef __cplusplus +} +#endif + #endif /* _CSYNC_TIME_H */ diff --git a/src/csync/csync_update.c b/src/csync/csync_update.cpp similarity index 99% rename from src/csync/csync_update.c rename to src/csync/csync_update.cpp index 1a069442e..927290b1a 100644 --- a/src/csync/csync_update.c +++ b/src/csync/csync_update.cpp @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -48,6 +47,10 @@ #include "csync_log.h" #include "csync_rename.h" +// Needed for PRIu64 on MinGW in C++ mode. +#define __STDC_FORMAT_MACROS +#include + /* calculate the hash of a given uri */ static uint64_t _hash_of_file(CSYNC *ctx, const char *file) { const char *path; @@ -159,7 +162,7 @@ static bool _csync_mtime_equal(time_t a, time_t b) * See doc/dev/sync-algorithm.md for an overview. */ static int _csync_detect_update(CSYNC *ctx, const char *file, - const csync_vio_file_stat_t *fs, const int type) { + const csync_vio_file_stat_t *fs, enum csync_ftw_type_e type) { uint64_t h = 0; size_t len = 0; size_t size = 0; @@ -224,7 +227,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } size = sizeof(csync_file_stat_t) + len + 1; - st = c_malloc(size); + st = static_cast(c_malloc(size)); /* Set instruction by default to none */ st->instruction = CSYNC_INSTRUCTION_NONE; @@ -540,9 +543,9 @@ out: } int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, - enum csync_ftw_flags_e flag) { + int flag) { int rc = -1; - int type = CSYNC_FTW_TYPE_SKIP; + enum csync_ftw_type_e type = CSYNC_FTW_TYPE_SKIP; csync_file_stat_t *st = NULL; uint64_t h; @@ -648,13 +651,13 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, int rc = 0; int res = 0; + bool do_read_from_db = (ctx->current == REMOTE_REPLICA && ctx->remote.read_from_db); + if (!depth) { mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_INDIVIDUAL_TOO_DEEP); goto done; } - bool do_read_from_db = (ctx->current == REMOTE_REPLICA && ctx->remote.read_from_db); - read_from_db = ctx->remote.read_from_db; // if the etag of this dir is still the same, its content is restored from the diff --git a/src/csync/csync_update.h b/src/csync/csync_update.h index 4a7495e3a..d83ee91e8 100644 --- a/src/csync/csync_update.h +++ b/src/csync/csync_update.h @@ -53,7 +53,7 @@ enum csync_ftw_flags_e { }; typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, - const csync_vio_file_stat_t *fs, enum csync_ftw_flags_e flag); + const csync_vio_file_stat_t *fs, int flag); /** * @brief The walker function to use in the file tree walker. @@ -68,8 +68,7 @@ typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, * * @return 0 on success, < 0 on error. */ -int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, - enum csync_ftw_flags_e flag); +int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, int flag); /** * @brief The file tree walker. diff --git a/src/csync/csync_util.c b/src/csync/csync_util.cpp similarity index 99% rename from src/csync/csync_util.c rename to src/csync/csync_util.cpp index 1bc09c35c..4fc13a471 100644 --- a/src/csync/csync_util.c +++ b/src/csync/csync_util.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include "c_jhash.h" #include "csync_util.h" diff --git a/src/csync/csync_version.h.in b/src/csync/csync_version.h.in index 9471734b8..3bf379db9 100644 --- a/src/csync/csync_version.h.in +++ b/src/csync/csync_version.h.in @@ -21,17 +21,9 @@ #ifndef _CSYNC_VERSION_H #define _CSYNC_VERSION_H -#ifdef __cplusplus -extern "C" { -#endif - #define CSYNC_STRINGIFY(s) CSYNC_TOSTRING(s) #define CSYNC_TOSTRING(s) #s #define MIRALL_VERSION @MIRALL_VERSION@ -#ifdef __cplusplus -} -#endif - #endif // _CSYNC_VERSION_H diff --git a/src/csync/std/asprintf.h b/src/csync/std/asprintf.h index d6dd2e859..21693ca89 100644 --- a/src/csync/std/asprintf.h +++ b/src/csync/std/asprintf.h @@ -34,6 +34,10 @@ #ifndef ASPRINTF_H #define ASPRINTF_H 1 +#ifdef __cplusplus +extern "C" { +#endif + #include /** @@ -56,5 +60,9 @@ vasprintf (char **, const char *, va_list); int asprintf (char **, const char *, ...); +#ifdef __cplusplus +} +#endif + #endif #endif diff --git a/src/csync/std/c_alloc.h b/src/csync/std/c_alloc.h index 6eeccd69d..8ff2eb08b 100644 --- a/src/csync/std/c_alloc.h +++ b/src/csync/std/c_alloc.h @@ -34,6 +34,10 @@ #ifndef _C_ALLOC_H #define _C_ALLOC_H +#ifdef __cplusplus +extern "C" { +#endif + #include #include "c_macro.h" @@ -113,4 +117,9 @@ char *c_strndup(const char *str, size_t size); /** * }@ */ + +#ifdef __cplusplus +} +#endif + #endif /* _C_ALLOC_H */ diff --git a/src/csync/std/c_path.h b/src/csync/std/c_path.h index 291b1b8d3..f17c5f480 100644 --- a/src/csync/std/c_path.h +++ b/src/csync/std/c_path.h @@ -32,6 +32,10 @@ #ifndef _C_PATH_H #define _C_PATH_H +#ifdef __cplusplus +extern "C" { +#endif + #include "c_macro.h" #include "c_private.h" @@ -139,4 +143,9 @@ mbchar_t* c_utf8_path_to_locale(const char *str); /** * }@ */ + +#ifdef __cplusplus +} +#endif + #endif /* _C_PATH_H */ diff --git a/src/csync/std/c_rbtree.h b/src/csync/std/c_rbtree.h index 635458fd2..69b4c0d73 100644 --- a/src/csync/std/c_rbtree.h +++ b/src/csync/std/c_rbtree.h @@ -66,6 +66,10 @@ #ifndef _C_RBTREE_H #define _C_RBTREE_H +#ifdef __cplusplus +extern "C" { +#endif + /* Forward declarations */ struct c_rbtree_s; typedef struct c_rbtree_s c_rbtree_t; struct c_rbnode_s; typedef struct c_rbnode_s c_rbnode_t; @@ -306,4 +310,9 @@ int c_rbtree_check_sanity(c_rbtree_t *tree); /** * }@ */ + +#ifdef __cplusplus +} +#endif + #endif /* _C_RBTREE_H */ diff --git a/src/csync/std/c_string.h b/src/csync/std/c_string.h index 304c598a2..4d7d9b599 100644 --- a/src/csync/std/c_string.h +++ b/src/csync/std/c_string.h @@ -32,6 +32,10 @@ #ifndef _C_STR_H #define _C_STR_H +#ifdef __cplusplus +extern "C" { +#endif + #include "c_private.h" #include "c_macro.h" @@ -217,5 +221,10 @@ mbchar_t* c_utf8_string_to_locale(const char *wstr); /** * }@ */ + +#ifdef __cplusplus +} +#endif + #endif /* _C_STR_H */ diff --git a/src/csync/std/c_time.c b/src/csync/std/c_time.c index ad43fed02..561cd4763 100644 --- a/src/csync/std/c_time.c +++ b/src/csync/std/c_time.c @@ -25,10 +25,6 @@ #include "c_path.h" #include "c_time.h" -#ifndef _WIN32 -#include -#endif - struct timespec c_tspecdiff(struct timespec time1, struct timespec time0) { struct timespec ret; int xsec = 0; diff --git a/src/csync/std/c_time.h b/src/csync/std/c_time.h index aa8ef2f16..67e7fcbad 100644 --- a/src/csync/std/c_time.h +++ b/src/csync/std/c_time.h @@ -21,7 +21,15 @@ #ifndef _C_TIME_H #define _C_TIME_H +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN32 #include +#else +#include +#endif /** * @brief Calculate time difference @@ -52,4 +60,8 @@ double c_secdiff(struct timespec clock1, struct timespec clock0); int c_utimes(const char *uri, const struct timeval *times); +#ifdef __cplusplus +} +#endif + #endif /* _C_TIME_H */ diff --git a/src/csync/vio/csync_vio.c b/src/csync/vio/csync_vio.cpp similarity index 100% rename from src/csync/vio/csync_vio.c rename to src/csync/vio/csync_vio.cpp diff --git a/src/csync/vio/csync_vio_file_stat.c b/src/csync/vio/csync_vio_file_stat.cpp similarity index 100% rename from src/csync/vio/csync_vio_file_stat.c rename to src/csync/vio/csync_vio_file_stat.cpp diff --git a/src/csync/vio/csync_vio_local_unix.c b/src/csync/vio/csync_vio_local_unix.cpp similarity index 99% rename from src/csync/vio/csync_vio_local_unix.c rename to src/csync/vio/csync_vio_local_unix.cpp index 5d5666688..40e4794c3 100644 --- a/src/csync/vio/csync_vio_local_unix.c +++ b/src/csync/vio/csync_vio_local_unix.cpp @@ -48,7 +48,7 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) { dhandle_t *handle = NULL; mbchar_t *dirname = NULL; - handle = c_malloc(sizeof(dhandle_t)); + handle = (dhandle_t*)c_malloc(sizeof(dhandle_t)); dirname = c_utf8_path_to_locale(name); @@ -89,6 +89,7 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { csync_vio_file_stat_t *file_stat = NULL; handle = (dhandle_t *) dhandle; + struct _tdirent *dirent = NULL; errno = 0; file_stat = csync_vio_file_stat_new(); @@ -97,8 +98,6 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { } file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; - struct _tdirent *dirent = NULL; - dirent = _treaddir(handle->dh); if (dirent == NULL) { goto err; diff --git a/src/csync/vio/csync_vio_local_win.c b/src/csync/vio/csync_vio_local_win.cpp similarity index 98% rename from src/csync/vio/csync_vio_local_win.c rename to src/csync/vio/csync_vio_local_win.cpp index fc4eea512..e9d2ba566 100644 --- a/src/csync/vio/csync_vio_local_win.c +++ b/src/csync/vio/csync_vio_local_win.cpp @@ -52,7 +52,7 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) { dhandle_t *handle = NULL; mbchar_t *dirname = NULL; - handle = c_malloc(sizeof(dhandle_t)); + handle = (dhandle_t*)c_malloc(sizeof(dhandle_t)); // the file wildcard has to be attached int len_name = strlen(name); @@ -60,7 +60,7 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) { char *h = NULL; // alloc an enough large buffer to take the name + '/*' + the closing zero. - h = c_malloc(len_name+3); + h = (char*)c_malloc(len_name+3); strncpy( h, name, 1+len_name); strncat(h, "/*", 2); diff --git a/src/libsync/excludedfiles.cpp b/src/libsync/excludedfiles.cpp index 074494ff8..289164efb 100644 --- a/src/libsync/excludedfiles.cpp +++ b/src/libsync/excludedfiles.cpp @@ -18,11 +18,9 @@ #include -extern "C" { #include "std/c_string.h" #include "csync.h" #include "csync_exclude.h" -} using namespace OCC; diff --git a/src/libsync/excludedfiles.h b/src/libsync/excludedfiles.h index f8a18cd8d..d090f8aa6 100644 --- a/src/libsync/excludedfiles.h +++ b/src/libsync/excludedfiles.h @@ -20,11 +20,9 @@ #include #include -extern "C" { #include "std/c_string.h" #include "csync.h" #include "csync_exclude.h" // for CSYNC_EXCLUDE_TYPE -} namespace OCC { diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index 18e6f800f..8299fcc04 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -39,14 +39,11 @@ // We use some internals of csync: extern "C" int c_utimes(const char *, const struct timeval *); -extern "C" void csync_win32_set_file_hidden(const char *file, bool h); -extern "C" { #include "csync.h" #include "vio/csync_vio_local.h" #include "std/c_path.h" #include "std/c_string.h" -} namespace OCC { diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index 02145fa19..b9b60034f 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -25,6 +25,7 @@ #include #include +#include "csync_util.h" #include "syncfileitem.h" #include "syncjournaldb.h" #include "bandwidthmanager.h" @@ -35,8 +36,6 @@ namespace OCC { Q_DECLARE_LOGGING_CATEGORY(lcPropagator) -extern "C" const char *csync_instruction_str(enum csync_instructions_e instr); - /** Free disk space threshold below which syncs will abort and not even start. */ qint64 criticalFreeSpaceLimit(); diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index 203c14988..e46d35db6 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -21,8 +21,6 @@ #include "ownsql.h" -#include - #include "syncjournaldb.h" #include "syncjournalfilerecord.h" #include "utility.h" diff --git a/test/csync/CMakeLists.txt b/test/csync/CMakeLists.txt index e92c15e2d..a27505d12 100644 --- a/test/csync/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -29,28 +29,28 @@ add_cmocka_test(check_std_c_time std_tests/check_std_c_time.c ${TEST_TARGET_LIBR # csync tests # This will be rewritten soon anyway. -#add_cmocka_test(check_logger log_tests/check_log.c ${TEST_TARGET_LIBRARIES}) +#add_cmocka_test(check_logger log_tests/check_log.cpp ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_create csync_tests/check_csync_create.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_log csync_tests/check_csync_log.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_exclude csync_tests/check_csync_exclude.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_statedb_load csync_tests/check_csync_statedb_load.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_util csync_tests/check_csync_util.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_misc csync_tests/check_csync_misc.c ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_create csync_tests/check_csync_create.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_log csync_tests/check_csync_log.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_exclude csync_tests/check_csync_exclude.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_statedb_load csync_tests/check_csync_statedb_load.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_util csync_tests/check_csync_util.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_misc csync_tests/check_csync_misc.cpp ${TEST_TARGET_LIBRARIES}) # csync tests which require init -add_cmocka_test(check_csync_init csync_tests/check_csync_init.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_statedb_query csync_tests/check_csync_statedb_query.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_commit csync_tests/check_csync_commit.c ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_init csync_tests/check_csync_init.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_statedb_query csync_tests/check_csync_statedb_query.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_commit csync_tests/check_csync_commit.cpp ${TEST_TARGET_LIBRARIES}) # vio -add_cmocka_test(check_vio_file_stat vio_tests/check_vio_file_stat.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_vio vio_tests/check_vio.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.c ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_vio_file_stat vio_tests/check_vio_file_stat.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_vio vio_tests/check_vio.cpp ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.cpp ${TEST_TARGET_LIBRARIES}) # sync -add_cmocka_test(check_csync_update csync_tests/check_csync_update.c ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_csync_update csync_tests/check_csync_update.cpp ${TEST_TARGET_LIBRARIES}) # encoding -add_cmocka_test(check_encoding_functions encoding_tests/check_encoding.c ${TEST_TARGET_LIBRARIES}) +add_cmocka_test(check_encoding_functions encoding_tests/check_encoding.cpp ${TEST_TARGET_LIBRARIES}) diff --git a/test/csync/csync_tests/check_csync_commit.c b/test/csync/csync_tests/check_csync_commit.cpp similarity index 95% rename from test/csync/csync_tests/check_csync_commit.c rename to test/csync/csync_tests/check_csync_commit.cpp index 16c89bf9e..b3d77913b 100644 --- a/test/csync/csync_tests/check_csync_commit.c +++ b/test/csync/csync_tests/check_csync_commit.cpp @@ -53,7 +53,7 @@ static int setup_module(void **state) { } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); @@ -71,7 +71,7 @@ static int teardown(void **state) { static void check_csync_commit(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_commit(csync); @@ -82,7 +82,7 @@ static void check_csync_commit(void **state) static void check_csync_commit_dummy(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_commit(csync); diff --git a/test/csync/csync_tests/check_csync_create.c b/test/csync/csync_tests/check_csync_create.cpp similarity index 100% rename from test/csync/csync_tests/check_csync_create.c rename to test/csync/csync_tests/check_csync_create.cpp diff --git a/test/csync/csync_tests/check_csync_exclude.c b/test/csync/csync_tests/check_csync_exclude.cpp similarity index 98% rename from test/csync/csync_tests/check_csync_exclude.c rename to test/csync/csync_tests/check_csync_exclude.cpp index 1d145b240..5841eddf0 100644 --- a/test/csync/csync_tests/check_csync_exclude.c +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -25,7 +25,7 @@ #include "torture.h" #define CSYNC_TEST 1 -#include "csync_exclude.c" +#include "csync_exclude.cpp" #define EXCLUDE_LIST_FILE SOURCEDIR"/../../sync-exclude.lst" @@ -64,7 +64,7 @@ static int setup_init(void **state) { } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); @@ -82,14 +82,14 @@ static int teardown(void **state) { static void check_csync_exclude_add(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; _csync_exclude_add(&(csync->excludes), "/tmp/check_csync1/*"); assert_string_equal(csync->excludes->vector[0], "/tmp/check_csync1/*"); } static void check_csync_exclude_load(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_exclude_load(EXCLUDE_LIST_FILE, &(csync->excludes) ); @@ -101,7 +101,7 @@ static void check_csync_exclude_load(void **state) static void check_csync_excluded(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_excluded_no_ctx(csync->excludes, "", CSYNC_FTW_TYPE_FILE); @@ -221,7 +221,7 @@ static void check_csync_excluded(void **state) static void check_csync_excluded_traversal(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; _csync_exclude_add( &(csync->excludes), "/exclude" ); @@ -271,7 +271,7 @@ static void check_csync_excluded_traversal(void **state) static void check_csync_pathes(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; _csync_exclude_add( &(csync->excludes), "/exclude" ); @@ -319,7 +319,7 @@ static void check_csync_pathes(void **state) assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); } -static void check_csync_is_windows_reserved_word() { +static void check_csync_is_windows_reserved_word(void **) { assert_true(csync_is_windows_reserved_word("CON")); assert_true(csync_is_windows_reserved_word("con")); assert_true(csync_is_windows_reserved_word("CON.")); @@ -339,7 +339,7 @@ static void check_csync_is_windows_reserved_word() { static void check_csync_excluded_performance(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; const int N = 10000; int totalRc = 0; diff --git a/test/csync/csync_tests/check_csync_init.c b/test/csync/csync_tests/check_csync_init.cpp similarity index 96% rename from test/csync/csync_tests/check_csync_init.c rename to test/csync/csync_tests/check_csync_init.cpp index 41876d638..c0b4cdd6b 100644 --- a/test/csync/csync_tests/check_csync_init.c +++ b/test/csync/csync_tests/check_csync_init.cpp @@ -50,7 +50,7 @@ static int setup_module(void **state) { } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); @@ -68,7 +68,7 @@ static int teardown(void **state) { static void check_csync_init(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_init(csync, ""); diff --git a/test/csync/csync_tests/check_csync_log.c b/test/csync/csync_tests/check_csync_log.cpp similarity index 98% rename from test/csync/csync_tests/check_csync_log.c rename to test/csync/csync_tests/check_csync_log.cpp index 9523d9627..c5f312ff5 100644 --- a/test/csync/csync_tests/check_csync_log.c +++ b/test/csync/csync_tests/check_csync_log.cpp @@ -23,7 +23,7 @@ #include "torture.h" #include "csync.h" -#include "csync_log.c" +#include "csync_log.cpp" #include "c_private.h" static int setup(void **state) { @@ -41,7 +41,7 @@ static int setup(void **state) { } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); diff --git a/test/csync/csync_tests/check_csync_misc.c b/test/csync/csync_tests/check_csync_misc.cpp similarity index 100% rename from test/csync/csync_tests/check_csync_misc.c rename to test/csync/csync_tests/check_csync_misc.cpp diff --git a/test/csync/csync_tests/check_csync_statedb_load.c b/test/csync/csync_tests/check_csync_statedb_load.cpp similarity index 95% rename from test/csync/csync_tests/check_csync_statedb_load.c rename to test/csync/csync_tests/check_csync_statedb_load.cpp index c4b34b500..a7bccd7ea 100644 --- a/test/csync/csync_tests/check_csync_statedb_load.c +++ b/test/csync/csync_tests/check_csync_statedb_load.cpp @@ -22,7 +22,7 @@ #include "torture.h" #define CSYNC_TEST 1 -#include "csync_statedb.c" +#include "csync_statedb.cpp" #define TESTDB "/tmp/check_csync1/test.db" @@ -52,7 +52,7 @@ static int setup(void **state) { } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); @@ -68,7 +68,7 @@ static int teardown(void **state) { static void check_csync_statedb_load(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); @@ -79,7 +79,7 @@ static void check_csync_statedb_load(void **state) static void check_csync_statedb_close(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_stat_t sb; time_t modtime; mbchar_t *testdb = c_utf8_path_to_locale(TESTDB); diff --git a/test/csync/csync_tests/check_csync_statedb_query.c b/test/csync/csync_tests/check_csync_statedb_query.cpp similarity index 93% rename from test/csync/csync_tests/check_csync_statedb_query.c rename to test/csync/csync_tests/check_csync_statedb_query.cpp index 603195e8c..843900ec2 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.c +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -20,7 +20,7 @@ #include "torture.h" #define CSYNC_TEST 1 -#include "csync_statedb.c" +#include "csync_statedb.cpp" #define TESTDB "/tmp/check_csync1/test.db" #define TESTDBTMP "/tmp/check_csync1/test.db.ctmp" @@ -97,7 +97,7 @@ static int setup_db(void **state) } static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc = 0; rc = csync_destroy(csync); @@ -115,7 +115,7 @@ static int teardown(void **state) { static void check_csync_statedb_query_statement(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; c_strlist_t *result; result = csync_statedb_query(csync->statedb.db, ""); @@ -133,7 +133,7 @@ static void check_csync_statedb_query_statement(void **state) static void check_csync_statedb_drop_tables(void **state) { - // CSYNC *csync = *state; + // CSYNC *csync = (CSYNC*)*state; int rc = 0; (void) state; @@ -147,7 +147,7 @@ static void check_csync_statedb_drop_tables(void **state) static void check_csync_statedb_insert_metadata(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; int i, rc = 0; @@ -155,7 +155,7 @@ static void check_csync_statedb_insert_metadata(void **state) assert_int_equal(rc, 0); for (i = 0; i < 100; i++) { - st = c_malloc(sizeof(csync_file_stat_t) + 30 ); + st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + 30 ); snprintf(st->path, 29, "file_%d" , i ); st->phash = i; @@ -169,12 +169,12 @@ static void check_csync_statedb_insert_metadata(void **state) static void check_csync_statedb_write(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; int i, rc; for (i = 0; i < 100; i++) { - st = c_malloc(sizeof(csync_file_stat_t) + 30); + st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + 30); snprintf(st->path, 29, "file_%d" , i ); st->phash = i; @@ -189,7 +189,7 @@ static void check_csync_statedb_write(void **state) static void check_csync_statedb_get_stat_by_hash_not_found(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *tmp; tmp = csync_statedb_get_stat_by_hash(csync, (uint64_t) 666); @@ -201,7 +201,7 @@ static void check_csync_statedb_get_stat_by_hash_not_found(void **state) static void check_csync_statedb_get_stat_by_inode_not_found(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *tmp; tmp = csync_statedb_get_stat_by_inode(csync, (ino_t) 666); diff --git a/test/csync/csync_tests/check_csync_update.c b/test/csync/csync_tests/check_csync_update.cpp similarity index 94% rename from test/csync/csync_tests/check_csync_update.c rename to test/csync/csync_tests/check_csync_update.cpp index 695616b2c..237687e4c 100644 --- a/test/csync/csync_tests/check_csync_update.c +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -19,7 +19,7 @@ */ #include "torture.h" -#include "csync_update.c" +#include "csync_update.cpp" #define TESTDB "/tmp/check_csync/journal.db" @@ -150,7 +150,7 @@ static int setup_ftw(void **state) static int teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; unlink( csync->statedb.file); @@ -233,7 +233,7 @@ static csync_vio_file_stat_t* create_fstat(const char *name, static int failing_fn(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, - enum csync_ftw_flags_e flag) + int flag) { (void) ctx; (void) file; @@ -246,7 +246,7 @@ static int failing_fn(CSYNC *ctx, /* detect a new file */ static void check_csync_detect_update(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; csync_vio_file_stat_t *fs; int rc; @@ -261,7 +261,7 @@ static void check_csync_detect_update(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = c_rbtree_node_data(csync->local.tree->root); + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); /* create a statedb */ @@ -275,7 +275,7 @@ static void check_csync_detect_update(void **state) */ static void check_csync_detect_update_db_none(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; csync_vio_file_stat_t *fs; int rc; @@ -290,7 +290,7 @@ static void check_csync_detect_update_db_none(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = c_rbtree_node_data(csync->local.tree->root); + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); @@ -302,7 +302,7 @@ static void check_csync_detect_update_db_none(void **state) static void check_csync_detect_update_db_eval(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; csync_vio_file_stat_t *fs; int rc; @@ -317,7 +317,7 @@ static void check_csync_detect_update_db_eval(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = c_rbtree_node_data(csync->local.tree->root); + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); /* create a statedb */ @@ -329,7 +329,7 @@ static void check_csync_detect_update_db_eval(void **state) static void check_csync_detect_update_db_rename(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; // csync_file_stat_t *st; csync_vio_file_stat_t *fs; @@ -348,7 +348,7 @@ static void check_csync_detect_update_db_rename(void **state) /* the instruction should be set to rename */ /* * temporarily broken. - st = c_rbtree_node_data(csync->local.tree->root); + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_RENAME); st->instruction = CSYNC_INSTRUCTION_UPDATED; @@ -361,7 +361,7 @@ static void check_csync_detect_update_db_rename(void **state) static void check_csync_detect_update_db_new(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; csync_vio_file_stat_t *fs; int rc; @@ -376,7 +376,7 @@ static void check_csync_detect_update_db_new(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = c_rbtree_node_data(csync->local.tree->root); + st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); @@ -388,7 +388,7 @@ static void check_csync_detect_update_db_new(void **state) static void check_csync_detect_update_null(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_vio_file_stat_t *fs; int rc; @@ -412,7 +412,7 @@ static void check_csync_detect_update_null(void **state) static void check_csync_ftw(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_ftw(csync, "/tmp", csync_walker, MAX_DEPTH); @@ -421,7 +421,7 @@ static void check_csync_ftw(void **state) static void check_csync_ftw_empty_uri(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_ftw(csync, "", csync_walker, MAX_DEPTH); @@ -430,7 +430,7 @@ static void check_csync_ftw_empty_uri(void **state) static void check_csync_ftw_failing_fn(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_ftw(csync, "/tmp", failing_fn, MAX_DEPTH); @@ -454,4 +454,3 @@ int torture_run_tests(void) return cmocka_run_group_tests(tests, NULL, NULL); } - diff --git a/test/csync/csync_tests/check_csync_util.c b/test/csync/csync_tests/check_csync_util.cpp similarity index 95% rename from test/csync/csync_tests/check_csync_util.c rename to test/csync/csync_tests/check_csync_util.cpp index e55c4ce77..0df637741 100644 --- a/test/csync/csync_tests/check_csync_util.c +++ b/test/csync/csync_tests/check_csync_util.cpp @@ -30,7 +30,7 @@ static void check_csync_instruction_str(void **state) str = csync_instruction_str(CSYNC_INSTRUCTION_ERROR); assert_string_equal(str, "INSTRUCTION_ERROR"); - str = csync_instruction_str(0xFFFF); + str = csync_instruction_str((enum csync_instructions_e)0xFFFF); assert_string_equal(str, "ERROR!"); } diff --git a/test/csync/encoding_tests/check_encoding.c b/test/csync/encoding_tests/check_encoding.cpp similarity index 100% rename from test/csync/encoding_tests/check_encoding.c rename to test/csync/encoding_tests/check_encoding.cpp diff --git a/test/csync/log_tests/check_log.c b/test/csync/log_tests/check_log.cpp similarity index 100% rename from test/csync/log_tests/check_log.c rename to test/csync/log_tests/check_log.cpp diff --git a/test/csync/torture.h b/test/csync/torture.h index b3272b8c1..045518ecc 100644 --- a/test/csync/torture.h +++ b/test/csync/torture.h @@ -20,6 +20,10 @@ #ifndef _TORTURE_H #define _TORTURE_H +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include @@ -41,4 +45,8 @@ int torture_csync_verbosity(void); */ int torture_run_tests(void); +#ifdef __cplusplus +} +#endif + #endif /* _TORTURE_H */ diff --git a/test/csync/vio_tests/check_vio.c b/test/csync/vio_tests/check_vio.cpp similarity index 95% rename from test/csync/vio_tests/check_vio.c rename to test/csync/vio_tests/check_vio.cpp index 6d4afd7ef..a57637e85 100644 --- a/test/csync/vio_tests/check_vio.c +++ b/test/csync/vio_tests/check_vio.cpp @@ -72,7 +72,7 @@ static void setup_dir(void **state) { } static void teardown(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_destroy(csync); @@ -94,7 +94,7 @@ static void teardown(void **state) { static void check_csync_vio_opendir(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_vio_handle_t *dh; int rc; @@ -107,7 +107,7 @@ static void check_csync_vio_opendir(void **state) static void check_csync_vio_opendir_perm(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_vio_handle_t *dh; int rc; mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR); @@ -127,7 +127,7 @@ static void check_csync_vio_opendir_perm(void **state) static void check_csync_vio_closedir_null(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; int rc; rc = csync_vio_closedir(csync, NULL); @@ -136,7 +136,7 @@ static void check_csync_vio_closedir_null(void **state) static void check_csync_vio_readdir(void **state) { - CSYNC *csync = *state; + CSYNC *csync = (CSYNC*)*state; csync_vio_handle_t *dh; csync_vio_file_stat_t *dirent; int rc; @@ -164,4 +164,3 @@ int torture_run_tests(void) return run_tests(tests); } - diff --git a/test/csync/vio_tests/check_vio_ext.c b/test/csync/vio_tests/check_vio_ext.cpp similarity index 98% rename from test/csync/vio_tests/check_vio_ext.c rename to test/csync/vio_tests/check_vio_ext.cpp index c34e708c0..efa37a5d0 100644 --- a/test/csync/vio_tests/check_vio_ext.c +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -93,7 +93,7 @@ static void setup_testenv(void **state) { c_free_locale_string(dir); /* --- initialize csync */ - statevar *mystate = malloc( sizeof(statevar) ); + statevar *mystate = (statevar*)malloc( sizeof(statevar) ); mystate->result = NULL; csync_create(&(mystate->csync), "/tmp/csync1"); @@ -140,7 +140,7 @@ static void teardown(void **state) { static void create_dirs( const char *path ) { int rc; - char *mypath = c_malloc( 2+strlen(CSYNC_TEST_DIR)+strlen(path)); + char *mypath = (char*)c_malloc( 2+strlen(CSYNC_TEST_DIR)+strlen(path)); *mypath = '\0'; strcat(mypath, CSYNC_TEST_DIR); strcat(mypath, "/"); @@ -229,7 +229,7 @@ static void traverse_dir(void **state, const char *dir, int *cnt) } else { int newlen = 1+strlen(sv->result)+strlen(subdir_out); char *tmp = sv->result; - sv->result = c_malloc(newlen); + sv->result = (char*)c_malloc(newlen); strcpy( sv->result, tmp); SAFE_FREE(tmp); @@ -284,7 +284,7 @@ static void create_file( const char *path, const char *name, const char *content SAFE_FREE(dst); c_free_locale_string(w_fname); #else - char *filepath = c_malloc( 1+strlen(path) + strlen(name) ); + char *filepath = (char*)c_malloc( 1+strlen(path) + strlen(name) ); *filepath = '\0'; strcpy(filepath, path); @@ -406,7 +406,7 @@ static void check_readdir_longtree(void **state) /* assemble the result string ... */ int overall_len = 1+strlen(r1)+strlen(r2)+strlen(r3); int files_cnt = 0; - char *result = c_malloc(overall_len); + char *result = (char*)c_malloc(overall_len); *result = '\0'; strcat(result, r1); diff --git a/test/csync/vio_tests/check_vio_file_stat.c b/test/csync/vio_tests/check_vio_file_stat.cpp similarity index 100% rename from test/csync/vio_tests/check_vio_file_stat.c rename to test/csync/vio_tests/check_vio_file_stat.cpp From 59ea79d9e6f91e442d85558af10dd63a77752e51 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 17 Aug 2017 18:32:03 +0200 Subject: [PATCH 006/166] Enable csync logs in unit tests Go through the Logger to enable the csync-QDebug bridge. --- test/syncenginetestutils.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 062b62cea..2feacd11f 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -8,6 +8,7 @@ #include "account.h" #include "creds/abstractcredentials.h" +#include "logger.h" #include "filesystem.h" #include "syncengine.h" #include "syncjournaldb.h" @@ -806,7 +807,7 @@ public: { // Needs to be done once OCC::SyncEngine::minimumFileAgeForUpload = 0; - csync_set_log_level(11); + OCC::Logger::instance()->setLogFile("-"); QDir rootDir{_tempDir.path()}; toDisk(rootDir, fileTemplate); From 7a5a706397d722725d7f2f28a9e279edc5ee79e0 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 21 Aug 2017 20:05:00 +0200 Subject: [PATCH 007/166] Fix cmocka deprecation warnings Just use cmocka_run_group_tests like we already use in some of those tests. --- test/csync/encoding_tests/check_encoding.cpp | 24 +++++--------- test/csync/std_tests/check_std_c_alloc.c | 12 +++---- test/csync/std_tests/check_std_c_jhash.c | 16 +++++----- test/csync/std_tests/check_std_c_path.c | 14 ++++----- test/csync/std_tests/check_std_c_rbtree.c | 33 +++++++++++--------- test/csync/std_tests/check_std_c_str.c | 16 +++++----- test/csync/std_tests/check_std_c_time.c | 12 +++---- test/csync/vio_tests/check_vio.cpp | 21 +++++++------ test/csync/vio_tests/check_vio_ext.cpp | 18 ++++++----- test/csync/vio_tests/check_vio_file_stat.cpp | 6 ++-- 10 files changed, 85 insertions(+), 87 deletions(-) diff --git a/test/csync/encoding_tests/check_encoding.cpp b/test/csync/encoding_tests/check_encoding.cpp index eb761d318..443d2c625 100644 --- a/test/csync/encoding_tests/check_encoding.cpp +++ b/test/csync/encoding_tests/check_encoding.cpp @@ -27,16 +27,6 @@ #endif -static void setup(void **state) -{ - (void) state; /* unused */ -} - -static void teardown(void **state) -{ - (void) state; /* unused */ -} - static void check_iconv_to_native_normalization(void **state) { mbchar_t *out = NULL; @@ -191,15 +181,15 @@ static void check_long_win_path(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test_setup_teardown(check_long_win_path, setup, teardown), - unit_test_setup_teardown(check_to_multibyte, setup, teardown), - unit_test_setup_teardown(check_iconv_ascii, setup, teardown), - unit_test_setup_teardown(check_iconv_to_native_normalization, setup, teardown), - unit_test_setup_teardown(check_iconv_from_native_normalization, setup, teardown), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_long_win_path), + cmocka_unit_test(check_to_multibyte), + cmocka_unit_test(check_iconv_ascii), + cmocka_unit_test(check_iconv_to_native_normalization), + cmocka_unit_test(check_iconv_from_native_normalization), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_alloc.c b/test/csync/std_tests/check_std_c_alloc.c index 80a6a58da..bcdf7e1cf 100644 --- a/test/csync/std_tests/check_std_c_alloc.c +++ b/test/csync/std_tests/check_std_c_alloc.c @@ -77,13 +77,13 @@ static void check_c_strndup(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_malloc), - unit_test(check_c_malloc_zero), - unit_test(check_c_strdup), - unit_test(check_c_strndup), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_malloc), + cmocka_unit_test(check_c_malloc_zero), + cmocka_unit_test(check_c_strdup), + cmocka_unit_test(check_c_strndup), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_jhash.c b/test/csync/std_tests/check_std_c_jhash.c index 9d8384de9..29dc32207 100644 --- a/test/csync/std_tests/check_std_c_jhash.c +++ b/test/csync/std_tests/check_std_c_jhash.c @@ -278,15 +278,15 @@ static void check_c_jhash64_null_strings(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_jhash_trials), - unit_test(check_c_jhash_alignment_problems), - unit_test(check_c_jhash_null_strings), - unit_test(check_c_jhash64_trials), - unit_test(check_c_jhash64_alignment_problems), - unit_test(check_c_jhash64_null_strings), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_jhash_trials), + cmocka_unit_test(check_c_jhash_alignment_problems), + cmocka_unit_test(check_c_jhash_null_strings), + cmocka_unit_test(check_c_jhash64_trials), + cmocka_unit_test(check_c_jhash64_alignment_problems), + cmocka_unit_test(check_c_jhash64_null_strings), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_path.c b/test/csync/std_tests/check_std_c_path.c index 208a0b90a..25a250aab 100644 --- a/test/csync/std_tests/check_std_c_path.c +++ b/test/csync/std_tests/check_std_c_path.c @@ -172,14 +172,14 @@ static void check_c_parse_uri(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_basename), - unit_test(check_c_basename_uri), - unit_test(check_c_dirname), - unit_test(check_c_dirname_uri), - unit_test(check_c_parse_uri), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_basename), + cmocka_unit_test(check_c_basename_uri), + cmocka_unit_test(check_c_dirname), + cmocka_unit_test(check_c_dirname_uri), + cmocka_unit_test(check_c_parse_uri), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_rbtree.c b/test/csync/std_tests/check_std_c_rbtree.c index 735096541..a493ae3c9 100644 --- a/test/csync/std_tests/check_std_c_rbtree.c +++ b/test/csync/std_tests/check_std_c_rbtree.c @@ -82,15 +82,16 @@ static void destructor(void *data) { SAFE_FREE(freedata); } -static void setup(void **state) { +static int setup(void **state) { c_rbtree_t *tree = NULL; c_rbtree_create(&tree, key_cmp, data_cmp); *state = tree; + return 0; } -static void setup_complete_tree(void **state) { +static int setup_complete_tree(void **state) { c_rbtree_t *tree = NULL; int i = 0; int rc; @@ -110,15 +111,17 @@ static void setup_complete_tree(void **state) { } *state = tree; + return 0; } -static void teardown(void **state) { +static int teardown(void **state) { c_rbtree_t *tree = *state; c_rbtree_destroy(tree, destructor); c_rbtree_free(tree); *state = NULL; + return 0; } static void check_c_rbtree_create_free(void **state) @@ -345,19 +348,19 @@ static void check_c_rbtree_x) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_rbtree_create_free), - unit_test(check_c_rbtree_free_null), - unit_test(check_c_rbtree_insert_delete), - unit_test_setup_teardown(check_c_rbtree_insert_random, setup, teardown), - unit_test_setup_teardown(check_c_rbtree_insert_duplicate, setup, teardown), - unit_test_setup_teardown(check_c_rbtree_find, setup_complete_tree, teardown), - unit_test_setup_teardown(check_c_rbtree_delete, setup_complete_tree, teardown), - unit_test_setup_teardown(check_c_rbtree_walk, setup_complete_tree, teardown), - unit_test_setup_teardown(check_c_rbtree_walk_null, setup_complete_tree, teardown), - unit_test_setup_teardown(check_c_rbtree_dup, setup_complete_tree, teardown), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_rbtree_create_free), + cmocka_unit_test(check_c_rbtree_free_null), + cmocka_unit_test(check_c_rbtree_insert_delete), + cmocka_unit_test_setup_teardown(check_c_rbtree_insert_random, setup, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_insert_duplicate, setup, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_find, setup_complete_tree, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_delete, setup_complete_tree, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_walk, setup_complete_tree, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_walk_null, setup_complete_tree, teardown), + cmocka_unit_test_setup_teardown(check_c_rbtree_dup, setup_complete_tree, teardown), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_str.c b/test/csync/std_tests/check_std_c_str.c index 08cb1aac7..20921b100 100644 --- a/test/csync/std_tests/check_std_c_str.c +++ b/test/csync/std_tests/check_std_c_str.c @@ -117,15 +117,15 @@ static void check_c_strlist_expand(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_streq_equal), - unit_test(check_c_streq_not_equal), - unit_test(check_c_streq_null), - unit_test(check_c_strlist_new), - unit_test(check_c_strlist_add), - unit_test(check_c_strlist_expand), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_streq_equal), + cmocka_unit_test(check_c_streq_not_equal), + cmocka_unit_test(check_c_streq_null), + cmocka_unit_test(check_c_strlist_new), + cmocka_unit_test(check_c_strlist_add), + cmocka_unit_test(check_c_strlist_expand), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/std_tests/check_std_c_time.c b/test/csync/std_tests/check_std_c_time.c index df1abbe05..56fc6ad40 100644 --- a/test/csync/std_tests/check_std_c_time.c +++ b/test/csync/std_tests/check_std_c_time.c @@ -88,13 +88,13 @@ static void check_c_secdiff_three(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_c_tspecdiff), - unit_test(check_c_tspecdiff_five), - unit_test(check_c_secdiff), - unit_test(check_c_secdiff_three), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_c_tspecdiff), + cmocka_unit_test(check_c_tspecdiff_five), + cmocka_unit_test(check_c_secdiff), + cmocka_unit_test(check_c_secdiff_three), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index a57637e85..fc87485bf 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -38,7 +38,7 @@ static char wd_buffer[WD_BUFFER_SIZE]; -static void setup(void **state) +static int setup(void **state) { CSYNC *csync; int rc; @@ -53,9 +53,10 @@ static void setup(void **state) csync->replica = LOCAL_REPLICA; *state = csync; + return 0; } -static void setup_dir(void **state) { +static int setup_dir(void **state) { int rc; mbchar_t *dir = c_utf8_path_to_locale(CSYNC_TEST_DIR); @@ -69,9 +70,10 @@ static void setup_dir(void **state) { rc = chdir(CSYNC_TEST_DIR); assert_int_equal(rc, 0); + return 0; } -static void teardown(void **state) { +static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; @@ -85,6 +87,7 @@ static void teardown(void **state) { assert_int_equal(rc, 0); *state = NULL; + return 0; } @@ -155,12 +158,12 @@ static void check_csync_vio_readdir(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test_setup_teardown(check_csync_vio_opendir, setup_dir, teardown), - unit_test_setup_teardown(check_csync_vio_opendir_perm, setup, teardown), - unit_test(check_csync_vio_closedir_null), - unit_test_setup_teardown(check_csync_vio_readdir, setup_dir, teardown), + const struct CMUnitTest tests[] = { + cmocka_unit_test_setup_teardown(check_csync_vio_opendir, setup_dir, teardown), + cmocka_unit_test_setup_teardown(check_csync_vio_opendir_perm, setup, teardown), + cmocka_unit_test(check_csync_vio_closedir_null), + cmocka_unit_test_setup_teardown(check_csync_vio_readdir, setup_dir, teardown), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index efa37a5d0..fa2c771c3 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -74,7 +74,7 @@ static int wipe_testdir() return rc; } -static void setup_testenv(void **state) { +static int setup_testenv(void **state) { int rc; rc = wipe_testdir(); @@ -101,6 +101,7 @@ static void setup_testenv(void **state) { mystate->csync->replica = LOCAL_REPLICA; *state = mystate; + return 0; } static void output( const char *text ) @@ -115,7 +116,7 @@ static void output( const char *text ) c_free_locale_string(wtext); } -static void teardown(void **state) { +static int teardown(void **state) { statevar *sv = (statevar*) *state; CSYNC *csync = sv->csync; int rc; @@ -132,6 +133,7 @@ static void teardown(void **state) { assert_int_equal(rc, 0); *state = NULL; + return 0; } /* This function takes a relative path, prepends it with the CSYNC_TEST_DIR @@ -453,12 +455,12 @@ static void check_readdir_bigunicode(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test_setup_teardown(check_readdir_shorttree, setup_testenv, teardown), - unit_test_setup_teardown(check_readdir_with_content, setup_testenv, teardown), - unit_test_setup_teardown(check_readdir_longtree, setup_testenv, teardown), - unit_test_setup_teardown(check_readdir_bigunicode, setup_testenv, teardown), + const struct CMUnitTest tests[] = { + cmocka_unit_test_setup_teardown(check_readdir_shorttree, setup_testenv, teardown), + cmocka_unit_test_setup_teardown(check_readdir_with_content, setup_testenv, teardown), + cmocka_unit_test_setup_teardown(check_readdir_longtree, setup_testenv, teardown), + cmocka_unit_test_setup_teardown(check_readdir_bigunicode, setup_testenv, teardown), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } diff --git a/test/csync/vio_tests/check_vio_file_stat.cpp b/test/csync/vio_tests/check_vio_file_stat.cpp index a67255e81..3bca997a1 100644 --- a/test/csync/vio_tests/check_vio_file_stat.cpp +++ b/test/csync/vio_tests/check_vio_file_stat.cpp @@ -36,10 +36,10 @@ static void check_csync_vio_file_stat_new(void **state) int torture_run_tests(void) { - const UnitTest tests[] = { - unit_test(check_csync_vio_file_stat_new), + const struct CMUnitTest tests[] = { + cmocka_unit_test(check_csync_vio_file_stat_new), }; - return run_tests(tests); + return cmocka_run_group_tests(tests, NULL, NULL); } From 839361594d76d06d60418ea62da6abebcff480ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Thu, 31 Aug 2017 13:16:34 +0200 Subject: [PATCH 008/166] fix branded nemo and caja shell integration (#5966) * Update createcajaplugin.sh * first apply branding, then create copies. Better. Fixes https://github.com/owncloud/ownbrander/issues/753 * fix https://github.com/owncloud/ownbrander/issues/752 too. --- shell_integration/icons/CMakeLists.txt | 2 +- shell_integration/nautilus/CMakeLists.txt | 2 -- shell_integration/nautilus/createcajaplugin.sh | 1 + shell_integration/nautilus/createnemoplugin.sh | 1 + 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shell_integration/icons/CMakeLists.txt b/shell_integration/icons/CMakeLists.txt index 5e2c958df..04235c55b 100644 --- a/shell_integration/icons/CMakeLists.txt +++ b/shell_integration/icons/CMakeLists.txt @@ -7,7 +7,7 @@ if( UNIX AND NOT APPLE ) FOREACH( file ${files} ) # the GLOB returns a absolute path. Make it relative by replacing the current src dir by nothing STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/${size}/" "" shortFile ${file}) - STRING(REPLACE "oC" ${APPLICATION_NAME} brandedName ${shortFile}) + STRING(REPLACE "oC" ${APPLICATION_SHORTNAME} brandedName ${shortFile}) install(FILES ${file} DESTINATION ${ICON_DIR}/${size}/apps RENAME ${brandedName}) ENDFOREACH(file) ENDFOREACH(size) diff --git a/shell_integration/nautilus/CMakeLists.txt b/shell_integration/nautilus/CMakeLists.txt index 21f557d2f..d8f75d8a5 100644 --- a/shell_integration/nautilus/CMakeLists.txt +++ b/shell_integration/nautilus/CMakeLists.txt @@ -3,8 +3,6 @@ if( UNIX AND NOT APPLE ) configure_file(syncstate.py syncstate.py COPYONLY) - configure_file(syncstate.py syncstate_nemo.py COPYONLY) - configure_file(syncstate.py syncstate_caja.py COPYONLY) # Call the setupappname.sh script to set the custom app name. set (cmd "${CMAKE_CURRENT_SOURCE_DIR}/setappname.sh") diff --git a/shell_integration/nautilus/createcajaplugin.sh b/shell_integration/nautilus/createcajaplugin.sh index 860850d1a..8912d4a3f 100755 --- a/shell_integration/nautilus/createcajaplugin.sh +++ b/shell_integration/nautilus/createcajaplugin.sh @@ -3,5 +3,6 @@ # this script creates a plugin for caja, just by replacing # all occurences of Nautilus with Caja (case sensitive). +cp syncstate.py syncstate_caja.py sed -i.org -e 's/Nautilus/Caja/g' syncstate_caja.py sed -i.org -e 's/nautilus/caja/g' syncstate_caja.py diff --git a/shell_integration/nautilus/createnemoplugin.sh b/shell_integration/nautilus/createnemoplugin.sh index c6463b7ff..0e08affc4 100755 --- a/shell_integration/nautilus/createnemoplugin.sh +++ b/shell_integration/nautilus/createnemoplugin.sh @@ -3,4 +3,5 @@ # this script creates a plugin for nemo, just be replacing # all occurences of Nautilus with Nemo. +cp syncstate.py syncstate_nemo.py sed -i.org -e 's/autilus/emo/g' syncstate_nemo.py From 48d2fc1599f7017d80bbc92efd89257dc2a7f99d Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 31 Aug 2017 13:32:00 +0200 Subject: [PATCH 009/166] StatusTracker: Fix different case paths not matching (#5981) Use a custom std::map comparator functor to do all comparisons on contained QStrings using Qt::CaseInsensitive on macOS and Windows. Issue #5257 --- src/libsync/syncfilestatustracker.cpp | 39 +++++++++++++++++++++++---- src/libsync/syncfilestatustracker.h | 8 +++++- test/testsyncfilestatustracker.cpp | 18 +++++++++++++ 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 9d4fa6e37..32e3ccb00 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -25,20 +25,49 @@ namespace OCC { Q_LOGGING_CATEGORY(lcStatusTracker, "sync.statustracker", QtInfoMsg) -static SyncFileStatus::SyncFileStatusTag lookupProblem(const QString &pathToMatch, const std::map &problemMap) +static int pathCompare( const QString& lhs, const QString& rhs ) +{ + // Should match Utility::fsCasePreserving, we want don't want to pay for the runtime check on every comparison. + return lhs.compare(rhs, +#if defined(Q_OS_WIN) || defined(Q_OS_MAC) + Qt::CaseInsensitive +#else + Qt::CaseSensitive +#endif + ); +} + +static bool pathStartsWith( const QString& lhs, const QString& rhs ) +{ + return lhs.startsWith(rhs, +#if defined(Q_OS_WIN) || defined(Q_OS_MAC) + Qt::CaseInsensitive +#else + Qt::CaseSensitive +#endif + ); +} + +bool SyncFileStatusTracker::PathComparator::operator()( const QString& lhs, const QString& rhs ) const +{ + // This will make sure that the std::map is ordered and queried case-insensitively on macOS and Windows. + return pathCompare(lhs, rhs) < 0; +} + +SyncFileStatus::SyncFileStatusTag SyncFileStatusTracker::lookupProblem(const QString &pathToMatch, const SyncFileStatusTracker::ProblemsMap &problemMap) { auto lower = problemMap.lower_bound(pathToMatch); for (auto it = lower; it != problemMap.cend(); ++it) { const QString &problemPath = it->first; SyncFileStatus::SyncFileStatusTag severity = it->second; - if (problemPath == pathToMatch) { + if (pathCompare(problemPath, pathToMatch) == 0) { return severity; } else if (severity == SyncFileStatus::StatusError - && problemPath.startsWith(pathToMatch) + && pathStartsWith(problemPath, pathToMatch) && (pathToMatch.isEmpty() || problemPath.at(pathToMatch.size()) == '/')) { return SyncFileStatus::StatusWarning; - } else if (!problemPath.startsWith(pathToMatch)) { + } else if (!pathStartsWith(problemPath, pathToMatch)) { // Starting at lower_bound we get the first path that is not smaller, // since: "a/" < "a/aa" < "a/aa/aaa" < "a/ab/aba" // If problemMap keys are ["a/aa/aaa", "a/ab/aba"] and pathToMatch == "a/aa", @@ -182,7 +211,7 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector &items) { ASSERT(_syncCount.isEmpty()); - std::map oldProblems; + ProblemsMap oldProblems; std::swap(_syncProblems, oldProblems); foreach (const SyncFileItemPtr &item, items) { diff --git a/src/libsync/syncfilestatustracker.h b/src/libsync/syncfilestatustracker.h index 12fe0b337..48ecfd5c2 100644 --- a/src/libsync/syncfilestatustracker.h +++ b/src/libsync/syncfilestatustracker.h @@ -51,6 +51,12 @@ private slots: void slotSyncEngineRunningChanged(); private: + struct PathComparator { + bool operator()( const QString& lhs, const QString& rhs ) const; + }; + typedef std::map ProblemsMap; + SyncFileStatus::SyncFileStatusTag lookupProblem(const QString &pathToMatch, const ProblemsMap &problemMap); + enum SharedFlag { UnknownShared, NotShared, Shared }; @@ -65,7 +71,7 @@ private: SyncEngine *_syncEngine; - std::map _syncProblems; + ProblemsMap _syncProblems; QSet _dirtyPaths; // Counts the number direct children currently being synced (has unfinished propagation jobs). // We'll show a file/directory as SYNC as long as its sync count is > 0. diff --git a/test/testsyncfilestatustracker.cpp b/test/testsyncfilestatustracker.cpp index 741ae1dc6..ed828857d 100644 --- a/test/testsyncfilestatustracker.cpp +++ b/test/testsyncfilestatustracker.cpp @@ -260,6 +260,24 @@ private slots: QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } + void warningStatusForExcludedFile_CasePreserving() { + FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; + fakeFolder.syncEngine().excludedFiles().addExcludeExpr("B"); + fakeFolder.serverErrorPaths().append("A/a1"); + fakeFolder.localModifier().appendByte("A/a1"); + + fakeFolder.syncOnce(); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus(""), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("A"), SyncFileStatus(SyncFileStatus::StatusWarning)); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("A/a1"), SyncFileStatus(SyncFileStatus::StatusError)); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("B"), SyncFileStatus(SyncFileStatus::StatusWarning)); + + // Should still get the status for different casing on macOS and Windows. + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("a"), SyncFileStatus(Utility::fsCasePreserving() ? SyncFileStatus::StatusWarning : SyncFileStatus::StatusNone)); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("A/A1"), SyncFileStatus(Utility::fsCasePreserving() ? SyncFileStatus::StatusError : SyncFileStatus::StatusNone)); + QCOMPARE(fakeFolder.syncEngine().syncFileStatusTracker().fileStatus("b"), SyncFileStatus(Utility::fsCasePreserving() ? SyncFileStatus::StatusWarning : SyncFileStatus::StatusNone)); + } + void parentsGetWarningStatusForError() { FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; fakeFolder.serverErrorPaths().append("A/a1"); From de7c3016540b2612293cda98586f53be9a21b4ae Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 5 Sep 2017 13:40:26 +0200 Subject: [PATCH 010/166] Add minor unittest for numeric id extraction #5933 --- test/testsyncjournaldb.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index 9e412aa85..e01a32f13 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -163,6 +163,19 @@ private slots: QVERIFY(!wipedRecord._valid); } + void testNumericId() + { + SyncJournalFileRecord record; + + // Typical 8-digit padded id + record._fileId = "00000001abcd"; + QCOMPARE(record.numericFileId(), QByteArray("00000001")); + + // When the numeric id overflows the 8-digit boundary + record._fileId = "123456789ocidblaabcd"; + QCOMPARE(record.numericFileId(), QByteArray("123456789")); + } + private: SyncJournalDb _db; }; From cf15cbf0b3fb2c25148d3a9f21d1a47405a43e94 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 16 Aug 2017 08:36:52 +0200 Subject: [PATCH 011/166] Move Utility to a new common static library Now that csync builds as C++, this will avoid having to implement functionalities needed by csync mandatorily in csync itself. This library is built as part of libocsync and symbols exported through it. This requires a relicense of Utility as LGPL. All classes moved into this library from src/libsync will need to be relicensed as well. --- CMakeLists.txt | 22 ++- src/cmd/simplesslerrorhandler.cpp | 2 +- src/common/README | 2 + src/common/common.cmake | 6 + src/{libsync => common}/utility.cpp | 83 ++--------- src/{libsync => common}/utility.h | 134 ++++++++++++------ src/{libsync => common}/utility_mac.cpp | 20 +-- src/{libsync => common}/utility_unix.cpp | 20 +-- src/{libsync => common}/utility_win.cpp | 20 +-- src/csync/CMakeLists.txt | 14 +- src/csync/std/CMakeLists.txt | 6 +- src/gui/accountmanager.cpp | 13 +- src/gui/accountsettings.cpp | 2 +- src/gui/accountstate.cpp | 2 +- src/gui/accountstate.h | 2 +- src/gui/activityitemdelegate.cpp | 1 - src/gui/activitywidget.cpp | 1 - src/gui/application.cpp | 1 - src/gui/creds/shibbolethcredentials.cpp | 9 +- src/gui/folder.cpp | 1 - src/gui/folderman.cpp | 2 +- src/gui/folderstatusdelegate.cpp | 1 - src/gui/folderstatusmodel.cpp | 1 - src/gui/generalsettings.cpp | 1 - src/gui/issueswidget.cpp | 1 - src/gui/main.cpp | 2 +- src/gui/networksettings.cpp | 1 - src/gui/notificationwidget.cpp | 2 +- src/gui/openfilemanager.cpp | 2 +- src/gui/owncloudgui.cpp | 1 - src/gui/owncloudsetupwizard.cpp | 1 - src/gui/protocolwidget.cpp | 1 - src/gui/socketapi.cpp | 1 - src/gui/sslbutton.cpp | 1 - src/gui/sslerrordialog.cpp | 1 - src/gui/syncrunfilelog.cpp | 2 +- src/gui/updater/ocupdater.cpp | 2 +- src/gui/updater/sparkleupdater_mac.mm | 2 - src/gui/updater/updater.cpp | 4 +- .../wizard/owncloudconnectionmethoddialog.cpp | 1 - src/libsync/CMakeLists.txt | 3 - src/libsync/accessmanager.cpp | 2 +- src/libsync/account.h | 2 +- src/libsync/bandwidthmanager.cpp | 2 +- src/libsync/clientproxy.h | 3 +- src/libsync/configfile.cpp | 17 ++- src/libsync/configfile.h | 6 + src/libsync/creds/credentialscommon.cpp | 2 +- src/libsync/creds/httpcredentials.cpp | 4 +- src/libsync/creds/tokencredentials.cpp | 2 +- src/libsync/excludedfiles.cpp | 2 +- src/libsync/filesystem.cpp | 2 +- src/libsync/logger.h | 4 +- src/libsync/owncloudpropagator.cpp | 2 +- src/libsync/owncloudtheme.cpp | 4 +- src/libsync/ownsql.cpp | 2 +- src/libsync/propagatedownload.cpp | 2 +- src/libsync/propagateupload.cpp | 2 +- src/libsync/propagateuploadng.cpp | 2 +- src/libsync/propagateuploadv1.cpp | 2 +- src/libsync/propagatorjobs.cpp | 2 +- src/libsync/syncengine.h | 2 +- src/libsync/syncjournaldb.cpp | 2 +- src/libsync/syncjournaldb.h | 2 +- src/libsync/syncjournalfilerecord.cpp | 2 +- src/libsync/theme.cpp | 4 +- src/libsync/version.h.in | 34 ----- test/csync/csync_tests/check_csync_misc.cpp | 3 +- test/testchecksumvalidator.cpp | 2 +- test/testfilesystem.cpp | 2 +- test/testfolder.cpp | 2 +- test/testfolderman.cpp | 2 +- test/testfolderwatcher.cpp | 2 +- test/testinotifywatcher.cpp | 2 +- test/testutility.cpp | 2 +- version.h.in | 38 +++++ 76 files changed, 298 insertions(+), 263 deletions(-) create mode 100644 src/common/README create mode 100644 src/common/common.cmake rename src/{libsync => common}/utility.cpp (90%) rename src/{libsync => common}/utility.h (54%) rename src/{libsync => common}/utility_mac.cpp (87%) rename src/{libsync => common}/utility_unix.cpp (81%) rename src/{libsync => common}/utility_win.cpp (77%) delete mode 100644 src/libsync/version.h.in create mode 100644 version.h.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 976f19aec..4b1d4f203 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,13 @@ endif() include(Warnings) include(${CMAKE_SOURCE_DIR}/VERSION.cmake) +# For config.h include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) +# Allows includes based on src/ like #include "common/utility.h" or #include "csync/csync.h" +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_BINARY_DIR}/src +) # disable the crashreporter if libcrashreporter-qt is not available or we're building for ARM if( CMAKE_SYSTEM_PROCESSOR MATCHES "arm" OR NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/src/3rdparty/libcrashreporter-qt/CMakeLists.txt") @@ -211,13 +217,8 @@ endif() file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translations/client_*.ts) set(TRANSLATIONS ${TRANS_FILES}) -if(UNIT_TESTING) - # Make sure we set this before recursing into child folders. - set(WITH_TESTING ON) - include(CTest) - enable_testing() - add_subdirectory(test) -endif(UNIT_TESTING) +# Make sure we set this before recursing into child folders. +set(WITH_TESTING ${UNIT_TESTING}) add_subdirectory(src) if(NOT BUILD_LIBRARIES_ONLY) @@ -227,7 +228,14 @@ add_subdirectory(doc/dev) add_subdirectory(admin) endif(NOT BUILD_LIBRARIES_ONLY) +if(UNIT_TESTING) + include(CTest) + enable_testing() + add_subdirectory(test) +endif(UNIT_TESTING) + configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) +configure_file(version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) if(BUILD_OWNCLOUD_OSX_BUNDLE) install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/) diff --git a/src/cmd/simplesslerrorhandler.cpp b/src/cmd/simplesslerrorhandler.cpp index 18a03293a..437438507 100644 --- a/src/cmd/simplesslerrorhandler.cpp +++ b/src/cmd/simplesslerrorhandler.cpp @@ -12,7 +12,7 @@ * for more details. */ #include "configfile.h" -#include "utility.h" +#include "common/utility.h" #include "account.h" #include "simplesslerrorhandler.h" diff --git a/src/common/README b/src/common/README new file mode 100644 index 000000000..16698585c --- /dev/null +++ b/src/common/README @@ -0,0 +1,2 @@ +This folder contains code covered by the CLA being licensed as LGPL. +This allows it to be linked together with the rest of the LGPL code in csync. diff --git a/src/common/common.cmake b/src/common/common.cmake new file mode 100644 index 000000000..a26e76d74 --- /dev/null +++ b/src/common/common.cmake @@ -0,0 +1,6 @@ +# Just list files to build as part of the csync dynamic lib. +# Essentially they could be in the same directory but are separate to +# help keep track of the different code licenses. +set(common_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/utility.cpp +) diff --git a/src/libsync/utility.cpp b/src/common/utility.cpp similarity index 90% rename from src/libsync/utility.cpp rename to src/common/utility.cpp index c73b48d91..8bc2f2d35 100644 --- a/src/libsync/utility.cpp +++ b/src/common/utility.cpp @@ -2,22 +2,24 @@ * Copyright (C) by Klaas Freitag * Copyright (C) by Daniel Molkentin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" -#include "utility.h" - +#include "common/utility.h" #include "version.h" -#include "configfile.h" // Note: This file must compile without QtGui #include @@ -384,51 +386,6 @@ bool Utility::hasDarkSystray() } -bool Utility::isWindows() -{ -#ifdef Q_OS_WIN - return true; -#else - return false; -#endif -} - -bool Utility::isMac() -{ -#ifdef Q_OS_MAC - return true; -#else - return false; -#endif -} - -bool Utility::isUnix() -{ -#ifdef Q_OS_UNIX - return true; -#else - return false; -#endif -} - -bool Utility::isLinux() -{ -#if defined(Q_OS_LINUX) - return true; -#else - return false; -#endif -} - -bool Utility::isBSD() -{ -#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) || defined(Q_OS_OPENBSD) - return true; -#else - return false; -#endif -} - QString Utility::platformName() { QString re("Windows"); @@ -611,18 +568,4 @@ QUrl Utility::concatUrlPath(const QUrl &url, const QString &concatPath, return tmpUrl; } -Q_GLOBAL_STATIC(QString, g_configFileName) - -std::unique_ptr Utility::settingsWithGroup(const QString &group, QObject *parent) -{ - if (g_configFileName()->isEmpty()) { - // cache file name - ConfigFile cfg; - *g_configFileName() = cfg.configFile(); - } - std::unique_ptr settings(new QSettings(*g_configFileName(), QSettings::IniFormat, parent)); - settings->beginGroup(group); - return settings; -} - } // namespace OCC diff --git a/src/libsync/utility.h b/src/common/utility.h similarity index 54% rename from src/libsync/utility.h rename to src/common/utility.h index 7c26f2ab2..c1063a45c 100644 --- a/src/libsync/utility.h +++ b/src/common/utility.h @@ -2,21 +2,25 @@ * Copyright (C) by Klaas Freitag * Copyright (C) by Daniel Molkentin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef UTILITY_H #define UTILITY_H -#include "owncloudlib.h" +#include "ocsynclib.h" #include #include #include @@ -36,22 +40,22 @@ Q_DECLARE_LOGGING_CATEGORY(lcUtility) * @{ */ namespace Utility { - OWNCLOUDSYNC_EXPORT void sleep(int sec); - OWNCLOUDSYNC_EXPORT void usleep(int usec); - OWNCLOUDSYNC_EXPORT QString formatFingerprint(const QByteArray &, bool colonSeparated = true); - OWNCLOUDSYNC_EXPORT void setupFavLink(const QString &folder); - OWNCLOUDSYNC_EXPORT bool writeRandomFile(const QString &fname, int size = -1); - OWNCLOUDSYNC_EXPORT QString octetsToString(qint64 octets); - OWNCLOUDSYNC_EXPORT QByteArray userAgentString(); - OWNCLOUDSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName); - OWNCLOUDSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString &guiName, bool launch); + OCSYNC_EXPORT void sleep(int sec); + OCSYNC_EXPORT void usleep(int usec); + OCSYNC_EXPORT QString formatFingerprint(const QByteArray &, bool colonSeparated = true); + OCSYNC_EXPORT void setupFavLink(const QString &folder); + OCSYNC_EXPORT bool writeRandomFile(const QString &fname, int size = -1); + OCSYNC_EXPORT QString octetsToString(qint64 octets); + OCSYNC_EXPORT QByteArray userAgentString(); + OCSYNC_EXPORT bool hasLaunchOnStartup(const QString &appName); + OCSYNC_EXPORT void setLaunchOnStartup(const QString &appName, const QString &guiName, bool launch); /** * Return the amount of free space available. * * \a path must point to a directory */ - OWNCLOUDSYNC_EXPORT qint64 freeDiskSpace(const QString &path); + OCSYNC_EXPORT qint64 freeDiskSpace(const QString &path); /** * @brief compactFormatDouble - formats a double value human readable. @@ -61,14 +65,14 @@ namespace Utility { * @param unit an optional unit that is appended if present. * @return the formatted string. */ - OWNCLOUDSYNC_EXPORT QString compactFormatDouble(double value, int prec, const QString &unit = QString::null); + OCSYNC_EXPORT QString compactFormatDouble(double value, int prec, const QString &unit = QString::null); // porting methods - OWNCLOUDSYNC_EXPORT QString escape(const QString &); + OCSYNC_EXPORT QString escape(const QString &); // conversion function QDateTime <-> time_t (because the ones builtin work on only unsigned 32bit) - OWNCLOUDSYNC_EXPORT QDateTime qDateTimeFromTime_t(qint64 t); - OWNCLOUDSYNC_EXPORT qint64 qDateTimeToTime_t(const QDateTime &t); + OCSYNC_EXPORT QDateTime qDateTimeFromTime_t(qint64 t); + OCSYNC_EXPORT qint64 qDateTimeToTime_t(const QDateTime &t); /** * @brief Convert milliseconds duration to human readable string. @@ -81,8 +85,8 @@ namespace Utility { * durationToDescriptiveString2 uses two units where possible, so * "5 minutes 43 seconds" or "1 month 3 days". */ - OWNCLOUDSYNC_EXPORT QString durationToDescriptiveString1(quint64 msecs); - OWNCLOUDSYNC_EXPORT QString durationToDescriptiveString2(quint64 msecs); + OCSYNC_EXPORT QString durationToDescriptiveString1(quint64 msecs); + OCSYNC_EXPORT QString durationToDescriptiveString2(quint64 msecs); /** * @brief hasDarkSystray - determines whether the systray is dark or light. @@ -94,38 +98,38 @@ namespace Utility { * * @return bool which is true for systems with dark systray. */ - OWNCLOUDSYNC_EXPORT bool hasDarkSystray(); + OCSYNC_EXPORT bool hasDarkSystray(); // convenience OS detection methods - OWNCLOUDSYNC_EXPORT bool isWindows(); - OWNCLOUDSYNC_EXPORT bool isMac(); - OWNCLOUDSYNC_EXPORT bool isUnix(); - OWNCLOUDSYNC_EXPORT bool isLinux(); // use with care - OWNCLOUDSYNC_EXPORT bool isBSD(); // use with care, does not match OS X + inline bool isWindows(); + inline bool isMac(); + inline bool isUnix(); + inline bool isLinux(); // use with care + inline bool isBSD(); // use with care, does not match OS X - OWNCLOUDSYNC_EXPORT QString platformName(); + OCSYNC_EXPORT QString platformName(); // crash helper for --debug - OWNCLOUDSYNC_EXPORT void crash(); + OCSYNC_EXPORT void crash(); // Case preserving file system underneath? // if this function returns true, the file system is case preserving, // that means "test" means the same as "TEST" for filenames. // if false, the two cases are two different files. - OWNCLOUDSYNC_EXPORT bool fsCasePreserving(); + OCSYNC_EXPORT bool fsCasePreserving(); // Check if two pathes that MUST exist are equal. This function // uses QDir::canonicalPath() to judge and cares for the systems // case sensitivity. - OWNCLOUDSYNC_EXPORT bool fileNamesEqual(const QString &fn1, const QString &fn2); + OCSYNC_EXPORT bool fileNamesEqual(const QString &fn1, const QString &fn2); // Call the given command with the switch --version and rerun the first line // of the output. // If command is empty, the function calls the running application which, on // Linux, might have changed while this one is running. // For Mac and Windows, it returns QString() - OWNCLOUDSYNC_EXPORT QByteArray versionOfInstalledBinary(const QString &command = QString()); + OCSYNC_EXPORT QByteArray versionOfInstalledBinary(const QString &command = QString()); - OWNCLOUDSYNC_EXPORT QString fileNameForGuiUse(const QString &fName); + OCSYNC_EXPORT QString fileNameForGuiUse(const QString &fName); /** * @brief timeAgoInWords - human readable time span @@ -135,9 +139,9 @@ namespace Utility { * * If the second parameter is ommitted, the current time is used. */ - OWNCLOUDSYNC_EXPORT QString timeAgoInWords(const QDateTime &dt, const QDateTime &from = QDateTime()); + OCSYNC_EXPORT QString timeAgoInWords(const QDateTime &dt, const QDateTime &from = QDateTime()); - class OWNCLOUDSYNC_EXPORT StopWatch + class OCSYNC_EXPORT StopWatch { private: QMap _lapTimes; @@ -159,17 +163,63 @@ namespace Utility { /** * @brief Sort a QStringList in a way that's appropriate for filenames */ - OWNCLOUDSYNC_EXPORT void sortFilenames(QStringList &fileNames); + OCSYNC_EXPORT void sortFilenames(QStringList &fileNames); /** Appends concatPath and queryItems to the url */ - OWNCLOUDSYNC_EXPORT QUrl concatUrlPath( + OCSYNC_EXPORT QUrl concatUrlPath( const QUrl &url, const QString &concatPath, const QList> &queryItems = (QList>())); /** Returns a new settings pre-set in a specific group. The Settings will be created with the given parent. If no parent is specified, the caller must destroy the settings */ - OWNCLOUDSYNC_EXPORT std::unique_ptr settingsWithGroup(const QString &group, QObject *parent = 0); + OCSYNC_EXPORT std::unique_ptr settingsWithGroup(const QString &group, QObject *parent = 0); } /** @} */ // \addtogroup + +inline bool Utility::isWindows() +{ +#ifdef Q_OS_WIN + return true; +#else + return false; +#endif +} + +inline bool Utility::isMac() +{ +#ifdef Q_OS_MAC + return true; +#else + return false; +#endif +} + +inline bool Utility::isUnix() +{ +#ifdef Q_OS_UNIX + return true; +#else + return false; +#endif +} + +inline bool Utility::isLinux() +{ +#if defined(Q_OS_LINUX) + return true; +#else + return false; +#endif +} + +inline bool Utility::isBSD() +{ +#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) || defined(Q_OS_OPENBSD) + return true; +#else + return false; +#endif +} + } #endif // UTILITY_H diff --git a/src/libsync/utility_mac.cpp b/src/common/utility_mac.cpp similarity index 87% rename from src/libsync/utility_mac.cpp rename to src/common/utility_mac.cpp index 5a71aa2af..6c789b17a 100644 --- a/src/libsync/utility_mac.cpp +++ b/src/common/utility_mac.cpp @@ -1,15 +1,19 @@ /* * Copyright (C) by Daniel Molkentin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include diff --git a/src/libsync/utility_unix.cpp b/src/common/utility_unix.cpp similarity index 81% rename from src/libsync/utility_unix.cpp rename to src/common/utility_unix.cpp index e21c1cc75..eecef1778 100644 --- a/src/libsync/utility_unix.cpp +++ b/src/common/utility_unix.cpp @@ -2,15 +2,19 @@ * Copyright (C) by Klaas Freitag * Copyright (C) by Daniel Molkentin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) diff --git a/src/libsync/utility_win.cpp b/src/common/utility_win.cpp similarity index 77% rename from src/libsync/utility_win.cpp rename to src/common/utility_win.cpp index 3762808b7..f7fef1019 100644 --- a/src/libsync/utility_win.cpp +++ b/src/common/utility_win.cpp @@ -1,15 +1,19 @@ /* * Copyright (C) by Daniel Molkentin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #define _WIN32_WINNT 0x0600 diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index 09f320202..b9c772507 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -20,6 +20,7 @@ include(MacroCopyFile) find_package(SQLite3 3.8.0 REQUIRED) include(ConfigureChecks.cmake) +include(../common/common.cmake) include_directories(${CMAKE_CURRENT_BINARY_DIR}) @@ -117,11 +118,10 @@ include_directories( ${CSYNC_PRIVATE_INCLUDE_DIRS} ) -add_library(${CSYNC_LIBRARY} SHARED ${csync_SRCS}) +add_library(${CSYNC_LIBRARY} SHARED ${common_SOURCES} ${csync_SRCS}) #add_library(${CSYNC_LIBRARY}_static STATIC ${csync_SRCS}) generate_export_header( ${CSYNC_LIBRARY} - BASE_NAME ${CSYNC_LIBRARY} EXPORT_MACRO_NAME OCSYNC_EXPORT EXPORT_FILE_NAME ocsynclib.h ) @@ -129,6 +129,16 @@ generate_export_header( ${CSYNC_LIBRARY} target_link_libraries(${CSYNC_LIBRARY} ${CSYNC_LINK_LIBRARIES}) #target_link_libraries(${CSYNC_LIBRARY}_static ${CSYNC_LINK_LIBRARIES}) +find_package(Qt5Core REQUIRED) +qt5_use_modules(${CSYNC_LIBRARY} Core) + +# For src/common/utility_mac.cpp +if (APPLE) + find_library(FOUNDATION_LIBRARY NAMES Foundation) + find_library(CORESERVICES_LIBRARY NAMES CoreServices) + target_link_libraries(${CSYNC_LIBRARY} ${FOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY}) +endif() + set_target_properties( ${CSYNC_LIBRARY} PROPERTIES diff --git a/src/csync/std/CMakeLists.txt b/src/csync/std/CMakeLists.txt index 8cfd48531..ef7a25bd3 100644 --- a/src/csync/std/CMakeLists.txt +++ b/src/csync/std/CMakeLists.txt @@ -36,9 +36,5 @@ include_directories( add_library(${CSTDLIB_LIBRARY} STATIC ${cstdlib_SRCS}) if(NOT WIN32) add_definitions( -fPIC ) - qt5_use_modules(${CSTDLIB_LIBRARY} Core) -endif() -if(NOT HAVE_FNMATCH AND WIN32) - # needed for PathMatchSpec for our fnmatch replacement - target_link_libraries(${CSTDLIB_LIBRARY} ${SHLWAPI_LIBRARY}) endif() +qt5_use_modules(${CSTDLIB_LIBRARY} Core) diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index fe8d98127..a62e1f30f 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -13,6 +13,7 @@ */ #include "accountmanager.h" +#include "configfile.h" #include "sslerrordialog.h" #include "proxyauthhandler.h" #include @@ -47,7 +48,7 @@ AccountManager *AccountManager::instance() bool AccountManager::restore() { - auto settings = Utility::settingsWithGroup(QLatin1String(accountsC)); + auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC)); if (settings->status() != QSettings::NoError) { qCWarning(lcAccountManager) << "Could not read settings from" << settings->fileName() << settings->status(); @@ -81,7 +82,7 @@ bool AccountManager::restoreFromLegacySettings() << Theme::instance()->appName(); // try to open the correctly themed settings - auto settings = Utility::settingsWithGroup(Theme::instance()->appName()); + auto settings = ConfigFile::settingsWithGroup(Theme::instance()->appName()); // if the settings file could not be opened, the childKeys list is empty // then try to load settings from a very old place @@ -134,7 +135,7 @@ bool AccountManager::restoreFromLegacySettings() void AccountManager::save(bool saveCredentials) { - auto settings = Utility::settingsWithGroup(QLatin1String(accountsC)); + auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC)); settings->setValue(QLatin1String(versionC), 2); foreach (const auto &acc, _accounts) { settings->beginGroup(acc->account()->id()); @@ -150,7 +151,7 @@ void AccountManager::save(bool saveCredentials) void AccountManager::saveAccount(Account *a) { qCInfo(lcAccountManager) << "Saving account" << a->url().toString(); - auto settings = Utility::settingsWithGroup(QLatin1String(accountsC)); + auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC)); settings->beginGroup(a->id()); saveAccountHelper(a, *settings, false); // don't save credentials they might not have been loaded yet settings->endGroup(); @@ -162,7 +163,7 @@ void AccountManager::saveAccount(Account *a) void AccountManager::saveAccountState(AccountState *a) { qCInfo(lcAccountManager) << "Saving account state" << a->account()->url().toString(); - auto settings = Utility::settingsWithGroup(QLatin1String(accountsC)); + auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC)); settings->beginGroup(a->account()->id()); a->writeToSettings(*settings); settings->endGroup(); @@ -308,7 +309,7 @@ void AccountManager::deleteAccount(AccountState *account) account->account()->credentials()->forgetSensitiveData(); QFile::remove(account->account()->cookieJarPath()); - auto settings = Utility::settingsWithGroup(QLatin1String(accountsC)); + auto settings = ConfigFile::settingsWithGroup(QLatin1String(accountsC)); settings->remove(account->account()->id()); emit accountRemoved(account); diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index a5a5e105d..453ace412 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -21,7 +21,7 @@ #include "folderwizard.h" #include "folderstatusmodel.h" #include "folderstatusdelegate.h" -#include "utility.h" +#include "common/utility.h" #include "application.h" #include "configfile.h" #include "account.h" diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index 63316f6d2..a13b8c227 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -356,7 +356,7 @@ void AccountState::slotCredentialsAsked(AbstractCredentials *credentials) std::unique_ptr AccountState::settings() { - auto s = Utility::settingsWithGroup(QLatin1String("Accounts")); + auto s = ConfigFile::settingsWithGroup(QLatin1String("Accounts")); s->beginGroup(_account->id()); return s; } diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h index ce36c94fb..03f17795f 100644 --- a/src/gui/accountstate.h +++ b/src/gui/accountstate.h @@ -17,8 +17,8 @@ #define ACCOUNTINFO_H #include +#include #include -#include "utility.h" #include "connectionvalidator.h" #include "creds/abstractcredentials.h" #include diff --git a/src/gui/activityitemdelegate.cpp b/src/gui/activityitemdelegate.cpp index 8de739eb7..ee59e422d 100644 --- a/src/gui/activityitemdelegate.cpp +++ b/src/gui/activityitemdelegate.cpp @@ -18,7 +18,6 @@ #include "folderstatusmodel.h" #include "folderman.h" #include "accountstate.h" -#include "utility.h" #include #include diff --git a/src/gui/activitywidget.cpp b/src/gui/activitywidget.cpp index c4e82884b..d9acc999f 100644 --- a/src/gui/activitywidget.cpp +++ b/src/gui/activitywidget.cpp @@ -21,7 +21,6 @@ #include "activitywidget.h" #include "syncresult.h" #include "logger.h" -#include "utility.h" #include "theme.h" #include "folderman.h" #include "syncfileitem.h" diff --git a/src/gui/application.cpp b/src/gui/application.cpp index f06054b3f..37d24cec7 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -30,7 +30,6 @@ #include "socketapi.h" #include "sslerrordialog.h" #include "theme.h" -#include "utility.h" #include "clientproxy.h" #include "sharedialog.h" #include "accountmanager.h" diff --git a/src/gui/creds/shibbolethcredentials.cpp b/src/gui/creds/shibbolethcredentials.cpp index b7fca6dd3..44c0e217a 100644 --- a/src/gui/creds/shibbolethcredentials.cpp +++ b/src/gui/creds/shibbolethcredentials.cpp @@ -26,6 +26,7 @@ #include "accessmanager.h" #include "account.h" +#include "configfile.h" #include "theme.h" #include "cookiejar.h" #include "owncloudgui.h" @@ -131,7 +132,7 @@ void ShibbolethCredentials::fetchFromKeychain() } else { _url = _account->url(); ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); - job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); job->setInsecureFallback(false); job->setKey(keychainKey(_account->url().toString(), user())); connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); @@ -250,7 +251,7 @@ void ShibbolethCredentials::slotReadJobDone(QKeychain::Job *job) addToCookieJar(_shibCookie); } // access - job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); _ready = true; _stillValid = true; @@ -309,7 +310,7 @@ QByteArray ShibbolethCredentials::shibCookieName() void ShibbolethCredentials::storeShibCookie(const QNetworkCookie &cookie) { WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName()); - job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); // we don't really care if it works... //connect(job, SIGNAL(finished(QKeychain::Job*)), SLOT(slotWriteJobDone(QKeychain::Job*))); job->setKey(keychainKey(_account->url().toString(), user())); @@ -320,7 +321,7 @@ void ShibbolethCredentials::storeShibCookie(const QNetworkCookie &cookie) void ShibbolethCredentials::removeShibCookie() { DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName()); - job->setSettings(Utility::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); job->setKey(keychainKey(_account->url().toString(), user())); job->start(); } diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 4ca5de844..6446a06ed 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -24,7 +24,6 @@ #include "networkjobs.h" #include "syncjournalfilerecord.h" #include "syncresult.h" -#include "utility.h" #include "clientproxy.h" #include "syncengine.h" #include "syncrunfilelog.h" diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index a1f1286a9..bb56db2ef 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -199,7 +199,7 @@ int FolderMan::setupFolders() { unloadAndDeleteAllFolders(); - auto settings = Utility::settingsWithGroup(QLatin1String("Accounts")); + auto settings = ConfigFile::settingsWithGroup(QLatin1String("Accounts")); const auto accountsWithSettings = settings->childGroups(); if (accountsWithSettings.isEmpty()) { int r = setupFoldersMigration(); diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index 0c9e5ad39..cf5bc171d 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -18,7 +18,6 @@ #include "folderstatusmodel.h" #include "folderman.h" #include "accountstate.h" -#include "utility.h" #include #include diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index ac32dc865..59ad76589 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -15,7 +15,6 @@ #include "folderstatusmodel.h" #include "folderman.h" #include "accountstate.h" -#include "utility.h" #include "asserts.h" #include #include diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 853fd730b..a79036771 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -18,7 +18,6 @@ #include "theme.h" #include "configfile.h" #include "application.h" -#include "utility.h" #include "configfile.h" #include "owncloudsetupwizard.h" #include "accountmanager.h" diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index 4803f17a4..f434f3cd2 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -21,7 +21,6 @@ #include "configfile.h" #include "syncresult.h" #include "logger.h" -#include "utility.h" #include "theme.h" #include "folderman.h" #include "syncfileitem.h" diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 4c5970a57..4ee4201ab 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -23,7 +23,7 @@ #include "application.h" #include "theme.h" -#include "utility.h" +#include "common/utility.h" #include "cocoainitializer.h" #include "updater/updater.h" diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index ff99524e1..2f35614a1 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -18,7 +18,6 @@ #include "theme.h" #include "configfile.h" #include "application.h" -#include "utility.h" #include "configfile.h" #include "folderman.h" diff --git a/src/gui/notificationwidget.cpp b/src/gui/notificationwidget.cpp index 7d1132c6a..0457857b8 100644 --- a/src/gui/notificationwidget.cpp +++ b/src/gui/notificationwidget.cpp @@ -14,7 +14,7 @@ #include "notificationwidget.h" #include "QProgressIndicator.h" -#include "utility.h" +#include "common/utility.h" #include "asserts.h" #include diff --git a/src/gui/openfilemanager.cpp b/src/gui/openfilemanager.cpp index d06402eca..e466bdc49 100644 --- a/src/gui/openfilemanager.cpp +++ b/src/gui/openfilemanager.cpp @@ -14,7 +14,7 @@ */ #include "openfilemanager.h" -#include "utility.h" +#include "common/utility.h" #include #include #include diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 65350f367..cb0cafbd8 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -17,7 +17,6 @@ #include "theme.h" #include "folderman.h" #include "configfile.h" -#include "utility.h" #include "progressdispatcher.h" #include "owncloudsetupwizard.h" #include "sharedialog.h" diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index dcd510f78..3ee02c73a 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -24,7 +24,6 @@ #include "owncloudsetupwizard.h" #include "configfile.h" #include "folderman.h" -#include "utility.h" #include "accessmanager.h" #include "account.h" #include "networkjobs.h" diff --git a/src/gui/protocolwidget.cpp b/src/gui/protocolwidget.cpp index 2f177a1c6..c55ab6789 100644 --- a/src/gui/protocolwidget.cpp +++ b/src/gui/protocolwidget.cpp @@ -21,7 +21,6 @@ #include "configfile.h" #include "syncresult.h" #include "logger.h" -#include "utility.h" #include "theme.h" #include "folderman.h" #include "syncfileitem.h" diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index f2616d378..11a971128 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -20,7 +20,6 @@ #include "configfile.h" #include "folderman.h" #include "folder.h" -#include "utility.h" #include "theme.h" #include "syncjournalfilerecord.h" #include "syncengine.h" diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index 89401c31e..cf6a2af7d 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -15,7 +15,6 @@ #include "sslbutton.h" #include "account.h" #include "accountstate.h" -#include "utility.h" #include "theme.h" #include diff --git a/src/gui/sslerrordialog.cpp b/src/gui/sslerrordialog.cpp index 4f6be75d6..809be80aa 100644 --- a/src/gui/sslerrordialog.cpp +++ b/src/gui/sslerrordialog.cpp @@ -12,7 +12,6 @@ * for more details. */ #include "configfile.h" -#include "utility.h" #include "sslerrordialog.h" #include diff --git a/src/gui/syncrunfilelog.cpp b/src/gui/syncrunfilelog.cpp index d0a5259f1..79099cd66 100644 --- a/src/gui/syncrunfilelog.cpp +++ b/src/gui/syncrunfilelog.cpp @@ -15,7 +15,7 @@ #include #include "syncrunfilelog.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index bac0da503..b904ed189 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -14,7 +14,7 @@ #include "theme.h" #include "configfile.h" -#include "utility.h" +#include "common/utility.h" #include "accessmanager.h" #include "updater/ocupdater.h" diff --git a/src/gui/updater/sparkleupdater_mac.mm b/src/gui/updater/sparkleupdater_mac.mm index 96704e81f..1b0a48648 100644 --- a/src/gui/updater/sparkleupdater_mac.mm +++ b/src/gui/updater/sparkleupdater_mac.mm @@ -20,8 +20,6 @@ #include "updater/sparkleupdater.h" -#include "utility.h" - // Does not work yet @interface DelegateObject : NSObject - (BOOL)updaterMayCheckForUpdates:(SUUpdater *)bundle; diff --git a/src/gui/updater/updater.cpp b/src/gui/updater/updater.cpp index 2529b261a..8294bb4be 100644 --- a/src/gui/updater/updater.cpp +++ b/src/gui/updater/updater.cpp @@ -19,9 +19,9 @@ #include "updater/sparkleupdater.h" #include "updater/ocupdater.h" -#include "version.h" #include "theme.h" -#include "utility.h" +#include "common/utility.h" +#include "version.h" #include "config.h" diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp index f0d670480..6bb865ffe 100644 --- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp +++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp @@ -14,7 +14,6 @@ */ #include "wizard/owncloudconnectionmethoddialog.h" -#include "utility.h" #include namespace OCC { diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 865dad895..a475aa3c0 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -1,8 +1,6 @@ project(libsync) set(CMAKE_AUTOMOC TRUE) -configure_file( version.h.in "${CMAKE_CURRENT_BINARY_DIR}/version.h" ) - include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) # csync is required. include_directories(${CMAKE_SOURCE_DIR}/src/csync @@ -59,7 +57,6 @@ set(libsync_SRCS syncjournalfilerecord.cpp syncresult.cpp theme.cpp - utility.cpp ownsql.cpp checksums.cpp excludedfiles.cpp diff --git a/src/libsync/accessmanager.cpp b/src/libsync/accessmanager.cpp index fb131b02c..67603f623 100644 --- a/src/libsync/accessmanager.cpp +++ b/src/libsync/accessmanager.cpp @@ -25,7 +25,7 @@ #include "cookiejar.h" #include "accessmanager.h" -#include "utility.h" +#include "common/utility.h" namespace OCC { diff --git a/src/libsync/account.h b/src/libsync/account.h index de1cd0293..fa2ccb8f9 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -28,7 +28,7 @@ #include #include -#include "utility.h" +#include "common/utility.h" #include #include "capabilities.h" diff --git a/src/libsync/bandwidthmanager.cpp b/src/libsync/bandwidthmanager.cpp index 2cd8d70a6..97cbddd21 100644 --- a/src/libsync/bandwidthmanager.cpp +++ b/src/libsync/bandwidthmanager.cpp @@ -16,7 +16,7 @@ #include "propagatedownload.h" #include "propagateupload.h" #include "propagatorjobs.h" -#include "utility.h" +#include "common/utility.h" #ifdef Q_OS_WIN #include diff --git a/src/libsync/clientproxy.h b/src/libsync/clientproxy.h index 923f060f7..169e1fb6e 100644 --- a/src/libsync/clientproxy.h +++ b/src/libsync/clientproxy.h @@ -21,7 +21,8 @@ #include #include -#include "utility.h" +#include "common/utility.h" +#include "owncloudlib.h" namespace OCC { diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index a3bab5f1c..0fa6b77ff 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -16,7 +16,7 @@ #include "configfile.h" #include "theme.h" -#include "utility.h" +#include "common/utility.h" #include "asserts.h" #include "creds/abstractcredentials.h" @@ -703,4 +703,19 @@ void ConfigFile::setCertificatePasswd(const QString &cPasswd) settings.setValue(QLatin1String(certPasswd), cPasswd); settings.sync(); } + +Q_GLOBAL_STATIC(QString, g_configFileName) + +std::unique_ptr ConfigFile::settingsWithGroup(const QString &group, QObject *parent) +{ + if (g_configFileName()->isEmpty()) { + // cache file name + ConfigFile cfg; + *g_configFileName() = cfg.configFile(); + } + std::unique_ptr settings(new QSettings(*g_configFileName(), QSettings::IniFormat, parent)); + settings->beginGroup(group); + return settings; +} + } diff --git a/src/libsync/configfile.h b/src/libsync/configfile.h index 912b66a04..b9eda8eb0 100644 --- a/src/libsync/configfile.h +++ b/src/libsync/configfile.h @@ -16,7 +16,9 @@ #define CONFIGFILE_H #include "owncloudlib.h" +#include #include +#include #include #include @@ -137,6 +139,10 @@ public: QString certificatePasswd() const; void setCertificatePasswd(const QString &cPasswd); + /** Returns a new settings pre-set in a specific group. The Settings will be created + with the given parent. If no parent is specified, the caller must destroy the settings */ + static std::unique_ptr settingsWithGroup(const QString &group, QObject *parent = 0); + protected: QVariant getPolicySetting(const QString &policy, const QVariant &defaultValue = QVariant()) const; void storeData(const QString &group, const QString &key, const QVariant &value); diff --git a/src/libsync/creds/credentialscommon.cpp b/src/libsync/creds/credentialscommon.cpp index 58b3cc24f..b56b8193d 100644 --- a/src/libsync/creds/credentialscommon.cpp +++ b/src/libsync/creds/credentialscommon.cpp @@ -21,7 +21,7 @@ #include "creds/credentialscommon.h" -#include "utility.h" +#include "common/utility.h" #include "account.h" #include "syncengine.h" diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 0f71f445e..53215de2a 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -25,7 +25,7 @@ #include "account.h" #include "accessmanager.h" -#include "utility.h" +#include "configfile.h" #include "theme.h" #include "syncengine.h" #include "creds/credentialscommon.h" @@ -94,7 +94,7 @@ private: static void addSettingsToJob(Account *account, QKeychain::Job *job) { Q_UNUSED(account); - auto settings = Utility::settingsWithGroup(Theme::instance()->appName()); + auto settings = ConfigFile::settingsWithGroup(Theme::instance()->appName()); settings->setParent(job); // make the job parent to make setting deleted properly job->setSettings(settings.release()); } diff --git a/src/libsync/creds/tokencredentials.cpp b/src/libsync/creds/tokencredentials.cpp index 2008542f5..c7e43bf8c 100644 --- a/src/libsync/creds/tokencredentials.cpp +++ b/src/libsync/creds/tokencredentials.cpp @@ -21,7 +21,7 @@ #include "account.h" #include "accessmanager.h" -#include "utility.h" +#include "common/utility.h" #include "theme.h" #include "creds/credentialscommon.h" #include "creds/tokencredentials.h" diff --git a/src/libsync/excludedfiles.cpp b/src/libsync/excludedfiles.cpp index 289164efb..62c4711ad 100644 --- a/src/libsync/excludedfiles.cpp +++ b/src/libsync/excludedfiles.cpp @@ -14,7 +14,7 @@ #include "config.h" #include "excludedfiles.h" -#include "utility.h" +#include "common/utility.h" #include diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index 8299fcc04..4625eed04 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -14,7 +14,7 @@ #include "filesystem.h" -#include "utility.h" +#include "common/utility.h" #include #include #include diff --git a/src/libsync/logger.h b/src/libsync/logger.h index 555abe52f..bf73009a9 100644 --- a/src/libsync/logger.h +++ b/src/libsync/logger.h @@ -22,7 +22,9 @@ #include #include -#include "utility.h" +#include "common/utility.h" +#include "logger.h" +#include "owncloudlib.h" namespace OCC { diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 17ab9faca..2dcc7a26d 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -23,7 +23,7 @@ #include "propagateremotemkdir.h" #include "propagatorjobs.h" #include "configfile.h" -#include "utility.h" +#include "common/utility.h" #include "account.h" #include "asserts.h" diff --git a/src/libsync/owncloudtheme.cpp b/src/libsync/owncloudtheme.cpp index 4f30571b2..9a932eefc 100644 --- a/src/libsync/owncloudtheme.cpp +++ b/src/libsync/owncloudtheme.cpp @@ -24,9 +24,9 @@ #endif #include -#include "version.h" #include "config.h" -#include "utility.h" +#include "common/utility.h" +#include "version.h" namespace OCC { diff --git a/src/libsync/ownsql.cpp b/src/libsync/ownsql.cpp index 69dae7847..759f1981d 100644 --- a/src/libsync/ownsql.cpp +++ b/src/libsync/ownsql.cpp @@ -21,7 +21,7 @@ #include #include "ownsql.h" -#include "utility.h" +#include "common/utility.h" #include "asserts.h" #define SQLITE_SLEEP_TIME_USEC 100000 diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 2a6ca1439..f5b199024 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -19,7 +19,7 @@ #include "account.h" #include "syncjournaldb.h" #include "syncjournalfilerecord.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" #include "checksums.h" diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index 3032bb65f..ac6c68259 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -19,7 +19,7 @@ #include "account.h" #include "syncjournaldb.h" #include "syncjournalfilerecord.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" #include "checksums.h" diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 7717203a1..00e3d0524 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -19,7 +19,7 @@ #include "account.h" #include "syncjournaldb.h" #include "syncjournalfilerecord.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" #include "syncengine.h" diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index 74a5f6e52..c1182bb70 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -19,7 +19,7 @@ #include "account.h" #include "syncjournaldb.h" #include "syncjournalfilerecord.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" #include "checksums.h" diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 65d7ef86a..1bdee68ae 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -16,7 +16,7 @@ #include "propagatorjobs.h" #include "owncloudpropagator_p.h" #include "propagateremotemove.h" -#include "utility.h" +#include "common/utility.h" #include "syncjournaldb.h" #include "syncjournalfilerecord.h" #include "filesystem.h" diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index a275618a4..50e52f6f4 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -34,7 +34,7 @@ #include "excludedfiles.h" #include "syncfileitem.h" #include "progressdispatcher.h" -#include "utility.h" +#include "common/utility.h" #include "syncfilestatustracker.h" #include "accountfwd.h" #include "discoveryphase.h" diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index e46d35db6..6706fb65e 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -23,7 +23,7 @@ #include "syncjournaldb.h" #include "syncjournalfilerecord.h" -#include "utility.h" +#include "common/utility.h" #include "version.h" #include "filesystem.h" #include "asserts.h" diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h index 62295f62e..931588dfa 100644 --- a/src/libsync/syncjournaldb.h +++ b/src/libsync/syncjournaldb.h @@ -20,7 +20,7 @@ #include #include -#include "utility.h" +#include "common/utility.h" #include "ownsql.h" #include "syncjournalfilerecord.h" diff --git a/src/libsync/syncjournalfilerecord.cpp b/src/libsync/syncjournalfilerecord.cpp index 024c32746..9c68e646c 100644 --- a/src/libsync/syncjournalfilerecord.cpp +++ b/src/libsync/syncjournalfilerecord.cpp @@ -14,7 +14,7 @@ #include "syncjournalfilerecord.h" #include "syncfileitem.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 1d1391b1f..978efc9cb 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -13,9 +13,9 @@ */ #include "theme.h" -#include "version.h" #include "config.h" -#include "utility.h" +#include "common/utility.h" +#include "version.h" #include #ifndef TOKEN_AUTH_ONLY diff --git a/src/libsync/version.h.in b/src/libsync/version.h.in deleted file mode 100644 index c05c224c1..000000000 --- a/src/libsync/version.h.in +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) by Klaas Freitag - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - */ - -#ifndef VERSION_H -#define VERSION_H - -#cmakedefine GIT_SHA1 "@GIT_SHA1@" - -#define MIRALL_STRINGIFY(s) MIRALL_TOSTRING(s) -#define MIRALL_TOSTRING(s) #s - -/* MIRALL version */ -#define MIRALL_VERSION_MAJOR @MIRALL_VERSION_MAJOR@ -#define MIRALL_VERSION_MINOR @MIRALL_VERSION_MINOR@ -#define MIRALL_VERSION_PATCH @MIRALL_VERSION_PATCH@ -#define MIRALL_VERSION_BUILD @MIRALL_VERSION_BUILD@ - -#define MIRALL_VERSION @MIRALL_VERSION@ -#define MIRALL_VERSION_FULL @MIRALL_VERSION_FULL@ - -#define MIRALL_VERSION_STRING "@MIRALL_VERSION_STRING@" - -#endif // VERSION_H diff --git a/test/csync/csync_tests/check_csync_misc.cpp b/test/csync/csync_tests/check_csync_misc.cpp index 80736b825..64f95694b 100644 --- a/test/csync/csync_tests/check_csync_misc.cpp +++ b/test/csync/csync_tests/check_csync_misc.cpp @@ -17,10 +17,9 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "torture.h" - #include "csync_misc.h" #include +#include "torture.h" static void check_csync_normalize_etag(void **state) { diff --git a/test/testchecksumvalidator.cpp b/test/testchecksumvalidator.cpp index 88c3b1d34..fd1988eab 100644 --- a/test/testchecksumvalidator.cpp +++ b/test/testchecksumvalidator.cpp @@ -11,7 +11,7 @@ #include "checksums.h" #include "networkjobs.h" -#include "utility.h" +#include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" diff --git a/test/testfilesystem.cpp b/test/testfilesystem.cpp index a9b3f2b9f..0b8b61246 100644 --- a/test/testfilesystem.cpp +++ b/test/testfilesystem.cpp @@ -8,7 +8,7 @@ #include #include "filesystem.h" -#include "utility.h" +#include "common/utility.h" using namespace OCC::Utility; using namespace OCC::FileSystem; diff --git a/test/testfolder.cpp b/test/testfolder.cpp index e8775ac06..986c588eb 100644 --- a/test/testfolder.cpp +++ b/test/testfolder.cpp @@ -7,7 +7,7 @@ #include -#include "utility.h" +#include "common/utility.h" #include "folder.h" using namespace OCC; diff --git a/test/testfolderman.cpp b/test/testfolderman.cpp index b6e6478f5..78a2dd71a 100644 --- a/test/testfolderman.cpp +++ b/test/testfolderman.cpp @@ -11,7 +11,7 @@ #endif #include -#include "utility.h" +#include "common/utility.h" #include "folderman.h" #include "account.h" #include "accountstate.h" diff --git a/test/testfolderwatcher.cpp b/test/testfolderwatcher.cpp index 1cb231cf6..0f8551db6 100644 --- a/test/testfolderwatcher.cpp +++ b/test/testfolderwatcher.cpp @@ -8,7 +8,7 @@ #include #include "folderwatcher.h" -#include "utility.h" +#include "common/utility.h" void touch(const QString &file) { diff --git a/test/testinotifywatcher.cpp b/test/testinotifywatcher.cpp index 799b09da9..2d8cf937d 100644 --- a/test/testinotifywatcher.cpp +++ b/test/testinotifywatcher.cpp @@ -7,7 +7,7 @@ #include #include "folderwatcher_linux.h" -#include "utility.h" +#include "common/utility.h" using namespace OCC; diff --git a/test/testutility.cpp b/test/testutility.cpp index 5093ce76d..5e86a336e 100644 --- a/test/testutility.cpp +++ b/test/testutility.cpp @@ -9,7 +9,7 @@ #include #endif -#include "utility.h" +#include "common/utility.h" using namespace OCC::Utility; diff --git a/version.h.in b/version.h.in new file mode 100644 index 000000000..064309f52 --- /dev/null +++ b/version.h.in @@ -0,0 +1,38 @@ +/* + * Copyright (C) by Klaas Freitag + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef VERSION_H +#define VERSION_H + +#cmakedefine GIT_SHA1 "@GIT_SHA1@" + +#define MIRALL_STRINGIFY(s) MIRALL_TOSTRING(s) +#define MIRALL_TOSTRING(s) #s + +/* MIRALL version */ +#define MIRALL_VERSION_MAJOR @MIRALL_VERSION_MAJOR@ +#define MIRALL_VERSION_MINOR @MIRALL_VERSION_MINOR@ +#define MIRALL_VERSION_PATCH @MIRALL_VERSION_PATCH@ +#define MIRALL_VERSION_BUILD @MIRALL_VERSION_BUILD@ + +#define MIRALL_VERSION @MIRALL_VERSION@ +#define MIRALL_VERSION_FULL @MIRALL_VERSION_FULL@ + +#define MIRALL_VERSION_STRING "@MIRALL_VERSION_STRING@" + +#endif // VERSION_H From 704ca366b38391c0ef56e090561b4a3a158307fb Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 17 Aug 2017 10:06:14 +0200 Subject: [PATCH 012/166] Make csync_file_stat_t public and partly convert to C++ This is the first commit trying to unify csync_file_stat_s, csync_vio_file_stat_s and csync_tree_walk_file_s. Use QByteArray and unique_ptr already since I'm not used to track memory allocations and this will make the transition easier. Issue #1817 --- src/csync/csync.cpp | 24 +--- src/csync/csync.h | 48 ++++++- src/csync/csync_private.h | 45 ------- src/csync/csync_reconcile.cpp | 37 +++--- src/csync/csync_rename.cpp | 8 -- src/csync/csync_statedb.cpp | 125 +++++++----------- src/csync/csync_statedb.h | 6 +- src/csync/csync_time.c | 1 - src/csync/csync_time.h | 2 - src/csync/csync_update.cpp | 95 +++++-------- src/libsync/checksums.cpp | 10 +- src/libsync/checksums.h | 2 +- src/libsync/syncengine.cpp | 2 +- .../csync_tests/check_csync_statedb_query.cpp | 18 ++- test/csync/std_tests/check_std_c_time.c | 1 + test/testcsyncsqlite.cpp | 30 ++--- 16 files changed, 177 insertions(+), 277 deletions(-) diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index 6ef3d0d1d..eefc8904e 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -356,15 +356,14 @@ static int _csync_treewalk_visitor(void *obj, void *data) { trav.path = cur->path; trav.size = cur->size; trav.modtime = cur->modtime; - trav.mode = cur->mode; trav.type = cur->type; trav.instruction = cur->instruction; - trav.rename_path = cur->destpath; + trav.rename_path = cur->rename_path; trav.etag = cur->etag; trav.file_id = cur->file_id; trav.remotePerm = cur->remotePerm; - trav.directDownloadUrl = cur->directDownloadUrl; - trav.directDownloadCookies = cur->directDownloadCookies; + trav.directDownloadUrl = cur->directDownloadUrl.data(); + trav.directDownloadCookies = cur->directDownloadCookies.data(); trav.inode = cur->inode; trav.error_status = cur->error_status; @@ -389,8 +388,7 @@ static int _csync_treewalk_visitor(void *obj, void *data) { rc = (*visitor)(&trav, twctx->userdata); cur->instruction = trav.instruction; if (trav.etag != cur->etag) { // FIXME It would be nice to have this documented - SAFE_FREE(cur->etag); - cur->etag = c_strdup(trav.etag); + cur->etag = trav.etag; } return rc; @@ -480,7 +478,7 @@ static void _tree_destructor(void *data) { csync_file_stat_t *freedata = NULL; freedata = (csync_file_stat_t *) data; - csync_file_stat_free(freedata); + delete freedata; } /* reset all the list to empty. @@ -637,15 +635,3 @@ int csync_abort_requested(CSYNC *ctx) return (1 == 0); } } - -void csync_file_stat_free(csync_file_stat_t *st) -{ - if (st) { - SAFE_FREE(st->directDownloadUrl); - SAFE_FREE(st->directDownloadCookies); - SAFE_FREE(st->etag); - SAFE_FREE(st->destpath); - SAFE_FREE(st->checksumHeader); - SAFE_FREE(st); - } -} diff --git a/src/csync/csync.h b/src/csync/csync.h index 73eb5790a..4eea748ef 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -39,6 +39,7 @@ #include #include #include +#include enum csync_status_codes_e { CSYNC_STATUS_OK = 0, @@ -207,7 +208,6 @@ struct csync_vio_file_stat_s { time_t atime; time_t mtime; time_t ctime; - int64_t size; mode_t mode; @@ -226,6 +226,48 @@ struct csync_vio_file_stat_s { char *checksumHeader; }; +typedef struct csync_file_stat_s csync_file_stat_t; + +struct csync_file_stat_s { + uint64_t phash; + time_t modtime; + int64_t size; + uint64_t inode; + enum csync_ftw_type_e type : 4; + bool child_modified : 1; + bool has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */ + + QByteArray path; + QByteArray rename_path; + QByteArray etag; + QByteArray file_id; + QByteArray directDownloadUrl; + QByteArray directDownloadCookies; + QByteArray remotePerm; + + // In the local tree, this can hold a checksum and its type if it is + // computed during discovery for some reason. + // In the remote tree, this will have the server checksum, if available. + // In both cases, the format is "SHA1:baff". + QByteArray checksumHeader; + + CSYNC_STATUS error_status; + + enum csync_instructions_e instruction; /* u32 */ + + csync_file_stat_s() + : phash(0) + , modtime(0) + , size(0) + , inode(0) + , type(CSYNC_FTW_TYPE_SKIP) + , child_modified(false) + , has_ignored_files(false) + , error_status(CSYNC_STATUS_OK) + , instruction(CSYNC_INSTRUCTION_NONE) + { } +}; + csync_vio_file_stat_t OCSYNC_EXPORT *csync_vio_file_stat_new(void); csync_vio_file_stat_t OCSYNC_EXPORT *csync_vio_file_stat_copy(csync_vio_file_stat_t *file_stat); @@ -304,8 +346,8 @@ typedef int (*csync_vio_stat_hook) (csync_vio_handle_t *dhhandle, void *userdata); /* Compute the checksum of the given \a checksumTypeId for \a path. */ -typedef const char *(*csync_checksum_hook)( - const char *path, const char *otherChecksumHeader, void *userdata); +typedef QByteArray (*csync_checksum_hook)( + const QByteArray &path, const QByteArray &otherChecksumHeader, void *userdata); /** * @brief Allocate a csync context. diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 3d1632e41..aa1ead2ab 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -64,8 +64,6 @@ enum csync_replica_e { REMOTE_REPLICA }; -typedef struct csync_file_stat_s csync_file_stat_t; - /** * @brief csync public structure */ @@ -152,49 +150,6 @@ struct csync_s { bool ignore_hidden_files; }; - -#ifdef _MSC_VER -#pragma pack(1) -#endif -struct csync_file_stat_s { - uint64_t phash; /* u64 */ - time_t modtime; /* u64 */ - int64_t size; /* u64 */ - size_t pathlen; /* u64 */ - uint64_t inode; /* u64 */ - mode_t mode; /* u32 */ - enum csync_ftw_type_e type : 4; - unsigned int child_modified : 1; - unsigned int has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */ - - char *destpath; /* for renames */ - const char *etag; - char file_id[FILE_ID_BUF_SIZE+1]; /* the ownCloud file id is fixed width in ownCloud. */ - char *directDownloadUrl; - char *directDownloadCookies; - char remotePerm[REMOTE_PERM_BUF_SIZE+1]; - - // In the local tree, this can hold a checksum and its type if it is - // computed during discovery for some reason. - // In the remote tree, this will have the server checksum, if available. - // In both cases, the format is "SHA1:baff". - const char *checksumHeader; - - CSYNC_STATUS error_status; - - enum csync_instructions_e instruction; /* u32 */ - char path[1]; /* u8 */ -} -#if !defined(__SUNPRO_C) && !defined(_MSC_VER) -__attribute__ ((packed)) -#endif -#ifdef _MSC_VER -#pragma pack() -#endif -; - -OCSYNC_EXPORT void csync_file_stat_free(csync_file_stat_t *st); - /* * context for the treewalk function */ diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 3b02398fc..760c5ca46 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -110,7 +110,7 @@ static bool _csync_is_collision_safe_hash(const char *checksum_header) static int _csync_merge_algorithm_visitor(void *obj, void *data) { csync_file_stat_t *cur = NULL; csync_file_stat_t *other = NULL; - csync_file_stat_t *tmp = NULL; + std::unique_ptr tmp; uint64_t h = 0; int len = 0; @@ -138,7 +138,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { if (!node) { /* Check the renamed path as well. */ char *renamed_path = csync_rename_adjust_path(ctx, cur->path); - if (!c_streq(renamed_path, cur->path)) { + if (renamed_path != cur->path) { len = strlen( renamed_path ); h = c_jhash64((uint8_t *) renamed_path, len, 0); node = c_rbtree_find(tree, &h); @@ -147,7 +147,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { } if (!node) { /* Check if it is ignored */ - node = _csync_check_ignored(tree, cur->path, cur->pathlen); + node = _csync_check_ignored(tree, cur->path, cur->path.size()); /* If it is ignored, other->instruction will be IGNORE so this one will also be ignored */ } @@ -181,7 +181,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { } else if( ctx->current == REMOTE_REPLICA ) { tmp = csync_statedb_get_stat_by_file_id(ctx, cur->file_id); CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Finding opposite temp through file ID %s: %s", - cur->file_id, tmp ? "true":"false"); + cur->file_id.constData(), tmp ? "true":"false"); } else { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unknown replica..."); } @@ -189,16 +189,16 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { if( tmp ) { len = strlen( tmp->path ); if( len > 0 ) { - h = c_jhash64((uint8_t *) tmp->path, len, 0); + h = c_jhash64((uint8_t *) tmp->path.constData(), len, 0); /* First, check that the file is NOT in our tree (another file with the same name was added) */ node = c_rbtree_find(ctx->current == REMOTE_REPLICA ? ctx->remote.tree : ctx->local.tree, &h); if (node) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Origin found in our tree : %s", tmp->path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Origin found in our tree : %s", tmp->path.constData()); } else { /* Find the temporar file in the other tree. */ node = c_rbtree_find(tree, &h); CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "PHash of temporary opposite (%s): %" PRIu64 " %s", - tmp->path , h, node ? "found": "not found" ); + tmp->path.constData() , h, node ? "found": "not found" ); if (node) { other = (csync_file_stat_t*)node->data; } else { @@ -216,18 +216,18 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { || other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA || cur->type == CSYNC_FTW_TYPE_DIR) { other->instruction = CSYNC_INSTRUCTION_RENAME; - other->destpath = c_strdup( cur->path ); - if( !c_streq(cur->file_id, "") ) { - csync_vio_set_file_id( other->file_id, cur->file_id ); + other->rename_path = cur->path; + if( !cur->file_id.isEmpty() ) { + other->file_id = cur->file_id; } other->inode = cur->inode; cur->instruction = CSYNC_INSTRUCTION_NONE; } else if (other->instruction == CSYNC_INSTRUCTION_REMOVE) { other->instruction = CSYNC_INSTRUCTION_RENAME; - other->destpath = c_strdup( cur->path ); + other->rename_path = cur->path; - if( !c_streq(cur->file_id, "") ) { - csync_vio_set_file_id( other->file_id, cur->file_id ); + if( !cur->file_id.isEmpty() ) { + other->file_id = cur->file_id; } other->inode = cur->inode; cur->instruction = CSYNC_INSTRUCTION_NONE; @@ -239,7 +239,6 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { cur->instruction = CSYNC_INSTRUCTION_NONE; other->instruction = CSYNC_INSTRUCTION_SYNC; } - csync_file_stat_free(tmp); } break; @@ -270,7 +269,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { case CSYNC_INSTRUCTION_NEW: // This operation is usually a no-op and will by default return false if (csync_file_locked_or_open(ctx->local.uri, cur->path)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] IGNORING file %s/%s since it is locked / open", ctx->local.uri, cur->path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] IGNORING file %s/%s since it is locked / open", ctx->local.uri, cur->path.constData()); cur->instruction = CSYNC_INSTRUCTION_ERROR; if (cur->error_status == CSYNC_STATUS_OK) // don't overwrite error cur->error_status = CYSNC_STATUS_FILE_LOCKED_OR_OPEN; @@ -361,7 +360,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { "%-30s %s dir: %s", csync_instruction_str(cur->instruction), repo, - cur->path); + cur->path.constData()); } else { @@ -369,7 +368,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { "%-30s %s file: %s", csync_instruction_str(cur->instruction), repo, - cur->path); + cur->path.constData()); } } else @@ -380,7 +379,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { "%-30s %s dir: %s", csync_instruction_str(cur->instruction), repo, - cur->path); + cur->path.constData()); } else { @@ -388,7 +387,7 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { "%-30s %s file: %s", csync_instruction_str(cur->instruction), repo, - cur->path); + cur->path.constData()); } } diff --git a/src/csync/csync_rename.cpp b/src/csync/csync_rename.cpp index 79bb78e34..1408e6783 100644 --- a/src/csync/csync_rename.cpp +++ b/src/csync/csync_rename.cpp @@ -43,14 +43,6 @@ struct csync_rename_s { std::map folder_renamed_to; // map from->to std::map folder_renamed_from; // map to->from - - struct renameop { - csync_file_stat_t *st; - bool operator<(const renameop &other) const { - return strlen(st->destpath) < strlen(other.st->destpath); - } - }; - std::vector todo; }; void csync_rename_destroy(CSYNC* ctx) diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 63eb813e7..4c4eb9828 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -25,6 +25,7 @@ #define _GNU_SOURCE #endif +#include #include #include #include @@ -228,78 +229,46 @@ int csync_statedb_close(CSYNC *ctx) { return rc; } -#define METADATA_QUERY \ - "phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, " \ - "filesize, ignoredChildrenRemote, " \ - "contentchecksumtype.name || ':' || contentChecksum " \ - "FROM metadata " \ +#define METADATA_QUERY \ + "phash, path, inode, modtime, type, md5, fileid, remotePerm, " \ + "filesize, ignoredChildrenRemote, " \ + "contentchecksumtype.name || ':' || contentChecksum " \ + "FROM metadata " \ "LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id" // This funciton parses a line from the metadata table into the given csync_file_stat // structure which it is also allocating. // Note that this function calls laso sqlite3_step to actually get the info from db and // returns the sqlite return type. -static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3_stmt *stmt ) +static int _csync_file_stat_from_metadata_table( std::unique_ptr &st, sqlite3_stmt *stmt ) { int rc = SQLITE_ERROR; - int column_count; - int len; if( ! stmt ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Fatal: Statement is NULL."); return SQLITE_ERROR; } - column_count = sqlite3_column_count(stmt); + // Callers should all use METADATA_QUERY for their column list. + assert(sqlite3_column_count(stmt) == 11); SQLITE_BUSY_HANDLED( sqlite3_step(stmt) ); if( rc == SQLITE_ROW ) { - if(column_count > 7) { - const char *name; + st.reset(new csync_file_stat_t); - /* phash, pathlen, path, inode, uid, gid, mode, modtime */ - len = sqlite3_column_int(stmt, 1); - *st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + len + 1); - /* clear the whole structure */ - ZERO_STRUCTP(*st); - - /* The query suceeded so use the phash we pass to the function. */ - (*st)->phash = sqlite3_column_int64(stmt, 0); - - (*st)->pathlen = sqlite3_column_int(stmt, 1); - name = (const char*) sqlite3_column_text(stmt, 2); - memcpy((*st)->path, (len ? name : ""), len + 1); - (*st)->inode = sqlite3_column_int64(stmt,3); - (*st)->mode = sqlite3_column_int(stmt, 6); - (*st)->modtime = strtoul((char*)sqlite3_column_text(stmt, 7), NULL, 10); - - if(*st && column_count > 8 ) { - (*st)->type = static_cast(sqlite3_column_int(stmt, 8)); - } - - if(column_count > 9 && sqlite3_column_text(stmt, 9)) { - (*st)->etag = c_strdup( (char*) sqlite3_column_text(stmt, 9) ); - } - if(column_count > 10 && sqlite3_column_text(stmt,10)) { - csync_vio_set_file_id((*st)->file_id, (char*) sqlite3_column_text(stmt, 10)); - } - if(column_count > 11 && sqlite3_column_text(stmt,11)) { - strncpy((*st)->remotePerm, - (char*) sqlite3_column_text(stmt, 11), - REMOTE_PERM_BUF_SIZE); - } - if(column_count > 12 && sqlite3_column_int64(stmt,12)) { - (*st)->size = sqlite3_column_int64(stmt, 12); - } - if(column_count > 13) { - (*st)->has_ignored_files = sqlite3_column_int(stmt, 13); - } - if (column_count > 14 && sqlite3_column_text(stmt, 14)) { - (*st)->checksumHeader = c_strdup((char *)sqlite3_column_text(stmt, 14)); - } - - } + /* The query suceeded so use the phash we pass to the function. */ + st->phash = sqlite3_column_int64(stmt, 0); + st->path = (char*)sqlite3_column_text(stmt, 1); + st->inode = sqlite3_column_int64(stmt, 2); + st->modtime = strtoul((char*)sqlite3_column_text(stmt, 3), NULL, 10); + st->type = static_cast(sqlite3_column_int(stmt, 4)); + st->etag = (char*)sqlite3_column_text(stmt, 5); + st->file_id = (char*)sqlite3_column_text(stmt, 6); + st->remotePerm = (char*)sqlite3_column_text(stmt, 7); + st->size = sqlite3_column_int64(stmt, 8); + st->has_ignored_files = sqlite3_column_int(stmt, 9); + st->checksumHeader = (char *)sqlite3_column_text(stmt, 10); } else { if( rc != SQLITE_DONE ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Query results in %d", rc); @@ -309,10 +278,10 @@ static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3 } /* caller must free the memory */ -csync_file_stat_t *csync_statedb_get_stat_by_hash(CSYNC *ctx, +std::unique_ptr csync_statedb_get_stat_by_hash(CSYNC *ctx, uint64_t phash) { - csync_file_stat_t *st = NULL; + std::unique_ptr st; int rc; if( !ctx || ctx->db_is_empty ) { @@ -336,7 +305,7 @@ csync_file_stat_t *csync_statedb_get_stat_by_hash(CSYNC *ctx, sqlite3_bind_int64(ctx->statedb.by_hash_stmt, 1, (long long signed int)phash); - rc = _csync_file_stat_from_metadata_table(&st, ctx->statedb.by_hash_stmt); + rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_hash_stmt); ctx->statedb.lastReturnValue = rc; if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata: %d!", rc); @@ -346,9 +315,9 @@ csync_file_stat_t *csync_statedb_get_stat_by_hash(CSYNC *ctx, return st; } -csync_file_stat_t *csync_statedb_get_stat_by_file_id(CSYNC *ctx, +std::unique_ptr csync_statedb_get_stat_by_file_id(CSYNC *ctx, const char *file_id ) { - csync_file_stat_t *st = NULL; + std::unique_ptr st; int rc = 0; if (!file_id) { @@ -376,7 +345,7 @@ csync_file_stat_t *csync_statedb_get_stat_by_file_id(CSYNC *ctx, /* bind the query value */ sqlite3_bind_text(ctx->statedb.by_fileid_stmt, 1, file_id, -1, SQLITE_STATIC); - rc = _csync_file_stat_from_metadata_table(&st, ctx->statedb.by_fileid_stmt); + rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_fileid_stmt); ctx->statedb.lastReturnValue = rc; if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata: %d!", rc); @@ -388,10 +357,10 @@ csync_file_stat_t *csync_statedb_get_stat_by_file_id(CSYNC *ctx, } /* caller must free the memory */ -csync_file_stat_t *csync_statedb_get_stat_by_inode(CSYNC *ctx, +std::unique_ptr csync_statedb_get_stat_by_inode(CSYNC *ctx, uint64_t inode) { - csync_file_stat_t *st = NULL; + std::unique_ptr st; int rc; if (!inode) { @@ -419,7 +388,7 @@ csync_file_stat_t *csync_statedb_get_stat_by_inode(CSYNC *ctx, sqlite3_bind_int64(ctx->statedb.by_inode_stmt, 1, (long long signed int)inode); - rc = _csync_file_stat_from_metadata_table(&st, ctx->statedb.by_inode_stmt); + rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_inode_stmt); ctx->statedb.lastReturnValue = rc; if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata by inode: %d!", rc); @@ -465,9 +434,9 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { ctx->statedb.lastReturnValue = rc; do { - csync_file_stat_t *st = NULL; + std::unique_ptr st; - rc = _csync_file_stat_from_metadata_table( &st, stmt); + rc = _csync_file_stat_from_metadata_table(st, stmt); if( st ) { /* When selective sync is used, the database may have subtrees with a parent * whose etag (md5) is _invalid_. These are ignored and shall not appear in the @@ -476,21 +445,21 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { * _invalid_, but that is not a problem as the next discovery will retrieve * their correct etags again and we don't run into this case. */ - if( c_streq(st->etag, "_invalid_") ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded", st->path); - char *skipbase = c_strdup(st->path); - skipbase[st->pathlen] = '/'; - int skiplen = st->pathlen + 1; + if( st->etag == "_invalid_") { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded", st->path.constData()); + QByteArray skipbase = st->path; + skipbase += '/'; /* Skip over all entries with the same base path. Note that this depends * strongly on the ordering of the retrieved items. */ do { - csync_file_stat_free(st); - rc = _csync_file_stat_from_metadata_table( &st, stmt); - if( st && strncmp(st->path, skipbase, skiplen) != 0 ) { - break; + st.reset(); + rc = _csync_file_stat_from_metadata_table(st, stmt); + if( st ) { + if( st->path == skipbase ) + break; + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded because the parent is", st->path.constData()); } - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded because the parent is", st->path); } while( rc == SQLITE_ROW ); /* End of data? */ @@ -504,11 +473,11 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { * without a full remote discovery being triggered. */ CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type); if (excluded != CSYNC_NOT_EXCLUDED) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path, excluded); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path.constData(), excluded); if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE || excluded == CSYNC_FILE_SILENTLY_EXCLUDED) { - csync_file_stat_free(st); + st.reset(); continue; } @@ -516,8 +485,8 @@ 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); + if (c_rbtree_insert(ctx->remote.tree, (void *) st.release()) < 0) { + st.reset(); ctx->status_code = CSYNC_STATUS_TREE_ERROR; break; } diff --git a/src/csync/csync_statedb.h b/src/csync/csync_statedb.h index dc58a9b08..8ef2235af 100644 --- a/src/csync/csync_statedb.h +++ b/src/csync/csync_statedb.h @@ -56,11 +56,11 @@ OCSYNC_EXPORT int csync_statedb_load(CSYNC *ctx, const char *statedb, sqlite3 ** OCSYNC_EXPORT int csync_statedb_close(CSYNC *ctx); -OCSYNC_EXPORT csync_file_stat_t *csync_statedb_get_stat_by_hash(CSYNC *ctx, uint64_t phash); +OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_hash(CSYNC *ctx, uint64_t phash); -OCSYNC_EXPORT csync_file_stat_t *csync_statedb_get_stat_by_inode(CSYNC *ctx, uint64_t inode); +OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_inode(CSYNC *ctx, uint64_t inode); -OCSYNC_EXPORT csync_file_stat_t *csync_statedb_get_stat_by_file_id(CSYNC *ctx, const char *file_id); +OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_file_id(CSYNC *ctx, const char *file_id); /** * @brief Query all files metadata inside and below a path. diff --git a/src/csync/csync_time.c b/src/csync/csync_time.c index 3092819a3..442263cee 100644 --- a/src/csync/csync_time.c +++ b/src/csync/csync_time.c @@ -29,7 +29,6 @@ #include #include "csync_time.h" -#include "vio/csync_vio.h" #ifndef _WIN32 #include diff --git a/src/csync/csync_time.h b/src/csync/csync_time.h index 55aa09841..14d355b32 100644 --- a/src/csync/csync_time.h +++ b/src/csync/csync_time.h @@ -27,8 +27,6 @@ extern "C" { #include -#include "csync_private.h" - int csync_gettime(struct timespec *tp); void csync_sleep(unsigned int msecs); diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 927290b1a..e62e3be29 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -164,11 +164,9 @@ static bool _csync_mtime_equal(time_t a, time_t b) static int _csync_detect_update(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, enum csync_ftw_type_e type) { uint64_t h = 0; - size_t len = 0; - size_t size = 0; const char *path = NULL; - csync_file_stat_t *st = NULL; - csync_file_stat_t *tmp = NULL; + std::unique_ptr st; + std::unique_ptr tmp; CSYNC_EXCLUDE_TYPE excluded; if ((file == NULL) || (fs == NULL)) { @@ -186,8 +184,6 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, path += strlen(ctx->local.uri) + 1; } - len = strlen(path); - if (type == CSYNC_FTW_TYPE_SKIP) { excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED; } else { @@ -225,15 +221,9 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, if( h == 0 ) { return -1; } - size = sizeof(csync_file_stat_t) + len + 1; - st = static_cast(c_malloc(size)); + st.reset(new csync_file_stat_t); - /* Set instruction by default to none */ - st->instruction = CSYNC_INSTRUCTION_NONE; - st->etag = NULL; - st->child_modified = 0; - st->has_ignored_files = 0; if (type == CSYNC_FTW_TYPE_FILE ) { if (fs->mtime == 0) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path); @@ -258,8 +248,6 @@ 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); ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } @@ -270,14 +258,14 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 ", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d", ((int64_t) fs->mtime), ((int64_t) tmp->modtime), - fs->etag, tmp->etag, (uint64_t) fs->inode, (uint64_t) tmp->inode, - (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm, tmp->has_ignored_files ); + fs->etag, tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, + (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm.constData(), tmp->has_ignored_files ); if (ctx->current == REMOTE_REPLICA && !c_streq(fs->etag, tmp->etag)) { st->instruction = CSYNC_INSTRUCTION_EVAL; // Preserve the EVAL flag later on if the type has changed. - if (_csync_filetype_different(tmp, fs)) { - st->child_modified = 1; + if (_csync_filetype_different(tmp.get(), fs)) { + st->child_modified = true; } goto out; @@ -290,15 +278,15 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, // Checksum comparison at this stage is only enabled for .eml files, // check #4754 #4755 bool isEmlFile = csync_fnmatch("*.eml", file, FNM_CASEFOLD) == 0; - if (isEmlFile && fs->size == tmp->size && tmp->checksumHeader) { + if (isEmlFile && fs->size == tmp->size && !tmp->checksumHeader.isEmpty()) { if (ctx->callbacks.checksum_hook) { st->checksumHeader = ctx->callbacks.checksum_hook( file, tmp->checksumHeader, ctx->callbacks.checksum_userdata); } bool checksumIdentical = false; - if (st->checksumHeader) { - checksumIdentical = strncmp(st->checksumHeader, tmp->checksumHeader, 1000) == 0; + if (!st->checksumHeader.isEmpty()) { + checksumIdentical = st->checksumHeader == tmp->checksumHeader; } if (checksumIdentical) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", path); @@ -308,8 +296,8 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } // Preserve the EVAL flag later on if the type has changed. - if (_csync_filetype_different(tmp, fs)) { - st->child_modified = 1; + if (_csync_filetype_different(tmp.get(), fs)) { + st->child_modified = true; } st->instruction = CSYNC_INSTRUCTION_EVAL; @@ -344,9 +332,6 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } else { 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); - /* check if it's a file and has been renamed */ if (ctx->current == LOCAL_REPLICA) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); @@ -354,7 +339,6 @@ 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); ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } @@ -383,14 +367,14 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, // Verify the checksum where possible - if (isRename && tmp->checksumHeader && ctx->callbacks.checksum_hook + if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook && fs->type == CSYNC_VIO_FILE_TYPE_REGULAR) { st->checksumHeader = ctx->callbacks.checksum_hook( file, tmp->checksumHeader, ctx->callbacks.checksum_userdata); - if (st->checksumHeader) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", path, st->checksumHeader, tmp->checksumHeader); - isRename = strncmp(st->checksumHeader, tmp->checksumHeader, 1000) == 0; + if (!st->checksumHeader.isEmpty()) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", path, st->checksumHeader.constData(), tmp->checksumHeader.constData()); + isRename = st->checksumHeader == tmp->checksumHeader; } } @@ -409,17 +393,16 @@ 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); ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } if(tmp ) { /* tmp existing at all */ - if ( _csync_filetype_different(tmp, fs)) { + if ( _csync_filetype_different(tmp.get(), fs)) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); st->instruction = CSYNC_INSTRUCTION_NEW; goto out; } - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s %s", tmp->path, file); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s %s", tmp->path.constData(), file); st->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) { csync_rename_record(ctx, tmp->path, path); @@ -438,7 +421,6 @@ 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, fs->remotePerm)) { - csync_file_stat_free(st); return 1; } } @@ -448,7 +430,6 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } } else { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Unable to open statedb" ); - csync_file_stat_free(st); ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } @@ -481,54 +462,49 @@ out: && st->instruction != CSYNC_INSTRUCTION_IGNORE && st->instruction != CSYNC_INSTRUCTION_UPDATE_METADATA && type != CSYNC_FTW_TYPE_DIR) { - st->child_modified = 1; + st->child_modified = true; } - ctx->current_fs = st; + ctx->current_fs = st.get(); - csync_file_stat_free(tmp); st->inode = fs->inode; - st->mode = fs->mode; st->size = fs->size; st->modtime = fs->mtime; st->type = type; st->etag = NULL; if( fs->etag ) { - SAFE_FREE(st->etag); - st->etag = c_strdup(fs->etag); + st->etag = fs->etag; } - csync_vio_set_file_id(st->file_id, fs->file_id); + st->file_id = fs->file_id; if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL) { - SAFE_FREE(st->directDownloadUrl); - st->directDownloadUrl = c_strdup(fs->directDownloadUrl); + st->directDownloadUrl = fs->directDownloadUrl; } if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES) { - SAFE_FREE(st->directDownloadCookies); - st->directDownloadCookies = c_strdup(fs->directDownloadCookies); + st->directDownloadCookies = fs->directDownloadCookies; } if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_PERM) { - strncpy(st->remotePerm, fs->remotePerm, REMOTE_PERM_BUF_SIZE); + st->remotePerm = fs->remotePerm; } // For the remote: propagate the discovered checksum if (fs->checksumHeader && ctx->current == REMOTE_REPLICA) { - st->checksumHeader = c_strdup(fs->checksumHeader); + st->checksumHeader = fs->checksumHeader; } st->phash = h; - st->pathlen = len; - memcpy(st->path, (len ? path : ""), len + 1); + st->path = path; + + CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", st->path.constData(), + csync_instruction_str(st->instruction)); switch (ctx->current) { case LOCAL_REPLICA: - if (c_rbtree_insert(ctx->local.tree, (void *) st) < 0) { - csync_file_stat_free(st); + if (c_rbtree_insert(ctx->local.tree, (void *) st.release()) < 0) { 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); + if (c_rbtree_insert(ctx->remote.tree, (void *) st.release()) < 0) { ctx->status_code = CSYNC_STATUS_TREE_ERROR; return -1; } @@ -536,8 +512,6 @@ out: default: break; } - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", st->path, - csync_instruction_str(st->instruction)); return 0; } @@ -546,7 +520,7 @@ int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, int flag) { int rc = -1; enum csync_ftw_type_e type = CSYNC_FTW_TYPE_SKIP; - csync_file_stat_t *st = NULL; + std::unique_ptr st; uint64_t h; if (ctx->abort) { @@ -587,8 +561,7 @@ int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, if( !st ) { return 0; } - csync_file_stat_free(st); - st = NULL; + st.reset(); type = CSYNC_FTW_TYPE_SKIP; break; diff --git a/src/libsync/checksums.cpp b/src/libsync/checksums.cpp index eaf36379c..448b5d477 100644 --- a/src/libsync/checksums.cpp +++ b/src/libsync/checksums.cpp @@ -230,23 +230,19 @@ CSyncChecksumHook::CSyncChecksumHook() { } -const char *CSyncChecksumHook::hook(const char *path, const char *otherChecksumHeader, void * /*this_obj*/) +QByteArray CSyncChecksumHook::hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void * /*this_obj*/) { QByteArray type = parseChecksumHeaderType(QByteArray(otherChecksumHeader)); if (type.isEmpty()) return NULL; - QByteArray checksum = ComputeChecksum::computeNow(path, type); + QByteArray checksum = ComputeChecksum::computeNow(QString::fromUtf8(path), type); if (checksum.isNull()) { qCWarning(lcChecksums) << "Failed to compute checksum" << type << "for" << path; return NULL; } - QByteArray checksumHeader = makeChecksumHeader(type, checksum); - char *result = (char *)malloc(checksumHeader.size() + 1); - memcpy(result, checksumHeader.constData(), checksumHeader.size()); - result[checksumHeader.size()] = 0; - return result; + return makeChecksumHeader(type, checksum); } } diff --git a/src/libsync/checksums.h b/src/libsync/checksums.h index a7259f7ec..3c31c8c03 100644 --- a/src/libsync/checksums.h +++ b/src/libsync/checksums.h @@ -131,6 +131,6 @@ public: * to be set as userdata. * The return value will be owned by csync. */ - static const char *hook(const char *path, const char *otherChecksumHeader, void *this_obj); + static QByteArray hook(const QByteArray &path, const QByteArray &otherChecksumHeader, void *this_obj); }; } diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index d4afcc57c..6fff8e538 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -437,7 +437,7 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) * files are often read from database rather than being pulled from remote. */ if (remote) { - item->_serverHasIgnoredFiles = (file->has_ignored_files > 0); + item->_serverHasIgnoredFiles = file->has_ignored_files; } // Sometimes the discovery computes checksums for local files diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp index 843900ec2..d856d94ab 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -155,8 +155,8 @@ static void check_csync_statedb_insert_metadata(void **state) assert_int_equal(rc, 0); for (i = 0; i < 100; i++) { - st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + 30 ); - snprintf(st->path, 29, "file_%d" , i ); + st = new csync_file_stat_t; + st->path = QString("file_%1").arg(i).toUtf8(); st->phash = i; rc = c_rbtree_insert(csync->local.tree, (void *) st); @@ -174,8 +174,8 @@ static void check_csync_statedb_write(void **state) int i, rc; for (i = 0; i < 100; i++) { - st = (csync_file_stat_t*)c_malloc(sizeof(csync_file_stat_t) + 30); - snprintf(st->path, 29, "file_%d" , i ); + st = new csync_file_stat_t; + st->path = QString("file_%1").arg(i).toUtf8(); st->phash = i; rc = c_rbtree_insert(csync->local.tree, (void *) st); @@ -190,22 +190,20 @@ static void check_csync_statedb_write(void **state) static void check_csync_statedb_get_stat_by_hash_not_found(void **state) { CSYNC *csync = (CSYNC*)*state; - csync_file_stat_t *tmp; + std::unique_ptr tmp; tmp = csync_statedb_get_stat_by_hash(csync, (uint64_t) 666); - assert_null(tmp); - - free(tmp); + assert_null(tmp.get()); } static void check_csync_statedb_get_stat_by_inode_not_found(void **state) { CSYNC *csync = (CSYNC*)*state; - csync_file_stat_t *tmp; + std::unique_ptr tmp; tmp = csync_statedb_get_stat_by_inode(csync, (ino_t) 666); - assert_null(tmp); + assert_null(tmp.get()); } int torture_run_tests(void) diff --git a/test/csync/std_tests/check_std_c_time.c b/test/csync/std_tests/check_std_c_time.c index 56fc6ad40..52c5fd808 100644 --- a/test/csync/std_tests/check_std_c_time.c +++ b/test/csync/std_tests/check_std_c_time.c @@ -23,6 +23,7 @@ #include "csync_time.h" #include "std/c_time.h" +#include static void check_c_tspecdiff(void **state) { diff --git a/test/testcsyncsqlite.cpp b/test/testcsyncsqlite.cpp index 09dc1528a..fb2767816 100644 --- a/test/testcsyncsqlite.cpp +++ b/test/testcsyncsqlite.cpp @@ -29,13 +29,11 @@ private slots: } void testFullResult() { - csync_file_stat_t *st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), 2081025720555645157 ); - QVERIFY(st); + std::unique_ptr st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), 2081025720555645157 ); + QVERIFY(st.get()); QCOMPARE( QString::number(st->phash), QString::number(2081025720555645157) ); - QCOMPARE( QString::number(st->pathlen), QString::number(13)); QCOMPARE( QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu") ); QCOMPARE( QString::number(st->inode), QString::number(1709554)); - QCOMPARE( QString::number(st->mode), QString::number(0)); QCOMPARE( QString::number(st->modtime), QString::number(1384415006)); QCOMPARE( QString::number(st->type), QString::number(2)); QCOMPARE( QString::fromUtf8(st->etag), QLatin1String("52847f2090665")); @@ -44,39 +42,33 @@ private slots: } void testByHash() { - csync_file_stat_t *st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), -7147279406142960289); - QVERIFY(st); + std::unique_ptr st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), -7147279406142960289); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1")); - csync_file_stat_free(st); st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), 5426481156826978940); - QVERIFY(st); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1/c2")); - csync_file_stat_free(st); } void testByInode() { - csync_file_stat_t *st = csync_statedb_get_stat_by_inode((CSYNC*)(&_ctx), 1709555); - QVERIFY(st); + std::unique_ptr st = csync_statedb_get_stat_by_inode((CSYNC*)(&_ctx), 1709555); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu/zuzuzu")); - csync_file_stat_free(st); st = csync_statedb_get_stat_by_inode((CSYNC*)(&_ctx), 1706571); - QVERIFY(st); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared/for_kf/a2")); - csync_file_stat_free(st); } void testByFileId() { - csync_file_stat_t *st = csync_statedb_get_stat_by_file_id((CSYNC*)(&_ctx), "00000556525d5af3d9625"); - QVERIFY(st); + std::unique_ptr st = csync_statedb_get_stat_by_file_id((CSYNC*)(&_ctx), "00000556525d5af3d9625"); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu")); - csync_file_stat_free(st); st = csync_statedb_get_stat_by_file_id((CSYNC*)(&_ctx), "-0000001525d5af3d9625"); - QVERIFY(st); + QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared")); - csync_file_stat_free(st); } void cleanupTestCase() { From 6dd043659c9eef7f154c78301ce16d99b92155ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Tue, 5 Sep 2017 18:20:03 +0200 Subject: [PATCH 013/166] Update ChangeLog --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 8ba22d5df..8826cc8e3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -49,7 +49,7 @@ version 2.4.0 (2017-0X-XX) * OpenSSL: Don't require directly, only via Qt * Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) -version 2.3.3 (2017-07-XX) +version 2.3.3 (2017-08-29) * Chunking NG: Don't use old chunking on new DAV endpoint (#5855) * Selective Sync: Skip excluded folders when reading DB, don't let them show errors (#5772) * Settings: Make window bigger so Qt version is always visible (#5760) From f41435568079f1a94353e50159f21b076836d052 Mon Sep 17 00:00:00 2001 From: Matthew Setter Date: Mon, 4 Sep 2017 14:55:12 +0200 Subject: [PATCH 014/166] Fix broken images in FAQ This relates to https://github.com/owncloud/documentation/issues/3354. --- doc/faq.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/faq.rst b/doc/faq.rst index 17b92be19..7b9c85344 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -29,18 +29,21 @@ Specifically, you have to: 1. Remove the existing connection which syncs to the wrong directory 2. Add a new connection which syncs to the desired directory -image:: images/setup/ownCloud-remove_existing_connection.png +.. image:: images/setup/ownCloud-remove_existing_connection.png + :alt: Remove an existing connection To do so, in the client UI, which you can see above, click the "**Account**" drop-down menu and then click "Remove". This will display a "**Confirm Account Removal**" dialog window. -image:: images/setup/ownCloud-remove_existing_connection_confirmation_dialog.png +.. image:: images/setup/ownCloud-remove_existing_connection_confirmation_dialog.png + :alt: Remove existing connection confirmation dialog If you're sure, click "**Remove connection**". Then, click the Account drop-down menu again, and this time click "**Add new**". -image:: images/setup/ownCloud-replacement_connection_wizard.png +.. image:: images/setup/ownCloud-replacement_connection_wizard.png + :alt: Replacement connection wizard This opens the ownCloud Connection Wizard, which you can see above, *but* with an extra option. This option provides the ability to either: keep the existing data (synced by the previous connection) or to start a clean sync (erasing the existing data). From ab8061a57fe7f5888d9d4211eb9fb7fb923226ae Mon Sep 17 00:00:00 2001 From: Matthew Setter Date: Mon, 4 Sep 2017 15:01:29 +0200 Subject: [PATCH 015/166] Fix link to download the ownCloud client This was requested in https://github.com/owncloud/documentation/issues/3354. --- doc/installing.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/installing.rst b/doc/installing.rst index e04c89665..727c451f4 100644 --- a/doc/installing.rst +++ b/doc/installing.rst @@ -3,8 +3,7 @@ Installing the Desktop Synchronization Client ============================================= You can download the latest version of the ownCloud Desktop Synchronization -Client from the `ownCloud download page -`_. +Client from the `ownCloud download page `_. There are clients for Linux, Mac OS X, and Microsoft Windows. Installation on Mac OS X and Windows is the same as for any software From e8f7adc7cacd4f55e26b2dd14464654e82204307 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Tue, 5 Sep 2017 16:12:32 +0200 Subject: [PATCH 016/166] Replace csync_vio_file_stat_t with csync_file_stat_t Also move csync_normalize_etag to common/utility since we don't need the char* function anymore. Remove the single space file_stat->remotePerm codepath since this won't be used in csync anymore since 8de3bda0b1f900ab183698454740fd979f7ab9d7. Issue #1817 --- src/common/utility.cpp | 20 ++ src/common/utility.h | 2 + src/csync/CMakeLists.txt | 1 - src/csync/csync.h | 94 +------- src/csync/csync_exclude.cpp | 1 + src/csync/csync_misc.cpp | 34 --- src/csync/csync_statedb.cpp | 1 + src/csync/csync_update.cpp | 205 ++++++------------ src/csync/csync_update.h | 5 +- src/csync/std/c_path.c | 1 + src/csync/std/c_string.h | 71 ------ src/csync/std/c_time.c | 1 + src/csync/std/c_utf8.cpp | 22 +- src/csync/std/c_utf8.h | 122 +++++++++++ src/csync/vio/csync_vio.cpp | 4 +- src/csync/vio/csync_vio.h | 4 +- src/csync/vio/csync_vio_file_stat.cpp | 85 -------- src/csync/vio/csync_vio_local.h | 4 +- src/csync/vio/csync_vio_local_unix.cpp | 90 ++------ src/csync/vio/csync_vio_local_win.cpp | 68 ++---- src/libsync/discoveryphase.cpp | 95 +++----- src/libsync/discoveryphase.h | 47 +--- src/libsync/filesystem.cpp | 18 +- src/libsync/syncengine.cpp | 3 - test/csync/CMakeLists.txt | 1 - test/csync/csync_tests/check_csync_log.cpp | 1 + test/csync/csync_tests/check_csync_misc.cpp | 9 +- test/csync/csync_tests/check_csync_update.cpp | 80 ++----- test/csync/encoding_tests/check_encoding.cpp | 13 +- test/csync/vio_tests/check_vio.cpp | 6 +- test/csync/vio_tests/check_vio_ext.cpp | 19 +- test/csync/vio_tests/check_vio_file_stat.cpp | 45 ---- 32 files changed, 362 insertions(+), 810 deletions(-) create mode 100644 src/csync/std/c_utf8.h delete mode 100644 src/csync/vio/csync_vio_file_stat.cpp delete mode 100644 test/csync/vio_tests/check_vio_file_stat.cpp diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 8bc2f2d35..f55fbea4e 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -380,6 +380,26 @@ QString Utility::fileNameForGuiUse(const QString &fName) return fName; } +QByteArray Utility::normalizeEtag(QByteArray etag) +{ + /* strip "XXXX-gzip" */ + if(etag.startsWith('"') && etag.endsWith("-gzip\"")) { + etag.chop(6); + etag.remove(0, 1); + } + /* strip trailing -gzip */ + if(etag.endsWith("-gzip")) { + etag.chop(5); + } + /* strip normal quotes */ + if (etag.startsWith('"') && etag.endsWith('"')) { + etag.chop(1); + etag.remove(0, 1); + } + etag.squeeze(); + return etag; +} + bool Utility::hasDarkSystray() { return hasDarkSystray_private(); diff --git a/src/common/utility.h b/src/common/utility.h index c1063a45c..d32a7bb3f 100644 --- a/src/common/utility.h +++ b/src/common/utility.h @@ -131,6 +131,8 @@ namespace Utility { OCSYNC_EXPORT QString fileNameForGuiUse(const QString &fName); + OCSYNC_EXPORT QByteArray normalizeEtag(QByteArray etag); + /** * @brief timeAgoInWords - human readable time span * diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index b9c772507..7ab4f7326 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -77,7 +77,6 @@ set(csync_SRCS csync_rename.cpp vio/csync_vio.cpp - vio/csync_vio_file_stat.cpp ) if (WIN32) diff --git a/src/csync/csync.h b/src/csync/csync.h index 4eea748ef..1cf16f937 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -39,6 +39,7 @@ #include #include #include +#include #include enum csync_status_codes_e { @@ -54,7 +55,6 @@ enum csync_status_codes_e { CSYNC_STATUS_TIMESKEW, /* OBSOLETE */ CSYNC_STATUS_FILESYSTEM_UNKNOWN, /* UNUSED */ CSYNC_STATUS_TREE_ERROR, /* csync trees could not be created */ - CSYNC_STATUS_MEMORY_ERROR, /* not enough memory problem */ CSYNC_STATUS_PARAM_ERROR, /* parameter is zero where not expected */ CSYNC_STATUS_UPDATE_ERROR, /* general update or discovery error */ CSYNC_STATUS_RECONCILE_ERROR, /* general reconcile error */ @@ -150,82 +150,6 @@ enum csync_ftw_type_e { // currently specified at https://github.com/owncloud/core/issues/8322 are 9 to 10 #define REMOTE_PERM_BUF_SIZE 15 -typedef struct csync_vio_file_stat_s csync_vio_file_stat_t; - -enum csync_vio_file_flags_e { - CSYNC_VIO_FILE_FLAGS_NONE = 0, - CSYNC_VIO_FILE_FLAGS_SYMLINK = 1 << 0, - CSYNC_VIO_FILE_FLAGS_HIDDEN = 1 << 1 -}; - -enum csync_vio_file_type_e { - CSYNC_VIO_FILE_TYPE_UNKNOWN, - CSYNC_VIO_FILE_TYPE_REGULAR, - CSYNC_VIO_FILE_TYPE_DIRECTORY, - CSYNC_VIO_FILE_TYPE_FIFO, - CSYNC_VIO_FILE_TYPE_SOCKET, - CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE, - CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE, - CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK -}; - -enum csync_vio_file_stat_fields_e { - CSYNC_VIO_FILE_STAT_FIELDS_NONE = 0, - CSYNC_VIO_FILE_STAT_FIELDS_TYPE = 1 << 0, - CSYNC_VIO_FILE_STAT_FIELDS_MODE = 1 << 1, // local POSIX mode - CSYNC_VIO_FILE_STAT_FIELDS_FLAGS = 1 << 2, -// CSYNC_VIO_FILE_STAT_FIELDS_DEVICE = 1 << 3, - CSYNC_VIO_FILE_STAT_FIELDS_INODE = 1 << 4, -// CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT = 1 << 5, - CSYNC_VIO_FILE_STAT_FIELDS_SIZE = 1 << 6, -// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_COUNT = 1 << 7, /* will be removed */ -// CSYNC_VIO_FILE_STAT_FIELDS_BLOCK_SIZE = 1 << 8, /* will be removed */ - CSYNC_VIO_FILE_STAT_FIELDS_ATIME = 1 << 9, - CSYNC_VIO_FILE_STAT_FIELDS_MTIME = 1 << 10, - CSYNC_VIO_FILE_STAT_FIELDS_CTIME = 1 << 11, -// CSYNC_VIO_FILE_STAT_FIELDS_SYMLINK_NAME = 1 << 12, -// CSYNC_VIO_FILE_STAT_FIELDS_CHECKSUM = 1 << 13, -// CSYNC_VIO_FILE_STAT_FIELDS_ACL = 1 << 14, -// CSYNC_VIO_FILE_STAT_FIELDS_UID = 1 << 15, -// CSYNC_VIO_FILE_STAT_FIELDS_GID = 1 << 16, - CSYNC_VIO_FILE_STAT_FIELDS_ETAG = 1 << 17, - CSYNC_VIO_FILE_STAT_FIELDS_FILE_ID = 1 << 18, - CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL = 1 << 19, - CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES = 1 << 20, - CSYNC_VIO_FILE_STAT_FIELDS_PERM = 1 << 21 // remote oC perm - -}; - - -struct csync_vio_file_stat_s { - char *name; - char *etag; // FIXME: Should this be inlined like file_id and perm? - char file_id[FILE_ID_BUF_SIZE+1]; - char *directDownloadUrl; - char *directDownloadCookies; - char remotePerm[REMOTE_PERM_BUF_SIZE+1]; - - time_t atime; - time_t mtime; - time_t ctime; - int64_t size; - - mode_t mode; - - uint64_t inode; - - int fields; // actually enum csync_vio_file_stat_fields_e fields; - enum csync_vio_file_type_e type; - - int flags; - - char *original_name; // only set if locale conversion fails - - // For remote file stats: the highest quality checksum the server provided - // in the "SHA1:324315da2143" form. - char *checksumHeader; -}; - typedef struct csync_file_stat_s csync_file_stat_t; struct csync_file_stat_s { @@ -236,6 +160,7 @@ struct csync_file_stat_s { enum csync_ftw_type_e type : 4; bool child_modified : 1; bool has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */ + bool is_hidden : 1; // Not saved in the DB, only used during discovery for local files. QByteArray path; QByteArray rename_path; @@ -244,6 +169,7 @@ struct csync_file_stat_s { QByteArray directDownloadUrl; QByteArray directDownloadCookies; QByteArray remotePerm; + QByteArray original_path; // only set if locale conversion fails // In the local tree, this can hold a checksum and its type if it is // computed during discovery for some reason. @@ -263,21 +189,12 @@ struct csync_file_stat_s { , type(CSYNC_FTW_TYPE_SKIP) , child_modified(false) , has_ignored_files(false) + , is_hidden(false) , error_status(CSYNC_STATUS_OK) , instruction(CSYNC_INSTRUCTION_NONE) { } }; -csync_vio_file_stat_t OCSYNC_EXPORT *csync_vio_file_stat_new(void); -csync_vio_file_stat_t OCSYNC_EXPORT *csync_vio_file_stat_copy(csync_vio_file_stat_t *file_stat); - -void OCSYNC_EXPORT csync_vio_file_stat_destroy(csync_vio_file_stat_t *fstat); - -void OCSYNC_EXPORT csync_vio_file_stat_set_file_id( csync_vio_file_stat_t* dst, const char* src ); - -void OCSYNC_EXPORT csync_vio_set_file_id(char* dst, const char *src ); - - /** * CSync File Traversal structure. * @@ -338,7 +255,7 @@ typedef void (*csync_update_callback) (bool local, typedef void csync_vio_handle_t; typedef csync_vio_handle_t* (*csync_vio_opendir_hook) (const char *url, void *userdata); -typedef csync_vio_file_stat_t* (*csync_vio_readdir_hook) (csync_vio_handle_t *dhhandle, +typedef std::unique_ptr (*csync_vio_readdir_hook) (csync_vio_handle_t *dhhandle, void *userdata); typedef void (*csync_vio_closedir_hook) (csync_vio_handle_t *dhhandle, void *userdata); @@ -539,7 +456,6 @@ void OCSYNC_EXPORT csync_resume(CSYNC *ctx); */ int OCSYNC_EXPORT csync_abort_requested(CSYNC *ctx); -char OCSYNC_EXPORT *csync_normalize_etag(const char *); time_t OCSYNC_EXPORT oc_httpdate_parse( const char *date ); /** diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 9ab187e71..7517ee218 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -31,6 +31,7 @@ #include "c_lib.h" #include "c_private.h" +#include "c_utf8.h" #include "csync_private.h" #include "csync_exclude.h" diff --git a/src/csync/csync_misc.cpp b/src/csync/csync_misc.cpp index cf719439f..bb8e98c8a 100644 --- a/src/csync/csync_misc.cpp +++ b/src/csync/csync_misc.cpp @@ -170,37 +170,3 @@ CSYNC_STATUS csync_errno_to_status(int error, CSYNC_STATUS default_status) return status; } - -/* Remove possible quotes, and also the -gzip at the end - * Remove "-gzip" at the end (cf. https://github.comowncloud/client/issues/1195) - * The caller must take ownership of the resulting string. - */ -char *csync_normalize_etag(const char *etag) -{ - int len = 0; - char *buf = NULL; - if (!etag) - return NULL; - - len = strlen(etag); - /* strip "XXXX-gzip" */ - if(len >= 7 && etag[0] == '"' && c_streq(etag + len - 6, "-gzip\"")) { - etag++; - len -= 7; - } - /* strip leading -gzip */ - if(len >= 5 && c_streq(etag + len - 5, "-gzip")) { - len -= 5; - } - /* strip normal quotes */ - if (etag[0] == '"' && etag[len-1] == '"') { - etag++; - len -= 2; - } - - buf = (char*)c_malloc( len+1 ); - strncpy( buf, etag, len ); - buf[len] = '\0'; - return buf; -} - diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 4c4eb9828..523767dc4 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -42,6 +42,7 @@ #include "c_string.h" #include "c_jhash.h" +#include "c_utf8.h" #include "csync_time.h" #define CSYNC_LOG_CATEGORY_NAME "csync.statedb" diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index e62e3be29..fab7acd4a 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -96,43 +96,6 @@ static bool _last_db_return_error(CSYNC* ctx) { return ctx->statedb.lastReturnValue != SQLITE_OK && ctx->statedb.lastReturnValue != SQLITE_DONE && ctx->statedb.lastReturnValue != SQLITE_ROW; } -/* - * This static method is needed because the type members of the two structs use - * different enum values. A direct comparion is not neccessarily correct. - * - * tmp is csync_file_stat_t - * fs is csync_vio_file_stat_t with this vio type: - * enum csync_vio_file_type_e { - * CSYNC_VIO_FILE_TYPE_UNKNOWN, - * CSYNC_VIO_FILE_TYPE_REGULAR, - * CSYNC_VIO_FILE_TYPE_DIRECTORY, - * CSYNC_VIO_FILE_TYPE_FIFO, - * CSYNC_VIO_FILE_TYPE_SOCKET, - * CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE, - * CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE, - * CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK - * }; - * - * csync_file_stat_t can be: - * CSYNC_FTW_TYPE_SKIP, CSYNC_FTW_TYPE_FILE - * CSYNC_FTW_TYPE_DIR, CSYNC_FTW_TYPE_SLINK - */ -static bool _csync_filetype_different( const csync_file_stat_t *tmp, const csync_vio_file_stat_t *fs) -{ - if( !(tmp && fs)) return false; - - if( tmp->type == CSYNC_FTW_TYPE_SKIP ) return true; - - if( tmp->type == CSYNC_FTW_TYPE_DIR && fs->type != CSYNC_VIO_FILE_TYPE_DIRECTORY ) - return true; - if( tmp->type == CSYNC_FTW_TYPE_FILE && fs->type != CSYNC_VIO_FILE_TYPE_REGULAR ) - return true; - if( tmp->type == CSYNC_FTW_TYPE_SLINK && fs->type != CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK ) - return true; - - return false; // both are NOT different. -} - /* Return true if two mtime are considered equal * We consider mtime that are one hour difference to be equal if they are one hour appart * because on some system (FAT) the date is changing when the daylight saving is changing */ @@ -162,7 +125,7 @@ static bool _csync_mtime_equal(time_t a, time_t b) * See doc/dev/sync-algorithm.md for an overview. */ static int _csync_detect_update(CSYNC *ctx, const char *file, - const csync_vio_file_stat_t *fs, enum csync_ftw_type_e type) { + const csync_file_stat_t *fs, enum csync_ftw_type_e type) { uint64_t h = 0; const char *path = NULL; std::unique_ptr st; @@ -196,7 +159,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, * because it's a hidden file that should not be synced. * This code should probably be in csync_exclude, but it does not have the fs parameter. * Keep it here for now */ - if (ctx->ignore_hidden_files && (fs->flags & CSYNC_VIO_FILE_FLAGS_HIDDEN)) { + if (ctx->ignore_hidden_files && (fs->is_hidden)) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path); excluded = CSYNC_FILE_EXCLUDE_HIDDEN; } @@ -225,7 +188,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, st.reset(new csync_file_stat_t); if (type == CSYNC_FTW_TYPE_FILE ) { - if (fs->mtime == 0) { + if (fs->modtime == 0) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path); } } @@ -257,21 +220,21 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 ", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d", - ((int64_t) fs->mtime), ((int64_t) tmp->modtime), - fs->etag, tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, - (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm, tmp->remotePerm.constData(), tmp->has_ignored_files ); - if (ctx->current == REMOTE_REPLICA && !c_streq(fs->etag, tmp->etag)) { + ((int64_t) fs->modtime), ((int64_t) tmp->modtime), + fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, + (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm.constData(), tmp->remotePerm.constData(), tmp->has_ignored_files ); + if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { st->instruction = CSYNC_INSTRUCTION_EVAL; // Preserve the EVAL flag later on if the type has changed. - if (_csync_filetype_different(tmp.get(), fs)) { + if (tmp->type != fs->type) { st->child_modified = true; } goto out; } if (ctx->current == LOCAL_REPLICA && - (!_csync_mtime_equal(fs->mtime, tmp->modtime) + (!_csync_mtime_equal(fs->modtime, tmp->modtime) // zero size in statedb can happen during migration || (tmp->size != 0 && fs->size != tmp->size))) { @@ -296,15 +259,15 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } // Preserve the EVAL flag later on if the type has changed. - if (_csync_filetype_different(tmp.get(), fs)) { + if (tmp->type != fs->type) { st->child_modified = true; } st->instruction = CSYNC_INSTRUCTION_EVAL; goto out; } - bool metadata_differ = (ctx->current == REMOTE_REPLICA && (!c_streq(fs->file_id, tmp->file_id) - || !c_streq(fs->remotePerm, tmp->remotePerm))) + bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != tmp->file_id + || fs->remotePerm != tmp->remotePerm)) || (ctx->current == LOCAL_REPLICA && fs->inode != tmp->inode); if (type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && !metadata_differ && ctx->read_remote_from_db) { @@ -330,8 +293,6 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, st->instruction = CSYNC_INSTRUCTION_NONE; } } else { - enum csync_vio_file_type_e tmp_vio_type = CSYNC_VIO_FILE_TYPE_UNKNOWN; - /* check if it's a file and has been renamed */ if (ctx->current == LOCAL_REPLICA) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); @@ -343,23 +304,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, return -1; } - /* translate the file type between the two stat types csync has. */ - if( tmp && tmp->type == CSYNC_FTW_TYPE_FILE ) { - tmp_vio_type = CSYNC_VIO_FILE_TYPE_REGULAR; - } else if( tmp && tmp->type == CSYNC_FTW_TYPE_DIR) { - tmp_vio_type = CSYNC_VIO_FILE_TYPE_DIRECTORY; - } else if( tmp && tmp->type == CSYNC_FTW_TYPE_SLINK ) { - tmp_vio_type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK; - } else { - tmp_vio_type = CSYNC_VIO_FILE_TYPE_UNKNOWN; - } - // Default to NEW unless we're sure it's a rename. st->instruction = CSYNC_INSTRUCTION_NEW; bool isRename = - tmp && tmp->inode == fs->inode && tmp_vio_type == fs->type - && (tmp->modtime == fs->mtime || fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) + tmp && tmp->inode == fs->inode && tmp->type == fs->type + && (tmp->modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) #ifdef NO_RENAME_EXTENSION && _csync_sameextension(tmp->path, path) #endif @@ -368,7 +318,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, // Verify the checksum where possible if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook - && fs->type == CSYNC_VIO_FILE_TYPE_REGULAR) { + && fs->type == CSYNC_FTW_TYPE_FILE) { st->checksumHeader = ctx->callbacks.checksum_hook( file, tmp->checksumHeader, ctx->callbacks.checksum_userdata); @@ -382,7 +332,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); /* inode found so the file has been renamed */ st->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; - if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) { + if (fs->type == CSYNC_FTW_TYPE_DIR) { csync_rename_record(ctx, tmp->path, path); } } @@ -397,17 +347,17 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, return -1; } if(tmp ) { /* tmp existing at all */ - if ( _csync_filetype_different(tmp.get(), fs)) { + if (tmp->type != fs->type) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); st->instruction = CSYNC_INSTRUCTION_NEW; goto out; } CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s %s", tmp->path.constData(), file); st->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; - if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) { + if (fs->type == CSYNC_FTW_TYPE_DIR) { csync_rename_record(ctx, tmp->path, path); } else { - if( !c_streq(tmp->etag, fs->etag) ) { + if( tmp->etag != fs->etag ) { /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ETags are different!"); */ /* File with different etag, don't do a rename, but download the file again */ st->instruction = CSYNC_INSTRUCTION_NEW; @@ -419,7 +369,7 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, /* file not found in statedb */ st->instruction = CSYNC_INSTRUCTION_NEW; - if (fs->type == CSYNC_VIO_FILE_TYPE_DIRECTORY && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) { + if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) { if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, path, fs->remotePerm)) { return 1; } @@ -468,25 +418,17 @@ out: st->inode = fs->inode; st->size = fs->size; - st->modtime = fs->mtime; + st->modtime = fs->modtime; st->type = type; - st->etag = NULL; - if( fs->etag ) { - st->etag = fs->etag; - } + st->is_hidden = fs->is_hidden; + st->etag = fs->etag; st->file_id = fs->file_id; - if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL) { - st->directDownloadUrl = fs->directDownloadUrl; - } - if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES) { - st->directDownloadCookies = fs->directDownloadCookies; - } - if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_PERM) { - st->remotePerm = fs->remotePerm; - } + st->directDownloadUrl = fs->directDownloadUrl; + st->directDownloadCookies = fs->directDownloadCookies; + st->remotePerm = fs->remotePerm; // For the remote: propagate the discovered checksum - if (fs->checksumHeader && ctx->current == REMOTE_REPLICA) { + if (ctx->current == REMOTE_REPLICA) { st->checksumHeader = fs->checksumHeader; } @@ -516,7 +458,7 @@ out: return 0; } -int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, +int csync_walker(CSYNC *ctx, const char *file, const csync_file_stat_t *fs, int flag) { int rc = -1; enum csync_ftw_type_e type = CSYNC_FTW_TYPE_SKIP; @@ -532,11 +474,7 @@ int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, switch (flag) { case CSYNC_FTW_FLAG_FILE: if (ctx->current == REMOTE_REPLICA) { - if (fs->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=%" PRIu64 "]", file, fs->file_id, fs->size); - } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=UNKNOWN]", file, fs->file_id); - } + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=%" PRIu64 "]", file, fs->file_id.constData(), fs->size); } else { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [inode=%" PRIu64 " size=%" PRIu64 "]", file, fs->inode, fs->size); } @@ -544,7 +482,7 @@ int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, break; case CSYNC_FTW_FLAG_DIR: /* enter directory */ if (ctx->current == REMOTE_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [file_id=%s]", file, fs->file_id); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [file_id=%s]", file, fs->file_id.constData()); } else { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [inode=%" PRIu64 "]", file, fs->inode); } @@ -615,10 +553,10 @@ static bool mark_current_item_ignored( CSYNC *ctx, csync_file_stat_t *previous_f /* File tree walker */ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, unsigned int depth) { - char *filename = NULL; - char *d_name = NULL; + QByteArray filename; + QByteArray d_name; csync_vio_handle_t *dh = NULL; - csync_vio_file_stat_t *dirent = NULL; + std::unique_ptr dirent; csync_file_stat_t *previous_fs = NULL; int read_from_db = 0; int rc = 0; @@ -628,7 +566,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, if (!depth) { mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_INDIVIDUAL_TOO_DEEP); - goto done; + return 0; } read_from_db = ctx->remote.read_from_db; @@ -641,7 +579,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, ctx->status_code = CSYNC_STATUS_OPENDIR_ERROR; goto error; } - goto done; + return 0; } if ((dh = csync_vio_opendir(ctx, uri)) == NULL) { @@ -656,7 +594,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, if (errno == EACCES) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Permission denied."); if (mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_PERMISSION_DENIED)) { - goto done; + return 0; } } else if(errno == ENOENT) { asp = asprintf( &ctx->error_string, "%s", uri); @@ -669,7 +607,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, else if(errno == ERRNO_FORBIDDEN) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Directory access Forbidden (File Firewall?)"); if( mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_FORBIDDEN) ) { - goto done; + return 0; } /* if current_fs is not defined here, better throw an error */ } @@ -680,7 +618,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, else if(errno == ERRNO_STORAGE_UNAVAILABLE || errno == ERRNO_SERVICE_UNAVAILABLE) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Storage was not available!"); if( mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_STORAGE_UNAVAILABLE ) ) { - goto done; + return 0; } /* if current_fs is not defined here, better throw an error */ } else { @@ -690,47 +628,40 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, } while ((dirent = csync_vio_readdir(ctx, dh))) { - int flen; int flag; /* Conversion error */ - if (dirent->name == NULL && dirent->original_name) { + if (dirent->path.isEmpty() && !dirent->original_path.isEmpty()) { ctx->status_code = CSYNC_STATUS_INVALID_CHARACTERS; - ctx->error_string = dirent->original_name; // take ownership - dirent->original_name = NULL; + ctx->error_string = c_strdup(dirent->original_path); + dirent->original_path.clear(); goto error; } - d_name = dirent->name; - if (d_name == NULL) { + d_name = dirent->path; + if (d_name.isEmpty()) { ctx->status_code = CSYNC_STATUS_READDIR_ERROR; goto error; } /* skip "." and ".." */ - if ( (d_name[0] == '.' && d_name[1] == '\0') - || (d_name[0] == '.' && d_name[1] == '.' && d_name[2] == '\0')) { - csync_vio_file_stat_destroy(dirent); - dirent = NULL; + if ( d_name == "." || d_name == "..") { + dirent.reset(); continue; } if (uri[0] == '\0') { - filename = c_strdup(d_name); - flen = strlen(d_name); + filename = d_name; } else { - flen = asprintf(&filename, "%s/%s", uri, d_name); - } - if (flen < 0 || !filename) { - csync_vio_file_stat_destroy(dirent); - dirent = NULL; - ctx->status_code = CSYNC_STATUS_MEMORY_ERROR; - goto error; + /* For the local replica, dirent->path only contains the file name */ + filename = uri; + filename += '/'; + filename += d_name; } /* Only for the local replica we have to stat(), for the remote one we have all data already */ if (ctx->replica == LOCAL_REPLICA) { - res = csync_vio_stat(ctx, filename, dirent); + res = csync_vio_stat(ctx, filename, dirent.get()); } else { res = 0; } @@ -740,39 +671,32 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, * local stat function. */ if( d_name[0] == '.' ) { - if (strcmp(".sys.admin#recall#", d_name) != 0) { /* recall file shall not be ignored (#4420) */ - dirent->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN; + if (d_name == ".sys.admin#recall#") { /* recall file shall not be ignored (#4420) */ + dirent->is_hidden = true; } } + flag = CSYNC_FTW_FLAG_NSTAT; if( res == 0) { switch (dirent->type) { - case CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK: + case CSYNC_FTW_TYPE_SLINK: flag = CSYNC_FTW_FLAG_SLINK; break; - case CSYNC_VIO_FILE_TYPE_DIRECTORY: + case CSYNC_FTW_TYPE_DIR: flag = CSYNC_FTW_FLAG_DIR; break; - case CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE: - case CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE: - case CSYNC_VIO_FILE_TYPE_SOCKET: - flag = CSYNC_FTW_FLAG_SPEC; - break; - case CSYNC_VIO_FILE_TYPE_FIFO: - flag = CSYNC_FTW_FLAG_SPEC; - break; - default: + case CSYNC_FTW_TYPE_FILE: flag = CSYNC_FTW_FLAG_FILE; break; + default: + break; }; - } else { - flag = CSYNC_FTW_FLAG_NSTAT; } previous_fs = ctx->current_fs; /* Call walker function for each file */ - rc = fn(ctx, filename, dirent, flag); + rc = fn(ctx, filename, dirent.get(), flag); /* this function may update ctx->current and ctx->read_from_db */ if (rc < 0) { @@ -814,24 +738,19 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, ctx->current_fs = previous_fs; ctx->remote.read_from_db = read_from_db; - SAFE_FREE(filename); - csync_vio_file_stat_destroy(dirent); - dirent = NULL; + dirent.reset(); } csync_vio_closedir(ctx, dh); CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, " <= Closing walk for %s with read_from_db %d", uri, read_from_db); -done: - csync_vio_file_stat_destroy(dirent); - SAFE_FREE(filename); return rc; + error: ctx->remote.read_from_db = read_from_db; if (dh != NULL) { csync_vio_closedir(ctx, dh); } - SAFE_FREE(filename); return -1; } diff --git a/src/csync/csync_update.h b/src/csync/csync_update.h index d83ee91e8..b1de56dee 100644 --- a/src/csync/csync_update.h +++ b/src/csync/csync_update.h @@ -46,14 +46,13 @@ enum csync_ftw_flags_e { CSYNC_FTW_FLAG_DNR, /* Unreadable directory. */ CSYNC_FTW_FLAG_NSTAT, /* Unstatable file. */ CSYNC_FTW_FLAG_SLINK, /* Symbolic link. */ - CSYNC_FTW_FLAG_SPEC, /* Special file (fifo, ...). */ /* These flags are only passed from the `nftw' function. */ CSYNC_FTW_FLAG_DP, /* Directory, all subdirs have been visited. */ CSYNC_FTW_FLAG_SLN /* Symbolic link naming non-existing file. */ }; typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, - const csync_vio_file_stat_t *fs, int flag); + const csync_file_stat_t *fs, int flag); /** * @brief The walker function to use in the file tree walker. @@ -68,7 +67,7 @@ typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, * * @return 0 on success, < 0 on error. */ -int csync_walker(CSYNC *ctx, const char *file, const csync_vio_file_stat_t *fs, int flag); +int csync_walker(CSYNC *ctx, const char *file, const csync_file_stat_t *fs, int flag); /** * @brief The file tree walker. diff --git a/src/csync/std/c_path.c b/src/csync/std/c_path.c index 1094a1c67..497ce411e 100644 --- a/src/csync/std/c_path.c +++ b/src/csync/std/c_path.c @@ -33,6 +33,7 @@ #include "c_alloc.h" #include "c_path.h" #include "c_string.h" +#include "c_utf8.h" /* * dirname - parse directory component. diff --git a/src/csync/std/c_string.h b/src/csync/std/c_string.h index 4d7d9b599..ef1784892 100644 --- a/src/csync/std/c_string.h +++ b/src/csync/std/c_string.h @@ -147,77 +147,6 @@ void c_strlist_clear(c_strlist_t *strlist); */ void c_strlist_destroy(c_strlist_t *strlist); -/** - * @brief Convert a platform locale string to utf8. - * - * This function is part of the multi platform abstraction of basic file - * operations to handle various platform encoding correctly. - * - * Instead of using the standard file operations the multi platform aliases - * defined in c_private.h have to be used instead. - * - * To convert path names returned by these functions to the internally used - * utf8 format this function has to be used. The returned string has to - * be freed by c_free_locale_string(). On some platforms this method allocates - * memory and on others not but it has never to be cared about. - * - * @param str The multibyte encoded string to convert - * - * @return The malloced converted string or NULL on error. - * - * @see c_free_locale_string() - * @see c_utf8_to_locale() - * - */ - char* c_utf8_from_locale(const mbchar_t *str); - -/** - * @brief Convert a utf8 encoded string to platform specific locale. - * - * This function is part of the multi platform abstraction of basic file - * operations to handle various platform encoding correctly. - * - * Instead of using the standard file operations the multi platform aliases - * defined in c_private.h have to be used instead. - * - * To convert strings as input for the cross platform functions from the - * internally used utf8 format, this function has to be used. - * The returned string has to be freed by c_free_locale_string(). On some - * platforms this method allocates memory and on others not but it has never - * sto be cared about. - * - * If the string to convert is a path, consider using c_utf8_path_to_locale(). - * - * @param str The utf8 string to convert. - * - * @return The malloced converted multibyte string or NULL on error. - * - * @see c_free_locale_string() - * @see c_utf8_from_locale() - * - */ -mbchar_t* c_utf8_string_to_locale(const char *wstr); - -/** - * @brief Free buffer malloced by c_utf8_from_locale or c_utf8_to_locale(). - * - * This function is part of the multi platform abstraction of basic file - * operations to handle various platform encoding correctly. - * - * Instead of using the standard file operations the multi platform aliases - * defined in c_private.h have to be used instead. - * - * This function frees the memory that was allocated by a previous call to - * c_utf8_to_locale() or c_utf8_from_locale(). - * - * @param buf The buffer to free. - * - * @see c_utf8_from_locale(), c_utf8_to_locale() - * - */ -#define c_free_locale_string(x) SAFE_FREE(x) - - /** * }@ */ diff --git a/src/csync/std/c_time.c b/src/csync/std/c_time.c index 561cd4763..4bcdcbf56 100644 --- a/src/csync/std/c_time.c +++ b/src/csync/std/c_time.c @@ -24,6 +24,7 @@ #include "c_path.h" #include "c_time.h" +#include "c_utf8.h" struct timespec c_tspecdiff(struct timespec time1, struct timespec time0) { struct timespec ret; diff --git a/src/csync/std/c_utf8.cpp b/src/csync/std/c_utf8.cpp index 4bd5d75ac..ae61170a9 100644 --- a/src/csync/std/c_utf8.cpp +++ b/src/csync/std/c_utf8.cpp @@ -20,6 +20,7 @@ */ #include "config_csync.h" +#include "c_utf8.h" #ifdef _WIN32 #include @@ -34,31 +35,26 @@ #include #endif -extern "C" { #include "c_alloc.h" #include "c_string.h" /* Convert a locale String to UTF8 */ -char* c_utf8_from_locale(const mbchar_t *wstr) +QByteArray c_utf8_from_locale(const mbchar_t *wstr) { if (wstr == NULL) { - return NULL; + return QByteArray(); } #ifdef _WIN32 - char *dst = NULL; - char *mdst = NULL; + QByteArray dst; int size_needed; size_t len; len = wcslen(wstr); /* Call once to get the required size. */ size_needed = WideCharToMultiByte(CP_UTF8, 0, wstr, len, NULL, 0, NULL, NULL); if (size_needed > 0) { - mdst = (char*)c_malloc(size_needed + 1); - - memset(mdst, 0, size_needed + 1); - WideCharToMultiByte(CP_UTF8, 0, wstr, len, mdst, size_needed, NULL, NULL); - dst = mdst; + dst.resize(size_needed); + WideCharToMultiByte(CP_UTF8, 0, wstr, len, dst.data(), size_needed, NULL, NULL); } return dst; #else @@ -67,15 +63,17 @@ char* c_utf8_from_locale(const mbchar_t *wstr) if (s.isEmpty() || dec.hasFailure()) { /* Conversion error: since we can't report error from this function, just return the original string. We take care of invalid utf-8 in SyncEngine::treewalkFile */ - return c_strdup(wstr); + return QByteArray(wstr); } #ifdef __APPLE__ s = s.normalized(QString::NormalizationForm_C); #endif - return c_strdup(std::move(s).toUtf8().constData()); + return std::move(s).toUtf8(); #endif } +extern "C" { + /* Convert a an UTF8 string to locale */ mbchar_t* c_utf8_string_to_locale(const char *str) { diff --git a/src/csync/std/c_utf8.h b/src/csync/std/c_utf8.h new file mode 100644 index 000000000..522cab34d --- /dev/null +++ b/src/csync/std/c_utf8.h @@ -0,0 +1,122 @@ +/* + * cynapses libc functions + * + * Copyright (c) 2008-2013 by Andreas Schneider + * Copyright (c) 2012-2013 by Klaas Freitag + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file c_string.h + * + * @brief Interface of the cynapses string implementations + * + * @defgroup cynStringInternals cynapses libc string functions + * @ingroup cynLibraryAPI + * + * @{ + */ +#ifndef _C_UTF8_H +#define _C_UTF8_H + +#include "c_private.h" +#include "c_macro.h" + +#ifdef __cplusplus +#include + +/** + * @brief Convert a platform locale string to utf8. + * + * This function is part of the multi platform abstraction of basic file + * operations to handle various platform encoding correctly. + * + * Instead of using the standard file operations the multi platform aliases + * defined in c_private.h have to be used instead. + * + * To convert path names returned by these functions to the internally used + * utf8 format this function has to be used. + * + * @param str The multibyte encoded string to convert + * + * @return The converted string or a null QByteArray on error. + * + * @see c_free_locale_string() + * @see c_utf8_to_locale() + * + */ + QByteArray c_utf8_from_locale(const mbchar_t *str); + +extern "C" { + +#endif // __cplusplus + +/** + * @brief Convert a utf8 encoded string to platform specific locale. + * + * This function is part of the multi platform abstraction of basic file + * operations to handle various platform encoding correctly. + * + * Instead of using the standard file operations the multi platform aliases + * defined in c_private.h have to be used instead. + * + * To convert strings as input for the cross platform functions from the + * internally used utf8 format, this function has to be used. + * The returned string has to be freed by c_free_locale_string(). On some + * platforms this method allocates memory and on others not but it has never + * sto be cared about. + * + * If the string to convert is a path, consider using c_utf8_path_to_locale(). + * + * @param str The utf8 string to convert. + * + * @return The malloced converted multibyte string or NULL on error. + * + * @see c_free_locale_string() + * @see c_utf8_from_locale() + * + */ +mbchar_t* c_utf8_string_to_locale(const char *wstr); + +/** + * @brief Free buffer malloced by c_utf8_to_locale(). + * + * This function is part of the multi platform abstraction of basic file + * operations to handle various platform encoding correctly. + * + * Instead of using the standard file operations the multi platform aliases + * defined in c_private.h have to be used instead. + * + * This function frees the memory that was allocated by a previous call to + * c_utf8_to_locale(). + * + * @param buf The buffer to free. + * + * @see c_utf8_from_locale(), c_utf8_to_locale() + * + */ +#define c_free_locale_string(x) SAFE_FREE(x) + + +/** + * }@ + */ + +#ifdef __cplusplus +} +#endif + +#endif /* _C_UTF8_H */ diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index 909117836..cea6b04e1 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -84,7 +84,7 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { return rc; } -csync_vio_file_stat_t *csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle) { +std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle) { switch(ctx->replica) { case REMOTE_REPLICA: if( ctx->remote.read_from_db ) { @@ -104,7 +104,7 @@ csync_vio_file_stat_t *csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle } -int csync_vio_stat(CSYNC *ctx, const char *uri, csync_vio_file_stat_t *buf) { +int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf) { int rc = -1; switch(ctx->replica) { diff --git a/src/csync/vio/csync_vio.h b/src/csync/vio/csync_vio.h index 715b18542..62522950b 100644 --- a/src/csync/vio/csync_vio.h +++ b/src/csync/vio/csync_vio.h @@ -34,9 +34,9 @@ typedef struct fhandle_s { csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name); int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle); -csync_vio_file_stat_t *csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle); +std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle); -int csync_vio_stat(CSYNC *ctx, const char *uri, csync_vio_file_stat_t *buf); +int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf); char *csync_vio_get_status_string(CSYNC *ctx); diff --git a/src/csync/vio/csync_vio_file_stat.cpp b/src/csync/vio/csync_vio_file_stat.cpp deleted file mode 100644 index 8ebb64f33..000000000 --- a/src/csync/vio/csync_vio_file_stat.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "c_lib.h" -#include "csync.h" -#include "csync_log.h" - -csync_vio_file_stat_t *csync_vio_file_stat_new(void) { - csync_vio_file_stat_t *file_stat = (csync_vio_file_stat_t *) c_malloc(sizeof(csync_vio_file_stat_t)); - ZERO_STRUCTP(file_stat); - return file_stat; -} - -csync_vio_file_stat_t* csync_vio_file_stat_copy(csync_vio_file_stat_t *file_stat) { - csync_vio_file_stat_t *file_stat_cpy = csync_vio_file_stat_new(); - memcpy(file_stat_cpy, file_stat, sizeof(csync_vio_file_stat_t)); - if (file_stat_cpy->fields & CSYNC_VIO_FILE_STAT_FIELDS_ETAG) { - file_stat_cpy->etag = c_strdup(file_stat_cpy->etag); - } - if (file_stat_cpy->directDownloadCookies) { - file_stat_cpy->directDownloadCookies = c_strdup(file_stat_cpy->directDownloadCookies); - } - if (file_stat_cpy->directDownloadUrl) { - file_stat_cpy->directDownloadUrl = c_strdup(file_stat_cpy->directDownloadUrl); - } - if (file_stat_cpy->checksumHeader) { - file_stat_cpy->checksumHeader = c_strdup(file_stat_cpy->checksumHeader); - } - file_stat_cpy->name = c_strdup(file_stat_cpy->name); - return file_stat_cpy; -} - -void csync_vio_file_stat_destroy(csync_vio_file_stat_t *file_stat) { - /* FIXME: free rest */ - if (file_stat == NULL) { - return; - } - - if (file_stat->fields & CSYNC_VIO_FILE_STAT_FIELDS_ETAG) { - SAFE_FREE(file_stat->etag); - } - 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->checksumHeader); - SAFE_FREE(file_stat); -} - -void csync_vio_file_stat_set_file_id( csync_vio_file_stat_t *dst, const char* src ) { - - csync_vio_set_file_id( dst->file_id, src ); - if( c_streq( dst->file_id, "" )) { - return; - } - dst->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FILE_ID; -} - -void csync_vio_set_file_id( char* dst, const char *src ) { - if( src && dst ) { - if( strlen(src) > FILE_ID_BUF_SIZE ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Ignoring file_id because it is too long: %s", src); - strcpy(dst, ""); - } else { - strcpy(dst, src); - } - } -} diff --git a/src/csync/vio/csync_vio_local.h b/src/csync/vio/csync_vio_local.h index 294383121..eae64f02d 100644 --- a/src/csync/vio/csync_vio_local.h +++ b/src/csync/vio/csync_vio_local.h @@ -23,8 +23,8 @@ csync_vio_handle_t OCSYNC_EXPORT *csync_vio_local_opendir(const char *name); int OCSYNC_EXPORT csync_vio_local_closedir(csync_vio_handle_t *dhandle); -csync_vio_file_stat_t OCSYNC_EXPORT *csync_vio_local_readdir(csync_vio_handle_t *dhandle); +std::unique_ptr OCSYNC_EXPORT csync_vio_local_readdir(csync_vio_handle_t *dhandle); -int OCSYNC_EXPORT csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf); +int OCSYNC_EXPORT csync_vio_local_stat(const char *uri, csync_file_stat_t *buf); #endif /* _CSYNC_VIO_LOCAL_H */ diff --git a/src/csync/vio/csync_vio_local_unix.cpp b/src/csync/vio/csync_vio_local_unix.cpp index 40e4794c3..5223878a1 100644 --- a/src/csync/vio/csync_vio_local_unix.cpp +++ b/src/csync/vio/csync_vio_local_unix.cpp @@ -29,6 +29,7 @@ #include "c_private.h" #include "c_lib.h" #include "c_string.h" +#include "c_utf8.h" #include "csync_util.h" #include "csync_log.h" #include "csync_vio.h" @@ -83,31 +84,26 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) { return rc; } -csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { + +std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *dhandle) { dhandle_t *handle = NULL; - csync_vio_file_stat_t *file_stat = NULL; handle = (dhandle_t *) dhandle; struct _tdirent *dirent = NULL; - - errno = 0; - file_stat = csync_vio_file_stat_new(); - if (file_stat == NULL) { - goto err; - } - file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; + std::unique_ptr file_stat; dirent = _treaddir(handle->dh); if (dirent == NULL) { - goto err; + return {}; } - file_stat->name = c_utf8_from_locale(dirent->d_name); - if (file_stat->name == NULL) { - //file_stat->original_name = c_strdup(dirent->d_name); - if (asprintf(&file_stat->original_name, "%s/%s", handle->path, dirent->d_name) < 0) { - goto err; - } + + file_stat.reset(new csync_file_stat_t); + file_stat->path = c_utf8_from_locale(dirent->d_name); + if (file_stat->path.isNull()) { + file_stat->original_path = handle->path; + file_stat->original_path += '/'; + file_stat->original_path += dirent->d_name; CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Invalid characters in file/directory name, please rename: \"%s\" (%s)", dirent->d_name, handle->path); } @@ -122,31 +118,22 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { break; case DT_DIR: case DT_REG: - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; if (dirent->d_type == DT_DIR) { - file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY; + file_stat->type = CSYNC_FTW_TYPE_DIR; } else { - file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR; + file_stat->type = CSYNC_FTW_TYPE_FILE; } break; - case DT_UNKNOWN: - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; - file_stat->type = CSYNC_VIO_FILE_TYPE_UNKNOWN; default: break; } #endif return file_stat; - -err: - csync_vio_file_stat_destroy(file_stat); - - return NULL; } -int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) { +int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { csync_stat_t sb; mbchar_t *wuri = c_utf8_path_to_locale( uri ); @@ -156,66 +143,33 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) { return -1; } - buf->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; + *buf = csync_file_stat_t(); switch(sb.st_mode & S_IFMT) { - case S_IFBLK: - buf->type = CSYNC_VIO_FILE_TYPE_BLOCK_DEVICE; - break; - case S_IFCHR: - buf->type = CSYNC_VIO_FILE_TYPE_CHARACTER_DEVICE; - break; case S_IFDIR: - buf->type = CSYNC_VIO_FILE_TYPE_DIRECTORY; - break; - case S_IFIFO: - buf->type = CSYNC_VIO_FILE_TYPE_FIFO; + buf->type = CSYNC_FTW_TYPE_DIR; break; case S_IFREG: - buf->type = CSYNC_VIO_FILE_TYPE_REGULAR; + buf->type = CSYNC_FTW_TYPE_FILE; break; case S_IFLNK: - buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK; - break; case S_IFSOCK: - buf->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK; + buf->type = CSYNC_FTW_TYPE_SLINK; break; default: - buf->type = CSYNC_VIO_FILE_TYPE_UNKNOWN; + buf->type = CSYNC_FTW_TYPE_SKIP; break; } - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; - buf->mode = sb.st_mode; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MODE; - - if (buf->type == CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK) { - /* FIXME: handle symlink */ - buf->flags = CSYNC_VIO_FILE_FLAGS_SYMLINK; - } else { - buf->flags = CSYNC_VIO_FILE_FLAGS_NONE; - } #ifdef __APPLE__ if (sb.st_flags & UF_HIDDEN) { - buf->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN; + buf->is_hidden = true; } #endif - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS; buf->inode = sb.st_ino; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_INODE; - - buf->atime = sb.st_atime; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME; - - buf->mtime = sb.st_mtime; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; - - buf->ctime = sb.st_ctime; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME; - + buf->modtime = sb.st_mtime; buf->size = sb.st_size; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; c_free_locale_string(wuri); return 0; diff --git a/src/csync/vio/csync_vio_local_win.cpp b/src/csync/vio/csync_vio_local_win.cpp index e9d2ba566..435ad87d6 100644 --- a/src/csync/vio/csync_vio_local_win.cpp +++ b/src/csync/vio/csync_vio_local_win.cpp @@ -29,7 +29,7 @@ #include "c_private.h" #include "c_lib.h" -#include "c_string.h" +#include "c_utf8.h" #include "csync_util.h" #include "csync_log.h" #include "csync_vio.h" @@ -134,21 +134,15 @@ static time_t FileTimeToUnixTime(FILETIME *filetime, DWORD *remainder) } } -csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { +std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *dhandle) { dhandle_t *handle = NULL; - csync_vio_file_stat_t *file_stat = NULL; + std::unique_ptr file_stat; DWORD rem; handle = (dhandle_t *) dhandle; errno = 0; - file_stat = csync_vio_file_stat_new(); - if (file_stat == NULL) { - errno = ENOMEM; - goto err; - } - file_stat->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; // the win32 functions get the first valid entry with the opendir // thus we must not jump to next entry if it was the first find. @@ -161,67 +155,46 @@ csync_vio_file_stat_t *csync_vio_local_readdir(csync_vio_handle_t *dhandle) { if (dwError != ERROR_NO_MORE_FILES) { errno = EACCES; // no more files is fine. Otherwise EACCESS } - goto err; + return nullptr; } } - file_stat->name = c_utf8_from_locale(handle->ffd.cFileName); + file_stat.reset(new csync_file_stat_t); + file_stat->path = 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; + file_stat->type = CSYNC_FTW_TYPE_SLINK; } 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; + file_stat->type = CSYNC_FTW_TYPE_FILE; } } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) { - file_stat->type = CSYNC_VIO_FILE_TYPE_UNKNOWN; + file_stat->type = CSYNC_FTW_TYPE_SKIP; } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY; + file_stat->type = CSYNC_FTW_TYPE_DIR; } else { - file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR; + file_stat->type = CSYNC_FTW_TYPE_FILE; } /* Check for the hidden flag */ if( handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN ) { - file_stat->flags |= CSYNC_VIO_FILE_FLAGS_HIDDEN; + file_stat->is_hidden = true; } - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_FLAGS; - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; - file_stat->size = (handle->ffd.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + handle->ffd.nFileSizeLow; - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; - - file_stat->atime = FileTimeToUnixTime(&handle->ffd.ftLastAccessTime, &rem); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME; - - file_stat->mtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem); - /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */ - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; - - file_stat->ctime = FileTimeToUnixTime(&handle->ffd.ftCreationTime, &rem); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME; - + file_stat->modtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem); return file_stat; - -err: - SAFE_FREE(file_stat); - - return NULL; } -int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) { +int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { /* Almost nothing to do since csync_vio_local_readdir already filled up most of the information But we still need to fetch the file ID. Possible optimisation: only fetch the file id when we need it (for new files) @@ -257,17 +230,10 @@ int csync_vio_local_stat(const char *uri, csync_vio_file_stat_t *buf) { FileIndex.QuadPart &= 0x0000FFFFFFFFFFFF; /* printf("Index: %I64i\n", FileIndex.QuadPart); */ buf->inode = FileIndex.QuadPart; + buf->size = (fileInfo.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + fileInfo.nFileSizeLow; - if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE)) { - buf->size = (fileInfo.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + fileInfo.nFileSizeLow; - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; - } - if (!(buf->fields & CSYNC_VIO_FILE_STAT_FIELDS_MTIME)) { - DWORD rem; - buf->mtime = FileTimeToUnixTime(&fileInfo.ftLastWriteTime, &rem); - /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Local File MTime: %llu", (unsigned long long) buf->mtime ); */ - buf->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; - } + DWORD rem; + buf->modtime = FileTimeToUnixTime(&fileInfo.ftLastWriteTime, &rem); c_free_locale_string(wuri); CloseHandle(h); diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index dcad77390..3ba03cac9 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -321,76 +321,50 @@ static QByteArray findBestChecksum(const QByteArray &checksums) return QByteArray(); } -static csync_vio_file_stat_t *propertyMapToFileStat(const QMap &map) +static std::unique_ptr propertyMapToFileStat(const QMap &map) { - csync_vio_file_stat_t *file_stat = csync_vio_file_stat_new(); + std::unique_ptr file_stat(new csync_file_stat_t); for (auto it = map.constBegin(); it != map.constEnd(); ++it) { QString property = it.key(); QString value = it.value(); if (property == "resourcetype") { if (value.contains("collection")) { - file_stat->type = CSYNC_VIO_FILE_TYPE_DIRECTORY; + file_stat->type = CSYNC_FTW_TYPE_DIR; } else { - file_stat->type = CSYNC_VIO_FILE_TYPE_REGULAR; + file_stat->type = CSYNC_FTW_TYPE_FILE; } - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; } else if (property == "getlastmodified") { - file_stat->mtime = oc_httpdate_parse(value.toUtf8()); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; + file_stat->modtime = oc_httpdate_parse(value.toUtf8()); } else if (property == "getcontentlength") { bool ok = false; qlonglong ll = value.toLongLong(&ok); if (ok && ll >= 0) { file_stat->size = ll; - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; } } else if (property == "getetag") { - file_stat->etag = csync_normalize_etag(value.toUtf8()); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ETAG; + file_stat->etag = Utility::normalizeEtag(value.toUtf8()); } else if (property == "id") { - csync_vio_file_stat_set_file_id(file_stat, value.toUtf8()); + file_stat->file_id = value.toUtf8(); } else if (property == "downloadURL") { - file_stat->directDownloadUrl = strdup(value.toUtf8()); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL; + file_stat->directDownloadUrl = value.toUtf8(); } else if (property == "dDC") { - file_stat->directDownloadCookies = strdup(value.toUtf8()); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES; + file_stat->directDownloadCookies = value.toUtf8(); } else if (property == "permissions") { - auto v = value.toUtf8(); - if (value.isEmpty()) { - // special meaning for our code: server returned permissions but are empty - // meaning only reading is allowed for this resource - file_stat->remotePerm[0] = ' '; - // see _csync_detect_update() - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_PERM; - } else if (v.length() < int(sizeof(file_stat->remotePerm))) { - strcpy(file_stat->remotePerm, v.constData()); - file_stat->fields |= CSYNC_VIO_FILE_STAT_FIELDS_PERM; - } else { - qCWarning(lcDiscovery) << "permissions too large" << v; - } + file_stat->remotePerm = value.toUtf8(); } else if (property == "checksums") { - QByteArray checksum = findBestChecksum(value.toUtf8()); - if (!checksum.isEmpty()) { - file_stat->checksumHeader = strdup(checksum.constData()); - } + file_stat->checksumHeader = findBestChecksum(value.toUtf8()); } else if (property == "share-types" && !value.isEmpty()) { // Since QMap is sorted, "share-types" is always "permissions". - if (file_stat->remotePerm[0] == '\0' || !(file_stat->fields & CSYNC_VIO_FILE_STAT_FIELDS_PERM)) { + if (file_stat->remotePerm.isEmpty()) { qWarning() << "Server returned a share type, but no permissions?"; } else { // S means shared with me. // But for our purpose, we want to know if the file is shared. It does not matter // if we are the owner or not. // Piggy back on the persmission field 'S' - if (!std::strchr(file_stat->remotePerm, 'S')) { - if (std::strlen(file_stat->remotePerm) < sizeof(file_stat->remotePerm) - 1) { - std::strcat(file_stat->remotePerm, "S"); - } else { - qWarning() << "permissions too large" << file_stat->remotePerm; - } - } + if (!file_stat->remotePerm.contains('S')) + file_stat->remotePerm.append('S'); } } } @@ -423,17 +397,16 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con } - FileStatPointer file_stat(propertyMapToFileStat(map)); - file_stat->name = strdup(file.toUtf8()); - if (!file_stat->etag || strlen(file_stat->etag) == 0) { - qCCritical(lcDiscovery) << "etag of" << file_stat->name << "is" << file_stat->etag << " This must not happen."; + std::unique_ptr file_stat(propertyMapToFileStat(map)); + file_stat->path = file.toUtf8(); + if (file_stat->etag.isEmpty()) { + qCCritical(lcDiscovery) << "etag of" << file_stat->path << "is" << file_stat->etag << "This must not happen."; } if (_isExternalStorage) { /* All the entries in a external storage have 'M' in their permission. However, for all purposes in the desktop client, we only need to know about the mount points. So replace the 'M' by a 'm' for every sub entries in an external storage */ - std::replace(file_stat->remotePerm, file_stat->remotePerm + strlen(file_stat->remotePerm), - 'M', 'm'); + file_stat->remotePerm.replace('M', 'm'); } QStringRef fileRef(&file); @@ -441,7 +414,7 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con if (slashPos > -1) { fileRef = file.midRef(slashPos + 1); } - _results.append(file_stat); + _results.push_back(std::move(file_stat)); } //This works in concerto with the RequestEtagJob and the Folder object to check if the remote folder changed. @@ -465,7 +438,7 @@ void DiscoverySingleDirectoryJob::lsJobFinishedWithoutErrorSlot() } emit etag(_firstEtag); emit etagConcatenation(_etagConcatenation); - emit finishedWithResult(_results); + emit finishedWithResult(); deleteLater(); } @@ -527,8 +500,8 @@ void DiscoveryMainThread::doOpendirSlot(const QString &subPath, DiscoveryDirecto // Schedule the DiscoverySingleDirectoryJob _singleDirJob = new DiscoverySingleDirectoryJob(_account, fullPath, this); - QObject::connect(_singleDirJob, SIGNAL(finishedWithResult(const QList &)), - this, SLOT(singleDirectoryJobResultSlot(const QList &))); + QObject::connect(_singleDirJob, SIGNAL(finishedWithResult()), + this, SLOT(singleDirectoryJobResultSlot())); QObject::connect(_singleDirJob, SIGNAL(finishedWithError(int, QString)), this, SLOT(singleDirectoryJobFinishedWithErrorSlot(int, QString))); QObject::connect(_singleDirJob, SIGNAL(firstDirectoryPermissions(QString)), @@ -546,17 +519,17 @@ void DiscoveryMainThread::doOpendirSlot(const QString &subPath, DiscoveryDirecto } -void DiscoveryMainThread::singleDirectoryJobResultSlot(const QList &result) +void DiscoveryMainThread::singleDirectoryJobResultSlot() { if (!_currentDiscoveryDirectoryResult) { return; // possibly aborted } - qCDebug(lcDiscovery) << "Have" << result.count() << "results for " << _currentDiscoveryDirectoryResult->path; - - _currentDiscoveryDirectoryResult->list = result; + _currentDiscoveryDirectoryResult->list = _singleDirJob->takeResults(); _currentDiscoveryDirectoryResult->code = 0; - _currentDiscoveryDirectoryResult->listIndex = 0; + + qCDebug(lcDiscovery) << "Have" << _currentDiscoveryDirectoryResult->list.size() << "results for " << _currentDiscoveryDirectoryResult->path; + _currentDiscoveryDirectoryResult = 0; // the sync thread owns it now if (!_firstFolderProcessed) { @@ -652,7 +625,7 @@ void DiscoveryMainThread::abort() if (_singleDirJob) { _singleDirJob->disconnect(SIGNAL(finishedWithError(int, QString)), this); _singleDirJob->disconnect(SIGNAL(firstDirectoryPermissions(QString)), this); - _singleDirJob->disconnect(SIGNAL(finishedWithResult(const QList &)), this); + _singleDirJob->disconnect(SIGNAL(finishedWithResult()), this); _singleDirJob->abort(); } if (_currentDiscoveryDirectoryResult) { @@ -704,16 +677,16 @@ csync_vio_handle_t *DiscoveryJob::remote_vio_opendir_hook(const char *url, } -csync_vio_file_stat_t *DiscoveryJob::remote_vio_readdir_hook(csync_vio_handle_t *dhandle, +std::unique_ptr DiscoveryJob::remote_vio_readdir_hook(csync_vio_handle_t *dhandle, void *userdata) { DiscoveryJob *discoveryJob = static_cast(userdata); if (discoveryJob) { DiscoveryDirectoryResult *directoryResult = static_cast(dhandle); - if (directoryResult->listIndex < directoryResult->list.size()) { - csync_vio_file_stat_t *file_stat = directoryResult->list.at(directoryResult->listIndex++).data(); - // Make a copy, csync_update will delete the copy - return csync_vio_file_stat_copy(file_stat); + if (!directoryResult->list.empty()) { + auto file_stat = std::move(directoryResult->list.front()); + directoryResult->list.pop_front(); + return file_stat; } } return NULL; diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index b7d252c67..4404e76ea 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -23,6 +23,7 @@ #include #include #include +#include namespace OCC { @@ -76,48 +77,14 @@ struct SyncOptions }; -/** - * @brief The FileStatPointer class - * @ingroup libsync - */ -class FileStatPointer -{ -public: - FileStatPointer(csync_vio_file_stat_t *stat) - : _stat(stat) - { - } - FileStatPointer(const FileStatPointer &other) - : _stat(csync_vio_file_stat_copy(other._stat)) - { - } - ~FileStatPointer() - { - csync_vio_file_stat_destroy(_stat); - } - FileStatPointer &operator=(const FileStatPointer &other) - { - csync_vio_file_stat_destroy(_stat); - _stat = csync_vio_file_stat_copy(other._stat); - return *this; - } - inline csync_vio_file_stat_t *data() const { return _stat; } - inline csync_vio_file_stat_t *operator->() const { return _stat; } - -private: - csync_vio_file_stat_t *_stat; -}; - struct DiscoveryDirectoryResult { QString path; QString msg; int code; - QList list; - int listIndex; + std::deque> list; DiscoveryDirectoryResult() : code(EIO) - , listIndex(0) { } }; @@ -138,12 +105,14 @@ public: void setIsRootPath() { _isRootPath = true; } void start(); void abort(); + std::deque> &&takeResults() { return std::move(_results); } + // This is not actually a network job, it is just a job signals: void firstDirectoryPermissions(const QString &); void etagConcatenation(const QString &); void etag(const QString &); - void finishedWithResult(const QList &); + void finishedWithResult(); void finishedWithError(int csyncErrnoCode, const QString &msg); private slots: void directoryListingIteratedSlot(QString, const QMap &); @@ -151,7 +120,7 @@ private slots: void lsJobFinishedWithErrorSlot(QNetworkReply *); private: - QList _results; + std::deque> _results; QString _subPath; QString _etagConcatenation; QString _firstEtag; @@ -203,7 +172,7 @@ public slots: void doGetSizeSlot(const QString &path, qint64 *result); // From Job: - void singleDirectoryJobResultSlot(const QList &); + void singleDirectoryJobResultSlot(); void singleDirectoryJobFinishedWithErrorSlot(int csyncErrnoCode, const QString &msg); void singleDirectoryJobFirstDirectoryPermissionsSlot(const QString &); @@ -250,7 +219,7 @@ class DiscoveryJob : public QObject // For using QNAM to get the directory listings static csync_vio_handle_t *remote_vio_opendir_hook(const char *url, void *userdata); - static csync_vio_file_stat_t *remote_vio_readdir_hook(csync_vio_handle_t *dhandle, + static std::unique_ptr remote_vio_readdir_hook(csync_vio_handle_t *dhandle, void *userdata); static void remote_vio_closedir_hook(csync_vio_handle_t *dhandle, void *userdata); diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index 4625eed04..2e365c608 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -44,6 +44,7 @@ extern "C" int c_utimes(const char *, const struct timeval *); #include "vio/csync_vio_local.h" #include "std/c_path.h" #include "std/c_string.h" +#include "std/c_utf8.h" namespace OCC { @@ -173,17 +174,16 @@ void FileSystem::setFileReadOnlyWeak(const QString &filename, bool readonly) time_t FileSystem::getModTime(const QString &filename) { - csync_vio_file_stat_t *stat = csync_vio_file_stat_new(); + csync_file_stat_t stat; qint64 result = -1; - if (csync_vio_local_stat(filename.toUtf8().data(), stat) != -1 - && (stat->fields & CSYNC_VIO_FILE_STAT_FIELDS_MTIME)) { - result = stat->mtime; + if (csync_vio_local_stat(filename.toUtf8().data(), &stat) != -1 + && (stat.modtime != 0)) { + result = stat.modtime; } else { qCWarning(lcFileSystem) << "Could not get modification time for" << filename << "with csync, using QFileInfo"; result = Utility::qDateTimeToTime_t(QFileInfo(filename).lastModified()); } - csync_vio_file_stat_destroy(stat); return result; } @@ -428,14 +428,12 @@ bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qi static qint64 getSizeWithCsync(const QString &filename) { qint64 result = 0; - csync_vio_file_stat_t *stat = csync_vio_file_stat_new(); - if (csync_vio_local_stat(filename.toUtf8().data(), stat) != -1 - && (stat->fields & CSYNC_VIO_FILE_STAT_FIELDS_SIZE)) { - result = stat->size; + csync_file_stat_t stat; + if (csync_vio_local_stat(filename.toUtf8().data(), &stat) != -1) { + result = stat.size; } else { qCWarning(lcFileSystem) << "Could not get size for" << filename << "with csync"; } - csync_vio_file_stat_destroy(stat); return result; } #endif diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 6fff8e538..df0f2e0e8 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -134,9 +134,6 @@ QString SyncEngine::csyncErrorToString(CSYNC_STATUS err) case CSYNC_STATUS_TREE_ERROR: errStr = tr("CSync got an error while processing internal trees."); break; - case CSYNC_STATUS_MEMORY_ERROR: - errStr = tr("CSync failed to reserve memory."); - break; case CSYNC_STATUS_PARAM_ERROR: errStr = tr("CSync fatal parameter error."); break; diff --git a/test/csync/CMakeLists.txt b/test/csync/CMakeLists.txt index a27505d12..6b26eb96c 100644 --- a/test/csync/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -44,7 +44,6 @@ add_cmocka_test(check_csync_statedb_query csync_tests/check_csync_statedb_query. add_cmocka_test(check_csync_commit csync_tests/check_csync_commit.cpp ${TEST_TARGET_LIBRARIES}) # vio -add_cmocka_test(check_vio_file_stat vio_tests/check_vio_file_stat.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_vio vio_tests/check_vio.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.cpp ${TEST_TARGET_LIBRARIES}) diff --git a/test/csync/csync_tests/check_csync_log.cpp b/test/csync/csync_tests/check_csync_log.cpp index c5f312ff5..b7c30c5a0 100644 --- a/test/csync/csync_tests/check_csync_log.cpp +++ b/test/csync/csync_tests/check_csync_log.cpp @@ -25,6 +25,7 @@ #include "csync.h" #include "csync_log.cpp" #include "c_private.h" +#include "std/c_utf8.h" static int setup(void **state) { CSYNC *csync; diff --git a/test/csync/csync_tests/check_csync_misc.cpp b/test/csync/csync_tests/check_csync_misc.cpp index 64f95694b..4d07d4335 100644 --- a/test/csync/csync_tests/check_csync_misc.cpp +++ b/test/csync/csync_tests/check_csync_misc.cpp @@ -17,20 +17,19 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "csync_misc.h" +#include "common/utility.h" #include #include "torture.h" static void check_csync_normalize_etag(void **state) { - char *str; + QByteArray str; (void) state; /* unused */ #define CHECK_NORMALIZE_ETAG(TEST, EXPECT) \ - str = csync_normalize_etag(TEST); \ - assert_string_equal(str, EXPECT); \ - free(str); + str = OCC::Utility::normalizeEtag(TEST); \ + assert_string_equal(str.constData(), EXPECT); \ CHECK_NORMALIZE_ETAG("foo", "foo"); diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index 237687e4c..1b260ed8b 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -176,63 +176,41 @@ static int teardown_rm(void **state) { } /* create a file stat, caller must free memory */ -static csync_vio_file_stat_t* create_fstat(const char *name, +static std::unique_ptr create_fstat(const char *name, ino_t inode, time_t mtime) { - csync_vio_file_stat_t *fs = NULL; + std::unique_ptr fs(new csync_file_stat_t); time_t t; - fs = csync_vio_file_stat_new(); - if (fs == NULL) { - return NULL; - } - if (name && *name) { - fs->name = c_strdup(name); + fs->path = name; } else { - fs->name = c_strdup("file.txt"); + fs->path = "file.txt"; } - if (fs->name == NULL) { - csync_vio_file_stat_destroy(fs); - return NULL; - } - - fs->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE; - - fs->type = CSYNC_VIO_FILE_TYPE_REGULAR; - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE; - + fs->type = CSYNC_FTW_TYPE_FILE; if (inode == 0) { fs->inode = 619070; } else { fs->inode = inode; } - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_INODE; - fs->size = 157459; - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE; - - if (mtime == 0) { - fs->atime = fs->ctime = fs->mtime = time(&t); + fs->modtime = time(&t); } else { - fs->atime = fs->ctime = fs->mtime = mtime; + fs->modtime = mtime; } - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ATIME; - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_CTIME; - fs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME; return fs; } static int failing_fn(CSYNC *ctx, const char *file, - const csync_vio_file_stat_t *fs, + const csync_file_stat_t *fs, int flag) { (void) ctx; @@ -248,15 +226,14 @@ static void check_csync_detect_update(void **state) { CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc; fs = create_fstat("file.txt", 0, 1217597845); - assert_non_null(fs); rc = _csync_detect_update(csync, "/tmp/check_csync1/file.txt", - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, 0); @@ -266,8 +243,6 @@ static void check_csync_detect_update(void **state) /* create a statedb */ csync_set_status(csync, 0xFFFF); - - csync_vio_file_stat_destroy(fs); } /* Test behaviour in case no db is there. For that its important that the @@ -277,15 +252,14 @@ static void check_csync_detect_update_db_none(void **state) { CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc; fs = create_fstat("file.txt", 0, 1217597845); - assert_non_null(fs); rc = _csync_detect_update(csync, "/tmp/check_csync1/file.txt", - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, 0); @@ -296,23 +270,20 @@ static void check_csync_detect_update_db_none(void **state) /* create a statedb */ csync_set_status(csync, 0xFFFF); - - csync_vio_file_stat_destroy(fs); } static void check_csync_detect_update_db_eval(void **state) { CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc; fs = create_fstat("file.txt", 0, 42); - assert_non_null(fs); rc = _csync_detect_update(csync, "/tmp/check_csync1/file.txt", - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, 0); @@ -322,8 +293,6 @@ static void check_csync_detect_update_db_eval(void **state) /* create a statedb */ csync_set_status(csync, 0xFFFF); - - csync_vio_file_stat_destroy(fs); } @@ -332,16 +301,15 @@ static void check_csync_detect_update_db_rename(void **state) CSYNC *csync = (CSYNC*)*state; // csync_file_stat_t *st; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc = 0; fs = create_fstat("wurst.txt", 0, 42); - assert_non_null(fs); csync_set_statedb_exists(csync, 1); rc = _csync_detect_update(csync, "/tmp/check_csync1/wurst.txt", - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, 0); @@ -355,23 +323,20 @@ static void check_csync_detect_update_db_rename(void **state) */ /* create a statedb */ csync_set_status(csync, 0xFFFF); - - csync_vio_file_stat_destroy(fs); } static void check_csync_detect_update_db_new(void **state) { CSYNC *csync = (CSYNC*)*state; csync_file_stat_t *st; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc; fs = create_fstat("file.txt", 42000, 0); - assert_non_null(fs); rc = _csync_detect_update(csync, "/tmp/check_csync1/file.txt", - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, 0); @@ -382,22 +347,19 @@ static void check_csync_detect_update_db_new(void **state) /* create a statedb */ csync_set_status(csync, 0xFFFF); - - csync_vio_file_stat_destroy(fs); } static void check_csync_detect_update_null(void **state) { CSYNC *csync = (CSYNC*)*state; - csync_vio_file_stat_t *fs; + std::unique_ptr fs; int rc; fs = create_fstat("file.txt", 0, 0); - assert_non_null(fs); rc = _csync_detect_update(csync, NULL, - fs, + fs.get(), CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, -1); @@ -406,8 +368,6 @@ static void check_csync_detect_update_null(void **state) NULL, CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, -1); - - csync_vio_file_stat_destroy(fs); } static void check_csync_ftw(void **state) diff --git a/test/csync/encoding_tests/check_encoding.cpp b/test/csync/encoding_tests/check_encoding.cpp index 443d2c625..6252dde4d 100644 --- a/test/csync/encoding_tests/check_encoding.cpp +++ b/test/csync/encoding_tests/check_encoding.cpp @@ -21,6 +21,7 @@ #include #include "c_string.h" #include "c_path.h" +#include "c_utf8.h" #ifdef _WIN32 #include @@ -48,7 +49,6 @@ static void check_iconv_to_native_normalization(void **state) static void check_iconv_from_native_normalization(void **state) { - char *out = NULL; #ifdef _WIN32 const mbchar_t *in = L"\x48\xc3\xa4"; // UTF-8 #else @@ -60,12 +60,9 @@ static void check_iconv_from_native_normalization(void **state) #endif const char *exp_out = "\x48\xc3\xa4"; // UTF-8 - out = c_utf8_from_locale(in); + QByteArray out = c_utf8_from_locale(in); assert_string_equal(out, exp_out); - c_free_locale_string(out); - assert_null(out); - (void) state; /* unused */ } @@ -80,15 +77,11 @@ static void check_iconv_ascii(void **state) const mbchar_t *in = "abc/ABC\\123"; // UTF-8 #endif #endif - char *out = NULL; const char *exp_out = "abc/ABC\\123"; - out = c_utf8_from_locale(in); + QByteArray out = c_utf8_from_locale(in); assert_string_equal(out, exp_out); - c_free_locale_string(out); - assert_null(out); - (void) state; /* unused */ } diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index fc87485bf..cdb36a6a0 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -26,6 +26,7 @@ #include "torture.h" #include "csync_private.h" +#include "std/c_utf8.h" #include "vio/csync_vio.h" #define CSYNC_TEST_DIR "/tmp/csync_test/" @@ -141,16 +142,15 @@ static void check_csync_vio_readdir(void **state) { CSYNC *csync = (CSYNC*)*state; csync_vio_handle_t *dh; - csync_vio_file_stat_t *dirent; + std::unique_ptr dirent; int rc; dh = csync_vio_opendir(csync, CSYNC_TEST_DIR); assert_non_null(dh); dirent = csync_vio_readdir(csync, dh); - assert_non_null(dirent); + assert_non_null(dirent.get()); - csync_vio_file_stat_destroy(dirent); rc = csync_vio_closedir(csync, dh); assert_int_equal(rc, 0); } diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index fa2c771c3..d93bdef01 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -27,6 +27,7 @@ #include "torture.h" #include "csync_private.h" +#include "std/c_utf8.h" #include "vio/csync_vio.h" #ifdef _WIN32 @@ -184,7 +185,7 @@ static void create_dirs( const char *path ) static void traverse_dir(void **state, const char *dir, int *cnt) { csync_vio_handle_t *dh; - csync_vio_file_stat_t *dirent; + std::unique_ptr dirent; statevar *sv = (statevar*) *state; CSYNC *csync = sv->csync; char *subdir; @@ -204,22 +205,21 @@ static void traverse_dir(void **state, const char *dir, int *cnt) assert_non_null(dh); while( (dirent = csync_vio_readdir(csync, dh)) ) { - assert_non_null(dirent); - if (dirent->original_name) { - sv->ignored_dir = c_strdup(dirent->original_name); + assert_non_null(dirent.get()); + if (!dirent->original_path.isEmpty()) { + sv->ignored_dir = c_strdup(dirent->original_path); continue; } - assert_non_null(dirent->name); - assert_int_equal( dirent->fields & CSYNC_VIO_FILE_STAT_FIELDS_TYPE, CSYNC_VIO_FILE_STAT_FIELDS_TYPE ); + assert_false(dirent->path.isEmpty()); - if( c_streq( dirent->name, "..") || c_streq( dirent->name, "." )) { + if( c_streq( dirent->path, "..") || c_streq( dirent->path, "." )) { continue; } - is_dir = (dirent->type == CSYNC_VIO_FILE_TYPE_DIRECTORY) ? 1:0; + is_dir = (dirent->type == CSYNC_FTW_TYPE_DIR) ? 1:0; - assert_int_not_equal( asprintf( &subdir, "%s/%s", dir, dirent->name ), -1 ); + assert_int_not_equal( asprintf( &subdir, "%s/%s", dir, dirent->path.constData() ), -1 ); assert_int_not_equal( asprintf( &subdir_out, format_str, is_dir ? "":" ", @@ -249,7 +249,6 @@ static void traverse_dir(void **state, const char *dir, int *cnt) SAFE_FREE(subdir_out); } - csync_vio_file_stat_destroy(dirent); rc = csync_vio_closedir(csync, dh); assert_int_equal(rc, 0); diff --git a/test/csync/vio_tests/check_vio_file_stat.cpp b/test/csync/vio_tests/check_vio_file_stat.cpp deleted file mode 100644 index 3bca997a1..000000000 --- a/test/csync/vio_tests/check_vio_file_stat.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include "torture.h" - -#include "csync.h" - -static void check_csync_vio_file_stat_new(void **state) -{ - csync_vio_file_stat_t *tstat; - - (void) state; /* unused */ - - tstat = csync_vio_file_stat_new(); - assert_non_null(tstat); - - csync_vio_file_stat_destroy(tstat); -} - - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test(check_csync_vio_file_stat_new), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - From cb49635231f115be6bb581131445e6bcdb773a10 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 17 Aug 2017 14:39:23 +0200 Subject: [PATCH 017/166] Replace TREE_WALK_FILE with csync_file_stat_t Just expose csync_file_stat_t since we don't need an abstraction layer anymore. Also pass the nodes of both trees directly to the visitor function. Issue #1817 --- src/csync/csync.cpp | 45 ++++------------------------- src/csync/csync.h | 43 +--------------------------- src/libsync/syncengine.cpp | 58 ++++++++++++++++++++------------------ src/libsync/syncengine.h | 6 ++-- 4 files changed, 40 insertions(+), 112 deletions(-) diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index eefc8904e..aa531e18b 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -279,9 +279,8 @@ static int _csync_treewalk_visitor(void *obj, void *data) { int rc = 0; csync_file_stat_t *cur = NULL; CSYNC *ctx = NULL; - c_rbtree_visit_func *visitor = NULL; + csync_treewalk_visit_func *visitor = NULL; _csync_treewalk_context *twctx = NULL; - TREE_WALK_FILE trav; c_rbtree_t *other_tree = NULL; c_rbnode_t *other_node = NULL; @@ -334,6 +333,8 @@ static int _csync_treewalk_visitor(void *obj, void *data) { SAFE_FREE(renamed_path); } + csync_file_stat_t *other = other_node ? (csync_file_stat_t*)other_node->data : NULL; + if (obj == NULL || data == NULL) { ctx->status_code = CSYNC_STATUS_PARAM_ERROR; return -1; @@ -351,45 +352,9 @@ static int _csync_treewalk_visitor(void *obj, void *data) { return 0; } - visitor = (c_rbtree_visit_func*)(twctx->user_visitor); + visitor = (csync_treewalk_visit_func*)(twctx->user_visitor); if (visitor != NULL) { - trav.path = cur->path; - trav.size = cur->size; - trav.modtime = cur->modtime; - trav.type = cur->type; - trav.instruction = cur->instruction; - trav.rename_path = cur->rename_path; - trav.etag = cur->etag; - trav.file_id = cur->file_id; - trav.remotePerm = cur->remotePerm; - trav.directDownloadUrl = cur->directDownloadUrl.data(); - trav.directDownloadCookies = cur->directDownloadCookies.data(); - trav.inode = cur->inode; - - trav.error_status = cur->error_status; - trav.has_ignored_files = cur->has_ignored_files; - trav.checksumHeader = cur->checksumHeader; - - if( other_node ) { - csync_file_stat_t *other_stat = (csync_file_stat_t*)other_node->data; - trav.other.etag = other_stat->etag; - trav.other.file_id = other_stat->file_id; - trav.other.instruction = other_stat->instruction; - trav.other.modtime = other_stat->modtime; - trav.other.size = other_stat->size; - } else { - trav.other.etag = 0; - trav.other.file_id = 0; - trav.other.instruction = CSYNC_INSTRUCTION_NONE; - trav.other.modtime = 0; - trav.other.size = 0; - } - - rc = (*visitor)(&trav, twctx->userdata); - cur->instruction = trav.instruction; - if (trav.etag != cur->etag) { // FIXME It would be nice to have this documented - cur->etag = trav.etag; - } + rc = (*visitor)(cur, other, twctx->userdata); return rc; } diff --git a/src/csync/csync.h b/src/csync/csync.h index 1cf16f937..b8d882ab8 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -195,47 +195,6 @@ struct csync_file_stat_s { { } }; -/** - * CSync File Traversal structure. - * - * This structure is passed to the visitor function for every file - * which is seen. - * - */ - -struct csync_tree_walk_file_s { - const char *path; - int64_t size; - int64_t inode; - time_t modtime; - mode_t mode; - enum csync_ftw_type_e type; - enum csync_instructions_e instruction; - - /* For directories: Does it have children that were ignored (hidden or ignore pattern) */ - int has_ignored_files; - - const char *rename_path; - const char *etag; - const char *file_id; - const char *remotePerm; - char *directDownloadUrl; - char *directDownloadCookies; - - const char *checksumHeader; - - struct { - int64_t size; - time_t modtime; - const char *etag; - const char *file_id; - enum csync_instructions_e instruction; - } other; - - CSYNC_STATUS error_status; -}; -typedef struct csync_tree_walk_file_s TREE_WALK_FILE; - /** * csync handle */ @@ -402,7 +361,7 @@ CSYNC_STATUS OCSYNC_EXPORT csync_get_status(CSYNC *ctx); /* Used for special modes or debugging */ int OCSYNC_EXPORT csync_set_status(CSYNC *ctx, int status); -typedef int csync_treewalk_visit_func(TREE_WALK_FILE* ,void*); +typedef int csync_treewalk_visit_func(csync_file_stat_t *cur, csync_file_stat_t *other, void*); /** * @brief Walk the local file tree and call a visitor function for each file. diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index df0f2e0e8..dac3cde37 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -334,14 +334,14 @@ void SyncEngine::deleteStaleErrorBlacklistEntries(const SyncFileItemVector &sync _journal->deleteStaleErrorBlacklistEntries(blacklist_file_paths); } -int SyncEngine::treewalkLocal(TREE_WALK_FILE *file, void *data) +int SyncEngine::treewalkLocal(csync_file_stat_t *file, csync_file_stat_t *other, void *data) { - return static_cast(data)->treewalkFile(file, false); + return static_cast(data)->treewalkFile(file, other, false); } -int SyncEngine::treewalkRemote(TREE_WALK_FILE *file, void *data) +int SyncEngine::treewalkRemote(csync_file_stat_t *file, csync_file_stat_t *other, void *data) { - return static_cast(data)->treewalkFile(file, true); + return static_cast(data)->treewalkFile(file, other, true); } /** @@ -354,7 +354,7 @@ int SyncEngine::treewalkRemote(TREE_WALK_FILE *file, void *data) * * See doc/dev/sync-algorithm.md for an overview. */ -int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) +int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, bool remote) { if (!file) return -1; @@ -407,17 +407,17 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) } } - if (file->file_id && file->file_id[0]) { + if (!file->file_id.isEmpty()) { item->_fileId = file->file_id; } - if (file->directDownloadUrl) { + if (!file->directDownloadUrl.isEmpty()) { item->_directDownloadUrl = QString::fromUtf8(file->directDownloadUrl); } - if (file->directDownloadCookies) { + if (!file->directDownloadCookies.isEmpty()) { item->_directDownloadCookies = QString::fromUtf8(file->directDownloadCookies); } - if (file->remotePerm && file->remotePerm[0]) { - item->_remotePerm = QByteArray(file->remotePerm); + if (!file->remotePerm.isEmpty()) { + item->_remotePerm = file->remotePerm; if (remote) _remotePerms[item->_file] = item->_remotePerm; } @@ -438,12 +438,12 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) } // Sometimes the discovery computes checksums for local files - if (!remote && file->checksumHeader) { - item->_checksumHeader = QByteArray(file->checksumHeader); + if (!remote && !file->checksumHeader.isEmpty()) { + item->_checksumHeader = file->checksumHeader; } // For conflicts, store the remote checksum there - if (remote && item->_instruction == CSYNC_INSTRUCTION_CONFLICT && file->checksumHeader) { - item->_checksumHeader = QByteArray(file->checksumHeader); + if (remote && item->_instruction == CSYNC_INSTRUCTION_CONFLICT && !file->checksumHeader.isEmpty()) { + item->_checksumHeader = file->checksumHeader; } // record the seen files to be able to clean the journal later @@ -533,7 +533,7 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) bool isDirectory = file->type == CSYNC_FTW_TYPE_DIR; - if (file->etag && file->etag[0]) { + if (!file->etag.isEmpty()) { item->_etag = file->etag; } @@ -562,7 +562,7 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) switch (file->instruction) { case CSYNC_INSTRUCTION_NONE: { // Any files that are instruction NONE? - if (!isDirectory && file->other.instruction == CSYNC_INSTRUCTION_NONE) { + if (!isDirectory && (!other || other->instruction == CSYNC_INSTRUCTION_NONE)) { _hasNoneFiles = true; } // No syncing or update to be done. @@ -592,11 +592,13 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) if (remote) { QString filePath = _localPath + item->_file; - // Even if the mtime is different on the server, we always want to keep the mtime from - // the file system in the DB, this is to avoid spurious upload on the next sync - item->_modtime = file->other.modtime; - // same for the size - item->_size = file->other.size; + if (other) { + // Even if the mtime is different on the server, we always want to keep the mtime from + // the file system in the DB, this is to avoid spurious upload on the next sync + item->_modtime = other->modtime; + // same for the size + item->_size = other->size; + } // If the 'W' remote permission changed, update the local filesystem SyncJournalFileRecord prev = _journal->getFileRecord(item->_file); @@ -638,7 +640,7 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) // This counts as a NONE for detecting if all the files on the server were changed _hasNoneFiles = true; } else if (!isDirectory) { - auto difftime = std::difftime(file->modtime, file->other.modtime); + auto difftime = std::difftime(file->modtime, other ? other->modtime : 0); if (difftime < -3600 * 2) { // We are going back on time // We only increment if the difference is more than two hours to avoid clock skew @@ -672,11 +674,13 @@ int SyncEngine::treewalkFile(TREE_WALK_FILE *file, bool remote) _needsUpdate = true; - item->log._other_etag = file->other.etag; - item->log._other_fileId = file->other.file_id; - item->log._other_instruction = file->other.instruction; - item->log._other_modtime = file->other.modtime; - item->log._other_size = file->other.size; + if (other) { + item->log._other_etag = other->etag; + item->log._other_fileId = other->file_id; + item->log._other_instruction = other->instruction; + item->log._other_modtime = other->modtime; + item->log._other_size = other->size; + } _syncItemMap.insert(key, item); diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index 50e52f6f4..ec4d6712f 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -170,9 +170,9 @@ private: QString journalDbFilePath() const; - static int treewalkLocal(TREE_WALK_FILE *, void *); - static int treewalkRemote(TREE_WALK_FILE *, void *); - int treewalkFile(TREE_WALK_FILE *, bool); + static int treewalkLocal(csync_file_stat_t *file, csync_file_stat_t *other, void *); + static int treewalkRemote(csync_file_stat_t *file, csync_file_stat_t *other, void *); + int treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, bool); bool checkErrorBlacklisting(SyncFileItem &item); // Cleans up unnecessary downloadinfo entries in the journal as well From f6136dd036a2b48e1cc16455876aa787112685cd Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 4 Sep 2017 15:09:09 +0200 Subject: [PATCH 018/166] Remove csync_s::replica The only difference with csync_s::current is that it's assigned the value of csync_s::local::type and csync_s::remote::type, which never change. So might as well only use the "current" field with constants. --- src/csync/csync.cpp | 8 -------- src/csync/csync_private.h | 5 ----- src/csync/csync_update.cpp | 2 +- src/csync/vio/csync_vio.cpp | 18 +++++++++--------- test/csync/vio_tests/check_vio.cpp | 2 +- test/csync/vio_tests/check_vio_ext.cpp | 2 +- 6 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index aa531e18b..0f028731d 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -114,10 +114,6 @@ void csync_init(CSYNC *ctx, const char *db_file) { assert(!(ctx->status & CSYNC_STATUS_INIT)); ctx->status_code = CSYNC_STATUS_OK; - ctx->local.type = LOCAL_REPLICA; - - ctx->remote.type = REMOTE_REPLICA; - SAFE_FREE(ctx->statedb.file); ctx->statedb.file = c_strdup(db_file); @@ -159,7 +155,6 @@ int csync_update(CSYNC *ctx) { /* update detection for local replica */ csync_gettime(&start); ctx->current = LOCAL_REPLICA; - ctx->replica = ctx->local.type; rc = csync_ftw(ctx, ctx->local.uri, csync_walker, MAX_DEPTH); if (rc < 0) { @@ -179,7 +174,6 @@ int csync_update(CSYNC *ctx) { /* update detection for remote replica */ csync_gettime(&start); ctx->current = REMOTE_REPLICA; - ctx->replica = ctx->remote.type; rc = csync_ftw(ctx, "", csync_walker, MAX_DEPTH); if (rc < 0) { @@ -225,7 +219,6 @@ int csync_reconcile(CSYNC *ctx) { } ctx->current = LOCAL_REPLICA; - ctx->replica = ctx->local.type; rc = csync_reconcile_updates(ctx); @@ -246,7 +239,6 @@ int csync_reconcile(CSYNC *ctx) { csync_gettime(&start); ctx->current = REMOTE_REPLICA; - ctx->replica = ctx->remote.type; rc = csync_reconcile_updates(ctx); diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index aa1ead2ab..3d0c30b6e 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -106,12 +106,10 @@ struct csync_s { struct { char *uri; c_rbtree_t *tree; - enum csync_replica_e type; } local; struct { c_rbtree_t *tree; - enum csync_replica_e type; int read_from_db; const char *root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ } remote; @@ -120,9 +118,6 @@ struct csync_s { /* replica we are currently walking */ enum csync_replica_e current; - /* replica we want to work on */ - enum csync_replica_e replica; - /* Used in the update phase so changes in the sub directories can be notified to parent directories */ csync_file_stat_t *current_fs; diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index fab7acd4a..d3cdfab89 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -660,7 +660,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, } /* Only for the local replica we have to stat(), for the remote one we have all data already */ - if (ctx->replica == LOCAL_REPLICA) { + if (ctx->current == LOCAL_REPLICA) { res = csync_vio_stat(ctx, filename, dirent.get()); } else { res = 0; diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index cea6b04e1..57eb46c39 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -38,7 +38,7 @@ #include "csync_log.h" csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { - switch(ctx->replica) { + switch(ctx->current) { case REMOTE_REPLICA: if(ctx->remote.read_from_db) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Read from db flag is true, should not!" ); @@ -47,12 +47,12 @@ csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { break; case LOCAL_REPLICA: if( ctx->callbacks.update_callback ) { - ctx->callbacks.update_callback(ctx->replica, name, ctx->callbacks.update_callback_userdata); + ctx->callbacks.update_callback(ctx->current, name, ctx->callbacks.update_callback_userdata); } return csync_vio_local_opendir(name); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->replica); + CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); break; } return NULL; @@ -66,7 +66,7 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { return -1; } - switch(ctx->replica) { + switch(ctx->current) { case REMOTE_REPLICA: if( ctx->remote.read_from_db ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Remote ReadFromDb is true, should not!"); @@ -78,14 +78,14 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { rc = csync_vio_local_closedir(dhandle); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->replica); + CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); break; } return rc; } std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle) { - switch(ctx->replica) { + switch(ctx->current) { case REMOTE_REPLICA: if( ctx->remote.read_from_db ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Remote readfromdb is true, should not!"); @@ -96,7 +96,7 @@ std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handl return csync_vio_local_readdir(dhandle); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->replica); + CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); break; } @@ -107,10 +107,10 @@ std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handl int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf) { int rc = -1; - switch(ctx->replica) { + switch(ctx->current) { case REMOTE_REPLICA: CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "ERROR: Cannot call remote stat, not implemented"); - assert(ctx->replica != REMOTE_REPLICA); + assert(ctx->current != REMOTE_REPLICA); break; case LOCAL_REPLICA: rc = csync_vio_local_stat(uri, buf); diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index cdb36a6a0..6f4f3a9b4 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -51,7 +51,7 @@ static int setup(void **state) csync_create(&csync, "/tmp/csync1"); - csync->replica = LOCAL_REPLICA; + csync->current = LOCAL_REPLICA; *state = csync; return 0; diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index d93bdef01..faf5804e7 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -99,7 +99,7 @@ static int setup_testenv(void **state) { csync_create(&(mystate->csync), "/tmp/csync1"); - mystate->csync->replica = LOCAL_REPLICA; + mystate->csync->current = LOCAL_REPLICA; *state = mystate; return 0; From b1bb7ec1a8edd1c973903e09f65dd8ff3a41883d Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 4 Sep 2017 19:06:13 +0200 Subject: [PATCH 019/166] Use a C++ contructor and destructor for CSYNC Merge csync_create and csync_init into the constructor and replace csync_destroy with the destructor. Also use a QByteArray for csync_s::root_perms and flatten csync_rename_s as a rename sub-struct of csync_s since it can now handle C++ types. --- src/csync/csync.cpp | 144 ++++++------------ src/csync/csync.h | 38 +---- src/csync/csync_private.h | 80 +++++----- src/csync/csync_rename.cpp | 36 +---- src/csync/csync_rename.h | 1 - src/libsync/discoveryphase.cpp | 4 +- src/libsync/syncengine.cpp | 29 ++-- src/libsync/syncengine.h | 2 +- test/csync/CMakeLists.txt | 3 - test/csync/csync_tests/check_csync_commit.cpp | 103 ------------- test/csync/csync_tests/check_csync_create.cpp | 60 -------- .../csync/csync_tests/check_csync_exclude.cpp | 7 +- test/csync/csync_tests/check_csync_init.cpp | 88 ----------- test/csync/csync_tests/check_csync_log.cpp | 8 +- .../csync_tests/check_csync_statedb_load.cpp | 7 +- .../csync_tests/check_csync_statedb_query.cpp | 6 +- test/csync/csync_tests/check_csync_update.cpp | 12 +- test/csync/vio_tests/check_vio.cpp | 5 +- test/csync/vio_tests/check_vio_ext.cpp | 5 +- test/testcsyncsqlite.cpp | 27 ++-- 20 files changed, 144 insertions(+), 521 deletions(-) delete mode 100644 test/csync/csync_tests/check_csync_commit.cpp delete mode 100644 test/csync/csync_tests/check_csync_create.cpp delete mode 100644 test/csync/csync_tests/check_csync_init.cpp diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index 0f028731d..b37e2bdcd 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -82,50 +82,19 @@ static int _data_cmp(const void *key, const void *data) { return 0; } -void csync_create(CSYNC **csync, const char *local) { - CSYNC *ctx; +csync_s::csync_s(const char *localUri, const char *db_file) { size_t len = 0; - ctx = (CSYNC*)c_malloc(sizeof(CSYNC)); - - ctx->status_code = CSYNC_STATUS_OK; - /* remove trailing slashes */ - len = strlen(local); - while(len > 0 && local[len - 1] == '/') --len; + len = strlen(localUri); + while(len > 0 && localUri[len - 1] == '/') --len; - ctx->local.uri = c_strndup(local, len); + local.uri = c_strndup(localUri, len); - ctx->status_code = CSYNC_STATUS_OK; + c_rbtree_create(&local.tree, _key_cmp, _data_cmp); + c_rbtree_create(&remote.tree, _key_cmp, _data_cmp); - ctx->current_fs = NULL; - - ctx->abort = false; - - ctx->ignore_hidden_files = true; - - *csync = ctx; -} - -void csync_init(CSYNC *ctx, const char *db_file) { - assert(ctx); - /* Do not initialize twice */ - - assert(!(ctx->status & CSYNC_STATUS_INIT)); - ctx->status_code = CSYNC_STATUS_OK; - - SAFE_FREE(ctx->statedb.file); - ctx->statedb.file = c_strdup(db_file); - - c_rbtree_create(&ctx->local.tree, _key_cmp, _data_cmp); - c_rbtree_create(&ctx->remote.tree, _key_cmp, _data_cmp); - - ctx->remote.root_perms = 0; - - ctx->status = CSYNC_STATUS_INIT; - - /* initialize random generator */ - srand(time(NULL)); + statedb.file = c_strdup(db_file); } int csync_update(CSYNC *ctx) { @@ -438,88 +407,69 @@ static void _tree_destructor(void *data) { delete freedata; } -/* reset all the list to empty. - * used by csync_commit and csync_destroy */ -static void _csync_clean_ctx(CSYNC *ctx) -{ - /* destroy the rbtrees */ - if (c_rbtree_size(ctx->local.tree) > 0) { - c_rbtree_destroy(ctx->local.tree, _tree_destructor); - } - - if (c_rbtree_size(ctx->remote.tree) > 0) { - c_rbtree_destroy(ctx->remote.tree, _tree_destructor); - } - - csync_rename_destroy(ctx); - - /* free memory */ - c_rbtree_free(ctx->local.tree); - c_rbtree_free(ctx->remote.tree); - - SAFE_FREE(ctx->remote.root_perms); -} - -int csync_commit(CSYNC *ctx) { +int csync_s::reinitialize() { int rc = 0; - if (ctx == NULL) { - return -1; - } + status_code = CSYNC_STATUS_OK; - ctx->status_code = CSYNC_STATUS_OK; - - if (ctx->statedb.db != NULL - && csync_statedb_close(ctx) < 0) { + if (statedb.db != NULL + && csync_statedb_close(this) < 0) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "ERR: closing of statedb failed."); rc = -1; } - ctx->statedb.db = NULL; + statedb.db = NULL; - _csync_clean_ctx(ctx); + /* destroy the rbtrees */ + if (c_rbtree_size(local.tree) > 0) { + c_rbtree_destroy(local.tree, _tree_destructor); + } - ctx->remote.read_from_db = 0; - ctx->read_remote_from_db = true; - ctx->db_is_empty = false; + if (c_rbtree_size(remote.tree) > 0) { + c_rbtree_destroy(remote.tree, _tree_destructor); + } + /* free memory */ + c_rbtree_free(local.tree); + c_rbtree_free(remote.tree); + + remote.read_from_db = 0; + read_remote_from_db = true; + db_is_empty = false; /* Create new trees */ - c_rbtree_create(&ctx->local.tree, _key_cmp, _data_cmp); - c_rbtree_create(&ctx->remote.tree, _key_cmp, _data_cmp); + c_rbtree_create(&local.tree, _key_cmp, _data_cmp); + c_rbtree_create(&remote.tree, _key_cmp, _data_cmp); - - ctx->status = CSYNC_STATUS_INIT; - SAFE_FREE(ctx->error_string); + status = CSYNC_STATUS_INIT; + SAFE_FREE(error_string); rc = 0; return rc; } -int csync_destroy(CSYNC *ctx) { - int rc = 0; - - if (ctx == NULL) { - errno = EBADF; - return -1; - } - ctx->status_code = CSYNC_STATUS_OK; - - if (ctx->statedb.db != NULL - && csync_statedb_close(ctx) < 0) { +csync_s::~csync_s() { + if (statedb.db != NULL + && csync_statedb_close(this) < 0) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "ERR: closing of statedb failed."); - rc = -1; } - ctx->statedb.db = NULL; + statedb.db = NULL; - _csync_clean_ctx(ctx); + /* destroy the rbtrees */ + if (c_rbtree_size(local.tree) > 0) { + c_rbtree_destroy(local.tree, _tree_destructor); + } - SAFE_FREE(ctx->statedb.file); - SAFE_FREE(ctx->local.uri); - SAFE_FREE(ctx->error_string); + if (c_rbtree_size(remote.tree) > 0) { + c_rbtree_destroy(remote.tree, _tree_destructor); + } - SAFE_FREE(ctx); + /* free memory */ + c_rbtree_free(local.tree); + c_rbtree_free(remote.tree); - return rc; + SAFE_FREE(statedb.file); + SAFE_FREE(local.uri); + SAFE_FREE(error_string); } void *csync_get_userdata(CSYNC *ctx) { diff --git a/src/csync/csync.h b/src/csync/csync.h index b8d882ab8..e2a8bb62d 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -152,7 +152,7 @@ enum csync_ftw_type_e { typedef struct csync_file_stat_s csync_file_stat_t; -struct csync_file_stat_s { +struct OCSYNC_EXPORT csync_file_stat_s { uint64_t phash; time_t modtime; int64_t size; @@ -225,22 +225,6 @@ typedef int (*csync_vio_stat_hook) (csync_vio_handle_t *dhhandle, typedef QByteArray (*csync_checksum_hook)( const QByteArray &path, const QByteArray &otherChecksumHeader, void *userdata); -/** - * @brief Allocate a csync context. - * - * @param csync The context variable to allocate. - */ -void OCSYNC_EXPORT csync_create(CSYNC **csync, const char *local); - -/** - * @brief Initialize the file synchronizer. - * - * This function loads the configuration - * - * @param ctx The context to initialize. - */ -void OCSYNC_EXPORT csync_init(CSYNC *ctx, const char *db_file); - /** * @brief Update detection * @@ -259,26 +243,6 @@ int OCSYNC_EXPORT csync_update(CSYNC *ctx); */ int OCSYNC_EXPORT csync_reconcile(CSYNC *ctx); -/** - * @brief Re-initializes the csync context - * - * @param ctx The context to commit. - * - * @return 0 on success, less than 0 if an error occurred. - */ -int OCSYNC_EXPORT csync_commit(CSYNC *ctx); - -/** - * @brief Destroy the csync context - * - * frees the memory. - * - * @param ctx The context to destroy. - * - * @return 0 on success, less than 0 if an error occurred. - */ -int OCSYNC_EXPORT csync_destroy(CSYNC *ctx); - /** * @brief Get the userdata saved in the context. * diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 3d0c30b6e..605e1b252 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -32,6 +32,7 @@ #ifndef _CSYNC_PRIVATE_H #define _CSYNC_PRIVATE_H +#include #include #include #include @@ -67,82 +68,89 @@ enum csync_replica_e { /** * @brief csync public structure */ -struct csync_s { +struct OCSYNC_EXPORT csync_s { struct { - csync_auth_callback auth_function; - void *userdata; - csync_update_callback update_callback; - void *update_callback_userdata; + csync_auth_callback auth_function = nullptr; + void *userdata = nullptr; + csync_update_callback update_callback = nullptr; + void *update_callback_userdata = nullptr; /* hooks for checking the white list (uses the update_callback_userdata) */ - int (*checkSelectiveSyncBlackListHook)(void*, const char*); - int (*checkSelectiveSyncNewFolderHook)(void*, const char* /* path */, const char* /* remotePerm */); + int (*checkSelectiveSyncBlackListHook)(void*, const char*) = nullptr; + int (*checkSelectiveSyncNewFolderHook)(void*, const char* /* path */, const char* /* remotePerm */) = nullptr; - csync_vio_opendir_hook remote_opendir_hook; - csync_vio_readdir_hook remote_readdir_hook; - csync_vio_closedir_hook remote_closedir_hook; - void *vio_userdata; + csync_vio_opendir_hook remote_opendir_hook = nullptr; + csync_vio_readdir_hook remote_readdir_hook = nullptr; + csync_vio_closedir_hook remote_closedir_hook = nullptr; + void *vio_userdata = nullptr; /* hook for comparing checksums of files during discovery */ - csync_checksum_hook checksum_hook; - void *checksum_userdata; + csync_checksum_hook checksum_hook = nullptr; + void *checksum_userdata = nullptr; } callbacks; - c_strlist_t *excludes; + c_strlist_t *excludes = nullptr; struct { - char *file; - sqlite3 *db; - int exists; + char *file = nullptr; + sqlite3 *db = nullptr; + bool exists = false; - sqlite3_stmt* by_hash_stmt; - sqlite3_stmt* by_fileid_stmt; - sqlite3_stmt* by_inode_stmt; + sqlite3_stmt* by_hash_stmt = nullptr; + sqlite3_stmt* by_fileid_stmt = nullptr; + sqlite3_stmt* by_inode_stmt = nullptr; int lastReturnValue; } statedb; struct { - char *uri; - c_rbtree_t *tree; + std::map folder_renamed_to; // map from->to + std::map folder_renamed_from; // map to->from + } renames; + + struct { + char *uri = nullptr; + c_rbtree_t *tree = nullptr; } local; struct { - c_rbtree_t *tree; - int read_from_db; - const char *root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ + c_rbtree_t *tree = nullptr; + bool read_from_db = false; + QByteArray root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ } remote; - /* replica we are currently walking */ - enum csync_replica_e current; + enum csync_replica_e current = LOCAL_REPLICA; /* Used in the update phase so changes in the sub directories can be notified to parent directories */ - csync_file_stat_t *current_fs; + csync_file_stat_t *current_fs = nullptr; /* csync error code */ - enum csync_status_codes_e status_code; + enum csync_status_codes_e status_code = CSYNC_STATUS_OK; - char *error_string; + char *error_string = nullptr; - int status; - volatile int abort; - void *rename_info; + int status = CSYNC_STATUS_INIT; + volatile bool abort = false; /** * Specify if it is allowed to read the remote tree from the DB (default to enabled) */ - bool read_remote_from_db; + bool read_remote_from_db = false; /** * If true, the DB is considered empty and all reads are skipped. (default is false) * This is useful during the initial local discovery as it speeds it up significantly. */ - bool db_is_empty; + bool db_is_empty = false; - bool ignore_hidden_files; + bool ignore_hidden_files = true; + + csync_s(const char *localUri, const char *db_file); + ~csync_s(); + int reinitialize(); }; /* diff --git a/src/csync/csync_rename.cpp b/src/csync/csync_rename.cpp index 1408e6783..5196020ee 100644 --- a/src/csync/csync_rename.cpp +++ b/src/csync/csync_rename.cpp @@ -21,7 +21,6 @@ #include "csync_private.h" #include "csync_rename.h" -#include #include #include #include @@ -33,36 +32,17 @@ static std::string _parentDir(const std::string &path) { return path.substr(0, len); } -struct csync_rename_s { - static csync_rename_s *get(CSYNC *ctx) { - if (!ctx->rename_info) { - ctx->rename_info = new csync_rename_s; - } - return reinterpret_cast(ctx->rename_info); - } - - std::map folder_renamed_to; // map from->to - std::map folder_renamed_from; // map to->from -}; - -void csync_rename_destroy(CSYNC* ctx) -{ - delete reinterpret_cast(ctx->rename_info); - ctx->rename_info = 0; -} - void csync_rename_record(CSYNC* ctx, const char* from, const char* to) { - csync_rename_s::get(ctx)->folder_renamed_to[from] = to; - csync_rename_s::get(ctx)->folder_renamed_from[to] = from; + ctx->renames.folder_renamed_to[from] = to; + ctx->renames.folder_renamed_from[to] = from; } char* csync_rename_adjust_path(CSYNC* ctx, const char* path) { - csync_rename_s* d = csync_rename_s::get(ctx); for (std::string p = _parentDir(path); !p.empty(); p = _parentDir(p)) { - std::map< std::string, std::string >::iterator it = d->folder_renamed_to.find(p); - if (it != d->folder_renamed_to.end()) { + std::map< std::string, std::string >::iterator it = ctx->renames.folder_renamed_to.find(p); + if (it != ctx->renames.folder_renamed_to.end()) { std::string rep = it->second + (path + p.length()); return c_strdup(rep.c_str()); } @@ -72,10 +52,9 @@ char* csync_rename_adjust_path(CSYNC* ctx, const char* path) char* csync_rename_adjust_path_source(CSYNC* ctx, const char* path) { - csync_rename_s* d = csync_rename_s::get(ctx); for (std::string p = _parentDir(path); !p.empty(); p = _parentDir(p)) { - std::map< std::string, std::string >::iterator it = d->folder_renamed_from.find(p); - if (it != d->folder_renamed_from.end()) { + std::map< std::string, std::string >::iterator it = ctx->renames.folder_renamed_from.find(p); + if (it != ctx->renames.folder_renamed_from.end()) { std::string rep = it->second + (path + p.length()); return c_strdup(rep.c_str()); } @@ -84,6 +63,5 @@ char* csync_rename_adjust_path_source(CSYNC* ctx, const char* path) } bool csync_rename_count(CSYNC *ctx) { - csync_rename_s* d = csync_rename_s::get(ctx); - return d->folder_renamed_from.size(); + return ctx->renames.folder_renamed_from.size(); } diff --git a/src/csync/csync_rename.h b/src/csync/csync_rename.h index 7702a1376..509b78afc 100644 --- a/src/csync/csync_rename.h +++ b/src/csync/csync_rename.h @@ -26,7 +26,6 @@ char OCSYNC_EXPORT *csync_rename_adjust_path(CSYNC *ctx, const char *path); /* Return the source of a given path in case of renames */ char OCSYNC_EXPORT *csync_rename_adjust_path_source(CSYNC *ctx, const char *path); -void OCSYNC_EXPORT csync_rename_destroy(CSYNC *ctx); void OCSYNC_EXPORT csync_rename_record(CSYNC *ctx, const char *from, const char *to); /* Return the amount of renamed item recorded */ bool OCSYNC_EXPORT csync_rename_count(CSYNC *ctx); diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 3ba03cac9..db846e691 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -561,9 +561,9 @@ void DiscoveryMainThread::singleDirectoryJobFinishedWithErrorSlot(int csyncErrno void DiscoveryMainThread::singleDirectoryJobFirstDirectoryPermissionsSlot(const QString &p) { // Should be thread safe since the sync thread is blocked - if (!_discoveryJob->_csync_ctx->remote.root_perms) { + if (_discoveryJob->_csync_ctx->remote.root_perms.isEmpty()) { qCDebug(lcDiscovery) << "Permissions for root dir:" << p; - _discoveryJob->_csync_ctx->remote.root_perms = strdup(p.toUtf8()); + _discoveryJob->_csync_ctx->remote.root_perms = p.toUtf8(); } } diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index dac3cde37..6483ca435 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -87,10 +87,8 @@ SyncEngine::SyncEngine(AccountPtr account, const QString &localPath, // Everything in the SyncEngine expects a trailing slash for the localPath. ASSERT(localPath.endsWith(QLatin1Char('/'))); - csync_create(&_csync_ctx, localPath.toUtf8().data()); - const QString dbFile = _journal->databaseFilePath(); - csync_init(_csync_ctx, dbFile.toUtf8().data()); + _csync_ctx.reset(new CSYNC(localPath.toUtf8().data(), dbFile.toUtf8().data())); _excludedFiles.reset(new ExcludedFiles(&_csync_ctx->excludes)); _syncFileStatusTracker.reset(new SyncFileStatusTracker(this)); @@ -108,7 +106,6 @@ SyncEngine::~SyncEngine() _thread.quit(); _thread.wait(); _excludedFiles.reset(); - csync_destroy(_csync_ctx); } //Convert an error code from csync to a user readable string. @@ -786,7 +783,7 @@ void SyncEngine::startSync() _syncItemMap.clear(); _needsUpdate = false; - csync_resume(_csync_ctx); + csync_resume(_csync_ctx.data()); int fileRecordCount = -1; if (!_journal->exists()) { @@ -831,7 +828,7 @@ void SyncEngine::startSync() finalize(false); return; } - csync_set_userdata(_csync_ctx, this); + csync_set_userdata(_csync_ctx.data(), this); // Set up checksumming hook _csync_ctx->callbacks.checksum_hook = &CSyncChecksumHook::hook; @@ -861,7 +858,7 @@ void SyncEngine::startSync() connect(_discoveryMainThread, SIGNAL(etagConcatenation(QString)), this, SLOT(slotRootEtagReceived(QString))); } - DiscoveryJob *discoveryJob = new DiscoveryJob(_csync_ctx); + DiscoveryJob *discoveryJob = new DiscoveryJob(_csync_ctx.data()); discoveryJob->_selectiveSyncBlackList = selectiveSyncBlackList; discoveryJob->_selectiveSyncWhiteList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok); @@ -909,7 +906,7 @@ void SyncEngine::slotRootEtagReceived(const QString &e) void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) { if (discoveryResult < 0) { - handleSyncError(_csync_ctx, "csync_update"); + handleSyncError(_csync_ctx.data(), "csync_update"); return; } qCInfo(lcEngine) << "#### Discovery end #################################################### " << _stopWatch.addLapTime(QLatin1String("Discovery Finished")) << "ms"; @@ -929,8 +926,8 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) _progressInfo->_status = ProgressInfo::Reconcile; emit transmissionProgress(*_progressInfo); - if (csync_reconcile(_csync_ctx) < 0) { - handleSyncError(_csync_ctx, "csync_reconcile"); + if (csync_reconcile(_csync_ctx.data()) < 0) { + handleSyncError(_csync_ctx.data(), "csync_reconcile"); return; } @@ -947,21 +944,21 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) _temporarilyUnavailablePaths.clear(); _renamedFolders.clear(); - if (csync_walk_local_tree(_csync_ctx, &treewalkLocal, 0) < 0) { + if (csync_walk_local_tree(_csync_ctx.data(), &treewalkLocal, 0) < 0) { qCWarning(lcEngine) << "Error in local treewalk."; walkOk = false; } - if (walkOk && csync_walk_remote_tree(_csync_ctx, &treewalkRemote, 0) < 0) { + if (walkOk && csync_walk_remote_tree(_csync_ctx.data(), &treewalkRemote, 0) < 0) { qCWarning(lcEngine) << "Error in remote treewalk."; } - if (_csync_ctx->remote.root_perms) { + if (!_csync_ctx->remote.root_perms.isEmpty()) { _remotePerms[QLatin1String("")] = _csync_ctx->remote.root_perms; qCInfo(lcEngine) << "Permissions of the root folder: " << _remotePerms[QLatin1String("")]; } // Re-init the csync context to free memory - csync_commit(_csync_ctx); + _csync_ctx->reinitialize(); // The map was used for merging trees, convert it to a list: SyncFileItemVector syncItems = _syncItemMap.values().toVector(); @@ -1154,7 +1151,7 @@ void SyncEngine::finalize(bool success) _thread.quit(); _thread.wait(); - csync_commit(_csync_ctx); + _csync_ctx->reinitialize(); _journal->close(); qCInfo(lcEngine) << "CSync run took " << _stopWatch.addLapTime(QLatin1String("Sync Finished")) << "ms"; @@ -1564,7 +1561,7 @@ void SyncEngine::abort() qCInfo(lcEngine) << "Aborting sync"; // Sets a flag for the update phase - csync_request_abort(_csync_ctx); + csync_request_abort(_csync_ctx.data()); // Aborts the discovery phase job if (_discoveryMainThread) { diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index ec4d6712f..30de1f631 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -194,7 +194,7 @@ private: QMap _syncItemMap; AccountPtr _account; - CSYNC *_csync_ctx; + QScopedPointer _csync_ctx; bool _needsUpdate; bool _syncRunning; QString _localPath; diff --git a/test/csync/CMakeLists.txt b/test/csync/CMakeLists.txt index 6b26eb96c..a735f8a0b 100644 --- a/test/csync/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -31,7 +31,6 @@ add_cmocka_test(check_std_c_time std_tests/check_std_c_time.c ${TEST_TARGET_LIBR # This will be rewritten soon anyway. #add_cmocka_test(check_logger log_tests/check_log.cpp ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_create csync_tests/check_csync_create.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_log csync_tests/check_csync_log.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_exclude csync_tests/check_csync_exclude.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_statedb_load csync_tests/check_csync_statedb_load.cpp ${TEST_TARGET_LIBRARIES}) @@ -39,9 +38,7 @@ add_cmocka_test(check_csync_util csync_tests/check_csync_util.cpp ${TEST_TARGET_ add_cmocka_test(check_csync_misc csync_tests/check_csync_misc.cpp ${TEST_TARGET_LIBRARIES}) # csync tests which require init -add_cmocka_test(check_csync_init csync_tests/check_csync_init.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_statedb_query csync_tests/check_csync_statedb_query.cpp ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_commit csync_tests/check_csync_commit.cpp ${TEST_TARGET_LIBRARIES}) # vio add_cmocka_test(check_vio vio_tests/check_vio.cpp ${TEST_TARGET_LIBRARIES}) diff --git a/test/csync/csync_tests/check_csync_commit.cpp b/test/csync/csync_tests/check_csync_commit.cpp deleted file mode 100644 index b3d77913b..000000000 --- a/test/csync/csync_tests/check_csync_commit.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include - -#include "torture.h" - -#include "csync_private.h" - -static int setup(void **state) { - CSYNC *csync; - int rc; - - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - - csync_create(&csync, "/tmp/check_csync1"); - - *state = csync; - - return 0; -} - -static int setup_module(void **state) { - CSYNC *csync; - int rc; - - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - - csync_create(&csync, "/tmp/check_csync1"); - - csync_init(csync, "foo"); - *state = csync; - - return 0; -} - -static int teardown(void **state) { - CSYNC *csync = (CSYNC*)*state; - int rc; - - rc = csync_destroy(csync); - - rc = system("rm -rf /tmp/check_csync"); - assert_int_equal(rc, 0); - - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - - *state = NULL; - - return 0; -} - -static void check_csync_commit(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - int rc; - - rc = csync_commit(csync); - assert_int_equal(rc, 0); - - assert_int_equal(csync->status & CSYNC_STATUS_INIT, 1); -} - -static void check_csync_commit_dummy(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - int rc; - - rc = csync_commit(csync); - assert_int_equal(rc, 0); - - assert_int_equal(csync->status & CSYNC_STATUS_INIT, 1); - -} - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test_setup_teardown(check_csync_commit, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_commit_dummy, setup_module, teardown), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} diff --git a/test/csync/csync_tests/check_csync_create.cpp b/test/csync/csync_tests/check_csync_create.cpp deleted file mode 100644 index 082ef26b8..000000000 --- a/test/csync/csync_tests/check_csync_create.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include -#include - -#include "torture.h" - -#include "csync_private.h" - - -static void check_csync_destroy_null(void **state) -{ - int rc; - - (void) state; /* unused */ - - rc = csync_destroy(NULL); - assert_int_equal(rc, -1); -} - -static void check_csync_create(void **state) -{ - CSYNC *csync; - int rc; - - (void) state; /* unused */ - - csync_create(&csync, "/tmp/csync1"); - - rc = csync_destroy(csync); - assert_int_equal(rc, 0); -} - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test(check_csync_destroy_null), - cmocka_unit_test(check_csync_create), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 5841eddf0..91982118c 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -32,7 +32,7 @@ static int setup(void **state) { CSYNC *csync; - csync_create(&csync, "/tmp/check_csync1"); + csync = new CSYNC("/tmp/check_csync1", ""); *state = csync; return 0; @@ -42,7 +42,7 @@ static int setup_init(void **state) { CSYNC *csync; int rc; - csync_create(&csync, "/tmp/check_csync1"); + csync = new CSYNC("/tmp/check_csync1", ""); rc = csync_exclude_load(EXCLUDE_LIST_FILE, &(csync->excludes)); assert_int_equal(rc, 0); @@ -67,8 +67,7 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; rc = system("rm -rf /tmp/check_csync1"); assert_int_equal(rc, 0); diff --git a/test/csync/csync_tests/check_csync_init.cpp b/test/csync/csync_tests/check_csync_init.cpp deleted file mode 100644 index c0b4cdd6b..000000000 --- a/test/csync/csync_tests/check_csync_init.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include - -#include "torture.h" - -#include "csync_private.h" - -static int setup(void **state) { - CSYNC *csync; - int rc; - - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - - csync_create(&csync, "/tmp/check_csync1"); - - *state = csync; - return 0; -} - -static int setup_module(void **state) { - CSYNC *csync; - int rc; - - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - - csync_create(&csync, "/tmp/check_csync1"); - - *state = csync; - return 0; -} - -static int teardown(void **state) { - CSYNC *csync = (CSYNC*)*state; - int rc; - - rc = csync_destroy(csync); - - rc = system("rm -rf /tmp/check_csync"); - assert_int_equal(rc, 0); - - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - - *state = NULL; - - return 0; -} - -static void check_csync_init(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - - csync_init(csync, ""); - - assert_int_equal(csync->status & CSYNC_STATUS_INIT, 1); - -} - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test_setup_teardown(check_csync_init, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_init, setup_module, teardown), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - diff --git a/test/csync/csync_tests/check_csync_log.cpp b/test/csync/csync_tests/check_csync_log.cpp index b7c30c5a0..7953da730 100644 --- a/test/csync/csync_tests/check_csync_log.cpp +++ b/test/csync/csync_tests/check_csync_log.cpp @@ -28,25 +28,19 @@ #include "std/c_utf8.h" static int setup(void **state) { - CSYNC *csync; int rc; rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp/check_csync1"); + *state = NULL; - *state = csync; - return 0; } static int teardown(void **state) { - CSYNC *csync = (CSYNC*)*state; int rc; - rc = csync_destroy(csync); - rc = system("rm -rf /tmp/check_csync"); assert_int_equal(rc, 0); diff --git a/test/csync/csync_tests/check_csync_statedb_load.cpp b/test/csync/csync_tests/check_csync_statedb_load.cpp index a7bccd7ea..e496b8222 100644 --- a/test/csync/csync_tests/check_csync_statedb_load.cpp +++ b/test/csync/csync_tests/check_csync_statedb_load.cpp @@ -36,9 +36,7 @@ static int setup(void **state) { rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp/check_csync1"); - - csync->statedb.file = c_strdup( TESTDB ); + csync = new CSYNC("/tmp/check_csync1", TESTDB); *state = csync; sqlite3 *db = NULL; @@ -55,8 +53,7 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; rc = system("rm -rf /tmp/check_csync1"); assert_int_equal(rc, 0); diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp index d856d94ab..17c2a73e8 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -38,8 +38,7 @@ static int setup(void **state) assert_int_equal(rc, 0); rc = system("mkdir -p /tmp/check_csync"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp/check_csync1"); - csync_init(csync, TESTDB); + csync = new CSYNC("/tmp/check_csync1", TESTDB); sqlite3 *db = NULL; rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); @@ -100,8 +99,7 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc = 0; - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; rc = system("rm -rf /tmp/check_csync"); assert_int_equal(rc, 0); rc = system("rm -rf /tmp/check_csync1"); diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index 1b260ed8b..70624ec11 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -98,12 +98,11 @@ static int setup(void **state) assert_int_equal(rc, 0); rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp/check_csync1"); - csync_init(csync, TESTDB); + csync = new CSYNC("/tmp/check_csync1", TESTDB); /* Create a new db with metadata */ sqlite3 *db; - csync->statedb.file = c_strdup(TESTDB); + // csync->statedb.file = c_strdup(TESTDB); rc = sqlite3_open(csync->statedb.file, &db); statedb_create_metadata_table(db); if( firstrun ) { @@ -129,8 +128,7 @@ static int setup_ftw(void **state) assert_int_equal(rc, 0); rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp"); - csync_init(csync, TESTDB); + csync = new CSYNC("/tmp", TESTDB); sqlite3 *db = NULL; rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); @@ -151,11 +149,9 @@ static int setup_ftw(void **state) static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; - int rc; unlink( csync->statedb.file); - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; *state = NULL; diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index 6f4f3a9b4..006e3bc5c 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -49,7 +49,7 @@ static int setup(void **state) rc = system("rm -rf /tmp/csync_test"); assert_int_equal(rc, 0); - csync_create(&csync, "/tmp/csync1"); + csync = new CSYNC("/tmp/check_csync1", ""); csync->current = LOCAL_REPLICA; @@ -78,8 +78,7 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; rc = chdir(wd_buffer); assert_int_equal(rc, 0); diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index faf5804e7..10de6eb7d 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -97,7 +97,7 @@ static int setup_testenv(void **state) { statevar *mystate = (statevar*)malloc( sizeof(statevar) ); mystate->result = NULL; - csync_create(&(mystate->csync), "/tmp/csync1"); + mystate->csync = new CSYNC("/tmp/check_csync1", ""); mystate->csync->current = LOCAL_REPLICA; @@ -124,8 +124,7 @@ static int teardown(void **state) { output("================== Tearing down!\n"); - rc = csync_destroy(csync); - assert_int_equal(rc, 0); + delete csync; rc = _tchdir(wd_buffer); assert_int_equal(rc, 0); diff --git a/test/testcsyncsqlite.cpp b/test/testcsyncsqlite.cpp index fb2767816..4a470e7b0 100644 --- a/test/testcsyncsqlite.cpp +++ b/test/testcsyncsqlite.cpp @@ -14,22 +14,20 @@ class TestCSyncSqlite : public QObject Q_OBJECT private: - CSYNC _ctx; + CSYNC *_ctx; private slots: void initTestCase() { int rc; - memset(&_ctx, 0, sizeof(CSYNC)); - QString db = QCoreApplication::applicationDirPath() + "/test_journal.db"; - _ctx.statedb.file = c_strdup(db.toLocal8Bit()); + _ctx = new CSYNC("/tmp/check_csync1", db.toLocal8Bit()); - rc = csync_statedb_load((CSYNC*)(&_ctx), _ctx.statedb.file, &(_ctx.statedb.db)); + rc = csync_statedb_load(_ctx, _ctx->statedb.file, &(_ctx->statedb.db)); QVERIFY(rc == 0); } void testFullResult() { - std::unique_ptr st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), 2081025720555645157 ); + std::unique_ptr st = csync_statedb_get_stat_by_hash( _ctx, 2081025720555645157 ); QVERIFY(st.get()); QCOMPARE( QString::number(st->phash), QString::number(2081025720555645157) ); QCOMPARE( QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu") ); @@ -42,38 +40,39 @@ private slots: } void testByHash() { - std::unique_ptr st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), -7147279406142960289); + std::unique_ptr st = csync_statedb_get_stat_by_hash(_ctx, -7147279406142960289); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1")); - st = csync_statedb_get_stat_by_hash((CSYNC*)(&_ctx), 5426481156826978940); + st = csync_statedb_get_stat_by_hash(_ctx, 5426481156826978940); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1/c2")); } void testByInode() { - std::unique_ptr st = csync_statedb_get_stat_by_inode((CSYNC*)(&_ctx), 1709555); + std::unique_ptr st = csync_statedb_get_stat_by_inode(_ctx, 1709555); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu/zuzuzu")); - st = csync_statedb_get_stat_by_inode((CSYNC*)(&_ctx), 1706571); + st = csync_statedb_get_stat_by_inode(_ctx, 1706571); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared/for_kf/a2")); } void testByFileId() { - std::unique_ptr st = csync_statedb_get_stat_by_file_id((CSYNC*)(&_ctx), "00000556525d5af3d9625"); + std::unique_ptr st = csync_statedb_get_stat_by_file_id(_ctx, "00000556525d5af3d9625"); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu")); - st = csync_statedb_get_stat_by_file_id((CSYNC*)(&_ctx), "-0000001525d5af3d9625"); + st = csync_statedb_get_stat_by_file_id(_ctx, "-0000001525d5af3d9625"); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared")); } void cleanupTestCase() { - SAFE_FREE(_ctx.statedb.file); - csync_statedb_close((CSYNC*)(&_ctx)); + csync_statedb_close(_ctx); + delete _ctx; + _ctx = nullptr; } }; From 715b8c4683cc93d82c12d636f57e27283095a052 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 4 Sep 2017 17:40:56 +0200 Subject: [PATCH 020/166] Fix build after C++ conversion of csync Use the same macro as in SyncFileItem for bitfields on enums. Fixes #5993 --- src/csync/csync.h | 15 +++++++++++---- src/libsync/syncfileitem.h | 8 -------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/csync/csync.h b/src/csync/csync.h index e2a8bb62d..1bda232ff 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -42,6 +42,13 @@ #include #include +#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) && (__GNUC__ * 100 + __GNUC_MINOR__ < 408) +// openSuse 12.3 didn't like enum bitfields. +#define BITFIELD(size) +#else +#define BITFIELD(size) :size +#endif + enum csync_status_codes_e { CSYNC_STATUS_OK = 0, @@ -157,10 +164,10 @@ struct OCSYNC_EXPORT csync_file_stat_s { time_t modtime; int64_t size; uint64_t inode; - enum csync_ftw_type_e type : 4; - bool child_modified : 1; - bool has_ignored_files : 1; /* specify that a directory, or child directory contains ignored files */ - bool is_hidden : 1; // Not saved in the DB, only used during discovery for local files. + enum csync_ftw_type_e type BITFIELD(4); + bool child_modified BITFIELD(1); + bool has_ignored_files BITFIELD(1); // Specify that a directory, or child directory contains ignored files. + bool is_hidden BITFIELD(1); // Not saved in the DB, only used during discovery for local files. QByteArray path; QByteArray rename_path; diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index baa8a7510..571eabc19 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -23,14 +23,6 @@ #include -#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) && (__GNUC__ * 100 + __GNUC_MINOR__ < 408) -// openSuse 12.3 didn't like enum bitfields. -#define BITFIELD(size) -#else -#define BITFIELD(size) :size -#endif - - namespace OCC { /** From 92fc50d4b0f7574ca5e3fd2006f335d7b44e6a87 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 7 Sep 2017 10:16:16 +0200 Subject: [PATCH 021/166] csync_statedb: Make sure children of non-synced items aren't read from the DB Fix a regression during C++ conversion from 704ca366b38391c0ef56e090561b4a3a158307fb --- src/csync/csync_statedb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 523767dc4..3b0b33535 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -457,7 +457,7 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { st.reset(); rc = _csync_file_stat_from_metadata_table(st, stmt); if( st ) { - if( st->path == skipbase ) + if( st->path.startsWith(skipbase) ) break; CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded because the parent is", st->path.constData()); } From a18a601291caf631e4147f33f350f82898751b61 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 7 Sep 2017 10:26:19 +0200 Subject: [PATCH 022/166] csync_statedb: (really) Make sure children of non-synced items aren't read from the DB No tests are covering this and I reversed the original logic. --- src/csync/csync_statedb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 3b0b33535..4d2598f79 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -457,7 +457,7 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { st.reset(); rc = _csync_file_stat_from_metadata_table(st, stmt); if( st ) { - if( st->path.startsWith(skipbase) ) + if( !st->path.startsWith(skipbase) ) break; CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded because the parent is", st->path.constData()); } From 4b686a43949668f71cb6556842b2a099a91de755 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 7 Sep 2017 11:02:05 +0200 Subject: [PATCH 023/166] Fix compile errors cmocka seems to #define fail to something inappropriate. --- test/csync/csync_tests/check_csync_exclude.cpp | 4 ++-- test/csync/csync_tests/check_csync_log.cpp | 4 ++-- test/csync/csync_tests/check_csync_statedb_load.cpp | 4 ++-- test/csync/csync_tests/check_csync_statedb_query.cpp | 4 ++-- test/csync/csync_tests/check_csync_update.cpp | 4 ++-- test/csync/csync_tests/check_csync_util.cpp | 4 ++-- test/csync/encoding_tests/check_encoding.cpp | 2 +- test/csync/std_tests/check_std_c_path.c | 4 ++-- test/csync/std_tests/check_std_c_time.c | 4 ++-- test/csync/vio_tests/check_vio.cpp | 4 ++-- test/csync/vio_tests/check_vio_ext.cpp | 4 ++-- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 91982118c..99a771266 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -22,11 +22,11 @@ #include #include -#include "torture.h" - #define CSYNC_TEST 1 #include "csync_exclude.cpp" +#include "torture.h" + #define EXCLUDE_LIST_FILE SOURCEDIR"/../../sync-exclude.lst" static int setup(void **state) { diff --git a/test/csync/csync_tests/check_csync_log.cpp b/test/csync/csync_tests/check_csync_log.cpp index 7953da730..9c767b7c2 100644 --- a/test/csync/csync_tests/check_csync_log.cpp +++ b/test/csync/csync_tests/check_csync_log.cpp @@ -20,13 +20,13 @@ #include #include -#include "torture.h" - #include "csync.h" #include "csync_log.cpp" #include "c_private.h" #include "std/c_utf8.h" +#include "torture.h" + static int setup(void **state) { int rc; diff --git a/test/csync/csync_tests/check_csync_statedb_load.cpp b/test/csync/csync_tests/check_csync_statedb_load.cpp index e496b8222..f5761f9ff 100644 --- a/test/csync/csync_tests/check_csync_statedb_load.cpp +++ b/test/csync/csync_tests/check_csync_statedb_load.cpp @@ -19,11 +19,11 @@ */ #include -#include "torture.h" - #define CSYNC_TEST 1 #include "csync_statedb.cpp" +#include "torture.h" + #define TESTDB "/tmp/check_csync1/test.db" static int setup(void **state) { diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp index 17c2a73e8..d507c7108 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -17,16 +17,16 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "torture.h" #define CSYNC_TEST 1 #include "csync_statedb.cpp" +#include "torture.h" + #define TESTDB "/tmp/check_csync1/test.db" #define TESTDBTMP "/tmp/check_csync1/test.db.ctmp" - static int setup(void **state) { CSYNC *csync; diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index 70624ec11..184f6877e 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -17,10 +17,10 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "torture.h" - #include "csync_update.cpp" +#include "torture.h" + #define TESTDB "/tmp/check_csync/journal.db" static int firstrun = 1; diff --git a/test/csync/csync_tests/check_csync_util.cpp b/test/csync/csync_tests/check_csync_util.cpp index 0df637741..eb1e613ea 100644 --- a/test/csync/csync_tests/check_csync_util.cpp +++ b/test/csync/csync_tests/check_csync_util.cpp @@ -17,10 +17,10 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "torture.h" - #include "csync_util.h" +#include "torture.h" + static void check_csync_instruction_str(void **state) { const char *str; diff --git a/test/csync/encoding_tests/check_encoding.cpp b/test/csync/encoding_tests/check_encoding.cpp index 6252dde4d..2f327a3b0 100644 --- a/test/csync/encoding_tests/check_encoding.cpp +++ b/test/csync/encoding_tests/check_encoding.cpp @@ -17,7 +17,6 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "torture.h" #include #include "c_string.h" #include "c_path.h" @@ -27,6 +26,7 @@ #include #endif +#include "torture.h" static void check_iconv_to_native_normalization(void **state) { diff --git a/test/csync/std_tests/check_std_c_path.c b/test/csync/std_tests/check_std_c_path.c index 25a250aab..2513d3fa2 100644 --- a/test/csync/std_tests/check_std_c_path.c +++ b/test/csync/std_tests/check_std_c_path.c @@ -22,10 +22,10 @@ #include #include -#include "torture.h" - #include "std/c_path.h" +#include "torture.h" + static void check_c_basename(void **state) { char *bname; diff --git a/test/csync/std_tests/check_std_c_time.c b/test/csync/std_tests/check_std_c_time.c index 52c5fd808..db8e72ff6 100644 --- a/test/csync/std_tests/check_std_c_time.c +++ b/test/csync/std_tests/check_std_c_time.c @@ -19,12 +19,12 @@ */ #include -#include "torture.h" - #include "csync_time.h" #include "std/c_time.h" #include +#include "torture.h" + static void check_c_tspecdiff(void **state) { struct timespec start, finish, diff; diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index 006e3bc5c..31da1113b 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -23,12 +23,12 @@ #include #include -#include "torture.h" - #include "csync_private.h" #include "std/c_utf8.h" #include "vio/csync_vio.h" +#include "torture.h" + #define CSYNC_TEST_DIR "/tmp/csync_test/" #define CSYNC_TEST_DIRS "/tmp/csync_test/this/is/a/mkdirs/test" #define CSYNC_TEST_FILE "/tmp/csync_test/file.txt" diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index 10de6eb7d..625285ce0 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -24,8 +24,6 @@ #include #include -#include "torture.h" - #include "csync_private.h" #include "std/c_utf8.h" #include "vio/csync_vio.h" @@ -39,6 +37,8 @@ #endif #define MKDIR_MASK (S_IRWXU |S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) +#include "torture.h" + #define WD_BUFFER_SIZE 255 static mbchar_t wd_buffer[WD_BUFFER_SIZE]; From 506f7c0764ae8649a3e0d183a2c11a61f693db55 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 7 Sep 2017 11:10:23 +0200 Subject: [PATCH 024/166] Http credentials: Fix behavior for bad password #5989 When the GET request from askFromUser is scheduled on the QNAM inside the slot that handles the QNetworkReply::finished signal, it seems to not get processed at all. This workaround moves the sending of the new GET to the event loop, sidestepping the problem. --- src/gui/creds/httpcredentialsgui.cpp | 8 ++++++++ src/gui/creds/httpcredentialsgui.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index 2ab2d0d30..e65554f49 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -30,6 +30,14 @@ using namespace QKeychain; namespace OCC { void HttpCredentialsGui::askFromUser() +{ + // Unfortunately there's a bug that doesn't allow us to send the "is this + // OAuth2 or Basic auth?" GET request directly. Scheduling it for the event + // loop works though. See #5989. + QMetaObject::invokeMethod(this, "askFromUserAsync", Qt::QueuedConnection); +} + +void HttpCredentialsGui::askFromUserAsync() { _password = QString(); // So our QNAM does not add any auth diff --git a/src/gui/creds/httpcredentialsgui.h b/src/gui/creds/httpcredentialsgui.h index fefc4dd1d..94ebda152 100644 --- a/src/gui/creds/httpcredentialsgui.h +++ b/src/gui/creds/httpcredentialsgui.h @@ -48,7 +48,7 @@ public: * This will query the server and either uses OAuth via _asyncAuth->start() * or call showDialog to ask the password */ - Q_INVOKABLE void askFromUser() Q_DECL_OVERRIDE; + void askFromUser() Q_DECL_OVERRIDE; /** * In case of oauth, return an URL to the link to open the browser. * An invalid URL otherwise @@ -65,6 +65,8 @@ signals: void authorisationLinkChanged(); private: + Q_INVOKABLE void askFromUserAsync(); + QScopedPointer> _asyncAuth; }; From 5ede5ab4ce10ae82b62a73fd84a63f98c07ed326 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 8 Sep 2017 13:54:04 +0200 Subject: [PATCH 025/166] Fix the macOS Sparkle build --- src/gui/updater/sparkleupdater_mac.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/updater/sparkleupdater_mac.mm b/src/gui/updater/sparkleupdater_mac.mm index 1b0a48648..a1e3e4f05 100644 --- a/src/gui/updater/sparkleupdater_mac.mm +++ b/src/gui/updater/sparkleupdater_mac.mm @@ -18,6 +18,7 @@ #include #include +#include "common/utility.h" #include "updater/sparkleupdater.h" // Does not work yet From 8be2aaa751f03088efc5600be1d20adc732526b3 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 8 Sep 2017 15:23:01 +0200 Subject: [PATCH 026/166] Remove qtkeychain submodule #6004 --- .gitmodules | 3 --- src/3rdparty/qtkeychain | 1 - 2 files changed, 4 deletions(-) delete mode 160000 src/3rdparty/qtkeychain diff --git a/.gitmodules b/.gitmodules index ab18390aa..d25acc3cc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "src/3rdparty/libcrashreporter-qt"] path = src/3rdparty/libcrashreporter-qt url = git://github.com/dschmidt/libcrashreporter-qt.git -[submodule "src/3rdparty/qtkeychain"] - path = src/3rdparty/qtkeychain - url = https://github.com/frankosterfeld/qtkeychain.git diff --git a/src/3rdparty/qtkeychain b/src/3rdparty/qtkeychain deleted file mode 160000 index 08be0593e..000000000 --- a/src/3rdparty/qtkeychain +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 08be0593e100a041585bcc704a1bbc5a812a1682 From 6f270a364895d7f1f0a424c8347cd2913971cca4 Mon Sep 17 00:00:00 2001 From: rockihack Date: Mon, 4 Sep 2017 13:42:20 +0200 Subject: [PATCH 027/166] Enable DEP & ASLR on Windows --- src/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f871836cf..2133b6c2e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,6 +8,12 @@ if(NOT TOKEN_AUTH_ONLY) find_package(Qt5Keychain REQUIRED) endif() +if(WIN32) + # Enable DEP & ASLR + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") +endif() + add_subdirectory(csync) add_subdirectory(libsync) if (NOT BUILD_LIBRARIES_ONLY) From 2d7a4bdb064906ad704fa1d00d16b35902ef9db0 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 11 Sep 2017 15:32:42 +0200 Subject: [PATCH 028/166] Windows: Make sure that the folder and Desktop.ini have the right attributes (#6018) When created from scratch, the owncloud icon won't be picked-up by explorer unless the right attributes are set on both the sync root and the Desktop.ini file. Issue #2446 --- src/common/utility_win.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/common/utility_win.cpp b/src/common/utility_win.cpp index f7fef1019..5374b0986 100644 --- a/src/common/utility_win.cpp +++ b/src/common/utility_win.cpp @@ -43,6 +43,12 @@ static void setupFavLink_private(const QString &folder) desktopIni.write(QDir::toNativeSeparators(qApp->applicationFilePath()).toUtf8()); desktopIni.write(",0\r\n"); desktopIni.close(); + + // Set the folder as system and Desktop.ini as hidden+system for explorer to pick it. + // https://msdn.microsoft.com/en-us/library/windows/desktop/cc144102 + DWORD folderAttrs = GetFileAttributesW((wchar_t *)folder.utf16()); + SetFileAttributesW((wchar_t *)folder.utf16(), folderAttrs | FILE_ATTRIBUTE_SYSTEM); + SetFileAttributesW((wchar_t *)desktopIni.fileName().utf16(), FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM); } // Windows Explorer: Place under "Favorites" (Links) From 237b597e19724ff2d1bb0fc74953cc53edd8f44a Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 11 Sep 2017 16:03:15 +0200 Subject: [PATCH 029/166] [tx-robot] updated from transifex --- mirall.desktop.in | 14 + translations/client_ca.ts | 1648 ++++++++++++++++++-------------- translations/client_cs.ts | 1650 ++++++++++++++++++-------------- translations/client_de.ts | 1684 +++++++++++++++++++-------------- translations/client_el.ts | 1650 ++++++++++++++++++-------------- translations/client_en.ts | 1640 ++++++++++++++++++-------------- translations/client_es.ts | 1650 ++++++++++++++++++-------------- translations/client_es_AR.ts | 1640 ++++++++++++++++++-------------- translations/client_et.ts | 1646 ++++++++++++++++++-------------- translations/client_eu.ts | 1702 ++++++++++++++++++--------------- translations/client_fa.ts | 1644 ++++++++++++++++++-------------- translations/client_fi.ts | 1650 ++++++++++++++++++-------------- translations/client_fr.ts | 1654 ++++++++++++++++++-------------- translations/client_gl.ts | 1646 ++++++++++++++++++-------------- translations/client_hu.ts | 1658 ++++++++++++++++++-------------- translations/client_it.ts | 1650 ++++++++++++++++++-------------- translations/client_ja.ts | 1650 ++++++++++++++++++-------------- translations/client_nb_NO.ts | 1654 ++++++++++++++++++-------------- translations/client_nl.ts | 1652 ++++++++++++++++++-------------- translations/client_pl.ts | 1648 ++++++++++++++++++-------------- translations/client_pt.ts | 1650 ++++++++++++++++++-------------- translations/client_pt_BR.ts | 1650 ++++++++++++++++++-------------- translations/client_ru.ts | 1650 ++++++++++++++++++-------------- translations/client_sk.ts | 1646 ++++++++++++++++++-------------- translations/client_sl.ts | 1652 ++++++++++++++++++-------------- translations/client_sr.ts | 1646 ++++++++++++++++++-------------- translations/client_sv.ts | 1650 ++++++++++++++++++-------------- translations/client_th.ts | 1652 ++++++++++++++++++-------------- translations/client_tr.ts | 1648 ++++++++++++++++++-------------- translations/client_uk.ts | 1646 ++++++++++++++++++-------------- translations/client_zh_CN.ts | 1731 +++++++++++++++++++--------------- translations/client_zh_TW.ts | 1648 ++++++++++++++++++-------------- 32 files changed, 29102 insertions(+), 22197 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 55fb89e47..6726bda23 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -108,6 +108,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion @@ -164,6 +167,10 @@ Comment[fr]=Synchronisez vos dossiers avec un serveur @APPLICATION_NAME@ GenericName[fr]=Synchronisation de dossier Name[fr]=Client de synchronisation @APPLICATION_NAME@ Icon[fr]=@APPLICATION_EXECUTABLE@ +Comment[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio +GenericName[gl]=Sincronizar Cartafol +Name[gl]=@APPLICATION_NAME@ cliente de sincronización para escritorio +Icon[gl]=@APPLICATION_EXECUTABLE@ Comment[he]=@APPLICATION_NAME@ לקוח סנכון שולחן עבודה GenericName[he]=סנכון תיקייה Name[he]=@APPLICATION_NAME@ לקוח סנכרון שולחן עבודה @@ -191,6 +198,10 @@ 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[af_ZA]=@APPLICATION_NAME@ werkskermsinchroniseerkliënt +GenericName[af_ZA]=Vouersinchronisering +Name[af_ZA]=@APPLICATION_NAME@ werkskermsinchroniseerkliënt +Icon[af_ZA]=@APPLICATION_EXECUTABLE@ Comment[nl]=@APPLICATION_NAME@ desktop synchronisatie client GenericName[nl]=Mappen sync Name[nl]=@APPLICATION_NAME@ desktop sync client @@ -248,7 +259,10 @@ GenericName[zh_CN]=文件夹同步 Name[zh_CN]=@APPLICATION_NAME@ 桌面同步客户端 Icon[zh_CN]=@APPLICATION_EXECUTABLE@ Comment[zh_HK]=桌面版同步客户端 +Comment[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端 GenericName[zh_TW]=資料夾同步 +Name[zh_TW]=@APPLICATION_NAME@ 桌面同步客戶端 +Icon[zh_TW]=@APPLICATION_EXECUTABLE@ Comment[es_AR]=Cliente de sincronización para escritorio @APPLICATION_NAME@ GenericName[es_AR]=Sincronización de directorio Name[es_AR]=Cliente de sincronización para escritorio @APPLICATION_NAME@ diff --git a/translations/client_ca.ts b/translations/client_ca.ts index d64d4eaf0..0cc0ff2cf 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El fitxer de destinació té una mida o data de modificació inesperada @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancel·la @@ -136,188 +154,204 @@ Connectat amb <server> com a <user> - + No account configured. No hi ha cap compte configurat - + Add new Afegeix-ne un de nou - + Remove Elimina - + Account Compte - + Choose what to sync Trieu què sincronitzar - + Force sync now Força la sincronització ara - + Restart sync Reinicia la sincronització - + Remove folder sync connection Elimina la connexió de la carpeta sincronitzada - + Folder creation failed Ha fallat la creació de la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No s'ha pogut crear la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirma l'eliminació de la connexió de la carpeta sincronitzada - + Remove Folder Sync Connection Elimina la connexió de la carpeta sincronitzada - + Sync Running S'està sincronitzant - + The syncing operation is running.<br/>Do you want to terminate it? S'està sincronitzant.<br/>Voleu parar-la? - + %1 in use %1 en ús - + %1 as <i>%2</i> %1 com a <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versió del servidor %1 és antiga i fora de suport! Continua sota la teva responsabilitat. - + Connected to %1. Connectat a %1 - + Server %1 is temporarily unavailable. El servidor %1 no està disponible temporalment - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. S'ha desconnectat de %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. No hi ha connexió amb %1 a %2. - + Log in Inici de sessió - + There are folders that were not synchronized because they are too big: Hi ha carpetes que no s'han sincronitzat perquè són massa grans: - + There are folders that were not synchronized because they are external storages: Hi ha carpetes que no s'han sincronitzat perquè són fonts d'emmagatzematge externes: - + There are folders that were not synchronized because they are too big or external storages: Hi ha carpetes que no s'han sincronitzat perquè són massa grans o són fonts d'emmagatzematge externes: - + Confirm Account Removal Confirmeu l'eliminació del compte - + <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> <p>Segur que voleu eliminar la connexió al compte <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> esborrarà cap fitxer.</p> - + Remove connection Elimina la connexió - + + Open folder Obre la carpeta - - + + Log out Surt - + Resume sync Continua la sincronització - + Pause sync Pausa la sincronització - + <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> <p>Segur que voleu aturar la sincronització de la carpeta <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> esborrarà cap fitxer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en ús. Algunes carpetes, incloent les carpetes muntades a través de xarxa o les compartides, poden tenir límits diferents. - + %1 of %2 in use %1 de %2 en ús - + Currently there is no storage usage information available. Actualment no hi ha informació disponible de l'ús d'emmagatzemament. - + No %1 connection configured. La connexió %1 no està configurada. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out S'ha desconnectat - + Disconnected Desconnectat - + Connected Connectat - + Service unavailable Servei no disponible - + + Maintenance mode + + + + Network error Error de xarxa - + Configuration error Error de configuració - + + Asking Credentials + + + + Unknown account state Estat del compte desconegut @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Activitat del servidor - + Sync Protocol Protocol de sincronització - - List of ignored or erroneous files - Llista de fitxers ignorats o erronis - - - - Copy - Còpia - - - - Copy the activity list to the clipboard. - Copia la llista d'activitats al porta-retalls. - - - + Not Synced No sincronitzat - + Not Synced (%1) %1 is the number of not synced files. No sincronitzat (%1) - + The server activity list has been copied to the clipboard. La llista de l'activitat del servidor s'ha copiat al porta-retalls. - + The sync activity list has been copied to the clipboard. La llista d'activitat de sincronització s'ha copiat al porta-retalls - + The list of unsynced items has been copied to the clipboard. S'ha copiat una llista d'elements no sincronitzats al porta-retalls. - + Copied to clipboard S'ha copiat al porta-retalls @@ -448,47 +477,47 @@ TextLabel - + Server Activities Activitats del servidor - + Copy Còpia - + Copy the activity list to the clipboard. Copia la llista d'activitats al porta-retalls. - + Action Required: Notifications Es requereix una acció: Notificacions - + <br/>Account %1 does not have activities enabled. <br/>El compte %1 no té les activitats habilitades. - + You received %n new notification(s) from %2. Heu rebut %n nova notificació de %2.Heu rebut %n noves notificacions de %2. - + You received %n new notification(s) from %1 and %2. Heu rebut %n nova notificació de %1 i %2.Heu rebut %n noves notificacions de %1 i %2. - + You received new notifications from %1, %2 and other accounts. Heu rebut noves notificacions de %1, %2 i altres comptes. - + %1 Notifications - Action Required %1 notificacions - Es requereix una acció @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file S'ha produït un error en accedir al fitxer de configuració - + There was an error while accessing the configuration file at %1. Hi ha hagut un error en accedir al fitxer de configuració a %1. - + Quit ownCloud Surt de l'ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured No hi ha cap compte d'OwnCloud configurat - + The configured server for this client is too old El servidor configurat per aquest client és massa antic - + Please update to the latest server and restart the client. Actualitzeu el servidor a l'última versió i reestabliu el client. - + Authentication error: Either username or password are wrong. Error d'autentificació: Aquest nom d'usuari o contrasenya son incorrectes. - + timeout temps excedit - + The provided credentials are not correct Les credencials proporcionades no són correctes - - OCC::DeleteJob - - - Connection timed out - Temps d'espera de la connexió esgotat. - - OCC::DiscoveryMainThread - + Aborted by the user Aturat per l'usuari @@ -632,127 +653,127 @@ OCC::Folder - + Local folder %1 does not exist. El fitxer local %1 no existeix. - + %1 should be a folder but is not. %1 hauria de ser una carpeta, però no ho és. - + %1 is not readable. No es pot llegir %1. - + %1 has been removed. %1 names a file. S'ha esborrat '%1' - + %1 has been downloaded. %1 names a file. S'ha descarregat %1 - + %1 has been updated. %1 names a file. S'ha actualitzat %1 - + %1 has been renamed to %2. %1 and %2 name files. %1 s'ha reanomenat a %2. - + %1 has been moved to %2. %1 s'ha mogut a %2. - + %1 and %n other file(s) have been removed. %1 i %n altre fitxer s'ha esborrat.%1 i %n altres fitxers s'han esborrat. - + %1 and %n other file(s) have been downloaded. %1 i %n altre fitxer s'han descarregat.%1 i %n altres fitxers s'han descarregat. - + %1 and %n other file(s) have been updated. %1 i %n altre fitxer s'han actualitzat.%1 i %n altres fitxers s'han actualitzat. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 s'ha reanomenat a %2 i %n altre fitxer s'ha reanomenat.%1 s'ha reanomenat a %2 i %n altres fitxers s'han reanomenat. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 s'ha mogut a %2 i %n altre fitxer s'ha mogut.%1 s'ha mogut a %2 i %n altres fitxers s'han mogut. - + %1 has and %n other file(s) have sync conflicts. %1 i %n altre fitxer tenen conflictes de sincronització%1 i %n altres fitxers tenen conflictes de sincronització - + %1 has a sync conflict. Please check the conflict file! %1 té conflictes de sincronització. Comproveu el fitxer conflictiu! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 i %n altre fitxer no s'han sincronitzat per errors. Consulteu el registre per obtenir més informació.%1 i %n altres fitxers no s'han sincronitzat per errors. Consulteu el registre per obtenir més informació. - + %1 could not be synced due to an error. See the log for details. %1 no s'ha pogut sincronitzar degut a un error. Mireu el registre per més detalls. - + Sync Activity Activitat de sincronització - + Could not read system exclude file No s'ha pogut llegir el fitxer d'exclusió del sistema - + A new folder larger than %1 MB has been added: %2. S'ha afegit una carpeta de més de %1 MB: %2. - + A folder from an external storage has been added. S'ha afegit una carpeta d'una font d'emmagatzematge extern. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -760,46 +781,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Esborra tots els fitxers? - + Remove all files Esborra tots els fitxers - + Keep files Mantén els fitxers - + This sync would reset the files to an earlier 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? - + Backup detected Copia de seguretat detectada - + Normal Synchronisation Sincronització normal - + Keep Local Files as Conflict Manté els fitxers locals com a conflicte @@ -807,112 +828,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state No es pot restablir l'estat de la carpeta - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. S'ha trobat un diari de sincronització antic '%1', però no s'ha pogut eliminar. Assegureu-vos que no hi ha cap aplicació que actualment en faci ús. - + (backup) (copia de seguretat) - + (backup %1) (copia de seguretat %1) - + Undefined State. Estat indefinit. - + Waiting to start syncing. S'està esperant per començar a sincronitzar. - + Preparing for sync. S'està preparant per la sincronització. - + Sync is running. S'està sincronitzant. - + Last Sync was successful. La darrera sincronització va ser correcta. - + Last Sync was successful, but with warnings on individual files. La última sincronització ha estat un èxit, però amb avisos en fitxers individuals. - + Setup Error. Error de configuració. - + User Abort. Cancel·la usuari. - + Sync is paused. La sincronització està en pausa. - + %1 (Sync is paused) %1 (Sync està pausat) - + No valid folder selected! No s'ha seleccionat cap directori vàlid! - + The selected path is not a folder! La ruta seleccionada no és un directori! - + You have no permission to write to the selected folder! No teniu permisos per escriure en la carpeta seleccionada! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -920,17 +941,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Afegeix connexions de carpetes sincronitzades - + Synchronizing with local folder S'està sincronitzant amb les carpetes locals - + File Fitxer @@ -938,134 +959,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Cal que tingueu connexió per afegir una carpeta - + Click this button to add a folder to synchronize. Cliqueu aquest botó per afegir una carpeta per sincronitzar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error en carregar la llista de carpetes del servidor. - + Signed out S'ha desconnectat - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. No es pot afegir carpetes perquè ja esteu sincronitzant tots els vostres fitxers. Si voleu sincronitzar múltiples carpetes, elimineu la carpeta arrel actualment configurada. - + Fetching folder list from server... Obtenint la llista de carpetes del servidor... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" S'està sincronitzant %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descarrega %1/s - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pujada %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 pendent, %1 de %2, fitxer %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, fitxer %3 de %4 - + file %1 of %2 fitxer %1 de %2 - + Waiting... S'està esperant... - + Waiting for %n other folder(s)... S'està esperant %n altra carpeta...S'està esperant %n altres carpetes - + Preparing to sync... S'està preparant per sincronitzar... @@ -1073,12 +1104,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Afegeix connexions de carpetes sincronitzades - + Add Sync Connection Afegir una connexió de sincronització @@ -1091,7 +1122,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Feu clic per seleccionar un directori local per sincronitzar. - + Enter the path to the local folder. Introduïu la ruta del directori local. @@ -1114,42 +1145,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Introduïu el nom de la carpeta nova que es crearà a sota '%1': - + Folder was successfully created on %1. La carpeta s'ha creat correctament a %1. - + Authentication failed accessing %1 Autentificació fallida en accedir %1 - + Failed to create the folder on %1. Please check manually. No s'ha pogut crear el directori en %1. Si us plau, comproveu-lo manualment. - + Failed to list a folder. Error: %1 Ha fallat en llistar una carpeta. Error: %1 - + Choose this to sync the entire account Escolliu-ho per sincronitzar el compte sencer - + This folder is already being synced. Ja s'està sincronitzant aquest directori. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ja esteu sincronitzant <i>%1</i>, que és una carpeta dins de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Ja esteu sincronitzant tots els vostres fitxers. Sincronitzar una altra carpeta <b>no</b> està permes. Si voleu sincronitzar múltiples carpetes, elimineu la configuració de sincronització de la carpeta arrel. @@ -1170,22 +1201,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No s'ha rebut cap E-Tag del servidor, comproveu el Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Hem rebut un E-Tag diferent en la represa. Es comprovarà la pròxima vegada. - + Server returned wrong content-range El servidor retorna un error de contingut o rang - + Connection Timeout Temps de connexió excedit @@ -1208,23 +1239,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Per la safata del sistema - + Advanced Avançat - + Ask for confirmation before synchronizing folders larger than Demana la confirmació abans de sincronitzar carpetes més grans de - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Demana la confirmació abans de sincronitzar fonts d'emmagatzematge externes @@ -1244,28 +1275,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Usa icones en &monocrom - + Edit &Ignored Files Editeu els fitxers &ignorats - + S&how crash reporter Mostra l'informe de &fallades - - + + About Quant a - + Updates Actualitzacions - + &Restart && Update &Reiniciar && Actualitzar @@ -1273,22 +1304,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Introduïu la contrassenya de %1:<br><br>Usuari: %2<br>Compte: %3<br> - + Reading from keychain failed with error: '%1' La lectura de la cadena de claus ha fallat amb l'error: '%1' - + Enter Password Escriviu contrasenya - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1370,55 +1401,125 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Això es proporciona completament pel sistema a '%1' i no es pot modificar en aquesta vista. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Sortida de registre - + &Search: &Cerca: - + &Find &Troba - + + &Capture debug messages + + + + Clear Neteja - + Clear the log display. Neteja l'inici de sessió. - + S&ave Des&a - + Save the log file to a file on disk for debugging. Desa el fitxer de registre al disc per depuració - + Save log file Desa el fitxer de registre - + Error Error - + Could not write to log file %1 No es pot escriure al fitxer de registre %1 @@ -1426,24 +1527,16 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El fitxer '%1'<br/>no es pot obrir en mode escriptura.<br/><br/>La sortida del registre <b>no</b> es pot desar!</nobr> - - OCC::MoveJob - - - Connection timed out - Temps d'espera de la connexió esgotat. - - OCC::NSISUpdater @@ -1555,27 +1648,27 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Limita automàticament - + Hostname of proxy server Equip remot del servidor proxy - + Username for proxy server Nom d'usuari del servidor proxy - + Password for proxy server Contrasenya del servidor proxy - + HTTP(S) proxy proxy HTTP(S) - + SOCKS5 proxy proxy SOCKS5 @@ -1588,79 +1681,112 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::NotificationWidget - + Created at %1 Creat el %1 - + Closing in a few seconds... Es tancarà en pocs segons... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' La petició %1 ha fallat a %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' S'ha seleccionat '%1' a %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nova actualització de %1 preparada - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. S'instal·lara un nova actualització per %1. L'actualitzador pot demanar privilegis addicionals durant el procés. - + Downloading version %1. Please wait... Descarregat la versió %1. Espeu si us play... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. No s'ha pogut decarregar l'actualització. Si us plau, cliqueu <a href='%1'>aqui</a>per descarregar l'actualització manualment. - + Could not check for new updates. No s'ha pogut comprovar si hi ha actualitzacions. - + %1 version %2 available. Restart application to start the update. Versió %2 de %1 disponible. Reinicieu l'aplicació per començar l'actualització. - + New %1 version %2 available. Please use the system's update tool to install it. Nova versió %1 de %2 disponible. Utilitzeu l'eina d'actualització del sistema per instal·lar-la. - + Checking update server... Comprovació d'actualitzacions al servidor - + Update status is unknown: Did not check for new updates. Es desconeix l'estat de les actualitzacions: no s'ha comprovat si hi ha actualitzacions noves. - + No updates available. Your installation is at the latest version. No hi ha actualitzacions disponibles. La instal·lació ja es troba en la versió més recent. @@ -1673,43 +1799,43 @@ privilegis addicionals durant el procés. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Connecta a %1 - + Setup local folder options Estableix les opcions de carpeta local - + Connect... Connecta... - + %1 folder '%2' is synced to local folder '%3' %1 carpeta '%2' està sincronitzat amb la carpeta local '%3' - + Sync the folder '%1' Sincronitzar el directori '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Atenció:</strong> La carpeta local no està buida. Trieu una resolució!</small></p> - + Local Sync Folder Fitxer local de sincronització - - + + (%1) (%1) @@ -1742,7 +1868,7 @@ privilegis addicionals durant el procés. Configureu el certificat TLS de la banda del client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Ha fallat en connectar a l'adreça segura del servidor <em>%1</em>. Com voleu procedir?</p></body></html> @@ -1750,47 +1876,60 @@ privilegis addicionals durant el procés. OCC::OwncloudHttpCredsPage - + &Email Correu &electrònic - + Connect to %1 Connecta a %1 - + Enter user credentials Escriviu les credencials d'usuari + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Connecta a %1 - + Setup %1 server Configura el sevidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Aquesta adreça NO és segura i no és encriptada. No és aconsellada usar-la. - + This url is secure. You can use it. Aquesta url és segura. Podeu usar-la. - + &Next > &Següent > @@ -1798,22 +1937,22 @@ No és aconsellada usar-la. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">S'ha connectat correctament amb %1: %2 versió %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ha fallat la connexió amb %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. S'ha esgotat el temps d'espera mentres es conectava a %1 a les %2. - + Trying to connect to %1 at %2... Intentant connectar amb %1 a %2... @@ -1833,109 +1972,109 @@ No és aconsellada usar-la. El servidor ha prohibit l'accés. Per verificar que teniu permisos, <a href="%1">cliqueu aquí</a> per accedir al servei amb el vostre navegador. - + Invalid URL URL incorrecte - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta local %1 ja existeix, s'està configurant per sincronitzar.<br/><br/> - + Creating local sync folder %1... S'està creant la carpeta de sincronització local %1... - + ok correcte - + failed. ha fallat. - + Could not create local folder %1 No s'ha pogut crear la carpeta local %1 - + No remote folder specified! No heu especificat cap carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creant la carpeta a ownCloud: %1 - + Remote folder %1 created successfully. La carpeta remota %1 s'ha creat correctament. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ja existeix. S'hi està connectant per sincronitzar-les. - + The folder creation resulted in HTTP error code %1 La creació de la carpeta ha resultat en el codi d'error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ha fallat la creació de la carpeta perquè les credencials proporcionades són incorrectes!<br/>Aneu enrera i comproveu les credencials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creació de la carpeta remota ha fallat, probablement perquè les credencials facilitades són incorrectes.</font><br/>Comproveu les vostres credencials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creació de la carpeta remota %1 ha fallat amb l'error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. S'ha establert una connexió de sincronització des de %1 a la carpeta remota %2. - + Successfully connected to %1! Connectat amb èxit a %1! - + Connection to %1 could not be established. Please check again. No s'ha pogut establir la connexió amb %1. Comproveu-ho de nou. - + Folder rename failed Ha fallat en canviar el nom de la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No es pot esborrar i restaurar la carpeta perquè una carpeta o un fitxer de dins està obert en un altre programa. Tanqueu la carpeta o el fitxer i intenteu-ho de nou o cancel·leu la configuració. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>la carpeta de sincronització %1 s'ha creat correctament!</b></font> @@ -1943,12 +2082,12 @@ No és aconsellada usar-la. OCC::OwncloudWizard - + %1 Connection Wizard Assistent de connexió %1 - + Skip folders configuration Salta la configuració de carpetes @@ -1956,33 +2095,25 @@ No és aconsellada usar-la. OCC::OwncloudWizardResultPage - + Everything set up! Tot està configurat! - + Open Local Folder Obre carpeta local - + Open %1 in Browser Obre %1 al navegador - - OCC::PUTFileJob - - - Connection Timeout - Temps de connexió excedit - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1990,7 +2121,7 @@ No és aconsellada usar-la. OCC::PropagateDirectory - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -1998,47 +2129,47 @@ No és aconsellada usar-la. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! El fitxer %1 no es pot baixar perquè hi ha un xoc amb el nom d'un fitxer local! - - The download would reduce free disk space below %1 - La descàrrega reduïrà l'espai lliure al disc per sota de %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 L'espai lliure del disc dur es inferior a %1 - + File was deleted from server El fitxer s'ha esborrat del servidor - + The file could not be downloaded completely. No es pot descarregar el fitxer completament. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery El fitxer ha canviat des de que es va descobrir - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2046,17 +2177,12 @@ No és aconsellada usar-la. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ha fallat la restauració: %1 - - Continue blacklisting: - Mantén a la llista negra: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2064,22 +2190,22 @@ No és aconsellada usar-la. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 no s'ha pogut esborrar el fitxer %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atenció, possible xoc entre majúscules i minúscules amb %1 - + could not create folder %1 no s'ha pogut crear la carpeta %1 - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2087,17 +2213,17 @@ No és aconsellada usar-la. OCC::PropagateLocalRemove - + Error removing '%1': %2; Error en eliminar '%1': %2; - + Could not remove folder '%1' No s'ha pogut eliminar la carpeta '%1' - + Could not remove %1 because of a local file name clash No es pot eliminar %1 perquè hi ha un xoc amb el nom d'un fitxer local @@ -2105,13 +2231,13 @@ No és aconsellada usar-la. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash El fitxer %1 no es pot reanomenar a %2 perquè hi ha un xoc amb el nom d'un fitxer local - - + + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2119,12 +2245,12 @@ No és aconsellada usar-la. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. El fitxer s'ha eliminat d'una compartició només de lectura. S'ha restaurat. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2132,12 +2258,12 @@ No és aconsellada usar-la. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2145,28 +2271,28 @@ No és aconsellada usar-la. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. No s'ha de canviar el nom d'aquesta carpeta. Es reanomena de nou amb el seu nom original. - + This folder must not be renamed. Please name it back to Shared. Aquesta carpeta no es pot reanomenar. Reanomeneu-la de nou Shared. - + The file was renamed but is part of a read only share. The original file was restored. El fitxer s'ha reanomenat però és part d'una compartició només de lectura. El fixter original s'ha restaurat. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2174,27 +2300,32 @@ No és aconsellada usar-la. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Fitxer eliminat - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2202,32 +2333,32 @@ No és aconsellada usar-la. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. El fitxer local s'ha eliminat durant la sincronització. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2235,32 +2366,32 @@ No és aconsellada usar-la. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. El fitxer s'ha editat localment però és part d'una compartició només de lectura. S'ha restaurat i la vostra edició és en el fitxer en conflicte. - + Poll URL missing - + The local file was removed during sync. El fitxer local s'ha eliminat durant la sincronització. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2278,42 +2409,42 @@ No és aconsellada usar-la. TextLabel - + Time Hora - + File Fitxer - + Folder Carpeta - + Action Acció - + Size Mida - + Local sync protocol Protocol de sincronització local - + Copy Copia - + Copy the activity list to the clipboard. Copia la llista d'activitats al porta-retalls. @@ -2354,7 +2485,7 @@ No és aconsellada usar-la. OCC::SelectiveSyncDialog - + Choose What to Sync Trieu què sincronitzar @@ -2362,33 +2493,33 @@ No és aconsellada usar-la. OCC::SelectiveSyncWidget - + Loading ... Carregant... - + Deselect remote folders you do not wish to synchronize. - + Name Nom - + Size Mida - - + + No subfolders currently on the server. Actualment no hi ha subcarpetes al servidor. - + An error occurred while loading the list of sub folders. S'ha produit un error en carregar la llista de subcarpetes. @@ -2401,22 +2532,22 @@ No és aconsellada usar-la. Arranjament - + Activity Activitat - + General General - + Network Xarxa - + Account Compte @@ -2424,27 +2555,27 @@ No és aconsellada usar-la. OCC::SettingsDialogMac - + %1 %1 - + Activity Activitat - + General General - + Network Xarxa - + Account Compte @@ -2472,35 +2603,45 @@ No és aconsellada usar-la. camí de l'OwnCloud: - + %1 Sharing Compartint amb %1 - + %1 %1 - + Folder: %2 Carpeta: %2 - + The server does not allow sharing El servidor no permet la compartició de fitxers - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. El fitxer no es pot compartir perquè va ser compartit sense permisos de compartició. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2510,92 +2651,126 @@ No és aconsellada usar-la. Comparteix DocumentNou.odt - - Share link - Comparteix l'enllaç - - - + TextLabel TextLabel - + Set &password Estableix la &contrasenya - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Estableix la data de &venciment - + Set password Estableix la contrasenya - - &Mail link + + Link properties: - Copy &link - Copia l'en&llaç + Show file listing + - + Allow editing Permetre edició - + Anyone with the link has access to the file/folder - + + P&assword protect Protegit amb contr&asenya - + Password Protected Protegit amb contrasenya - + The file can not be shared because it was shared without sharing permission. El fitxer no es pot compartir perquè va ser compartit sense permisos de compartició. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password La comp&artició pública requereix una contrasenya - + Please Set Password Establiu la contrasenya - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - Com&parteix l'enllaç - OCC::ShareUserGroupWidget @@ -2605,68 +2780,98 @@ No és aconsellada usar-la. Comparteix DocumentNou.odt - + Share with users or groups ... Comparteix amb usuaris o grups ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' No hi ha resultats per '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulari + - + TextLabel - TextLabel + - + can edit - pot editar + - + can share - pot compartir + - + ... - ... + - + create - crea + - + change - canvi + - + delete - elimina + OCC::ShibbolethCredentials - + Login Error Error d'accés - + You must sign in as user %1 Cal identificar-se com a usuari %1 @@ -2674,22 +2879,22 @@ No és aconsellada usar-la. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticat - + SSL Chipher Debug View - + Reauthentication required Es requereix nova acreditació - + Your session has expired. You need to re-login to continue to use the client. La vostra sessió ha vençut. Heu d'acreditar-vos de nou per continuar usant el client. @@ -2697,26 +2902,46 @@ No és aconsellada usar-la. OCC::SocketApi - + Share with %1 parameter is ownCloud Comparteix amb %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalls del certificat</h3> - + Common Name (CN): Nom comú (NC): - + Subject Alternative Names: Noms alternatius de concepte: @@ -2801,7 +3026,7 @@ No és aconsellada usar-la. %1 - + This connection is encrypted using %1 bit %2. Aquesta connexió és encriptada usant %1 bit %2. @@ -2818,7 +3043,7 @@ No és aconsellada usar-la. Informació del certificat: - + This connection is NOT secure as it is not encrypted. Aquesta connexió NO és segura , ja que no està xifrada. @@ -2838,67 +3063,67 @@ No és aconsellada usar-la. Confia en aquest certificat igualment - + Untrusted Certificate Certificat no fiable - + Cannot connect securely to <i>%1</i>: No es pot connectar de forma segura a <i>%1</i>: - + with Certificate %1 amb certificat %1 - + &lt;not specified&gt; &lt;no especificat&gt; - - + + Organization: %1 Organització %1 - - + + Unit: %1 Unitat: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Empremta digital (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Empremta digital (SHA1): <tt>%1</tt> - + Effective Date: %1 Data d'efecte: %1 - + Expiration Date: %1 Data de venciment: %1 - + Issuer: %1 Emissor: %1 @@ -2906,285 +3131,300 @@ No és aconsellada usar-la. OCC::SyncEngine - + Success. Èxit. - + CSync failed to load the journal file. The journal file is corrupted. CSync ha fallat en carregar el fitxer del registre de transaccions. El fitxer està corromput. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>No s'ha pogut carregar el connector %1 per csync.<br/>Comproveu la instal·lació!</p> - + CSync got an error while processing internal trees. CSync ha patit un error mentre processava els àrbres interns. - - CSync failed to reserve memory. - CSync ha fallat en reservar memòria. - - - + CSync fatal parameter error. Error fatal de paràmetre en CSync. - + CSync processing step update failed. El pas d'actualització del processat de CSync ha fallat. - + CSync processing step reconcile failed. El pas de reconciliació del processat de CSync ha fallat. - + CSync could not authenticate at the proxy. CSync no s'ha pogut acreditar amb el proxy. - + CSync failed to lookup proxy or server. CSync ha fallat en cercar el proxy o el servidor. - + CSync failed to authenticate at the %1 server. L'autenticació de CSync ha fallat al servidor %1. - + CSync failed to connect to the network. CSync ha fallat en connectar-se a la xarxa. - + A network connection timeout happened. Temps excedit en la connexió. - + A HTTP transmission error happened. S'ha produït un error en la transmissió HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder S'ha produït un error en obrir una carpeta - + Error while reading folder. Error en llegir la carpeta. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. El fitxer/carpeta s'ha ignorat perquè és ocult. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: No hi ha espai disponible al servidor %1. - + CSync unspecified error. Error inespecífic de CSync. - + Aborted by the user Aturat per l'usuari - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable El servei no està disponible temporalment - + Access is forbidden Accés prohibit - + An internal error number %1 occurred. S'ha produït l'error intern número %1. - - The item is not synced because of previous errors: %1 - L'element no s'ha sincronitzat degut a errors previs: %1 - - - + Symbolic links are not supported in syncing. La sincronització d'enllaços simbòlics no està implementada. - + File is listed on the ignore list. El fitxer està a la llista d'ignorats. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. El nom de fitxer és massa llarg. - + Stat failed. - + Filename encoding is not valid La codificació del nom de fitxer no és vàlida - + Invalid characters, please rename "%1" Caràcters no vàlids. Reanomeneu "%1" - - Unable to initialize a sync journal. - No es pot inicialitzar un periòdic de sincronització - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen @@ -3200,7 +3440,7 @@ No és aconsellada usar-la. OCC::Systray - + %1: %2 %1: %2 @@ -3208,17 +3448,17 @@ No és aconsellada usar-la. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versió %1. Per més informació visiteu <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuït per %1 i amb llicència GNU General Public License (GPL) Versió 2.0.<br/>%2 i el %2 logo són marques registrades de %1 als Estats Units, altres països, o ambdós.</p> @@ -3226,17 +3466,17 @@ No és aconsellada usar-la. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. El fitxer descarregat no concorda amb la suma de verificació. Es reintentarà. @@ -3244,207 +3484,207 @@ No és aconsellada usar-la. OCC::ownCloudGui - + Please sign in Acrediteu-vos - + Folder %1: %2 Carpeta %1: %2 - + No sync folders configured. No hi ha fitxers de sincronització configurats - + There are no sync folders configured. No hi han carpetes sincronitzades configurades. - + Open in browser Obre al navegador - - - + + + Log in... Inicia la sessió - - - + + + Log out Surt - + Recent Changes Canvis recents - + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + Managed Folders: Fitxers gestionats: - + Open folder '%1' Obre carpeta '%1' - + Open %1 in browser Obre %1 en el navegador - + Unknown status Estat desconegut - + Settings... Arranjament... - + Details... Detalls... - + Help Ajuda - + Quit %1 Surt %1 - + Disconnected from %1 S'ha desconnectat de %1 - + Unsupported Server Version La versió del servidor no és compatible - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor del compte %1 utilitza la versió antiga %2 antiga i no és compatible. Usar aquest client amb versions no compatibles del servidor no s'ha provat i pot ser potencialment perillós. Procediu sota la vostra responsabilitat. - + Disconnected from accounts: Desconnectat dels comptes: - + Account %1: %2 Compte %1: %2 - + Account synchronization is disabled La sincronització del compte està deshabilitada - + Unpause all folders Reprén totes les carpetes - + Pause all folders Pausa totes les carpetes - + Unpause all synchronization Reprèn totes les sincronitzacions - + Unpause synchronization Reprèn la sincronització - + Pause all synchronization Pausa totes les sincronitzacions - + Pause synchronization Pausa la sincronització - + Log out of all accounts Surt de tots els comptes - + Log in to all accounts... Connecta a tots els comptes... - + New account... Compte nou... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No hi ha elements sincronitzats recentment - + Syncing %1 of %2 (%3 left) Sincronitzant %1 de %2 (%3 pendents) - + Syncing %1 of %2 S'està sincronitzant %1 de %2 - + Syncing %1 (%2 left) Sincronitzant %1 (%2 pendents) - + Syncing %1 S'està sincronitzant %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualitzat @@ -3452,7 +3692,7 @@ No és aconsellada usar-la. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3555,78 +3795,42 @@ No és aconsellada usar-la. &Contrasenya + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulari - - Server &address: - &Adreça del servidor: - - - - - TextLabel TextLabel - - - Use &secure connection - Usa una connexió segura - - - - CheckBox - Caixa de selecció - - - - &Username: - Nom d'&usuari: - - - - Enter the ownCloud username. - Escriciu el nom d'usuari ownCloud. - - - - &Password: - &Contrasenya: - - - - Enter the ownCloud password. - Escriviu la contrasenya ownCloud. - - - - Do not allow the local storage of the password. - No permetis desar localment la contrasenya. - - - - &Do not store password on local machine - &No desis contrasenyes a l'equip local - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Escriviu la url de ownCloud amb la que voleu contactar (sense http o https). - Ser&ver Address @@ -3670,7 +3874,7 @@ No és aconsellada usar-la. QApplication - + QT_LAYOUT_DIRECTION @@ -3678,42 +3882,42 @@ No és aconsellada usar-la. QObject - + in the future al futur - + %n day(s) ago fa %n diafa %n dies - + %n hour(s) ago fa %n horafa %n hores - + now ara - + Less than a minute ago Fa menys d'un minut - + %n minute(s) ago fa %n minutfa %n minuts - + Some time ago Fa una estona - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3722,57 +3926,57 @@ No és aconsellada usar-la. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n any%n anys - + %n month(s) %n mes%n mesos - + %n day(s) %n dia%n dies - + %n hour(s) %n hora%n hores - + %n minute(s) %n minut%n minuts - + %n second(s) %n segon%n segons - + %1 %2 %1 %2 @@ -3793,102 +3997,97 @@ No és aconsellada usar-la. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construït de la revisió de Git <a href="%1">%2</a> el %4 de %3 usant Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Descarregat - + Uploaded Carregat - + Server version downloaded, copied changed local file into conflict file S'ha baixat la versió del servidor i s'ha renomenat el fitxer local com a fitxer de conflicte - + Deleted Eliminat - + Moved to %1 S'ha mogut a %1 - + Ignored Ignorat - + Filesystem access error Error d'accés al sistema de fitxers - + Error Error - + Updated local metadata S'han actualitzat les metadades locals - - + + Unknown Desconegut - + downloading baixant - + uploading pujant - + deleting esborrant - + moving movent - + ignoring ignorant + - error error - + updating local metadata s'estan actualitzant les metadades locals @@ -3896,54 +4095,77 @@ No és aconsellada usar-la. theme - + Status undefined Estat indefinit - + Waiting to start sync Pendent d'iniciar la sincronització - + Sync is running La sincronització s'està executant - + Sync Success Sincronització amb èxit - + Sync Success, some files were ignored. Sincronització realitzada amb èxit, alguns fitxers s'han ignorat. - + Sync Error Error de sincronització - + Setup Error Error de configuració - + Preparing to sync Preparant per sincronitzar - + Aborting... Cancel·lant... - + Sync is paused La sincronització està pausada. + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_cs.ts b/translations/client_cs.ts index c91112bfc..9239eb84e 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Cílový soubor má neočekávanou velikost nebo čas změny @@ -81,6 +81,24 @@ Textový popisek + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Zrušit @@ -136,188 +154,204 @@ Připojen k <server> jako <user> - + No account configured. Žádný účet nenastaven. - + Add new Přidat nový - + Remove Odebrat - + Account Účet - + Choose what to sync Vybrat co sesynchronizovat - + Force sync now Vynutit synchronizaci nyní - + Restart sync Restartovat synchronizaci - + Remove folder sync connection Odstranit připojení synchronizace adresáře - + Folder creation failed Vytvoření adresáře selhalo - + <p>Could not create local folder <i>%1</i>. <p>Nelze vytvořit místní adresář <i>%1</i>. - + Confirm Folder Sync Connection Removal Potvrdit odstranění připojení synchronizace adresáře - + Remove Folder Sync Connection Odstranit připojení synchronizace adresáře - + Sync Running Synchronizace probíhá - + The syncing operation is running.<br/>Do you want to terminate it? Operace synchronizace právě probíhá.<br/>Přejete si ji ukončit? - + %1 in use %1 používaný - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server verze %1 je zastaralý a nepodporovaný! Pokračujte na vlastní riziko. - + Connected to %1. Připojeno k %1. - + Server %1 is temporarily unavailable. Server %1 je dočasně nedostupný. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Odhlášeno z %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Bez připojení k %1 na %2. - + Log in Přihlásit - + There are folders that were not synchronized because they are too big: Tyto složky nebyly synchronizovány, protože jsou příšliš velké: - + There are folders that were not synchronized because they are external storages: Tyto složky nebyly synchronizovány, protože se nachází na externím úložišti: - + There are folders that were not synchronized because they are too big or external storages: Tyto složky nebyly synchronizovány, protože jsou příliš velké, nebo se nachází na externím úložišti: - + Confirm Account Removal Potvrdit odstranění účtu - + <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> <p>Opravdu chcete odstranit připojení k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + Remove connection Odstranit připojení - + + Open folder Otevřít adresář - - + + Log out Odhlásit se - + Resume sync Pokračovat v synchronizaci - + Pause sync Pozastavit synchronizaci - + <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> <p>Opravdu chcete zastavit synchronizaci adresáře <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. 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. - + %1 of %2 in use Používaných %1 z %2 - + Currently there is no storage usage information available. Momentálně nejsou k dispozici žádné informace o využití úložiště. - + No %1 connection configured. Žádné spojení s %1 nenastaveno. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Odhlášeno - + Disconnected Odpojeno - + Connected Připojeno - + Service unavailable Služba nedostupná - + + Maintenance mode + + + + Network error Chyba sítě - + Configuration error Chyba konfigurace - + + Asking Credentials + + + + Unknown account state Neznámý stav účtu @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita serveru - + Sync Protocol Protokol synchronizace - - List of ignored or erroneous files - Seznam ignorovaných nebo poškozených souborů - - - - Copy - Kopie - - - - Copy the activity list to the clipboard. - Kopírovat záznam aktivity do schránky. - - - + Not Synced Nesesynchronizováno - + Not Synced (%1) %1 is the number of not synced files. Nesesynchronizováno (%1) - + The server activity list has been copied to the clipboard. Výpis aktivity serveru byl zkopírován do schránky. - + The sync activity list has been copied to the clipboard. Výpis aktivity synchronizace byl zkopírován do schránky. - + The list of unsynced items has been copied to the clipboard. Seznam nesynchronizovaných položek byl zkopírován do schránky. - + Copied to clipboard Zkopírováno do schránky @@ -448,47 +477,47 @@ Textový popisek - + Server Activities Aktivity serveru - + Copy Kopie - + Copy the activity list to the clipboard. Kopírovat záznam aktivity do schránky. - + Action Required: Notifications Vyžadována akce: Upozornění - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. Dostali jste %n nové upozornění od %2.Dostali jste %n nové upozornění od %2.Dostali jste %n nových upozornění od %2. - + You received %n new notification(s) from %1 and %2. Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nových upozornění od %1 a %2. - + You received new notifications from %1, %2 and other accounts. Dostali jste nové upozornění od %1, %2 a dalších uživatelů. - + %1 Notifications - Action Required %1 Upozornění - Vyžadována akce @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Chyba přístupu ke konfiguračnímu souboru - + There was an error while accessing the configuration file at %1. Došlo k chybě při přístupu ke konfigurační soubor %1. - + Quit ownCloud Ukončit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Žádný účet ownCloud nenastaven - + The configured server for this client is too old Server nastavený pro tohoto klienta je příliš starý - + Please update to the latest server and restart the client. Aktualizujte prosím na poslední verzi serveru a restartujte klienta. - + Authentication error: Either username or password are wrong. Chyba ověření: Uživatelské jméno nebo heslo není správné. - + timeout vypršel časový interval - + The provided credentials are not correct Poskytnuté přihlašovací údaje nejsou správné - - OCC::DeleteJob - - - Connection timed out - Připojení vypršelo - - OCC::DiscoveryMainThread - + Aborted by the user Zrušeno uživatelem @@ -632,124 +653,124 @@ OCC::Folder - + Local folder %1 does not exist. Místní adresář %1 neexistuje. - + %1 should be a folder but is not. %1 by měl být adresář, ale není. - + %1 is not readable. %1 není čitelný. - + %1 has been removed. %1 names a file. %1 byl odebrán. - + %1 has been downloaded. %1 names a file. %1 byl stažen. - + %1 has been updated. %1 names a file. %1 byl aktualizován. - + %1 has been renamed to %2. %1 and %2 name files. %1 byl přejmenován na %2. - + %1 has been moved to %2. %1 byl přemístěn do %2. - + %1 and %n other file(s) have been removed. %1 soubor bude smazán.%1 a %n další soubory budou smazány.%1 a %n další soubory budou smazány. - + %1 and %n other file(s) have been downloaded. %1 soubor byl stažen.%1 a %n další soubory byly staženy.%1 a %n další soubory byly staženy. - + %1 and %n other file(s) have been updated. %1 soubor byl aktualizován.%1 a %n další soubory byly aktualizovány.%1 a %n další soubory byly aktualizovány. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 byl přejmenován na %2.%1 byl přejmenován na %2 a %n další soubory byly přejmenovány.%1 byl přejmenován na %2 a %n další soubory byly přejmenovány. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 byl přesunut do %2.%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto.%1 byl přesunut do %2 a %n dalších souborů bylo přesunuto. - + %1 has and %n other file(s) have sync conflicts. %1 má problém se synchronizací.%1 a %n dalších souborů má problém se synchronizací.%1 a %n dalších souborů má problém se synchronizací. - + %1 has a sync conflict. Please check the conflict file! %1 má problém se synchronizací. Prosím zkontrolujte chybový soubor. - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 soubor nemůže být synchronizován kvůli chybám. Shlédněte log pro detaily.%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily.%1 a %n dalších souborů nemohou být synchronizovány kvůli chybám. Shlédněte log pro detaily. - + %1 could not be synced due to an error. See the log for details. %1 nebyl kvůli chybě synchronizován. Detaily jsou k nalezení v logu. - + Sync Activity Průběh synchronizace - + Could not read system exclude file Nezdařilo se přečtení systémového exclude souboru - + A new folder larger than %1 MB has been added: %2. Nová složka větší než %1 MB byla přidána: %2. - + A folder from an external storage has been added. Byla přidána složka z externího úložiště. - + Please go in the settings to select it if you wish to download it. Pokud to chcete stáhnout, běžte do nastavení a vyberte to. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -759,7 +780,7 @@ Tyto soubory budou smazány i ve vaší místní synchronizované složce a nebu Rozhodnete-li se soubory smazat, budou vám nedostupné, nejste-li jejich vlastníkem. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -768,22 +789,22 @@ Jste si jisti, že chcete tyto akce synchronizovat se serverem? Pokud to byl omyl a chcete si soubory ponechat, budou opět synchronizovány ze serveru. - + Remove All Files? Odstranit všechny soubory? - + Remove all files Odstranit všechny soubory - + Keep files Ponechat soubory - + This sync would reset the files to an earlier 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? @@ -792,17 +813,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? - + Backup detected Záloha nalezena - + Normal Synchronisation Normální synchronizace - + Keep Local Files as Conflict Ponechat místní soubory jako konflikt @@ -810,112 +831,112 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderMan - + Could not reset folder state Nelze obnovit stav adresáře - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. 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í. - + (backup) (záloha) - + (backup %1) (záloha %1) - + Undefined State. Nedefinovaný stav. - + Waiting to start syncing. Čeká na spuštění synchronizace. - + Preparing for sync. Příprava na synchronizaci. - + Sync is running. Synchronizace probíhá. - + Last Sync was successful. Poslední synchronizace byla úspěšná. - + Last Sync was successful, but with warnings on individual files. Poslední synchronizace byla úspěšná, ale s varováním u některých souborů - + Setup Error. Chyba nastavení. - + User Abort. Zrušení uživatelem. - + Sync is paused. Synchronizace pozastavena. - + %1 (Sync is paused) %1 (Synchronizace je pozastavena) - + No valid folder selected! Nebyl vybrán platný adresář! - + The selected path is not a folder! Vybraná cesta nevede do adresáře! - + You have no permission to write to the selected folder! Nemáte oprávnění pro zápis do zvoleného adresáře! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Místní složka %1 obsahuje symbolický odkaz. Cílový odkaz obsahuje již synchronizované složky. Vyberte si prosím jinou! - + There is already a sync from the server to this local folder. Please pick another local folder! Ze serveru se do tohoto umístění již synchronizuje. Prosím zvolte jinou místní složku! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Místní adresář %1 již obsahuje podadresář použitý pro synchronizaci odesílání. Zvolte prosím jiný! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Místní adresář %1 je již obsažen ve adresáři použitém pro synchronizaci. Vyberte prosím jiný! - + 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! 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ý! @@ -923,17 +944,17 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderStatusDelegate - + Add Folder Sync Connection Přidat synchronizaci adresáře - + Synchronizing with local folder Synchronizace s místním adresářem - + File Soubor @@ -941,134 +962,144 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderStatusModel - + You need to be connected to add a folder Pro přidání adresáře musíte být připojeni - + Click this button to add a folder to synchronize. Stisknutím tlačítka přidáte adresář k synchronizaci. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Chyba při načítání seznamu adresářů ze serveru. - + Signed out Odhlášeno - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Přidání adresáře je vypnuto, protože již synchronizujete všechny své soubory. Pokud chcete synchronizovat pouze některé adresáře, odstraňte aktuálně nastavený kořenový adresář. - + Fetching folder list from server... Načítání seznamu adresářů ze serveru... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Kontrola změn v '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuji %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stahování %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrávání %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ze %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 zbývá, %1 ze %2, soubor %3 z %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, soubor %3 z %4 - + file %1 of %2 soubor %1 z %2 - + Waiting... Chvíli strpení... - + Waiting for %n other folder(s)... Čeká se na %n další adresář...Čeká se na %n další adresáře...Čeká se na %n dalších adresářů... - + Preparing to sync... Synchronizace se připravuje... @@ -1076,12 +1107,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderWizard - + Add Folder Sync Connection Přidat synchronizaci adresáře - + Add Sync Connection Přidat synchronizační připojení @@ -1094,7 +1125,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Kliknutím zvolíte místní adresář k synchronizaci. - + Enter the path to the local folder. Zadejte cestu k místnímu adresáři. @@ -1117,42 +1148,42 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Zadejte název nově vytvářeného adresáře níže '%1': - + Folder was successfully created on %1. Adresář byl úspěšně vytvořen na %1. - + Authentication failed accessing %1 Ověření selhalo při připojení %1 - + Failed to create the folder on %1. Please check manually. Na %1 selhalo vytvoření adresáře. Zkontrolujte to prosím ručně. - + Failed to list a folder. Error: %1 Chyba při vypsání adresáře. Chyba: %1 - + Choose this to sync the entire account Zvolte toto k provedení synchronizace celého účtu - + This folder is already being synced. Tento adresář je již synchronizován. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Již synchronizujete adresář <i>%1</i>, který je adresáři <i>%2</i> nadřazený. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Již synchronizujete všechny své soubory. Synchronizování dalšího adresáře <b>není</b> podporováno. Pokud chcete synchronizovat více adresářů, odstraňte prosím synchronizaci aktuálního kořenového adresáře. @@ -1173,22 +1204,22 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ze serveru nebyl obdržen E-Tag, zkontrolujte proxy/bránu - + We received a different E-Tag for resuming. Retrying next time. Obdrželi jsme jiný E-Tag pro pokračování. Zkusím znovu příště. - + Server returned wrong content-range Server odpověděl chybným rozsahem obsahu - + Connection Timeout Čas spojení vypršel @@ -1211,23 +1242,23 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Pro systémovou lištu - + Advanced Pokročilé - + Ask for confirmation before synchronizing folders larger than Zeptat se před synchronizací složek větších než - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Zeptat se na potvrzení před synchronizací externích úlošišť @@ -1247,28 +1278,28 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Používat čer&nobílé ikony - + Edit &Ignored Files Upravit &ignorované soubory - + S&how crash reporter Z&obrazit hlášení o pádech - - + + About O aplikaci - + Updates Aktualizace - + &Restart && Update &Restart && aktualizace @@ -1276,22 +1307,22 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vložte prosím %1 heslo:<br><br>Uživatel: %2<br>Účet: %3<br> - + Reading from keychain failed with error: '%1' Čtení z klíčenky selhalo s chybou: '%1' - + Enter Password Zadejte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikněte sem</a> pro vyžádání hesla aplikace z webového rozhraní. @@ -1373,55 +1404,125 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Tato položka je poskytnuta systémem na '%1' a nemůže být v tomto pohledu změněna. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Zaznamenat výstup - + &Search: &Hledat: - + &Find Na&jít - + + &Capture debug messages + + + + Clear Vyčistit - + Clear the log display. Vyčistit výpis logu. - + S&ave &Uložit - + Save the log file to a file on disk for debugging. Uložit soubor záznamu na disk pro ladění. - + Save log file Uložit log - + Error Chyba - + Could not write to log file %1 Nelze zapisovat do souboru logu %1 @@ -1429,24 +1530,16 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::Logger - + Error Chyba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Soubor '%1'<br/>nelze otevřít pro zápis.<br/><br/>Výstup záznamu <b>nelze</b> uložit.</nobr> - - OCC::MoveJob - - - Connection timed out - Připojení vypršelo - - OCC::NSISUpdater @@ -1558,27 +1651,27 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Omezovat automaticky - + Hostname of proxy server Adresa proxy serveru - + Username for proxy server Uživatelské jméno pro proxy server - + Password for proxy server Heslo pro proxy server - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1591,79 +1684,112 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::NotificationWidget - + Created at %1 Vytvořen v %1 - + Closing in a few seconds... Uzavření za několik sekund... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 požadavek selhal při %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' vybrán na %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Je připravena nová aktualizace %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Bude instalována nová aktualizace pro %1. V průběhu aktualizace můžete být požádáni o dodatečná oprávnění. - + Downloading version %1. Please wait... Stahuji verzi %1. Počkejte prosím ... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nemohu stáhnout aktualizaci. Klikněte prosím na <a href='%1'>tento odkaz</a> pro ruční stažení aktualizace. - + Could not check for new updates. Nemohu zkontrolovat aktualizace. - + %1 version %2 available. Restart application to start the update. Je dostupná %1 verze %2. Restartujte aplikaci pro spuštění aktualizace. - + New %1 version %2 available. Please use the system's update tool to install it. Je dostupná nová %1 verze %2. Pro instalaci prosím použijte systémového správce aktualizací. - + Checking update server... Kontroluji aktualizační server... - + Update status is unknown: Did not check for new updates. Stav aktualizace neznámý: Nové aktualizace nebyly zkontrolovány. - + No updates available. Your installation is at the latest version. Žádne aktualizace nejsou k dispozici. Používáte aktuální verzi. @@ -1676,43 +1802,43 @@ můžete být požádáni o dodatečná oprávnění. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Připojit k %1 - + Setup local folder options Možnosti nastavení místního adresáře - + Connect... Připojit... - + %1 folder '%2' is synced to local folder '%3' %1 adresář '%2' je synchronizován do místního adresáře '%3' - + Sync the folder '%1' Synchronizovat adresář '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Varování:</strong> Místní adresář není prázdný. Zvolte další postup!</small></p> - + Local Sync Folder Místní synchronizovaný adresář - - + + (%1) (%1) @@ -1745,7 +1871,7 @@ můžete být požádáni o dodatečná oprávnění. Nakonfigurovat klientský TLS certifikát - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nezdařilo se připojení k zabezpečenému serveru <em>%1</em>. Jak si přejete dále postupovat?</p></body></html> @@ -1753,47 +1879,60 @@ můžete být požádáni o dodatečná oprávnění. OCC::OwncloudHttpCredsPage - + &Email &Email - + Connect to %1 Připojit k %1 - + Enter user credentials Zadejte přihlašovací údaje + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Připojit k %1 - + Setup %1 server Nastavit server %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Tato adresa NENÍ bezpečná, protože není šifrovaná. Nedoporučuje se jí používat. - + This url is secure. You can use it. URL je bezpečná. Můžete ji použít. - + &Next > &Následující > @@ -1801,22 +1940,22 @@ Nedoporučuje se jí používat. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Úspěšně připojeno k %1: %2 verze %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Selhalo spojení s %1 v %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Vypršení časového limitu při pokusu o připojení k %1 na %2. - + Trying to connect to %1 at %2... Pokouším se připojit k %1 na %2... @@ -1836,109 +1975,109 @@ Nedoporučuje se jí používat. Přístup zamítnut serverem. Pro ověření správných přístupových práv <a href="%1">klikněte sem</a> a otevřete službu ve svém prohlížeči. - + Invalid URL Neplatná URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Místní synchronizovaný adresář %1 již existuje, nastavuji jej pro synchronizaci.<br/><br/> - + Creating local sync folder %1... Vytvářím místní adresář pro synchronizaci %1... - + ok OK - + failed. selhalo. - + Could not create local folder %1 Nelze vytvořit místní adresář %1 - + No remote folder specified! Není nastaven žádný vzdálený adresář! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytvářím adresář na ownCloudu: %1 - + Remote folder %1 created successfully. Vzdálený adresář %1 byl úspěšně vytvořen. - + The remote folder %1 already exists. Connecting it for syncing. Vzdálený adresář %1 již existuje. Spojuji jej pro synchronizaci. - + The folder creation resulted in HTTP error code %1 Vytvoření adresáře selhalo s HTTP chybou %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.<br/>Vraťte se prosím zpět a zkontrolujte je.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.</font><br/>Vraťte se prosím zpět a zkontrolujte je.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytváření vzdáleného adresáře %1 selhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Bylo nastaveno synchronizované spojení z %1 do vzdáleného adresáře %2. - + Successfully connected to %1! Úspěšně spojeno s %1. - + Connection to %1 could not be established. Please check again. Spojení s %1 nelze navázat. Prosím zkuste to znovu. - + Folder rename failed Přejmenování adresáře selhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nelze odstranit a zazálohovat adresář, protože adresář nebo soubor v něm je otevřen v jiném programu. Prosím zavřete adresář nebo soubor a zkuste znovu nebo zrušte akci. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Místní synchronizovaný adresář %1 byl úspěšně vytvořen!</b></font> @@ -1946,12 +2085,12 @@ Nedoporučuje se jí používat. OCC::OwncloudWizard - + %1 Connection Wizard %1 Průvodce spojením - + Skip folders configuration Přeskočit konfiguraci adresářů @@ -1959,33 +2098,25 @@ Nedoporučuje se jí používat. OCC::OwncloudWizardResultPage - + Everything set up! Všechno je nastaveno! - + Open Local Folder Otevřít místní adresář - + Open %1 in Browser Otevřít %1 v prohlížeči - - OCC::PUTFileJob - - - Connection Timeout - Čas spojení vypršel - - OCC::PollJob - + Invalid JSON reply from the poll URL Neplatná JSON odpověď z adresy URL @@ -1993,7 +2124,7 @@ Nedoporučuje se jí používat. OCC::PropagateDirectory - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2001,47 +2132,47 @@ Nedoporučuje se jí používat. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Soubor %1 nemohl být stažen z důvodu kolize názvu se souborem v místním systému! - - The download would reduce free disk space below %1 - Stažení by snížilo velikost volného místa na disku pod %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Volné místo na disku je méně než %1 - + File was deleted from server Soubor byl smazán ze serveru - + The file could not be downloaded completely. Soubor nemohl být kompletně stažen. - + The downloaded file is empty despite the server announced it should have been %1. Stažený soubor je prázdný, přestože server oznámil, že měl být %1. - + File %1 cannot be saved because of a local file name clash! Soubor %1 nemohl být uložen z důvodu kolize názvu se souborem v místním systému! - + File has changed since discovery Soubor se mezitím změnil - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2049,17 +2180,12 @@ Nedoporučuje se jí používat. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovení selhalo: %1 - - Continue blacklisting: - Pokračovat v blacklistingu: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Soubor nebo adresář by odebrán ze sdílení pouze pro čtení, ale jeho obnovení selhalo: %1 @@ -2067,22 +2193,22 @@ Nedoporučuje se jí používat. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 smazání souboru %1 se nezdařilo, chyba: %2 - + Attention, possible case sensitivity clash with %1 Pozor, možná kolize z důvodu velikosti písmen s %1 - + could not create folder %1 nepodařilo se vytvořit adresář %1 - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2090,17 +2216,17 @@ Nedoporučuje se jí používat. OCC::PropagateLocalRemove - + Error removing '%1': %2; Chyba při odstraňování '%1': %2; - + Could not remove folder '%1' Nezdařilo se odstranění adresáře '%1' - + Could not remove %1 because of a local file name clash Nelze odstranit %1 z důvodu kolize názvu se souborem v místním systému @@ -2108,13 +2234,13 @@ Nedoporučuje se jí používat. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Soubor %1 nemohl být přejmenován na %2 z důvodu kolize názvu se souborem v místním systému - - + + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2122,12 +2248,12 @@ Nedoporučuje se jí používat. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Soubor byl odebrán ze sdílení pouze pro čtení. Soubor byl obnoven. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Server vrátil neplatný HTTP kód. Očekáván 204, ale obdržen "%1 %2". @@ -2135,12 +2261,12 @@ Nedoporučuje se jí používat. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server vrátil neplatný HTTP kód. Očekáván 201, ale obdržen "%1 %2". - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2148,28 +2274,28 @@ Nedoporučuje se jí používat. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Tento adresář nemůže být přejmenován. Byl mu vrácen původní název. - + This folder must not be renamed. Please name it back to Shared. Tento adresář nemůže být přejmenován. Přejmenujte jej prosím zpět na Shared. - + The file was renamed but is part of a read only share. The original file was restored. Soubor byl přejmenován, ale je součástí sdílení pouze pro čtení. Původní soubor byl obnoven. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server vrátil neplatný HTTP kód. Očekáván 201, ale obdržen "%1 %2". - - + + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2177,27 +2303,32 @@ Nedoporučuje se jí používat. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Soubor %1 nelze nahrát, protože existuje jiný soubor se stejným názvem, lišící se pouze velikostí písmen - + File Removed Soubor odebrán - + Local file changed during syncing. It will be resumed. Místní soubor se během synchronizace změnil. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2205,32 +2336,32 @@ Nedoporučuje se jí používat. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2. - + The local file was removed during sync. Místní soubor byl odstraněn během synchronizace. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + Unexpected return code from server (%1) Neočekávaný návratový kód ze serveru (%1) - + Missing File ID from server Chybějící souborové ID ze serveru - + Missing ETag from server Chybějící ETag ze serveru @@ -2238,32 +2369,32 @@ Nedoporučuje se jí používat. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 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. - + Poll URL missing Chybí adresa URL - + The local file was removed during sync. Místní soubor byl odstraněn během synchronizace. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + The server did not acknowledge the last chunk. (No e-tag was present) Server nepotvrdil poslední část dat. (Nebyl nalezen e-tag) @@ -2281,42 +2412,42 @@ Nedoporučuje se jí používat. Textový popisek - + Time Čas - + File Soubor - + Folder Adresář - + Action Akce - + Size Velikost - + Local sync protocol Místní protokol synchronizace - + Copy Kopie - + Copy the activity list to the clipboard. Kopírovat záznam aktivity do schránky. @@ -2357,7 +2488,7 @@ Nedoporučuje se jí používat. OCC::SelectiveSyncDialog - + Choose What to Sync Vybrat co synchronizovat @@ -2365,33 +2496,33 @@ Nedoporučuje se jí používat. OCC::SelectiveSyncWidget - + Loading ... Načítám ... - + Deselect remote folders you do not wish to synchronize. Zrušte výběr vzdálených složek, které nechcete synchronizovat. - + Name Název - + Size Velikost - - + + No subfolders currently on the server. Na serveru nejsou momentálně žádné podadresáře. - + An error occurred while loading the list of sub folders. Došlo k chybě v průběhu načítání seznamu podadresářů. @@ -2404,22 +2535,22 @@ Nedoporučuje se jí používat. Nastavení - + Activity Aktivita - + General Hlavní - + Network Síť - + Account Účet @@ -2427,27 +2558,27 @@ Nedoporučuje se jí používat. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivita - + General Hlavní - + Network Síť - + Account Účet @@ -2475,35 +2606,45 @@ Nedoporučuje se jí používat. ownCloud cesta: - + %1 Sharing %1 sdílení - + %1 %1 - + Folder: %2 Adresář: %2 - + The server does not allow sharing Sdílení je na serveru zakázáno - + Retrieving maximum possible sharing permissions from server... Přijímání nejvyšších možných oprávnění pro sdílení ze serveru... - + The file can not be shared because it was shared without sharing permission. Tento soubor nelze sdílet, protože byl nasdílen bez možnosti dalšího sdílení. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2513,92 +2654,126 @@ Nedoporučuje se jí používat. Sdílet NewDocument.odt - - Share link - Sdílet odkaz - - - + TextLabel Textový popisek - + Set &password Nastavit &heslo - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Nastavit datum &vypršení - + Set password Nastavit heslo - - &Mail link - E&mail odkaz + + Link properties: + - Copy &link - Zkopírovat &odkaz + Show file listing + - + Allow editing Povolit úpravy - + Anyone with the link has access to the file/folder Kdokoliv, kdo má odkaz, může přistupovat k tomuto souboru/složce - + + P&assword protect Ch&ránit heslem - + Password Protected Chráněno heslem - + The file can not be shared because it was shared without sharing permission. Tento soubor nelze sdílet, protože byl nasdílen bez možnosti dalšího sdílení. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Veřejné s&dílení vyžaduje heslo - + Please Set Password Nastavte prosím heslo - - - Could not open email client - Nelze otevřít poštovního klienta - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Došlo k chybě při otevírání nové zprávy v emailovém klientu. Možná nebyl nastaven výchozí emailový klient? - - - - - &Share link - &Sdílet odkaz - OCC::ShareUserGroupWidget @@ -2608,68 +2783,98 @@ Nedoporučuje se jí používat. Sdílet NewDocument.odt - + Share with users or groups ... Sdílet s uživateli nebo skupinami - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Žádné výsledky pro '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulář + - + TextLabel - Textový popisek + - + can edit - lze upravovat + - + can share - může sdílet + - + ... - ... + - + create - vytvořit + - + change - změnit + - + delete - smazat + OCC::ShibbolethCredentials - + Login Error Chyba přihlášení - + You must sign in as user %1 Musíte se přihlásit jako uživatel %1 @@ -2677,22 +2882,22 @@ Nedoporučuje se jí používat. OCC::ShibbolethWebView - + %1 - Authenticate %1 - ověření - + SSL Chipher Debug View Ladící zobrazení šifry SSL - + Reauthentication required Vyžadováno opětovné ověření - + Your session has expired. You need to re-login to continue to use the client. Vaše sezení vypršelo. Chcete-li pokračovat v práci, musíte se znovu přihlásit. @@ -2700,26 +2905,46 @@ Nedoporučuje se jí používat. OCC::SocketApi - + Share with %1 parameter is ownCloud Sdílet s %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detaily certifikátu</h3> - + Common Name (CN): Běžný název (CN): - + Subject Alternative Names: Alternativní jména subjektu: @@ -2804,7 +3029,7 @@ Nedoporučuje se jí používat. %1 - + This connection is encrypted using %1 bit %2. Toto spojení je šifrováno pomocí %1 bitové šifry %2 @@ -2821,7 +3046,7 @@ Nedoporučuje se jí používat. Informace o certifikátu: - + This connection is NOT secure as it is not encrypted. Toto spojení NENÍ bezpečné, protože není šifrované. @@ -2841,67 +3066,67 @@ Nedoporučuje se jí používat. Přesto tomuto certifikátu důvěřovat - + Untrusted Certificate Nedůvěryhodný certifikát - + Cannot connect securely to <i>%1</i>: Nelze se bezpečně připojit k <i>%1</i>: - + with Certificate %1 s certifikátem %1 - + &lt;not specified&gt; &lt;nespecifikováno&gt; - - + + Organization: %1 Organizace: %1 - - + + Unit: %1 Jednotka: %1 - - + + Country: %1 Země: %1 - + Fingerprint (MD5): <tt>%1</tt> Otisk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Otisk (SHA1): <tt>%1</tt> - + Effective Date: %1 Datum účinnosti: %1 - + Expiration Date: %1 Datum vypršení: %1 - + Issuer: %1 Vydavatel: %1 @@ -2909,285 +3134,300 @@ Nedoporučuje se jí používat. OCC::SyncEngine - + Success. Úspěch. - + CSync failed to load the journal file. The journal file is corrupted. Nezdařilo se načtení žurnálovacího souboru CSync. Žurnálovací soubor je poškozený. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Plugin %1 pro csync nelze načíst.<br/>Zkontrolujte prosím instalaci!</p> - + CSync got an error while processing internal trees. CSync obdrželo chybu při zpracování vnitřních struktur. - - CSync failed to reserve memory. - CSync se nezdařilo rezervovat paměť. - - - + CSync fatal parameter error. CSync: kritická chyba parametrů. - + CSync processing step update failed. CSync se nezdařilo zpracovat krok aktualizace. - + CSync processing step reconcile failed. CSync se nezdařilo zpracovat krok sladění. - + CSync could not authenticate at the proxy. CSync se nemohlo přihlásit k proxy. - + CSync failed to lookup proxy or server. CSync se nezdařilo najít proxy server nebo cílový server. - + CSync failed to authenticate at the %1 server. CSync se nezdařilo přihlásit k serveru %1. - + CSync failed to connect to the network. CSync se nezdařilo připojit k síti. - + A network connection timeout happened. Došlo k vypršení časového limitu síťového spojení. - + A HTTP transmission error happened. Nastala chyba HTTP přenosu. - + The mounted folder is temporarily not available on the server Připojený adresář je na serveru dočasně nedostupný - + An error occurred while opening a folder Došlo k chybě při otvírání adresáře - + Error while reading folder. Chyba při čtení adresáře. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Soubor/adresář je ignorován, protože je skrytý. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Nedostatek volného místa na serveru %1. - + CSync unspecified error. Nespecifikovaná chyba CSync. - + Aborted by the user Zrušeno uživatelem - + CSync failed to access Selhal přístup pro CSync - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync se nepodařilo načíst či vytvořit soubor žurnálu. Ujistěte se, že máte oprávnění pro čtení a zápis do místního adresáře synchronizace. - + CSync failed due to unhandled permission denied. CSync selhalo z důvodu nezpracovaného zamítnutí oprávnění. - + CSync tried to create a folder that already exists. CSync se pokusil vytvořit adresář, který již existuje. - + The service is temporarily unavailable Služba je dočasně nedostupná - + Access is forbidden Přístup je zakázán - + An internal error number %1 occurred. Došlo k interní chybě číslo %1. - - The item is not synced because of previous errors: %1 - Položka nebyla synchronizována kvůli předchozí chybě: %1 - - - + Symbolic links are not supported in syncing. Symbolické odkazy nejsou při synchronizaci podporovány. - + File is listed on the ignore list. Soubor se nachází na seznamu ignorovaných. - + File names ending with a period are not supported on this file system. Jména souborů končících tečkou nejsou na tomto systému souborů podporována. - + File names containing the character '%1' are not supported on this file system. Názvy souborů obsahující znak '%1' nejsou na tomto souborovém systému podporovány. - + The file name is a reserved name on this file system. Jméno souboru je na tomto systému souborů rezervovaným jménem. - + Filename contains trailing spaces. Jméno souboru obsahuje mezery na konci řádky. - + Filename is too long. Jméno souboru je příliš dlouhé. - + Stat failed. Stat selhal. - + Filename encoding is not valid Kódování znaků jména soubor je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, prosím přejmenujte "%1" - - Unable to initialize a sync journal. - Nemohu inicializovat synchronizační žurnál. - - - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj @@ -3203,7 +3443,7 @@ Nedoporučuje se jí používat. OCC::Systray - + %1: %2 %1: %2 @@ -3211,17 +3451,17 @@ Nedoporučuje se jí používat. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Verze %1. Více informací na <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Šíří %1 pod licencí GNU General Public License (GPL) Verze 2.0.<br/>%2 a %2 logo jsou registrované známky %1 ve Spojených Státech, ostatních zemích, nebo obojí.</p> @@ -3229,17 +3469,17 @@ Nedoporučuje se jí používat. OCC::ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolního součtu je poškozena. - + The checksum header contained an unknown checksum type '%1' Hlavička kontrolního součtu obsahovala neznámý typ součtu '%1' - + The downloaded file does not match the checksum, it will be resumed. Stažený soubor neodpovídá kontrolnímu součtu, bude znovu stažen. @@ -3247,207 +3487,207 @@ Nedoporučuje se jí používat. OCC::ownCloudGui - + Please sign in Přihlašte se prosím - + Folder %1: %2 Adresář %1: %2 - + No sync folders configured. Nejsou nastaveny žádné synchronizované adresáře. - + There are no sync folders configured. Nejsou nastaveny žádné adresáře pro synchronizaci. - + Open in browser Otevřít v prohlížeči - - - + + + Log in... Přihlásit... - - - + + + Log out Odhlásit se - + Recent Changes Poslední změny - + Checking for changes in '%1' Kontrola změn v '%1' - + Managed Folders: Spravované adresáře: - + Open folder '%1' Otevřít adresář '%1' - + Open %1 in browser Otevřít %1 v prohlížeči - + Unknown status Neznámý stav - + Settings... Nastavení... - + Details... Podrobnosti... - + Help Nápověda - + Quit %1 Ukončit %1 - + Disconnected from %1 Odpojeno od %1 - + Unsupported Server Version Nepodporovaná verze serveru - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Server na účtu %1 používá starou a nepodporovanou verzi %2. Používání tohoto klienta s nepodporovanými verzemi serveru není testováno a může být nebezpečné. Pokračujte na vlastní riziko. - + Disconnected from accounts: Odpojeno od účtů: - + Account %1: %2 Účet %1: %2 - + Account synchronization is disabled Synchronizace účtu je vypnuta - + Unpause all folders Spustit všechny adresáře - + Pause all folders Pozastavit všechny adresáře - + Unpause all synchronization Spustit veškerou synchronizaci - + Unpause synchronization Spustit synchronizaci - + Pause all synchronization Pozastavit veškerou synchronizaci - + Pause synchronization Pozastavit synchronizaci - + Log out of all accounts Odhlásit ze všech účtů - + Log in to all accounts... Přihlásit ke všem účtům... - + New account... Nový účet... - + Crash now Only shows in debug mode to allow testing the crash handler Selhání - + No items synced recently Žádné položky nebyly nedávno synchronizovány - + Syncing %1 of %2 (%3 left) Synchronizuji %1 ze %2 (zbývá %3) - + Syncing %1 of %2 Synchronizace %1 z %2 - + Syncing %1 (%2 left) Synchronizuji %1 (zbývá %2) - + Syncing %1 Synchronizuji %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuální @@ -3455,7 +3695,7 @@ Nedoporučuje se jí používat. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3558,78 +3798,42 @@ Nedoporučuje se jí používat. &Heslo + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulář - - Server &address: - &Adresa serveru: - - - - - TextLabel Textový popisek - - - Use &secure connection - Použít za&bezpečené spojení - - - - CheckBox - Zaškrtávací pole - - - - &Username: - &Uživatelské jméno: - - - - Enter the ownCloud username. - Zadejte uživatelské jméno ownCloud. - - - - &Password: - &Heslo: - - - - Enter the ownCloud password. - Zadejte heslo ownCloud. - - - - Do not allow the local storage of the password. - Nepovolit místní uložení hesla. - - - - &Do not store password on local machine - Neuklá&dat heslo na místním počítači - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Zadejte URL ownCloud, ke které si přejete se připojit (bez http, či https). - Ser&ver Address @@ -3673,7 +3877,7 @@ Nedoporučuje se jí používat. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3681,42 +3885,42 @@ Nedoporučuje se jí používat. QObject - + in the future V budoucnosti - + %n day(s) ago před %n dnempřed %n dnypřed %n dny - + %n hour(s) ago před %n hodinoupřed %n hodinamipřed %n hodinami - + now nyní - + Less than a minute ago Méně než před minutou - + %n minute(s) ago před %n minutoupřed %n minutamipřed %n minutami - + Some time ago Před nějakým časem - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3725,57 +3929,57 @@ Nedoporučuje se jí používat. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n let - + %n month(s) %n měsíc%n měsíce%n měsíců - + %n day(s) %n den%n dny%n dní - + %n hour(s) %n hodina%n hodiny%n hodin - + %n minute(s) %n minuta%n minuty%n minut - + %n second(s) %n sekunda%n sekundy%n sekund - + %1 %2 %1 %2 @@ -3796,102 +4000,97 @@ Nedoporučuje se jí používat. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Sestaveno na Git revizi <a href="%1">%2</a> na %3, %4 s použitím Qt %5, %6</small></p> - - - built with %1 - přeloženo pomocí %1 - progress - + Downloaded Staženo - + Uploaded Odesláno - + Server version downloaded, copied changed local file into conflict file Stažena verze ze serveru, změněný místní soubor zkopírován do konfliktního souboru - + Deleted Smazáno - + Moved to %1 Přesunuto do %1 - + Ignored Ignorováno - + Filesystem access error Chyba přístupu k souborovému systému - + Error Chyba - + Updated local metadata Místní metadata aktualizována - - + + Unknown Neznámý - + downloading stahování - + uploading odesílání - + deleting mazání - + moving přesouvání - + ignoring ignoruji + - error chyba - + updating local metadata aktualizace místních metadat @@ -3899,54 +4098,77 @@ Nedoporučuje se jí používat. theme - + Status undefined Nedefinovaný stav - + Waiting to start sync Čekám na zahájení synchronizace - + Sync is running Synchronizace běží - + Sync Success Synchronizace úspěšná - + Sync Success, some files were ignored. Synchronizace úspěšná, některé soubory byly ignorovány. - + Sync Error Chyba synchronizace - + Setup Error Chyba nastavení - + Preparing to sync Připravuji na synchronizaci - + Aborting... Ruším... - + Sync is paused Synchronizace pozastavena + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_de.ts b/translations/client_de.ts index d12002d12..f17ee98e3 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Die Zieldatei hat eine unerwartete Größe oder ein unerwartetes Änderungsdatum @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Abbrechen @@ -136,188 +154,204 @@ Verbunden mit <server> als <user> - + No account configured. Kein Konto konfiguriert. - + Add new Neues Konto hinzufügen - + Remove Entfernen - + Account Benutzerkonto - + Choose what to sync Zu synchronisierende Elemente auswählen - + Force sync now Synchronisation jetzt erzwingen - + Restart sync Synchronisation neustarten - + Remove folder sync connection - Ordner Synchronisation entfernen + Ordner-Synchronisation entfernen - + Folder creation failed - Ordner anlegen fehlgeschlagen + Anlegen des Ordners fehlgeschlagen - + <p>Could not create local folder <i>%1</i>. <p>Konnte lokalen Ordner <i>%1</i> nicht anlegen. - + Confirm Folder Sync Connection Removal - Bestätigen Sie die Löschung der Ordner Sychronisation + Bestätigen Sie die Löschung der Ordner-Synchronisation - + Remove Folder Sync Connection - Ordner Synchronisation entfernen + Ordner-Synchronisation entfernen - + Sync Running Synchronisation läuft - + The syncing operation is running.<br/>Do you want to terminate it? Die Synchronisation läuft gerade.<br/>Wollen Sie sie beenden? - + %1 in use %1 wird verwendet - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - Die Serververision %1 ist al und nicht unterstützt! Fortfahren auf eigenes Risiko. + Die Serververision %1 ist alt und nicht unterstützt! Fortfahren auf eigenes Risiko. - + Connected to %1. Verbunden mit %1. - + Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Abgemeldet von %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Keine Verbindung zu %1 auf %2 - + Log in Einloggen - + There are folders that were not synchronized because they are too big: - Einige Verzeichnisse konnten nicht synchronisiert werden, da diese zu groß sind: + Einige Verzeichnisse konnten nicht synchronisiert werden, da sie zu groß sind: - + There are folders that were not synchronized because they are external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese externe Speicher sind: - + There are folders that were not synchronized because they are too big or external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese zu groß oder externe Speicher sind: - + Confirm Account Removal Konto wirklich entfernen? - + <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> <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> - + Remove connection Verbindung entfernen - + + Open folder Ordner öffnen - - + + Log out Abmelden - + Resume sync Synchronisation fortsetzen - + Pause sync Synchronisation pausieren - + <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> - <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> + <p>Möchten Sie den Ordner <i>%1</i> wirklich nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - %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. + %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. - + %1 of %2 in use %1 von %2 Serverkapazität verwendet - + Currently there is no storage usage information available. Derzeit sind keine Speichernutzungsinformationen verfügbar. - + No %1 connection configured. Keine %1-Verbindung konfiguriert. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Abgemeldet - + Disconnected Getrennt - + Connected Verbunden - + Service unavailable Dienst nicht verfügbar - + + Maintenance mode + + + + Network error Netzwerkfehler - + Configuration error Konfigurationsfehler - + + Asking Credentials + + + + Unknown account state Unbekannten Konto-Zustand @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity - Server Aktivität + Serveraktivität - + Sync Protocol Synchronisationsprotokoll - - List of ignored or erroneous files - Liste von ignorierten oder feherhaften Dateien - - - - Copy - Kopieren - - - - Copy the activity list to the clipboard. - Aktivitätsliste in die Zwischenablage kopieren. - - - + Not Synced nicht synchronisiert - + Not Synced (%1) %1 is the number of not synced files. nicht synchronisiert (%1) - + The server activity list has been copied to the clipboard. Die Server-Aktivitätsliste wurde in die Zwischenablage kopiert. - + The sync activity list has been copied to the clipboard. Die Synchronisationsliste wurde in die Zwischenablage kopiert. - + The list of unsynced items has been copied to the clipboard. Die Liste der unsynchronisierten Dateien wurde in die Zwischenablage kopiert. - + Copied to clipboard In die Zwischenablage kopiert @@ -448,47 +477,47 @@ TextLabel - + Server Activities Server Aktivitäten - + Copy Kopieren - + Copy the activity list to the clipboard. Aktivitätsliste in die Zwischenablage kopieren. - + Action Required: Notifications Handlung erforderlich: Benachrichtigungen - + <br/>Account %1 does not have activities enabled. <br/>Für Konto %1 sind serverseitig keine Aktivitäten aktiviert. - + You received %n new notification(s) from %2. Sie haben %n neue Benachrichtigung von %2 erhalten.Sie haben %n neue Benachrichtigungen von %2 erhalten. - + You received %n new notification(s) from %1 and %2. Sie haben %n neue Benachrichtigung von %1 und %2 erhalten.Sie haben %n neue Benachrichtigungen von %1 und %2 erhalten. - + You received new notifications from %1, %2 and other accounts. Sieh haben %n neue Benachrichtigungen von %1, %2 und anderen Konten erhalten. - + %1 Notifications - Action Required %1 Benachrichtigungen - Handlung notwendig @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Fehler beim Zugriff auf die Konfigurationsdatei - + There was an error while accessing the configuration file at %1. Es ist ein Fehler beim Zugriff auf die Konfigurationsdatei unter %1 aufgetreten. - + Quit ownCloud ownCloud verlassen @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Kein ownCloud-Konto konfiguriert - + The configured server for this client is too old Der konfigurierte Server ist für diesen Client zu alt - + Please update to the latest server and restart the client. Aktualisieren Sie auf die letzte Server-Version und starten Sie den Client neu. - + Authentication error: Either username or password are wrong. Authentifizierungsfehler: Entweder der Benutzername oder das Passwort sind falsch. - + timeout Zeitüberschreitung - + The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt - - OCC::DeleteJob - - - Connection timed out - Zeitüberschreitung bei der Verbindung - - OCC::DiscoveryMainThread - + Aborted by the user Abbruch durch den Benutzer @@ -632,179 +653,179 @@ OCC::Folder - + Local folder %1 does not exist. Lokales Verzeichnis %1 existiert nicht. - + %1 should be a folder but is not. %1 sollte ein Ordner sein, ist es aber nicht. - + %1 is not readable. %1 ist nicht lesbar. - + %1 has been removed. %1 names a file. %1 wurde gelöscht. - + %1 has been downloaded. %1 names a file. %1 wurde heruntergeladen. - + %1 has been updated. %1 names a file. %1 wurde aktualisiert. - + %1 has been renamed to %2. %1 and %2 name files. %1 wurde in %2 umbenannt. - + %1 has been moved to %2. %1 wurde in %2 verschoben. - + %1 and %n other file(s) have been removed. %1 und %n andere Datei wurde gelöscht.%1 und %n andere Dateien wurden gelöscht. - + %1 and %n other file(s) have been downloaded. %1 und %n andere Datei wurde heruntergeladen.%1 und %n andere Dateien wurden heruntergeladen. - + %1 and %n other file(s) have been updated. %1 und %n andere Datei wurde aktualisiert.%1 und %n andere Dateien wurden aktualisiert. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 wurde in %2 umbenannt und %n andere Datei wurde umbenannt.%1 wurde in %2 umbenannt und %n andere Dateien wurden umbenannt. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 wurde in %2 verschoben und %n andere Datei wurde verschoben.%1 wurde in %2 verschoben und %n andere Dateien wurden verschoben. - + %1 has and %n other file(s) have sync conflicts. %1 und %n andere Datei haben Konflikte beim Abgleichen.%1 und %n andere Dateien haben Konflikte beim Abgleichen. - + %1 has a sync conflict. Please check the conflict file! Es gab einen Konflikt bei der Synchronisierung von %1. Bitte prüfen Sie die Konfliktdatei! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 und %n weitere Datei konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details.%1 und %n weitere Dateien konnten aufgrund von Fehlern nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. - + %1 could not be synced due to an error. See the log for details. %1 konnte aufgrund eines Fehlers nicht synchronisiert werden. Schauen Sie in das Protokoll für Details. - + Sync Activity Synchronisierungsaktivität - + Could not read system exclude file Systemeigene Ausschlussdatei kann nicht gelesen werden - + A new folder larger than %1 MB has been added: %2. Ein neues Verzeichnis größer als %1 MB wurde hinzugefügt: %2. - + A folder from an external storage has been added. Ein Verzeichnis, von einem externen Speicher wurde hinzugefügt. - + Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie das Verzeichnis herunterladen möchten. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. - Alle Dateien im Synchronisationsordner '%1' werden auf dem Server gelöscht. -Diese Löschung wird in Ihr lokales Synchronisationsverzeichnis synchronisiert. Dadurch sind die Dateien nicht mehr verfügbar, falls Sie keine Möglichkeit zur Wiederherstellung haben. + Alle Dateien im Synchronisationsordner '%1' wurden auf dem Server gelöscht. +Diese Löschung wird in Ihren lokalen Synchronisationsordner synchronisiert. Dadurch sind die Dateien nicht mehr verfügbar, falls Sie keine Möglichkeit zur Wiederherstellung haben. Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder synchronisiert. Dies geschieht nur, wenn Sie die Rechte dazu haben. Wenn Sie sich zum Löschen der Dateien entscheiden, sind diese nicht mehr verfügbar, außer Sie sind der Eigentümer. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - Alle Dateien im Synchronisationsordner '%1' werden auf dem Server gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, außer diese werden wiederhergestellt. + Alle Dateien im lokalen Synchronisationsordner '%1' wurden gelöscht. Diese Löschung wird mit Ihrem Server synchronisiert, wodurch die Dateien nicht mehr verfügbar sind, es sei denn, sie werden wiederhergestellt. Sind Sie sich sicher, dass Sie diese Aktion mit Ihrem Server synchronisieren möchten? -Falls dies ein Missgeschick war und Sie sich zum Behalten der Datei entscheiden, werden diese wieder vom Server synchronisiert. +Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheiden, werden diese wieder vom Server synchronisiert. - + Remove All Files? Alle Dateien löschen? - + Remove all files Lösche alle Dateien - + Keep files Dateien behalten - + This sync would reset the files to an earlier 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? Dieser Sync-Vorgang des Synchronisationsordners '%1' würde Dateien auf ein früheres Änderungsdatum zurücksetzen. Der Grund dafür ist möglicherweise, dass auf dem Server ein Backup eingespielt wurde. -Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älteren Versionen überschrieben. Möchten Sie die neueren Dateien als Konflikt-Dateien behalten? +Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älteren Versionen überschrieben. Möchten Sie die neueren lokalen Dateien als Konflikt-Dateien behalten? - + Backup detected Backup erkannt - + Normal Synchronisation Normale Synchronisation - + Keep Local Files as Conflict Lokale Konfliktdateien behalten @@ -812,112 +833,112 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderMan - + Could not reset folder state Konnte Ordner-Zustand nicht zurücksetzen - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Ein altes Synchronisations-Journal '%1' wurde gefunden, konnte jedoch nicht entfernt werden. Bitte stellen Sie sicher, dass keine Anwendung es verwendet. - + (backup) (Sicherung) - + (backup %1) (Sicherung %1) - + Undefined State. Undefinierter Zustand. - + Waiting to start syncing. Wartet auf Beginn der Synchronistation - + Preparing for sync. Synchronisation wird vorbereitet. - + Sync is running. Synchronisation läuft. - + Last Sync was successful. Die letzte Synchronisation war erfolgreich. - + Last Sync was successful, but with warnings on individual files. Letzte Synchronisation war erfolgreich, aber mit Warnungen für einzelne Dateien. - + Setup Error. Installationsfehler. - + User Abort. Benutzer-Abbruch - + Sync is paused. Synchronisation wurde angehalten. - + %1 (Sync is paused) %1 (Synchronisation ist pausiert) - + No valid folder selected! Kein gültige Ordner gewählt! - + The selected path is not a folder! Der gewählte Pfad ist kein Ordner! - + You have no permission to write to the selected folder! Sie haben keine Schreibberechtigung für den ausgewählten Ordner! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Der lokale Ordner %1 beinhaltet einen symbolischer Link. Das Ziel des Links beinhaltet bereits einen synchronisierten Ordner. Bitte wählen Sie einen anderen lokalen Ordner aus! - + There is already a sync from the server to this local folder. Please pick another local folder! Es exisitiert bereits eine Synchronisation vom Server zu diesem lokalen Ordner. Bitte wählen Sie ein anderes lokales Verzeichnis! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Der lokale Ordner %1 liegt innerhalb eines synchronisierten Ordners. Bitte wählen Sie einen anderen aus! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Der lokale Ordner %1 liegt in einem Ordner, der bereits synchronisiert wird. Bitte wählen Sie einen anderen aus! - + 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! 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! @@ -925,17 +946,17 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderStatusDelegate - + Add Folder Sync Connection - Ordner Synchronisation hinzufügen + Ordner-Synchronisation hinzufügen - + Synchronizing with local folder Synchronisiere mit lokalem Verzeichnis - + File Datei @@ -943,134 +964,144 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderStatusModel - + You need to be connected to add a folder Sie müssen verbunden sein, um einen Ordner hinzuzufügen - + Click this button to add a folder to synchronize. Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fehler beim Empfang der Ordnerliste vom Server. - + Signed out Abgemeldet - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Sie können keinen weiteren Ordner hinzufügen, da Sie bereits alle Dateien synchronisieren. Falls sie mehrere Ordner synchronisieren wollen, entferen Sie zunächst den konfigurierten Wurzel-Ordner. - + Fetching folder list from server... Empfange Orderliste vom Server... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisiere %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 von %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 übrig, %1 von %2, Datei %3 von %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, Datei %3 von %4 - + file %1 of %2 Datei %1 von %2 - + Waiting... Warte... - + Waiting for %n other folder(s)... Warte auf einen anderen OrdnerWarte auf %n andere Ordner - + Preparing to sync... Bereite Synchronisation vor... @@ -1078,14 +1109,14 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderWizard - + Add Folder Sync Connection - Ordner Synchronisation hinzufügen + Ordner-Synchronisation hinzufügen - + Add Sync Connection - Ordner Synchronisation hinzufügen + Ordner-Synchronisation hinzufügen @@ -1096,7 +1127,7 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Zur Auswahl eines lokalen Verzeichnisses für die Synchronisation klicken. - + Enter the path to the local folder. Pfad zum lokalen Verzeichnis eingeben @@ -1119,42 +1150,42 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Geben Sie den Namen des neuen, unter '%1' zu erstellenden Ordners ein: - + Folder was successfully created on %1. Order erfolgreich auf %1 erstellt. - + Authentication failed accessing %1 Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen - + Failed to create the folder on %1. Please check manually. Die Erstellung des Ordners auf %1 ist fehlgeschlagen. Bitte prüfen Sie dies manuell. - + Failed to list a folder. Error: %1 Konnte Ordner nicht listen. Fehler: %1 - + Choose this to sync the entire account Wählen Sie dies, um das gesamte Konto zu synchronisieren - + This folder is already being synced. Dieser Ordner wird bereits synchronisiert. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sie synchronisieren bereits <i>%1</i>, das ein übergeordneten Ordner von <i>%2</i> ist. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Sie synchronisieren bereits alle Ihre Dateien. Die Synchronisation anderer Verzeichnisse wird <b>nicht</b> unterstützt. Wenn Sie mehrere Ordner synchronisieren möchten, entfernen Sie bitte das aktuell konfigurierte Wurzelverzeichnis zur Synchronisation. @@ -1175,22 +1206,22 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Kein E-Tag vom Server empfangen, bitte Proxy / Gateway überprüfen - + We received a different E-Tag for resuming. Retrying next time. Es wurde ein unterschiedlicher E-Tag zum Fortfahren empfangen. Bitte beim nächsten mal nochmal versuchen. - + Server returned wrong content-range Server hat falschen Bereich für den Inhalt zurück gegeben - + Connection Timeout Zeitüberschreitung der Verbindung @@ -1213,23 +1244,23 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Für das Systembenachrichtungsfeld - + Advanced Erweitert - + Ask for confirmation before synchronizing folders larger than Bestätigung erfragen, bevor Ordner synchronisiert werden. Grenze: - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Bestätigung erfragen, bevor externe Speicher synchronisiert werden @@ -1249,28 +1280,28 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter &Monochrome Icons verwenden - + Edit &Ignored Files I&gnorierte Dateien bearbeiten - + S&how crash reporter &Crash-Reporter anzeigen - - + + About Über - + Updates Updates - + &Restart && Update &Neustarten && aktualisieren @@ -1278,22 +1309,22 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Bitte Kennwort für %1 eingeben:<br><br>Benutzer: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Schlüsselbund fehlgeschlagen mit Fehler: '%1' - + Enter Password Passwort eingeben - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicken Sie hier</a> um ein App-Passwort von dem Web-Interface zu erhalten. @@ -1375,55 +1406,125 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun Dieser Eintrag wird vom System auf '%1' bereitgestellt und kann in dieser Ansicht nicht geändert werden. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Log-Ausgabe - + &Search: &Suchen: - + &Find &Finde - + + &Capture debug messages + + + + Clear Leeren - + Clear the log display. Protokollanzeige löschen. - + S&ave S&peichern - + Save the log file to a file on disk for debugging. Speichere die Protokolldatei zur Fehleranalyse - + Save log file Logdatei speichern - + Error Fehler - + Could not write to log file %1 Konnte nicht in die Protokoll-Datei %1 schreiben @@ -1431,24 +1532,16 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::Logger - + Error Fehler - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Datei »%1«<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> - - OCC::MoveJob - - - Connection timed out - Zeitüberschreitung bei der Verbindung - - OCC::NSISUpdater @@ -1560,27 +1653,27 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun Automatisch begrenzen - + Hostname of proxy server Hostname des Proxy-Servers - + Username for proxy server Benutzername für den Proxy-Server - + Password for proxy server Passwort für den Proxy-Server - + HTTP(S) proxy HTTP(S)-Proxy - + SOCKS5 proxy SOCKS5-Proxy @@ -1593,78 +1686,111 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::NotificationWidget - + Created at %1 Erstellt von %1 - + Closing in a few seconds... Schließe in wenigen Sekunden... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 Anfrage an %2 fehlgeschlagen - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' ausgewählt von %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Neues %1 Update verfügbar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Ein neues Update für %1 wird installiert. Während des Updatevorganges werden Sie eventuell gefragt zusätzliche Rechte im Rahmen des Updatevorganges zu gewähren. - + Downloading version %1. Please wait... Version %1 wird heruntergeladen. Bitte warten … - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Aktualisierung kann nicht herunter geladen werden. Bitte klicken Sie <a href='%1'>hier</a> um die Aktualisierung manuell herunter zu laden. - + Could not check for new updates. Auf neue Aktualisierungen kann nicht geprüft werden. - + %1 version %2 available. Restart application to start the update. %1-Version %2 verfügbar. Anwendung zum Start der Aktualisierung neustarten. - + New %1 version %2 available. Please use the system's update tool to install it. Neue %1-Version %2 verfügbar. Bitte nutzen Sie das System-Updatetool zur Installation. - + Checking update server... Aktualisierungsserver wird überprüft … - + Update status is unknown: Did not check for new updates. Updatestatus unbekannt: Auf neue Updates wurde nicht geprüft. - + No updates available. Your installation is at the latest version. Keine Aktualisierungen verfügbar. Ihre Installation ist die aktuelle Version. @@ -1677,43 +1803,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Verbinden mit %1 - + Setup local folder options Einstellungen der Optionen für lokale Verzeichnisse - + Connect... Verbinden… - + %1 folder '%2' is synced to local folder '%3' %1 Ordner '%2' wird mit dem lokalen Ordner '%3' synchronisiert - + Sync the folder '%1' Ordner '%1' synchronisieren - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Achtung:</strong> Der lokale Ordner ist nicht leer. Bitte wählen Sie eine entsprechende Lösung!</small></p> - + Local Sync Folder Lokaler Ordner für die Synchronisation - - + + (%1) (%1) @@ -1746,7 +1872,7 @@ for additional privileges during the process. Clientseitiges TLS-Zertifikat konfigurieren. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Sichere Verbindung zur Server-Adresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> @@ -1754,47 +1880,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &E-Mail - + Connect to %1 Verbinden mit %1 - + Enter user credentials Geben Sie die Benutzer-Anmeldeinformationen ein + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Verbinden mit %1 - + Setup %1 server %1 Server einrichten - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Diese URL ist NICHT sicher, das sie nicht verschlüsselt ist. Es ist nicht ratsam, diese zu benutzen. - + This url is secure. You can use it. Diese URL ist sicher. Sie können Sie benutzen. - + &Next > &Weiter > @@ -1802,22 +1941,22 @@ Es ist nicht ratsam, diese zu benutzen. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Die Verbindung zu %1 auf %2:<br/>%3 konnte nicht hergestellt werden - + Timeout while trying to connect to %1 at %2. Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. - + Trying to connect to %1 at %2... Verbindungsversuch mit %1 unter %2… @@ -1837,109 +1976,109 @@ Es ist nicht ratsam, diese zu benutzen. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. - + Invalid URL Ungültige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> - + Creating local sync folder %1... Lokaler Synchronisations-Ordner %1 wird erstellt ... - + ok ok - + failed. fehlgeschlagen. - + Could not create local folder %1 Der lokale Ordner %1 konnte nicht angelegt werden - + No remote folder specified! Keinen entfernten Ordner angegeben! - + Error: %1 Fehler: %1 - + creating folder on ownCloud: %1 erstelle Ordner auf ownCloud: %1 - + Remote folder %1 created successfully. Remoteordner %1 erfolgreich erstellt. - + The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisation. - + The folder creation resulted in HTTP error code %1 Das Erstellen des Verzeichnisses erzeugte den HTTP-Fehler-Code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Die Remote-Ordner-Erstellung ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Die Remote-Ordner-Erstellung ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Remote-Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Eine Synchronisationsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. - + Successfully connected to %1! Erfolgreich verbunden mit %1! - + Connection to %1 could not be established. Please check again. Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. - + Folder rename failed Ordner umbenennen fehlgeschlagen. - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei oder beenden Sie die Installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erfolgreich erstellt!</b></font> @@ -1947,12 +2086,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::OwncloudWizard - + %1 Connection Wizard %1 Verbindungsassistent - + Skip folders configuration Ordner-Konfiguration überspringen @@ -1960,33 +2099,25 @@ Es ist nicht ratsam, diese zu benutzen. OCC::OwncloudWizardResultPage - + Everything set up! Alles ist eingerichtet! - + Open Local Folder Öffne lokalen Ordner - + Open %1 in Browser %1 im Browser öffnen - - OCC::PUTFileJob - - - Connection Timeout - Zeitüberschreitung der Verbindung - - OCC::PollJob - + Invalid JSON reply from the poll URL Ungültige JSON-Antwort von der Poll-URL @@ -1994,7 +2125,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateDirectory - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2002,47 +2133,47 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht herunter geladen werden! - - The download would reduce free disk space below %1 - Dieser Download würde den freien Speicher der Festplatte minimieren auf %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Der freie Speicher auf der Festplatte ist weniger als %1 - + File was deleted from server Die Datei wurde vom Server gelöscht - + The file could not be downloaded completely. Die Datei konnte nicht vollständig herunter geladen werden. - + The downloaded file is empty despite the server announced it should have been %1. Die heruntergeladene Datei ist leer, obwohl der Server %1 als Größe übermittelt hat. - + File %1 cannot be saved because of a local file name clash! Die Datei %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht gespeichert geladen werden! - + File has changed since discovery Datei ist seit der Entdeckung geändert worden - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2050,17 +2181,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Wiederherstellung fehlgeschlagen: %1 - - Continue blacklisting: - Blacklisting fortsetzen: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1 @@ -2068,22 +2194,22 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Konnte Datei %1 nicht löschen. Fehler: %2 - + Attention, possible case sensitivity clash with %1 Achtung, es könnte ein Problem mit der Groß- und Kleinschreibung für %1 auftreten - + could not create folder %1 Ordner %1 konnte nicht angelegt werden - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2091,17 +2217,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fehler beim Entfernen '%1': %2; - + Could not remove folder '%1' Der Ordner konnte nicht gelöscht werden '%1' - + Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht gelöscht werden @@ -2109,13 +2235,13 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht zu %2 umbenannt werden - - + + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2123,12 +2249,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Die Datei wurde von einer Nur-Lese-Freigabe gelöscht. Die Datei wurde wiederhergestellt. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 204, aber gesendet wurde "%1 %2". @@ -2136,12 +2262,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2149,28 +2275,28 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Dieser Ordner muss nicht umbenannt werden. Er wurde zurück zum Originalnamen umbenannt. - + This folder must not be renamed. Please name it back to Shared. Dieser Ordner muss nicht umbenannt werden. Bitte benennen Sie es zurück wie in der Freigabe. - + The file was renamed but is part of a read only share. The original file was restored. Die Datei wurde auf einer Nur-Lese-Freigabe umbenannt. Die Original-Datei wurde wiederhergestellt. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Es wurde ein falscher HTTP-Status-Code vom Server gesendet. Erwartet wurde 201, aber gesendet wurde "%1 %2". - - + + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2178,27 +2304,32 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit dem selben Namen, nur unterschiedlicher Großschreibung, existiert - + File Removed Datei gelöscht - + Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisation geändert. Die Synchronisation wird wiederaufgenommen. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2206,32 +2337,32 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen. - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisation gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + Unexpected return code from server (%1) Unerwarteter Rückgabe-Code Antwort vom Server (%1) - + Missing File ID from server Fehlende Datei-ID vom Server - + Missing ETag from server Fehlender ETag vom Server @@ -2239,32 +2370,32 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Die Datei wurde von einer Nur-Lese-Freigabe lokal bearbeitet. Die Datei wurde wiederhergestellt und Ihre Bearbeitung ist in der Konflikte-Datei. - + Poll URL missing Poll-URL fehlt - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisation gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Der E-Tag war nicht vorhanden) @@ -2282,42 +2413,42 @@ Es ist nicht ratsam, diese zu benutzen. TextLabel - + Time Zeit - + File Datei - + Folder Ordner - + Action Aktion - + Size Größe - + Local sync protocol Lokales Sychronisationsprotokoll - + Copy Kopieren - + Copy the activity list to the clipboard. Aktivitätsliste in die Zwischenablage kopieren. @@ -2358,7 +2489,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SelectiveSyncDialog - + Choose What to Sync Zu synchronisierende Elemente auswählen @@ -2366,33 +2497,33 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SelectiveSyncWidget - + Loading ... Laden… - + Deselect remote folders you do not wish to synchronize. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. - + Name Name - + Size Größe - - + + No subfolders currently on the server. Aktuell befinden sich keine Unterordner auf dem Server. - + An error occurred while loading the list of sub folders. Ein Fehler ist aufgetreten, während die Liste der Unterordner geladen wurde. @@ -2405,22 +2536,22 @@ Es ist nicht ratsam, diese zu benutzen. Einstellungen - + Activity Aktivität - + General Allgemein - + Network Netzwerk - + Account Benutzerkonto @@ -2428,27 +2559,27 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivität - + General Allgemein - + Network Netzwerk - + Account Benutzerkonto @@ -2476,35 +2607,45 @@ Es ist nicht ratsam, diese zu benutzen. ownCloud-Pfad: - + %1 Sharing %1-Freigabe - + %1 %1 - + Folder: %2 Ordner: %2 - + The server does not allow sharing Der Server erlaubt das teilen nicht - + Retrieving maximum possible sharing permissions from server... Abrufen der maximal möglichen Freigabeberechtigungen vom Server... - + The file can not be shared because it was shared without sharing permission. Die Datei kann nicht geteilt werden, weil sie ohne erneute Teilungs-Berechtigung für Sie geteilt wurde. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2514,92 +2655,126 @@ Es ist nicht ratsam, diese zu benutzen. Teile NewDocument.odt - - Share link - Link teilen - - - + TextLabel TextLabel - + Set &password &password festlegen - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Ablaufdatum setzen - + Set password Passwort setzen - - &Mail link - &Mail-Link + + Link properties: + - Copy &link - &Link kopieren + Show file listing + - + Allow editing Bearbeitung erlauben - + Anyone with the link has access to the file/folder Jeder mit dem Link hat Zugriff auf die Datei/Ordner - + + P&assword protect Passwort geschützt - + Password Protected passwortgeschützt - + The file can not be shared because it was shared without sharing permission. Die Datei kann nicht geteilt werden, weil sie ohne erneute Teilungs-Berechtigung für Sie geteilt wurde. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Öffentliches Teilen erfordert ein P&asswort - + Please Set Password Bitte wählen Sie ein Passwort: - - - Could not open email client - Die E-Mail Anwendung konnte nicht geöffnet werden - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Es ist ein Fehler beim Öffnen der E-Mail Anwendung, zum Erstellen einer neuen Nachricht, aufgetreten. Vielleicht ist keine standardmäßige E-Mail Anwendung konfiguriert? - - - - - &Share link - &Link teilen - OCC::ShareUserGroupWidget @@ -2609,68 +2784,98 @@ Es ist nicht ratsam, diese zu benutzen. Teile NewDocument.odt - + Share with users or groups ... Mit Benutzern oder Gruppen teilen… - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Keine Ergebnisse für '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formular + - + TextLabel - TextLabel + - + can edit - kann bearbeiten + - + can share - kann teilen + - + ... - ... + - + create - erstellen + - + change - Ändern + - + delete - löschen + OCC::ShibbolethCredentials - + Login Error Log-In Fehler - + You must sign in as user %1 Sie müssen sich als %1 einloggen @@ -2678,22 +2883,22 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Authentifikation - + SSL Chipher Debug View Debug-Ansicht der SSL-Chiffren - + Reauthentication required Erneute Authentifizierung erforderlich - + Your session has expired. You need to re-login to continue to use the client. Ihre Sitzung ist abgelaufen. Sie müssen sich zur weiteren Nutzung des Clients neu Anmelden. @@ -2701,26 +2906,46 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SocketApi - + Share with %1 parameter is ownCloud Via %1 teilen + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Zertifikatdetails</h3> - + Common Name (CN): Gemeinsamer Name (CN): - + Subject Alternative Names: Subject Alternative Names: @@ -2805,7 +3030,7 @@ Es ist nicht ratsam, diese zu benutzen. %1 - + This connection is encrypted using %1 bit %2. Diese Verbindung ist verschlüsselt mit %1 Bit %2. @@ -2822,7 +3047,7 @@ Es ist nicht ratsam, diese zu benutzen. Zertifikatsinformation: - + This connection is NOT secure as it is not encrypted. Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. @@ -2842,67 +3067,67 @@ Es ist nicht ratsam, diese zu benutzen. Diesem Zertifikat trotzdem vertrauen - + Untrusted Certificate Nicht vertrauenswürdiges Zertifikat - + Cannot connect securely to <i>%1</i>: Kann keine sichere Verbindung zu <i>%1</i> herstellen: - + with Certificate %1 mit Zertifikat %1 - + &lt;not specified&gt; &lt;nicht angegeben&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Einheit: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerabdruck (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> - + Effective Date: %1 Aktuelles Datum: %1 - + Expiration Date: %1 Ablaufdatum: %1 - + Issuer: %1 Aussteller: %1 @@ -2910,285 +3135,300 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SyncEngine - + Success. Erfolgreich - + CSync failed to load the journal file. The journal file is corrupted. CSync konnte die Journaldatei nicht laden. Die Journaldatei ist beschädigt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Das %1-Plugin für csync konnte nicht geladen werden.<br/>Bitte überprüfen Sie die Installation!</p> - + CSync got an error while processing internal trees. CSync hatte einen Fehler bei der Verarbeitung von internen Strukturen. - - CSync failed to reserve memory. - CSync konnte keinen Speicher reservieren. - - - + CSync fatal parameter error. CSync hat einen schwerwiegender Parameterfehler festgestellt. - + CSync processing step update failed. CSync Verarbeitungsschritt "Aktualisierung" fehlgeschlagen. - + CSync processing step reconcile failed. CSync Verarbeitungsschritt "Abgleich" fehlgeschlagen. - + CSync could not authenticate at the proxy. CSync konnte sich nicht am Proxy authentifizieren. - + CSync failed to lookup proxy or server. CSync konnte den Proxy oder Server nicht auflösen. - + CSync failed to authenticate at the %1 server. CSync konnte sich nicht am Server %1 authentifizieren. - + CSync failed to connect to the network. CSync konnte sich nicht mit dem Netzwerk verbinden. - + A network connection timeout happened. Eine Zeitüberschreitung der Netzwerkverbindung ist aufgetreten. - + A HTTP transmission error happened. Es hat sich ein HTTP-Übertragungsfehler ereignet. - + The mounted folder is temporarily not available on the server Der auf dem Server eingehängte Ordner ist vorübergehend nicht verfügbar - + An error occurred while opening a folder Beim Öffnen eines Ordners ist ein Fehler aufgetreten. - + Error while reading folder. Fehler beim Lesen eines Ordners. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Datei wird ignoriert, weil sie versteckt ist. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Kein Platz auf Server %1 frei. - + CSync unspecified error. CSync unbekannter Fehler. - + Aborted by the user Abbruch durch den Benutzer - + CSync failed to access CSync-Zugriff fehlgeschlagen - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync konnte das Journal nicht laden oder erstellen. Stellen Sie bitte sicher, dass Sie Lese- und Schreibrechte im lokalen Synchronisationsordner haben. - + CSync failed due to unhandled permission denied. CSync wegen fehlender Berechtigung fehlgeschlagen. - + CSync tried to create a folder that already exists. CSync versuchte einen Ordner anzulegen, der schon existiert. - + The service is temporarily unavailable Der Dienst ist vorübergehend nicht erreichbar - + Access is forbidden Zugriff verboten - + An internal error number %1 occurred. Ein interner Fehler mit der Fehlernummer %1 ist aufgetreten. - - The item is not synced because of previous errors: %1 - Das Element ist aufgrund vorheriger Fehler nicht synchronisiert: %1 - - - + Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisation nicht unterstützt. - + File is listed on the ignore list. Die Datei ist in der Ignorierliste geführt. - + File names ending with a period are not supported on this file system. Dateinamen enden mit einem Punkt, die in diesem Dateisystem nicht unterstützt wird. - + File names containing the character '%1' are not supported on this file system. Dateinamen beinhalten das Zeichen '%1' und diese werden in diesem Dateisystems nicht unterstützt. - + The file name is a reserved name on this file system. Der Dateiname ist ein reservierter Name in diesem Dateisystem. - + Filename contains trailing spaces. Dateiname endet mit Leerzeichen. - + Filename is too long. Der Dateiname ist zu lang. - + Stat failed. Stat fehlgeschlagen. - + Filename encoding is not valid Dateikodierung ist ungültig - + Invalid characters, please rename "%1" Ungültige Zeichenm bitte benennen Sie "%1" um - - Unable to initialize a sync journal. - Synchronisationsbericht konnte nicht initialisiert werden. - - - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle @@ -3204,7 +3444,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::Systray - + %1: %2 %1: %2 @@ -3212,17 +3452,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. Für weitere Informationen besuchen Sie bitte <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Zur Verfügung gestellt durch %1 und lizenziert unter der GNU General Public License (GPL) Version 2.0.<br>%2 und das %2 Logo sind eingetragene Warenzeichen von %1 in den Vereinigten Staaten, anderen Ländern oder beides.</p> @@ -3230,17 +3470,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ValidateChecksumHeader - + The checksum header is malformed. Der Prüfsummen-Header hat ein fehlerhaftes Format. - + The checksum header contained an unknown checksum type '%1' Die Prüfsummen-Kopfzeile enthielt den unbekannten Prüfsummentypen '%1'. - + The downloaded file does not match the checksum, it will be resumed. Die heruntergeladene Datei entspricht nicht der Prüfsumme, das Herunterladen wird wiederaufgenommen. @@ -3248,207 +3488,207 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ownCloudGui - + Please sign in Bitte melden Sie sich an - + Folder %1: %2 Ordner %1: %2 - + No sync folders configured. Keine Sync-Ordner konfiguriert. - + There are no sync folders configured. Es wurden keine Synchonisationsordner konfiguriert. - + Open in browser Im Browser öffnen - - - + + + Log in... Einloggen... - - - + + + Log out Abmelden - + Recent Changes Letzte Änderungen - + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + Managed Folders: Verwaltete Ordner: - + Open folder '%1' Ordner »%1« öffnen - + Open %1 in browser %1 im Browser öffnen - + Unknown status Unbekannter Status - + Settings... Einstellungen … - + Details... Details … - + Help Hilfe - + Quit %1 %1 beenden - + Disconnected from %1 Von %1 trennen - + Unsupported Server Version nicht unterstütze Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Der Server mit Konto %1 läuft mit einer alten und nicht unterstützten Version %2. Die Verwendung dieses Clienten mit der nicht unterstützten Serverversion ist ungetestet und möglicherweiße gefährich. Fortfahren auf eigenes Risiko. - + Disconnected from accounts: Getrennt von Konten: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Account Synchronisation ist deaktiviert - + Unpause all folders Setze alle Ordner fort - + Pause all folders Stoppe alle Ordner - + Unpause all synchronization Setze gesamte Synchronisation fort - + Unpause synchronization Setze Synchronisation fort - + Pause all synchronization Stoppe gesamte Synchronisation - + Pause synchronization Stoppe Synchronisation - + Log out of all accounts Bei allen Konten abmelden - + Log in to all accounts... Bei allen Konten anmelden... - + New account... Neues Konto... - + Crash now Only shows in debug mode to allow testing the crash handler Jetzt abstürzen lassen - + No items synced recently Keine kürzlich synchronisierten Elemente - + Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - + Syncing %1 of %2 Synchronisiere %1 von %2 - + Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) - + Syncing %1 Synchronisiere %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell @@ -3456,7 +3696,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Version %2. Weitere Informationen unter <a href="%3">https://%4</a></p><p>Für bekannte Fehler und die Hilfe, besuchen Sie bitte: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>Von Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz und anderen.</small></p><p>Copyright ownCloud GmbH</p><p>Lizenziert unter den Bedingungen der GNU General Public License (GPL) Version 2.0<br/>ownCloud und das ownCloud Logo sind eingetragene Warenzeichen der ownCloud Inc. in den USA, anderen Ländern, oder beidem.</p> @@ -3559,78 +3799,42 @@ Es ist nicht ratsam, diese zu benutzen. &Passwort + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formular - - Server &address: - Server-&Adresse - - - - - TextLabel TextLabel - - - Use &secure connection - Verwende &sichere Verbindung - - - - CheckBox - CheckBox - - - - &Username: - &Benutzername: - - - - Enter the ownCloud username. - Bitte tragen Sie Ihren ownCloud-Benutzernamen ein. - - - - &Password: - &Passwort: - - - - Enter the ownCloud password. - Bitte tragen Sie Ihr ownCloud-Passwort ein. - - - - Do not allow the local storage of the password. - Verbiete die Speicherung des Passwortes auf diesem System. - - - - &Do not store password on local machine - &Passwort nicht auf dem Gerät speichern - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Bitte tragen Sie die Adresse Ihrer ownCloud ein, zu der Sie Sich verbinden möchten (mit oder ohne http oder https). - Ser&ver Address @@ -3674,7 +3878,7 @@ Es ist nicht ratsam, diese zu benutzen. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3682,42 +3886,42 @@ Es ist nicht ratsam, diese zu benutzen. QObject - + in the future in der Zukunft - + %n day(s) ago vor %n Tage(n)vor %n Tage(n) - + %n hour(s) ago vor %n Stunde(n)vor %n Stunde(n) - + now jetzt - + Less than a minute ago vor weniger als einer Minute - + %n minute(s) ago vor %n Minute(n)vor %n Minute(n) - + Some time ago vor einiger Zeit - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3726,57 +3930,57 @@ Es ist nicht ratsam, diese zu benutzen. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n Jahr%n Jahre - + %n month(s) %n Monat%n Monate - + %n day(s) %n Tag%n Tage - + %n hour(s) %n Stunde%n Stunden - + %n minute(s) %n Minute%n Minuten - + %n second(s) %n Sekunde%n Sekunden - + %1 %2 %1 %2 @@ -3797,102 +4001,97 @@ Es ist nicht ratsam, diese zu benutzen. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebaut von der GIT-Revision <a href="%1">%2</a> auf %3, %4 verwendet Qt %5, %6</small></p> - - - built with %1 - erstellt mit %1 - progress - + Downloaded Heruntergeladen - + Uploaded Hochgeladen - + Server version downloaded, copied changed local file into conflict file Serverversion heruntergeladen. Die bearbeitete lokale Datei wurde in eine Konfliktdatei verschoben. - + Deleted Gelöscht - + Moved to %1 Verschoben nach %1 - + Ignored Ignoriert - + Filesystem access error Zugriffsfehler im Dateisystem - + Error Fehler - + Updated local metadata Lokale Metadaten aktualisiert - - + + Unknown Unbekannt - + downloading Herunterladen - + uploading Lade hoch - + deleting Lösche - + moving Verschiebe - + ignoring ignoriere + - error Fehler - + updating local metadata aktualisiere Lokale Metadaten @@ -3900,54 +4099,77 @@ Es ist nicht ratsam, diese zu benutzen. theme - + Status undefined Status undefiniert - + Waiting to start sync Warte, um mit der Synchronistation zu beginnen - + Sync is running Sync läuft - + Sync Success Sync erfolgreich - + Sync Success, some files were ignored. Synchronisation abgeschlossen, einige Dateien wurden ignoriert. - + Sync Error Synchronisationsfehler - + Setup Error Installationsfehler - + Preparing to sync Synchronisation wird vorbereitet - + Aborting... Es wird abgebrochen … - + Sync is paused Synchronisation wurde angehalten + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_el.ts b/translations/client_el.ts index d87852283..d69e7efbb 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Το αρχείο προορισμού έχει μη αναμενόμενο μέγεθος ή ημερομηνία τροποποίησης @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Άκυρο @@ -136,188 +154,204 @@ Συνδεδεμένοι με το <server> ως <user> - + No account configured. Δεν ρυθμίστηκε λογαριασμός. - + Add new Προσθήκη νέου - + Remove Αφαίρεση - + Account Λογαριασμός - + Choose what to sync Επιλέξτε τι θα συγχρονιστεί - + Force sync now Εξαναγκασμός συγχρονισμού τώρα - + Restart sync Επανεκκίνηση συγχρονισμού - + Remove folder sync connection Αφαίρεση σύνδεσης συγχρονισμού φακέλου - + Folder creation failed Αποτυχία αφαίρεσης φακέλου - + <p>Could not create local folder <i>%1</i>. <p>Αδυναμία δημιουργίας τοπικού φακέλου <i>%1</i>. - + Confirm Folder Sync Connection Removal Επιβεβαίωση αφαίρεσης σύνδεσης συγχρονισμού φακέλου - + Remove Folder Sync Connection Αφαίρεση σύνδεσης συγχρονισμού φακέλου - + Sync Running Εκτελείται Συγχρονισμός - + The syncing operation is running.<br/>Do you want to terminate it? Η λειτουργία συγχρονισμού εκτελείται.<br/> Θέλετε να την τερματίσετε; - + %1 in use %1 σε χρήση - + %1 as <i>%2</i> %1 ως <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Η έκδοση του διακομιστή %1 είναι παλιά και δεν υποστηρίζεται! Προχωρείστε με δική σας ευθύνη. - + Connected to %1. Συνδεδεμένο με %1. - + Server %1 is temporarily unavailable. Ο διακομιστής %1 δεν είναι διαθέσιμος προσωρινά. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Αποσυνδέθηκε από %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Δεν υπάρχει σύνδεση με το %1 στο %2. - + Log in Είσοδος - + There are folders that were not synchronized because they are too big: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι: - + There are folders that were not synchronized because they are external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι εξωτερικοί αποθηκευτικοί χώροι: - + There are folders that were not synchronized because they are too big or external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι ή αποθηκευτικοί χώροι: - + Confirm Account Removal Επιβεβαίωση Αφαίρεσης Λογαριασμού - + <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> <p>Θέλετε πραγματικά να αφαιρέσετε τη σύνδεση με το λογαριασμό <i>%1</i>;</p><p><b>Σημείωση:</b> Αυτό <b>δεν</b> θα διαγράψει κανένα αρχείο.</p> - + Remove connection Αφαίρεση σύνδεσης - + + Open folder Άνοιγμα φακέλου - - + + Log out Αποσύνδεση - + Resume sync Συνέχιση συγχρονισμού - + Pause sync Παύση συγχρονισμού - + <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> <p>Θέλετε πραγματικά να σταματήσετε το συγχρονισμό του φακέλου <i>%1</i>;</p><p><b>Σημείωση:</b> Αυτό <b>δεν</b> θα διαγράψει κανένα αρχείο.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) από %2 σε χρήση. Μερικοί φάκελοι, συμπεριλαμβανομένων των δικτυακών ή των κοινόχρηστων μπορεί να έχουν διαφορετικά όρια. - + %1 of %2 in use %1 από %2 σε χρήση - + Currently there is no storage usage information available. Προς το παρόν δεν υπάρχουν πληροφορίες χρήσης χώρου αποθήκευσης διαθέσιμες. - + No %1 connection configured. Δεν έχει ρυθμιστεί σύνδεση με το %1. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Αποσύνδεση - + Disconnected Αποσυνδεδεμένο - + Connected Συνδεδεμένο - + Service unavailable Η υπηρεσία δεν είναι διαθέσιμη - + + Maintenance mode + + + + Network error Σφάλμα δικτύου - + Configuration error Σφάλμα ρυθμίσεων - + + Asking Credentials + + + + Unknown account state Άγνωστη κατάσταση λογαριασμού @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Δραστηριότητα διακομιστή - + Sync Protocol Προτοκολο συγχρονισμου - - List of ignored or erroneous files - Κατάλογος αρχείων που αγνοούνται ή περιέχουν σφάλματα - - - - Copy - Αντιγραφή - - - - Copy the activity list to the clipboard. - Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. - - - + Not Synced Δεν είναι συγχρονισμένα - + Not Synced (%1) %1 is the number of not synced files. Δεν είναι συγχρονισμένα (%1) - + The server activity list has been copied to the clipboard. Ο κατάλογος δραστηριοτήτων του διακομιστή έχει αντιγραφθεί στο Πρόχειρο - + The sync activity list has been copied to the clipboard. Ο κατάλογος της δραστηριότητας συγχρονισμού έχει αντιγραφθεί στο Πρόχειρο - + The list of unsynced items has been copied to the clipboard. Η λίστα των μη συγχρονισμένων αντικειμένων έχει αντιγραφεί στο πρόχειρο - + Copied to clipboard Αντιγράφηκε στο πρόχειρο @@ -448,47 +477,47 @@ TextLabel - + Server Activities Δραστηριότητες διακομιστή - + Copy Αντιγραφή - + Copy the activity list to the clipboard. Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. - + Action Required: Notifications Απαιτείται ενέργεια: Ειδοποιήσεις - + <br/>Account %1 does not have activities enabled. <br/>Ο λογαριασμός %1 δεν έχει ενεργοποιήσει τις δραστηριότητες. - + You received %n new notification(s) from %2. Λάβατε %n νέα ειδοποίηση(σεις) από %2.Λάβατε %n νέα ειδοποίηση(σεις) από %2. - + You received %n new notification(s) from %1 and %2. Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2.Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2. - + You received new notifications from %1, %2 and other accounts. Λάβατε νέες ανακοινώσεις από %1, %2 και άλλους λογαριασμούς. - + %1 Notifications - Action Required %1 Ειδοποιήσεις - Απαιτείται ενέργεια @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Σφάλμα πρόσβασης στο αρχείο ρυθμίσεων - + There was an error while accessing the configuration file at %1. Υπήρξε σφάλμα κατά την πρόσβαση του αρχείου ρυθμίσεων στο %1 - + Quit ownCloud Έξοδος ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Δεν έχει ρυθμιστεί λογαριασμός ownCloud - + The configured server for this client is too old Ο ρυθμισμένος διακομιστής για αυτό το δέκτη είναι πολύ παλιός - + Please update to the latest server and restart the client. Παρακαλώ ενημερώστε το διακομιστή στη νεώτερη έκδοση και επανεκκινήστε το δέκτη. - + Authentication error: Either username or password are wrong. Σφάλμα Πιστοποίησης: Το όνομα χρήστη ή ο κωδικός πρόσβασης είναι λανθασμένα. - + timeout παρέλευση χρονικού ορίου - + The provided credentials are not correct Τα παρεχόμενα διαπιστευτήρια δεν είναι σωστά - - OCC::DeleteJob - - - Connection timed out - Λήξη χρόνου σύνδεσης. - - OCC::DiscoveryMainThread - + Aborted by the user Ματαιώθηκε από το χρήστη @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. Δεν υπάρχει ο τοπικός φάκελος %1. - + %1 should be a folder but is not. Το %1 θα έπρεπε να είναι φάκελος αλλά δεν είναι. - + %1 is not readable. Το %1 δεν είναι αναγνώσιμο. - + %1 has been removed. %1 names a file. Το %1 αφαιρέθηκε. - + %1 has been downloaded. %1 names a file. Το %1 έχει ληφθεί. - + %1 has been updated. %1 names a file. Το %1 έχει ενημερωθεί. - + %1 has been renamed to %2. %1 and %2 name files. Το %1 έχει μετονομαστεί σε %2. - + %1 has been moved to %2. Το %1 έχει μετακινηθεί στο %2. - + %1 and %n other file(s) have been removed. %1 και%n άλλo αρχείo(α) έχουν καταργηθεί.%1 και%n άλλo αρχείo(α) έχουν καταργηθεί. - + %1 and %n other file(s) have been downloaded. %1 και%n άλλο αρχείο(ο) έχουν ληφθεί.%1 και%n άλλο αρχείο(ο) έχουν ληφθεί. - + %1 and %n other file(s) have been updated. %1 και%n άλλο αρχείο(α) έχουν ενημερωθεί.%1 και%n άλλο αρχείο(α) έχουν ενημερωθεί. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 μετονομάστηκε σε %2 και %n άλλο αρχείο(α) έχουν μετονομαστεί.%1 μετονομάστηκε σε %2 και %n άλλο αρχείο(α) έχουν μετονομαστεί. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 έχει μετακινηθεί σε %2 και %n άλλo αρχείο(α) έχουν μετακινηθεί.%1 έχει μετακινηθεί σε %2 και %n άλλo αρχείο(α) έχουν μετακινηθεί. - + %1 has and %n other file(s) have sync conflicts. %1 έχει και %n άλλο αρχείο(α) έχουν διένεξη συγχρονισμού.%1 έχει και %n άλλο αρχείο(α) έχουν διένεξη συγχρονισμού. - + %1 has a sync conflict. Please check the conflict file! %1 έχει μια διένεξη συγχρονισμού. Παρακαλώ ελέγξτε τη διένεξη του αρχείου! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 και %n άλλο(α) αρχείο(α) δεν μπορούν να συγχρονιστούν λόγω σφαλμάτων. Δείτε το ιστορικό για λεπτομέρειες%1 και %n άλλο αρχείο(α) δεν μπορούν να συγχρονιστούν λόγω σφαλμάτων. Δείτε το ημερολόγιο για λεπτομέρειες. - + %1 could not be synced due to an error. See the log for details. %1 δεν ήταν δυνατό να συγχρονιστεί εξαιτίας ενός σφάλματος. Δείτε το αρχείο καταγραφής για λεπτομέρειες. - + Sync Activity Δραστηριότητα Συγχρονισμού - + Could not read system exclude file Αδυναμία ανάγνωσης αρχείου αποκλεισμού συστήματος - + A new folder larger than %1 MB has been added: %2. Προστέθηκε ένας νέος φάκελος μεγαλύτερος από %1 MB: %2 - + A folder from an external storage has been added. Προστέθηκε ένας φάκελος από εξωτερικό αποθηκευτικό χώρο. - + Please go in the settings to select it if you wish to download it. Μεταβείτε στις ρυθμίσεις για να το επιλέξετε εάν επιθυμείτε να το κατεβάσετε. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Εφόσον επιλέξετε να διαγράψετε τα αρχεία, δε θα είναι διαθέσιμα σε εσάς, εκτός εάν είστε ο ιδιοκτήτης τους. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Αν αυτό ήταν ένα ατύχημα και αποφασίσατε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν εκ νέου από το διακομιστή. - + Remove All Files? Αφαίρεση Όλων των Αρχείων; - + Remove all files Αφαίρεση όλων των αρχείων - + Keep files Διατήρηση αρχείων - + This sync would reset the files to an earlier 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? @@ -794,17 +815,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an Η συνέχιση του συγχρονισμού κανονικά θα προκαλέσει την αντικατάσταση όλων των αρχείων σας από παλιότερο αρχείο σε προηγούμενη κατάσταση. Θέλετε να διατηρήσετε τα τοπικά σας πιο πρόσφατα αρχεία ως αρχεία σύγκρουσης; - + Backup detected Ανιχνεύθηκε αντίγραφο ασφαλείας - + Normal Synchronisation Κανονικός συγχρονισμός - + Keep Local Files as Conflict Διατήρηση τοπικών αρχείων ως Διένεξη @@ -812,112 +833,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Δεν ήταν δυνατό να επαναφερθεί η κατάσταση του φακέλου - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Βρέθηκε ένα παλαιότερο αρχείο συγχρονισμού '%1', αλλά δεν μπόρεσε να αφαιρεθεί. Παρακαλώ βεβαιωθείτε ότι καμμία εφαρμογή δεν το χρησιμοποιεί αυτή τη στιγμή. - + (backup) (αντίγραφο ασφαλείας) - + (backup %1) (αντίγραοφ ασφαλέιας %1) - + Undefined State. Απροσδιόριστη Κατάσταση. - + Waiting to start syncing. Αναμονή έναρξης συγχρονισμού. - + Preparing for sync. Προετοιμασία για συγχρονισμό. - + Sync is running. Ο συγχρονισμός εκτελείται. - + Last Sync was successful. Ο τελευταίος συγχρονισμός ήταν επιτυχής. - + Last Sync was successful, but with warnings on individual files. Ο τελευταίος συγχρονισμός ήταν επιτυχής, αλλά υπήρχαν προειδοποιήσεις σε συγκεκριμένα αρχεία. - + Setup Error. Σφάλμα Ρύθμισης. - + User Abort. Ματαίωση από Χρήστη. - + Sync is paused. Παύση συγχρονισμού. - + %1 (Sync is paused) %1 (Παύση συγχρονισμού) - + No valid folder selected! Δεν επιλέχθηκε έγκυρος φάκελος! - + The selected path is not a folder! Η επιλεγμένη διαδρομή δεν είναι φάκελος! - + You have no permission to write to the selected folder! Δεν έχετε δικαιώματα εγγραφής στον επιλεγμένο φάκελο! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Ο τοπικός φάκελος% 1 περιέχει έναν συμβολικό σύνδεσμο. Ο στόχος συνδέσμου περιέχει έναν ήδη συγχρονισμένο φάκελο.Παρακαλώ επιλέξτε ένα άλλο! - + There is already a sync from the server to this local folder. Please pick another local folder! Υπάρχει ήδη συγχρονισμός από το διακομιστή σε αυτόν τον τοπικό φάκελο. Επιλέξτε έναν άλλο τοπικό φάκελο! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Ο τοπικός φάκελος %1 περιέχει ήδη ένα φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού φακέλου. Παρακαλώ επιλέξτε άλλον! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Ο τοπικός φάκελος %1 περιέχεται ήδη σε φάκελο που χρησιμοποιείται σε μια σύνδεση συγχρονισμού. Παρακαλώ επιλέξτε άλλον! - + 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! Ο τοπικός φάκελος %1 είναι συμβολικός σύνδεσμος. Ο σύνδεσμος που παραπέμπει περιέχεται ήδη σε φάκελο που βρίσκεται σε συγχρονισμό. Παρακαλώ επιλέξτε άλλον! @@ -925,17 +946,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Προσθήκη σύνδεσης συγχρονισμού φακέλου - + Synchronizing with local folder Συγχρονισμός με τοπικό φάκελο - + File Αρχείο @@ -943,134 +964,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Πρέπει να έχετε συνδεθεί για να προσθέσετε φάκελο - + Click this button to add a folder to synchronize. Κάντε κλικ σε αυτό το κουμπί για να προσθέσετε ένα φάκελο προς συγχρονισμό. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Σφάλμα κατά τη φόρτωση της λίστας φακέλων από το διακομιστή. - + Signed out Αποσύνδεση - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Η επιλογή προσθήκης φακέλου δεν είναι διαθέσιμη καθώς συγχρονίζονται ήδη όλα τα αρχεία. Για να επιλέξετε συγχρονισμό φακέλων, αφαιρέστε τον αρχικό φάκελο που έχει ρυθμιστεί. - + Fetching folder list from server... Λήψη λίστας φακέλων από το διακομιστή... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Συγχρονισμός %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) λήψη %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) μεταφόρτωση %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 από %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Απομένει %5, %1 από %2, αρχείο %3 από %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 από %2, αρχείο %3 από %4 - + file %1 of %2 αρχείο %1 από %2 - + Waiting... Αναμονή... - + Waiting for %n other folder(s)... Αναμονή για %n άλλο φάκελο...Αναμονή για %n άλλους φακέλους... - + Preparing to sync... Προετοιμασία για συγχρονισμό... @@ -1078,12 +1109,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού Φακέλου - + Add Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού @@ -1096,7 +1127,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Κλικάρετε για να επιλέξετε έναν τοπικό φάκελο προς συγχρονισμό. - + Enter the path to the local folder. Εισάγετε τη διαδρομή προς τον τοπικό φάκελο. @@ -1119,42 +1150,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Εισάγετε το όνομα του νέου φακέλου που θα δημιουργηθεί παρακάτω '%1': - + Folder was successfully created on %1. Επιτυχής δημιουργία φακέλου στο %1. - + Authentication failed accessing %1 Η πιστοποίηση απέτυχε κατά την πρόσβαση %1 - + Failed to create the folder on %1. Please check manually. Αποτυχία δημιουργίας φακέλου στο %1. Παρακαλώ ελέγξτε χειροκίνητα. - + Failed to list a folder. Error: %1 Αδυναμία εμφάνισης ενός φακέλου. Σφάλμα: %1 - + Choose this to sync the entire account Επιλέξτε να συγχρονίσετε ολόκληρο το λογαριασμό - + This folder is already being synced. Αυτός ο φάκελος συγχρονίζεται ήδη. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ο φάκελος <i>%1</i>, ο οποίος είναι γονεϊκός φάκελος του <i>%2</i>, συγχρονίζεται ήδη. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Συγχρονίζετε ήδη όλα σας τα αρχεία. Ο συγχρονισμός ενός ακόμα φακέλου <b>δεν</b> υποστηρίζεται. Εάν θέλετε να συγχρονίσετε πολλαπλούς φακέλους, παρακαλώ αφαιρέστε την τρέχουσα ρύθμιση συχρονισμού του βασικού φακέλου. @@ -1175,22 +1206,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Δεν ελήφθη E-Tag από το διακομιστή, ελέγξτε το διακομιστή μεσολάβησης/πύλη - + We received a different E-Tag for resuming. Retrying next time. Ελήφθη διαφορετικό E-Tag για συνέχιση. Επανάληψη την επόμενη φορά. - + Server returned wrong content-range Ο διακομιστής επέστρεψε εσφαλμένο πεδίο τιμών - + Connection Timeout Λήξη Χρόνου Αναμονής Σύνδεσης @@ -1213,23 +1244,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Για το - + Advanced Για προχωρημένους - + Ask for confirmation before synchronizing folders larger than Ζητήστε επιβεβαίωση πριν τον συγχρονισμό φακέλων μεγαλύτερων από - + MB Trailing part of "Ask confirmation before syncing folder larger than" ΜΒ - + Ask for confirmation before synchronizing external storages Ζητήστε επιβεβαίωση πριν τον συγχρονισμό εξωτερικών αποθηκευτικών χώρων @@ -1249,28 +1280,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Χρήση &Μονόχρωμων εικονιδίων - + Edit &Ignored Files Εισαγωγή & Αγνοούμενα Αρχεία - + S&how crash reporter S&πως κατάρρευση αναφοράς - - + + About Σχετικά - + Updates Ενημερώσεις - + &Restart && Update &Επανεκκίνηση && Ενημέρωση @@ -1278,22 +1309,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Παρακαλώ εισάγετε %1 κωδικού πρόσβασης:<br><br>Χρήστης: %2<br>Λογαριασμός: %3<br> - + Reading from keychain failed with error: '%1' Η ανάγνωση από την κλειδοθήκη απέτυχε με σφάλμα: '%1' - + Enter Password Εισάγετε Κωδικό Πρόσβασης - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">πατήστε εδώ</a>για να ζητήσετε έναν κωδικό πρόσβασης εφαρμογής από τη διεπαφή ιστού. @@ -1375,55 +1406,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Αυτή η είσοδος παρέχεται από το σύστημα στο '%1' και δεν μπορεί να τροποποιηθεί σε αυτή την προβολή. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Καταγραφή Εξόδου - + &Search: &Αναζήτηση: - + &Find &Αναζήτηση - + + &Capture debug messages + + + + Clear Εκκαθάριση - + Clear the log display. Εκκαθάριση του αρχείου συμβάντων. - + S&ave Α&ποθήκευση - + Save the log file to a file on disk for debugging. Αποθήκευση του αρχείου καταγραφών στο δίσκο για αποσφαλμάτωση. - + Save log file Αποθήκευση αρχείου συμβάντων - + Error Σφάλμα - + Could not write to log file %1 Αδυναμία εγγραφής στο αρχείο καταγραφής %1 @@ -1431,24 +1532,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Σφάλμα - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Το αρχείο '%1'<br/>δεν μπορεί να ανοιχθεί για εγγραφή.<br/><br/>Το αρχείο καταγραφής <b>δεν</b> μπορεί να αποθηκευτεί!</nobr> - - OCC::MoveJob - - - Connection timed out - Η σύνδεση έληξε. - - OCC::NSISUpdater @@ -1560,27 +1653,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Αυτόματος περιορισμός - + Hostname of proxy server Όνομα συστήματος του ενδιάμεσου διακομιστή - + Username for proxy server Όνομα χρήστη για τον ενδιάμεσο διακομιστή - + Password for proxy server Κωδικός πρόσβασης για τον ενδιάμεσο διακομιστή - + HTTP(S) proxy Ενδιάμεσος HTTP(S) - + SOCKS5 proxy Ενδιάμεσος SOCKS5 @@ -1593,79 +1686,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 Ολοκληρώθηκε στο %1 - + Closing in a few seconds... Κλείσιμο σε λίγα δευτερόλεπτα... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' Το αίτημα% 1 απέτυχε στο% 2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '% 1' επιλέχθηκε στο% 2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Νέα %1 Ενημέρωση Έτοιμη - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Μια νέα ενημέρωση για %1 πρόκειται να εγκατασταθεί. Ο βοηθός ενημέρωσης μπορεί να ζητήσει επιπλέον παραχωρήσεις δικαιωμάτων κατά τη διαδικασία. - + Downloading version %1. Please wait... Λήψη έκδοσης %1. Παρακαλώ περιμένετε... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Αδυναμία λήψης της ενημέρωσης. Παρακαλώ κλικάρετε <a href='%1'>εδώ</a> για να κατεβάσετε την ενημέρωση χειροκίνητα. - + Could not check for new updates. Αδυναμία ελέγχου για νέες ενημερώσεις. - + %1 version %2 available. Restart application to start the update. Είναι διαθέσιμη η έκδοση %1 %2. Επανεκκινήστε την εφαρμογή για να ξεκινήσει η αναβάθμιση. - + New %1 version %2 available. Please use the system's update tool to install it. Είναι διαθέσιμη η έκδοση %1 %2. Χρησιμοποιήστε το εργαλείο αναβάθμισης του συστήματός σας για να την εγκαταστήσετε. - + Checking update server... Έλεγχος διακομιστή ενημερώσεων... - + Update status is unknown: Did not check for new updates. Η κατάσταση ενημέρωσης είναι άγνωστη: Δεν έγινε έλεγχος για για νέες ενημερώσεις. - + No updates available. Your installation is at the latest version. Δεν υπάρχουν ενημερώσεις διαθέσιμες. Η εγκατάστασή σας βρίσκεται στην τελευταία έκδοση. @@ -1678,43 +1804,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Σύνδεση με %1 - + Setup local folder options Ρύθμιση επιλογών τοπικών φακέλων - + Connect... Σύνδεση... - + %1 folder '%2' is synced to local folder '%3' Ο %1 φάκελος '%2' είναι συγχρονισμένος με τον τοπικό φάκελο '%3' - + Sync the folder '%1' Συγχρονισμός φακέλου '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Προσοχή:</strong> Ο τοπικός φάκελος δεν είναι άδειος. Επιλέξτε μια επίλυση!</small></p> - + Local Sync Folder Τοπικός Φάκελος Συγχρονισμού - - + + (%1) (%1) @@ -1747,7 +1873,7 @@ for additional privileges during the process. Διαμόρφωση πιστοποιητικού TLS του δέκτη - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p> Αποτυχία σύνδεσης με ασφαλή διεύθυνση του διακομιστή <em>%1</em>. Πώς θέλετε να συνεχίσετε;</p></body></html> @@ -1755,47 +1881,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &Ηλεκτρονικό Ταχυδρομείο - + Connect to %1 Σύνδεση με %1 - + Enter user credentials Εισάγετε διαπιστευτήρια χρήστη + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Σύνδεση με %1 - + Setup %1 server Ρύθμιση %1 διακομιστή - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Αυτή η ιστοσελίδα ΔΕΝ είναι ασφαλής καθώς δεν είναι κρυπτογραφημένη. Δεν προτείνεται να τη χρησιμοποιήσετε. - + This url is secure. You can use it. Αυτή η url είναι ασφαλής. Μπορείτε να τη χρησιμοποιήσετε. - + &Next > &Επόμενο > @@ -1803,22 +1942,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Επιτυχής σύνδεση στο %1: %2 έκδοση %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Αποτυχία σύνδεσης με το %1 στο %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Λήξη χρονικού ορίου κατά τη σύνδεση σε %1 σε %2. - + Trying to connect to %1 at %2... Προσπάθεια σύνδεσης στο %1 για %2... @@ -1838,109 +1977,109 @@ It is not advisable to use it. Απαγόρευση πρόσβασης από τον διακομιστή. Για να επιβεβαιώσετε ότι έχετε δικαιώματα πρόσβασης, <a href="%1">πατήστε εδώ</a> για να προσπελάσετε την υπηρεσία με το πρόγραμμα πλοήγησής σας. - + Invalid URL Μη έγκυρη URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Ο τοπικός φάκελος συγχρονισμού %1 υπάρχει ήδη, ρύθμιση για συγχρονισμό.<br/><br/> - + Creating local sync folder %1... Δημιουργία τοπικού φακέλου συγχρονισμού %1... - + ok οκ - + failed. απέτυχε. - + Could not create local folder %1 Αδυναμία δημιουργίας τοπικού φακέλου %1 - + No remote folder specified! Δεν προσδιορίστηκε κανένας απομακρυσμένος φάκελος! - + Error: %1 Σφάλμα: %1 - + creating folder on ownCloud: %1 δημιουργία φακέλου στο ownCloud: %1 - + Remote folder %1 created successfully. Ο απομακρυσμένος φάκελος %1 δημιουργήθηκε με επιτυχία. - + The remote folder %1 already exists. Connecting it for syncing. Ο απομακρυσμένος φάκελος %1 υπάρχει ήδη. Θα συνδεθεί για συγχρονισμό. - + The folder creation resulted in HTTP error code %1 Η δημιουργία φακέλου είχε ως αποτέλεσμα τον κωδικό σφάλματος HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Η δημιουργία απομακρυσμένου φακέλλου απέτυχε επειδή τα διαπιστευτήρια είναι λάθος!<br/>Παρακαλώ επιστρέψετε και ελέγξετε τα διαπιστευτήριά σας.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Η δημιουργία απομακρυσμένου φακέλου απέτυχε, πιθανώς επειδή τα διαπιστευτήρια που δόθηκαν είναι λάθος.</font><br/>Παρακαλώ επιστρέψτε πίσω και ελέγξτε τα διαπιστευτήρια σας.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Η δημιουργία απομακρυσμένου φακέλου %1 απέτυχε με σφάλμα <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Μια σύνδεση συγχρονισμού από τον απομακρυσμένο κατάλογο %1 σε %2 έχει ρυθμιστεί. - + Successfully connected to %1! Επιτυχής σύνδεση με %1! - + Connection to %1 could not be established. Please check again. Αδυναμία σύνδεσης στον %1. Παρακαλώ ελέξτε ξανά. - + Folder rename failed Αποτυχία μετονομασίας φακέλου - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Αδυναμία αφαίρεσης και δημιουργίας αντιγράφου ασφαλείας του φακέλου διότι ο φάκελος ή ένα αρχείο του είναι ανοικτό από άλλο πρόγραμμα. Παρακαλώ κλείστε τον φάκελο ή το αρχείο και πατήστε επανάληψη ή ακυρώστε την ρύθμιση. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Επιτυχής δημιουργία τοπικού φακέλου %1 για συγχρονισμό!</b></font> @@ -1948,12 +2087,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 Οδηγός Σύνδεσης - + Skip folders configuration Παράλειψη διαμόρφωσης φακέλων @@ -1961,33 +2100,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Όλα είναι ρυθμισμένα! - + Open Local Folder Άνοιγμα τοπικού φακέλου - + Open %1 in Browser Άνοιγμα %1 στο Πρόγραμμα Περιήγησης - - OCC::PUTFileJob - - - Connection Timeout - Λήξη Χρόνου Αναμονής Σύνδεσης - - OCC::PollJob - + Invalid JSON reply from the poll URL Λανθασμένη απάντηση JSON από την ιστοσελίδα poll @@ -1995,7 +2126,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2003,47 +2134,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Το αρχείο %1 δεν είναι δυνατό να ληφθεί λόγω διένεξης με το όνομα ενός τοπικού αρχείου! - - The download would reduce free disk space below %1 - Η λήψη θα μειώσει το διαθέσιμο χώρο στο δίσκο κάτω από %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Ο διαθέσιμος χώρος στο δίσκο είναι λιγότερος από %1 - + File was deleted from server Το αρχείο διαγράφηκε από τον διακομιστή - + The file could not be downloaded completely. Η λήψη του αρχείου δεν ολοκληρώθηκε. - + The downloaded file is empty despite the server announced it should have been %1. Το ληφθέν αρχείο είναι άδειο, παρόλο που ο διακομιστής ανακοίνωσε ότι θα έπρεπε να ήταν% 1. - + File %1 cannot be saved because of a local file name clash! Το αρχείο %1 δεν είναι δυνατό να αποθηκευτεί λόγω διένεξης με το όνομα ενός τοπικού ονόματος αρχείου! - + File has changed since discovery Το αρχείο έχει αλλάξει από όταν ανακαλύφθηκε - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2051,17 +2182,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Η Αποκατάσταση Απέτυχε: %1 - - Continue blacklisting: - Συνέχιση αποκλεισμού: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Ένα αρχείο ή ένας κατάλογος αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση, αλλά η επαναφορά απέτυχε: %1 @@ -2069,22 +2195,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 αδυναμία διαγραφής αρχείου %1, σφάλμα: %2 - + Attention, possible case sensitivity clash with %1 Προσοχή, πιθανή διένεξη κεφαλαίων-πεζών γραμμάτων με το %1 - + could not create folder %1 αδυναμία δημιουργίας φακέλου %1 - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2092,17 +2218,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Σφάλμα κατά την αφαίρεση '%1': %2; - + Could not remove folder '%1' Αδυναμία διαγραφής του φακέλου '%1' - + Could not remove %1 because of a local file name clash Δεν ήταν δυνατή η αφαίρεση του %1 λόγω διένεξης με το όνομα ενός τοπικού αρχείου @@ -2110,13 +2236,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Το αρχείο %1 δεν είναι δυνατό να μετονομαστεί σε %2 λόγω μιας διένεξης με το όνομα ενός τοπικού αρχείου - - + + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2124,12 +2250,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Το αρχείο αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση. Το αρχείο επαναφέρθηκε. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Ο διακομιστής επέστρεψε εσφαλμένο κωδικό HTTP. Αναμενόταν 204, αλλά ελήφθη "%1 %2". @@ -2137,12 +2263,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Ο διακομιστής επέστρεψε εσφαλμένο κωδικό HTTP. Αναμενόταν 201, αλλά ελήφθη "%1 %2". - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2150,28 +2276,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Αυτός ο φάκελος δεν πρέπει να μετονομαστεί. Μετονομάζεται πίσω στο αρχικό του όνομα. - + This folder must not be renamed. Please name it back to Shared. Αυτός ο φάκελος δεν πρέπει να μετονομαστεί. Παρακαλώ ονομάστε τον ξανά Κοινόχρηστος. - + The file was renamed but is part of a read only share. The original file was restored. Το αρχείο μετονομάστηκε αλλά είναι τμήμα ενός διαμοιρασμένου καταλόγου μόνο για ανάγνωση. Το αρχικό αρχείο επαναφέρθηκε. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Ο διακομιστής επέστρεψε εσφαλμένο κωδικό HTTP. Αναμενόταν 201, αλλά ελήφθη "%1 %2". - - + + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2179,27 +2305,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Το αρχείο % 1 δεν μπορεί να ανέβει επειδή υπάρχει ένα άλλο αρχείο με το ίδιο όνομα, που διαφέρει μόνο στη περίπτωση, - + File Removed Το αρχείο αφαιρέθηκε - + Local file changed during syncing. It will be resumed. Το τοπικό αρχείο τροποποιήθηκε κατά τη διάρκεια του συγχρονισμού. Θα συγχρονιστεί πάλι. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2207,32 +2338,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2 - + The local file was removed during sync. Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + Unexpected return code from server (%1) Ο διακομιστής επέστρεψε απροσδόκητο κωδικό (%1) - + Missing File ID from server Απουσία ID αρχείου από τον διακομιστή - + Missing ETag from server Απουσία ETag από τον διακομιστή @@ -2240,32 +2371,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Το αρχείο υπέστη επεξεργασία τοπικά αλλά είναι τμήμα ενός διαμοιρασμένου καταλόγου μόνο για ανάγνωση. Επαναφέρθηκε και το επεξεργασμένο βρίσκεται στο αρχείο συγκρούσεων. - + Poll URL missing Η διεύθυνση poll URL λείπει - + The local file was removed during sync. Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + The server did not acknowledge the last chunk. (No e-tag was present) Ο διακομιστής δεν αναγνώρισε το τελευταίο τμήμα. (Δεν υπήρχε e-tag) @@ -2283,42 +2414,42 @@ It is not advisable to use it. TextLabel - + Time Ώρα - + File Αρχείο - + Folder Φάκελος - + Action Ενέργεια - + Size Μέγεθος - + Local sync protocol Πρωτόκολλο τοπικού συγχρονισμού - + Copy Αντιγραφή - + Copy the activity list to the clipboard. Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. @@ -2359,7 +2490,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Επιλέξτε Τι θα Συγχρονιστεί @@ -2367,33 +2498,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Φόρτωση ... - + Deselect remote folders you do not wish to synchronize. Απορρίψτε τους απομακρυσμένους φακέλους που δεν θέλετε να συγχρονιστούν. - + Name Όνομα - + Size Μέγεθος - - + + No subfolders currently on the server. Δεν υπάρχουν υποφάκελοι αυτή τη στιγμή στον διακομιστή. - + An error occurred while loading the list of sub folders. Παρουσιάστηκε σφάλμα κατά την φόρτωση της λίστας των υπο-φακέλων @@ -2406,22 +2537,22 @@ It is not advisable to use it. Ρυθμίσεις - + Activity Δραστηριότητα - + General Γενικά - + Network Δίκτυο - + Account Λογαριασμός @@ -2429,27 +2560,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Δραστηριότητα - + General Γενικά - + Network Δίκτυο - + Account Λογαριασμός @@ -2477,35 +2608,45 @@ It is not advisable to use it. Διαδρομή ownCloud: - + %1 Sharing %1 Διαμοιράστηκε - + %1 %1 - + Folder: %2 Φάκελος: %2 - + The server does not allow sharing Ο διακομιστής δεν επιτρέπει τον διαμοιρασμό - + Retrieving maximum possible sharing permissions from server... Ανάκτηση των μέγιστων δυνατών δικαιωμάτων κοινής χρήσης από το διακομιστή ... - + The file can not be shared because it was shared without sharing permission. Το αρχείο δεν μπορεί να διαμοιραστεί γιατί διαμοιράστηκε χωρίς δικαιώματα διαμοιρασμού. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2515,92 +2656,126 @@ It is not advisable to use it. Διαμοιρασμός NewDocument.odt - - Share link - Διαμοιρασμός συνδέσμου - - - + TextLabel TextLabel - + Set &password Ορισμός &κωδικού πρόσβασης - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Ορισμός &ημερομηνίας λήξης - + Set password Ορισμός κωδικού πρόσβασης - - &Mail link - & Σύνδεσμος αλληλογραφίας + + Link properties: + - Copy &link - Αντιγραφή &συνδέσμου + Show file listing + - + Allow editing Επιτρέπεται η επεξεργασία - + Anyone with the link has access to the file/folder Οποιοσδήποτε με τη σύνδεση έχει πρόσβαση στο αρχείο / φάκελο - + + P&assword protect Π&ροστασία με κωδικό - + Password Protected Προστατευμένο με κωδικό πρόσβασης - + The file can not be shared because it was shared without sharing permission. Το αρχείο δεν μπορεί να διαμοιραστεί γιατί διαμοιράστηκε χωρίς δικαιώματα διαμοιρασμού. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Ο δημόσιος &διαμοιρασμός απαιτεί κωδικό πρόσβασης - + Please Set Password Παρακαλούμε ορίστε Κωδικό - - - Could not open email client - Αδυναμία ανοίγματος πελάτη ηλεκτρονικής αλληλογραφίας - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Παρουσιάστηκε σφάλμα κατά την εκκίνηση του προγράμματος-πελάτη ηλεκτρονικού ταχυδρομείου για τη δημιουργία νέου μηνύματος. Ίσως δεν έχει ρυθμιστεί προεπιλεγμένο πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου; - - - - - &Share link - Δ&ιαμοιρασμός συνδέσμου - OCC::ShareUserGroupWidget @@ -2610,68 +2785,98 @@ It is not advisable to use it. Διαμοιρασμός NewDocument.odt - + Share with users or groups ... Διαμοιρασμός με χρήστες ή ομάδες ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Κανένα αποτέλεσμα για '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Φόρμα + - + TextLabel - TextLabel + - + can edit - δυνατότητα επεξεργασίας + - + can share - δυνατότητα διαμοιρασμού + - + ... - ... + - + create - δημιουργία + - + change - αλλαγή + - + delete - διαγραφή + OCC::ShibbolethCredentials - + Login Error Σφάλμα Σύνδεσης - + You must sign in as user %1 Πρέπει να εισέλθετε σαν χρήστης %1 @@ -2679,22 +2884,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Πιστοποίηση - + SSL Chipher Debug View Προβολή SSL Chipher Debug - + Reauthentication required Απαιτείται επανάληψη πιστοποίησης - + Your session has expired. You need to re-login to continue to use the client. Η συνεδρία σας έληξε. Πρέπει να εισέλθετε ξανά για να συνεχίσετε να χρησιμοποιείτε το πρόγραμμα. @@ -2702,26 +2907,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Διαμοιρασμός με %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Λεπτομέρειες Πιστοποιητικού</h3> - + Common Name (CN): Κοινό Όνομα (ΚΟ): - + Subject Alternative Names: Εναλλακτικά Ονόματα Υποκειμένου: @@ -2806,7 +3031,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. Η σύνδεση είναι κρυπτογραφημένη με %1 bit %2 @@ -2823,7 +3048,7 @@ It is not advisable to use it. Πληροφορίες πιστοποιητικού: - + This connection is NOT secure as it is not encrypted. Αυτή η σύνδεση δεν είναι ασφαλής καθώς δεν είναι κρυπτογραφημένη. @@ -2843,67 +3068,67 @@ It is not advisable to use it. Προσθήκη αυτού του πιστοποιητικού στα έμπιστα παρ'όλα αυτά - + Untrusted Certificate Μη έμπιστο πιστοποιητικό - + Cannot connect securely to <i>%1</i>: Αδυναμία ασφαλούς σύνδεσης σε <i>%1</i>: - + with Certificate %1 με Πιστοποιητικό: %1 - + &lt;not specified&gt; &lt;δεν κατονομάζονται&gt; - - + + Organization: %1 Οργανισμός: %1 - - + + Unit: %1 Μονάδα: %1 - - + + Country: %1 Χώρα: %1 - + Fingerprint (MD5): <tt>%1</tt> Αποτύπωμα (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Αποτύπωμα (SHA1): <tt>%1</tt> - + Effective Date: %1 Ημερομηνία Έναρξης: 1% - + Expiration Date: %1 Ημερομηνία Λήξης: %1 - + Issuer: %1 Εκδότης: %1 @@ -2911,285 +3136,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Επιτυχία. - + CSync failed to load the journal file. The journal file is corrupted. Το CSync απέτυχε να φορτώσει ο αρχείο καταλόγου. Το αρχείο καταλόγου έχει καταστραφεί. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Το πρόσθετο του %1 για το csync δεν μπόρεσε να φορτωθεί.<br/>Παρακαλούμε επαληθεύσετε την εγκατάσταση!</p> - + CSync got an error while processing internal trees. Το CSync έλαβε κάποιο μήνυμα λάθους κατά την επεξεργασία της εσωτερικής διεργασίας. - - CSync failed to reserve memory. - Το CSync απέτυχε να δεσμεύσει μνήμη. - - - + CSync fatal parameter error. Μοιραίο σφάλμα παράμετρου CSync. - + CSync processing step update failed. Η ενημέρωση του βήματος επεξεργασίας του CSync απέτυχε. - + CSync processing step reconcile failed. CSync στάδιο επεξεργασίας συμφιλίωση απέτυχε. - + CSync could not authenticate at the proxy. Το CSync δεν μπόρεσε να πιστοποιηθεί στο διακομιστή μεσολάβησης. - + CSync failed to lookup proxy or server. Το CSync απέτυχε να διερευνήσει το διαμεσολαβητή ή το διακομιστή. - + CSync failed to authenticate at the %1 server. Το CSync απέτυχε να πιστοποιηθεί στο διακομιστή 1%. - + CSync failed to connect to the network. Το CSync απέτυχε να συνδεθεί με το δίκτυο. - + A network connection timeout happened. Διακοπή σύνδεσης δικτύου λόγω παρέλευσης χρονικού ορίου. - + A HTTP transmission error happened. Ένα σφάλμα μετάδοσης HTTP συνέβη. - + The mounted folder is temporarily not available on the server Ο προσαρτημένος φάκελος δεν είναι διαθέσιμος στον δικομιστή προσωρινά - + An error occurred while opening a folder Παρουσιάστηκε σφάλμα κατά το άνοιγμα του φακέλου - + Error while reading folder. Σφάλμα κατά την ανάγνωση του φακέλου. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Το Αρχείο/ο Φάκελος αγνοήθηκε επειδή είναι κρυφό. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Δεν υπάρχει διαθέσιμος χώρος στο διακομιστή 1%. - + CSync unspecified error. Άγνωστο σφάλμα CSync. - + Aborted by the user Ματαιώθηκε από το χρήστη - + CSync failed to access Το CSync απέτυχε να αποκτήσει πρόσβαση - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Το CSync απέτυχε να φορτώσει ή να δημιουργήσει το αρχείο καταγραφής. Βεβαιωθείτε ότι έχετε άδεια ανάγνωσης και εγγραφής στον τοπικό κατάλογο συγχρονισμού. - + CSync failed due to unhandled permission denied. Το CSync απέτυχε λόγω κατάστασης "permission denied" - + CSync tried to create a folder that already exists. Το CSync προσπάθησε να δημιουργήσει φάκελο που υπάρχει ήδη. - + The service is temporarily unavailable Η υπηρεσία δεν είναι διαθέσιμη προσωρινά - + Access is forbidden Δεν επιτρέπεται η πρόσβαση - + An internal error number %1 occurred. Προέκυψε ένα εσωτερικό σφάλμα με αριθμό %1. - - The item is not synced because of previous errors: %1 - Το αντικείμενο δεν είναι συγχρονισμένο λόγω προηγούμενων σφαλμάτων: %1 - - - + Symbolic links are not supported in syncing. Οι συμβολικού σύνδεσμοι δεν υποστηρίζονται για το συγχρονισμό. - + File is listed on the ignore list. Το αρχείο περιέχεται στη λίστα αρχείων προς αγνόηση. - + File names ending with a period are not supported on this file system. Τα ονόματα αρχείων που διαρκούν μια ορισμένη χρονική περίοδο δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + File names containing the character '%1' are not supported on this file system. Τα ονόματα αρχείων που περιέχουν τον χαρακτήρα '% 1' δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + The file name is a reserved name on this file system. Το όνομα αρχείου είναι ένα κατοχυρωμένο όνομα σε αυτό το σύστημα αρχείων. - + Filename contains trailing spaces. Το όνομα του αρχείου περιέχει συνεχόμενα κενά. - + Filename is too long. Το όνομα αρχείου είνια πολύ μεγάλο. - + Stat failed. Απέτυχε. - + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Invalid characters, please rename "%1" Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - - Unable to initialize a sync journal. - Αδυναμία προετοιμασίας αρχείου συγχρονισμού. - - - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση @@ -3205,7 +3445,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3213,17 +3453,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Έκδοση %1. Για περισσότερες πληροφορίες δείτε <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Πνευματικά δικαιώματα ownCloud, GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Διανέμεται από 1% και υπό την άδεια GNU General Public License (GPL) έκδοση 2.0.<br/>% 2 και το 2% το λογότυπο είναι σήματα κατατεθέντα της 1% στις Ηνωμένες Πολιτείες, άλλες χώρες, ή και τα δύο.</ p> @@ -3231,17 +3471,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Η κεφαλίδα του αθροίσματος ελέγχου δεν είναι σωστά διαμορφωμένη. - + The checksum header contained an unknown checksum type '%1' Το checksum header περιέχει άγνωστο τύπο checksum '%1' - + The downloaded file does not match the checksum, it will be resumed. Το αρχείο που μεταφορτώθηκε δεν επαληθεύει το άθροισμα ελέγχου, θα συγχρονιστεί πάλι. @@ -3249,207 +3489,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Παρκαλώ συνδεθείτε - + Folder %1: %2 Φάκελος %1: %2 - + No sync folders configured. Δεν έχουν οριστεί φάκελοι συγχρονισμού. - + There are no sync folders configured. Δεν έχουν ρυθμιστεί φάκελοι συγχρονισμού. - + Open in browser Άνοιγμα στον περιηγητή ιστού - - - + + + Log in... Σύνδεση... - - - + + + Log out Αποσύνδεση - + Recent Changes Πρόσφατες Αλλαγές - + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + Managed Folders: Φάκελοι υπό Διαχείριση: - + Open folder '%1' Άνοιγμα φακέλου '%1' - + Open %1 in browser Άνοιγμα %1 στον περιηγητή - + Unknown status Άγνωστη κατάσταση - + Settings... Ρυθμίσεις... - + Details... Λεπτομέρειες... - + Help Βοήθεια - + Quit %1 Κλείσιμο %1 - + Disconnected from %1 Αποσυνδέθηκε από %1 - + Unsupported Server Version Μη υποστηριζόμενη έκδοση διακομιστή - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Ο διακομιστής στο λογαριασμό% 1 εκτελεί μια παλιά και μη υποστηριζόμενη έκδοση% 2. Η χρήση αυτού του προγράμματος-πελάτη με μη υποστηριζόμενες εκδόσεις διακομιστών δεν είναι δοκιμασμένη και ενδεχομένως επικίνδυνη. Προχωρήστε με δική σας ευθύνη. - + Disconnected from accounts: Αποσυνδέθηκε από τους λογαριασμούς: - + Account %1: %2 Λογαριασμός %1: %2 - + Account synchronization is disabled Ο λογαριασμός συγχρονισμού έχει απενεργοποιηθεί - + Unpause all folders Αναίρεση παύσης όλων των φακέλων - + Pause all folders Παύση όλων των φακέλων - + Unpause all synchronization Αναίρεση παύσης όλων των συγχρονισμών - + Unpause synchronization Αναίρεση παύσης συγχρονσμού - + Pause all synchronization Παύση όλων των συγχρονισμών - + Pause synchronization Παύση συγχρονισμού - + Log out of all accounts Έξοδος από όλους τους λογαριασμούς - + Log in to all accounts... Είσοδος σε όλους τους λογαριασμούς - + New account... Νέος λογαριασμός... - + Crash now Only shows in debug mode to allow testing the crash handler Κατάρρευση τώρα - + No items synced recently Κανένα στοιχείο δεν συγχρονίστηκε πρόσφατα - + Syncing %1 of %2 (%3 left) Συγχρονισμός %1 από %2 (%3 απομένουν) - + Syncing %1 of %2 Συγχρονισμός %1 από %2 - + Syncing %1 (%2 left) Συγχρονισμός %1 (%2 απομένουν) - + Syncing %1 Συγχρονισμός %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ενημερωμένο @@ -3457,7 +3697,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3560,78 +3800,42 @@ It is not advisable to use it. &Κωδικός Πρόσβασης + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Φόρμα - - Server &address: - &Διεύθυνση διακομιστή: - - - - - TextLabel TextLabel - - - Use &secure connection - Χρήση &ασφαλούς σύνδεσης - - - - CheckBox - CheckBox - - - - &Username: - &Όνομα Χρήστη - - - - Enter the ownCloud username. - Εισάγετε το όνομα χρήστη του ownCloud. - - - - &Password: - &Κωδικός Πρόσβασης: - - - - Enter the ownCloud password. - Εισάγετε τον κωδικό πρόσβασης του ownCloud. - - - - Do not allow the local storage of the password. - Να μην επιτρέπεται η τοπική αποθήκευση του κωδικού πρόσβασης. - - - - &Do not store password on local machine - &Να μην γίνει αποθήκευση του κωδικού πρόσβασης στον τοπικό υπολογιστή - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Εισάγετε την url του ownCloud που θέλετε να συνδεθείτε (χωρίς http ή https) - Ser&ver Address @@ -3675,7 +3879,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3683,42 +3887,42 @@ It is not advisable to use it. QObject - + in the future στο μέλλον - + %n day(s) ago %n μέρα(ες) πριν%n μέρα(ες) πριν - + %n hour(s) ago %n ώρα(ες) πριν%n ώρα(ες) πριν - + now τώρα - + Less than a minute ago Λιγότερο από ένα λεπτό πριν - + %n minute(s) ago %n λεπτό(ά) πριν%n λεπτό(ά) πριν - + Some time ago Λίγη ώρα πριν - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3727,57 +3931,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n χρόνος%n χρόνια - + %n month(s) %n μήνας(ες)%n μήνας(ες) - + %n day(s) %n ημέρα(ες)%n ημέρα(ες) - + %n hour(s) %n ώρα(ες)%n ώρα(ες) - + %n minute(s) %n λεπτό(ά)%n λεπτό(ά) - + %n second(s) %n δευτερόλεπτο(α)%n δευτερόλεπτο(α) - + %1 %2 %1 %2 @@ -3798,102 +4002,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Δημιουργήθηκε από την διασκευή Git <a href="%1">%2</a> στο %3, %4 χρησιμοποιώντας Qt %5, %6</small></p> - - - built with %1 - Συγκροτήθηκε με %1 - progress - + Downloaded Ελήφθη - + Uploaded Μεταφορτώθηκε - + Server version downloaded, copied changed local file into conflict file Η έκδοση του διακομιστή κατέβηκε, η αντιγραφή άλλαξε το τοπικό αρχείο σε συγκρουόμενο αρχείο - + Deleted Διεγράφη - + Moved to %1 Μετακινήθηκαν στο %1 - + Ignored Αγνοήθηκε - + Filesystem access error Σφάλμα πρόσβασης στο σύστημα αρχείων - + Error Σφάλμα - + Updated local metadata Ενημερωμένα τοπικά μεταδεδομένα - - + + Unknown Άγνωστο - + downloading λήψη - + uploading μεταφόρτωση - + deleting διαγραφή - + moving μετακίνηση - + ignoring αγνοείται + - error σφάλμα - + updating local metadata γίνεται ενημέρωση μεταδεδομένων @@ -3901,54 +4100,77 @@ It is not advisable to use it. theme - + Status undefined Απροσδιόριστη κατάσταση - + Waiting to start sync Αναμονή έναρξης συγχρονισμού - + Sync is running Ο συγχρονισμός εκτελείται - + Sync Success Επιτυχημένος Συγχρονισμός - + Sync Success, some files were ignored. Επιτυχία Συγχρονισμού, κάποια αρχεία αγνοήθηκαν. - + Sync Error Σφάλμα Συγχρονισμού - + Setup Error Σφάλμα Ρυθμίσεων - + Preparing to sync Προετοιμασία για συγχρονισμό - + Aborting... Ματαίωση σε εξέλιξη... - + Sync is paused Παύση συγχρονισμού + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_en.ts b/translations/client_en.ts index 5425dc511..299642812 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -4,7 +4,7 @@ FileSystem - + The destination file has an unexpected size or modification time @@ -83,6 +83,24 @@ + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -127,8 +145,8 @@ - - + + Cancel @@ -138,188 +156,204 @@ - + No account configured. - + Add new - + Remove - + Account - + Choose what to sync - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running - + The syncing operation is running.<br/>Do you want to terminate it? - + %1 in use - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. - + Server %1 is temporarily unavailable. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. - + Log in - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal - + <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> - + Remove connection - + + Open folder - - + + Log out - + Resume sync - + Pause sync - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. - + No %1 connection configured. @@ -327,37 +361,47 @@ OCC::AccountState - + Signed out - + Disconnected - + Connected - + Service unavailable - + + Maintenance mode + + + + Network error - + Configuration error - + + Asking Credentials + + + + Unknown account state @@ -378,59 +422,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol - - List of ignored or erroneous files - - - - - Copy - - - - - Copy the activity list to the clipboard. - - - - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard @@ -450,32 +479,32 @@ - + Server Activities - + Copy - + Copy the activity list to the clipboard. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. @@ -483,7 +512,7 @@ - + You received %n new notification(s) from %1 and %2. @@ -491,12 +520,12 @@ - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -542,17 +571,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -583,7 +612,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -591,48 +620,40 @@ OCC::ConnectionValidator - + No ownCloud account configured - + The configured server for this client is too old - + Please update to the latest server and restart the client. - + Authentication error: Either username or password are wrong. - + timeout - + The provided credentials are not correct - - OCC::DeleteJob - - - Connection timed out - - - OCC::DiscoveryMainThread - + Aborted by the user @@ -640,51 +661,51 @@ OCC::Folder - + Local folder %1 does not exist. - + %1 should be a folder but is not. - + %1 is not readable. - + %1 has been removed. %1 names a file. - + %1 has been downloaded. %1 names a file. - + %1 has been updated. %1 names a file. - + %1 has been renamed to %2. %1 and %2 name files. - + %1 has been moved to %2. - + %1 and %n other file(s) have been removed. @@ -692,7 +713,7 @@ - + %1 and %n other file(s) have been downloaded. @@ -700,7 +721,7 @@ - + %1 and %n other file(s) have been updated. @@ -708,7 +729,7 @@ - + %1 has been renamed to %2 and %n other file(s) have been renamed. @@ -716,7 +737,7 @@ - + %1 has been moved to %2 and %n other file(s) have been moved. @@ -724,7 +745,7 @@ - + %1 has and %n other file(s) have sync conflicts. @@ -732,12 +753,12 @@ - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. @@ -745,39 +766,39 @@ - + %1 could not be synced due to an error. See the log for details. - + Sync Activity - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -785,46 +806,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? - + Remove all files - + Keep files - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -832,112 +853,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) - + (backup %1) - + Undefined State. - + Waiting to start syncing. - + Preparing for sync. - + Sync is running. - + Last Sync was successful. - + Last Sync was successful, but with warnings on individual files. - + Setup Error. - + User Abort. - + Sync is paused. - + %1 (Sync is paused) - + No valid folder selected! - + The selected path is not a folder! - + You have no permission to write to the selected folder! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -945,17 +966,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File @@ -963,129 +984,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 - + Waiting... - + Waiting for %n other folder(s)... @@ -1093,7 +1124,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Preparing to sync... @@ -1101,12 +1132,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1119,7 +1150,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Enter the path to the local folder. @@ -1142,42 +1173,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1198,22 +1229,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + Server returned wrong content-range - + Connection Timeout @@ -1236,23 +1267,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" - + Ask for confirmation before synchronizing external storages @@ -1272,28 +1303,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Edit &Ignored Files - + S&how crash reporter - - + + About - + Updates - + &Restart && Update @@ -1301,22 +1332,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1396,55 +1427,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output - + &Search: - + &Find - + + &Capture debug messages + + + + Clear - + Clear the log display. - + S&ave - + Save the log file to a file on disk for debugging. - + Save log file - + Error - + Could not write to log file %1 @@ -1452,24 +1553,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> - - OCC::MoveJob - - - Connection timed out - - - OCC::NSISUpdater @@ -1581,27 +1674,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Hostname of proxy server - + Username for proxy server - + Password for proxy server - + HTTP(S) proxy - + SOCKS5 proxy @@ -1614,78 +1707,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. @@ -1698,43 +1824,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 - + Setup local folder options - + Connect... - + %1 folder '%2' is synced to local folder '%3' - + Sync the folder '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder - - + + (%1) @@ -1767,7 +1893,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1775,46 +1901,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 - + Enter user credentials + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 - + Setup %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. - + This url is secure. You can use it. - + &Next > @@ -1822,22 +1961,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... @@ -1857,109 +1996,109 @@ It is not advisable to use it. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> - + Creating local sync folder %1... - + ok - + failed. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. - + The remote folder %1 already exists. Connecting it for syncing. - + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. - + Successfully connected to %1! - + Connection to %1 could not be established. Please check again. - + Folder rename failed - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> @@ -1967,12 +2106,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard - + Skip folders configuration @@ -1980,33 +2119,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! - + Open Local Folder - + Open %1 in Browser - - OCC::PUTFileJob - - - Connection Timeout - - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -2014,7 +2145,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2022,47 +2153,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server - + The file could not be downloaded completely. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database @@ -2070,17 +2201,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2088,22 +2214,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2111,17 +2237,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2129,13 +2255,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2143,12 +2269,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2156,12 +2282,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database @@ -2169,28 +2295,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. - + This folder must not be renamed. Please name it back to Shared. - + The file was renamed but is part of a read only share. The original file was restored. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database @@ -2198,27 +2324,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2226,32 +2357,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2259,32 +2390,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2302,42 +2433,42 @@ It is not advisable to use it. - + Time - + File - + Folder - + Action - + Size - + Local sync protocol - + Copy - + Copy the activity list to the clipboard. @@ -2378,7 +2509,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync @@ -2386,33 +2517,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... - + Deselect remote folders you do not wish to synchronize. - + Name - + Size - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2425,22 +2556,22 @@ It is not advisable to use it. - + Activity - + General - + Network - + Account @@ -2448,27 +2579,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 - + Activity - + General - + Network - + Account @@ -2496,35 +2627,45 @@ It is not advisable to use it. - + %1 Sharing - + %1 - + Folder: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2534,92 +2675,126 @@ It is not advisable to use it. - - Share link - - - - + TextLabel - + Set &password - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date - + Set password - - &Mail link + + Link properties: - Copy &link + Show file listing - + Allow editing - + Anyone with the link has access to the file/folder - + + P&assword protect - + Password Protected - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password - + Please Set Password - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - - OCC::ShareUserGroupWidget @@ -2629,55 +2804,85 @@ It is not advisable to use it. - + Share with users or groups ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - + TextLabel - + can edit - + can share - + ... - + create - + change - + delete @@ -2685,12 +2890,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error - + You must sign in as user %1 @@ -2698,22 +2903,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate - + SSL Chipher Debug View - + Reauthentication required - + Your session has expired. You need to re-login to continue to use the client. @@ -2721,26 +2926,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> - + Common Name (CN): - + Subject Alternative Names: @@ -2825,7 +3050,7 @@ It is not advisable to use it. - + This connection is encrypted using %1 bit %2. @@ -2841,7 +3066,7 @@ It is not advisable to use it. - + This connection is NOT secure as it is not encrypted. @@ -2860,67 +3085,67 @@ It is not advisable to use it. - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 - - &lt;not specified&gt; - - - - - - Organization: %1 - - - - - Unit: %1 + &lt;not specified&gt; + Organization: %1 + + + + + + Unit: %1 + + + + + Country: %1 - + Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 - + Expiration Date: %1 - + Issuer: %1 @@ -2928,285 +3153,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> - + CSync got an error while processing internal trees. - - CSync failed to reserve memory. - - - - + CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. - + A network connection timeout happened. - + A HTTP transmission error happened. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. - + CSync unspecified error. - + Aborted by the user - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - - The item is not synced because of previous errors: %1 - - - - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3222,7 +3462,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 @@ -3230,17 +3470,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3248,17 +3488,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3266,207 +3506,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in - + Folder %1: %2 - + No sync folders configured. - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out - + Recent Changes - + Checking for changes in '%1' - + Managed Folders: - + Open folder '%1' - + Open %1 in browser - + Unknown status - + Settings... - + Details... - + Help - + Quit %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 - + %1 (%2, %3) - + Up to date @@ -3474,7 +3714,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3577,78 +3817,42 @@ It is not advisable to use it. + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form - - Server &address: - - - - - - TextLabel - - - Use &secure connection - - - - - CheckBox - - - - - &Username: - - - - - Enter the ownCloud username. - - - - - &Password: - - - - - Enter the ownCloud password. - - - - - Do not allow the local storage of the password. - - - - - &Do not store password on local machine - - - - - https:// - - - - - Enter the url of the ownCloud you want to connect to (without http or https). - - Ser&ver Address @@ -3692,7 +3896,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3700,12 +3904,12 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago @@ -3713,7 +3917,7 @@ It is not advisable to use it. - + %n hour(s) ago @@ -3721,17 +3925,17 @@ It is not advisable to use it. - + now - + Less than a minute ago - + %n minute(s) ago @@ -3739,12 +3943,12 @@ It is not advisable to use it. - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 @@ -3753,27 +3957,27 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B - + %n year(s) @@ -3781,7 +3985,7 @@ It is not advisable to use it. - + %n month(s) @@ -3789,7 +3993,7 @@ It is not advisable to use it. - + %n day(s) @@ -3797,7 +4001,7 @@ It is not advisable to use it. - + %n hour(s) @@ -3805,7 +4009,7 @@ It is not advisable to use it. - + %n minute(s) @@ -3813,7 +4017,7 @@ It is not advisable to use it. - + %n second(s) @@ -3821,7 +4025,7 @@ It is not advisable to use it. - + %1 %2 @@ -3842,102 +4046,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded - + Uploaded - + Server version downloaded, copied changed local file into conflict file - + Deleted - + Moved to %1 - + Ignored - + Filesystem access error - + Error - + Updated local metadata - - + + Unknown - + downloading - + uploading - + deleting - + moving - + ignoring + - error - + updating local metadata @@ -3945,54 +4144,77 @@ It is not advisable to use it. theme - + Status undefined - + Waiting to start sync - + Sync is running - + Sync Success - + Sync Success, some files were ignored. - + Sync Error - + Setup Error - + Preparing to sync - + Aborting... - + Sync is paused + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + diff --git a/translations/client_es.ts b/translations/client_es.ts index df6a08940..5e7af352b 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El archivo destino tiene un tamaño o fecha/hora de modificación no esperado. @@ -81,6 +81,24 @@ Etiqueta de texto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancelar @@ -136,188 +154,204 @@ Conectado a <server> como <user> - + No account configured. No se ha configurado ninguna cuenta. - + Add new Añadir nuevo - + Remove Eliminar - + Account Cuenta - + Choose what to sync Elija qué sincronizar - + Force sync now Forzar la sincronización ahora - + Restart sync Reiniciar sync - + Remove folder sync connection Eliminar la sincronización de carpetas conectadas - + Folder creation failed Hubo un fallo al crear la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No se pudo crear la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirme la sincronización para la eliminación de la carpeta conectada - + Remove Folder Sync Connection Eliminar carpeta de sincronización conectada - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Desea interrumpirla? - + %1 in use %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versión del servidor %1 es antigua, ¡y no está soportada! Si continúas, lo haces bajo tu propio riesgo. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Cerró sesión desde %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Sin conexión a %1 en %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: Hay carpetas que no fueron sincronizadas porque son demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hay carpetas que no fueron sincronizadas porque residen en almacenamiento externo: - + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no fueron sincronizadas porque son demasiado grandes o residen en almacenes externos: - + Confirm Account Removal Confirmar eliminación de cuenta - + <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> <p>¿De verdad quiere eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> eliminará los archivos.</p> - + Remove connection Eliminar conexión - + + Open folder Abrir carpeta - - + + Log out Cerrar sesión - + Resume sync Continuar sincronización - + Pause sync Pausar sincronización - + <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> <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible sobre el uso de almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Cerrar sesión - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + + Maintenance mode + + + + Network error Error en la red - + Configuration error Error en la configuración - + + Asking Credentials + + + + Unknown account state Estado de cuenta desconocido @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Actividad del servidor - + Sync Protocol Protocolo de Sincronización - - List of ignored or erroneous files - Lista de archivos erróneos o ignorados - - - - Copy - Copiar - - - - Copy the activity list to the clipboard. - Copie la lista de actividades al portapapeles - - - + Not Synced No sincronizado - + Not Synced (%1) %1 is the number of not synced files. No Sincronizado (%1) - + The server activity list has been copied to the clipboard. La lista de la actividad del servidor se ha copiado en el portapapeles. - + The sync activity list has been copied to the clipboard. La lista de actividades de sincronización se ha copiado en el portapapeles. - + The list of unsynced items has been copied to the clipboard. La lista de elementos sin sincronizar, ha sido copiada al portapapeles. - + Copied to clipboard Copiado al portapapeles @@ -448,47 +477,47 @@ Etiqueta de texto - + Server Activities Actividades del servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copie la lista de actividades al portapapeles - + Action Required: Notifications Acción a realizar: Notificaciones - + <br/>Account %1 does not have activities enabled. <br/>La cuenta %1 no tiene actividades habilitadas. - + You received %n new notification(s) from %2. Ha recibido %n nueva notificación de %2.Ha recibido %n nueva notificacióne(s) de %2. - + You received %n new notification(s) from %1 and %2. Ha recibido %n nueva notificación de %1 y de %2.Ha recibido %n nuevas notificacióne(s) de %1 y de %2. - + You received new notifications from %1, %2 and other accounts. Ha recibido nuevas notificaciónes de %1, %2 y otras cuentas. - + %1 Notifications - Action Required %1 Notificaciones - Acción requerida @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Error al acceder al archivo de configuración - + There was an error while accessing the configuration file at %1. Ha ocurrido un error al acceder al archivo de configuración %1. - + Quit ownCloud Salir de OwnCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured No se ha configurado ninguna cuenta de ownCloud - + The configured server for this client is too old La configuración del servidor para este cliente está obsoleta - + Please update to the latest server and restart the client. Por favor, actualice a la última versión del servidor y reinicie el cliente - + Authentication error: Either username or password are wrong. Error de autenticación: El usuario o la contraseña son incorrectos - + timeout tiempo de espera - + The provided credentials are not correct Las credenciales proporcionadas no son correctas - - OCC::DeleteJob - - - Connection timed out - Tiempo de conexión agotado - - OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. La carpeta local %1 no existe. - + %1 should be a folder but is not. %1 debería ser un directorio, pero no lo es. - + %1 is not readable. %1 es ilegible. - + %1 has been removed. %1 names a file. %1 ha sido eliminado. - + %1 has been downloaded. %1 names a file. %1 ha sido descargado. - + %1 has been updated. %1 names a file. %1 ha sido actualizado. - + %1 has been renamed to %2. %1 and %2 name files. %1 ha sido renombrado a %2. - + %1 has been moved to %2. %1 ha sido movido a %2. - + %1 and %n other file(s) have been removed. %1 y otro archivo han sido borrados.%1 y otros %n archivos han sido borrados. - + %1 and %n other file(s) have been downloaded. %1 y otro archivo han sido descargados.%1 y otros %n archivos han sido descargados. - + %1 and %n other file(s) have been updated. %1 y otro archivo han sido actualizados.%1 y otros %n archivos han sido actualizados. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 ha sido renombrado a %2 y otro archivo ha sido renombrado.%1 ha sido renombrado a %2 y otros %n archivos han sido renombrado. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 ha sido movido a %2 y otro archivo ha sido movido.%1 ha sido movido a %2 y otros %n archivos han sido movidos. - + %1 has and %n other file(s) have sync conflicts. %1 y otro archivo han tenido conflictos al sincronizar.%1 y otros %n archivos han tenido conflictos al sincronizar. - + %1 has a sync conflict. Please check the conflict file! Conflicto al sincronizar %1. Por favor compruebe el archivo! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 y otro archivo no pudieron ser sincronizados debido a errores. Para más detalles vea el registro.%1 y otros %n archivos no pudieron ser sincronizados debido a errores. Para más detalles vea el registro. - + %1 could not be synced due to an error. See the log for details. %1 no pudo ser sincronizado debido a un error. Para más detalles, vea el registro. - + Sync Activity Actividad de la sincronización - + Could not read system exclude file No se ha podido leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. - + A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - + Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ Si decide mantener estos archivos, serán re-sincronizados con el servidor si Vd Si decide borrarlos, no serán visibles para Vd. a menos que sea usted el propietario. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Si ha sido un accidente, y decide mantener los archivos, serán re-sincronizados con el servidor. - + Remove All Files? ¿Eliminar todos los archivos? - + Remove all files Eliminar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? @@ -794,17 +815,17 @@ Esto puede deberse a que una copia de seguridad fue restaurada en el servidor. Si continua con la sincronización todos los archivos serán remplazados por su versión previa. ¿Desea mantener los archivos locales en su versión actual como archivos en conflicto? - + Backup detected Backup detectado - + Normal Synchronisation Sincronización Normal - + Keep Local Files as Conflict Mantener los archivos locales en caso de conflicto @@ -812,112 +833,112 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderMan - + Could not reset folder state No se ha podido restablecer el estado de la carpeta - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Se ha encontrado un antiguo registro de sincronización '%1'; pero no se ha podido eliminar. Por favor, asegúrese de que ninguna aplicación la esté utilizando. - + (backup) (copia de seguridad) - + (backup %1) (copia de seguridad %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. Esperando para comenzar la sincronización. - + Preparing for sync. Preparándose para sincronizar. - + Sync is running. Sincronización en funcionamiento. - + Last Sync was successful. La última sincronización se ha realizado con éxito. - + Last Sync was successful, but with warnings on individual files. La última sincronización salió bien; pero hay advertencias para archivos individuales. - + Setup Error. Error de configuración. - + User Abort. Interrumpido por el usuario. - + Sync is paused. La sincronización está en pausa. - + %1 (Sync is paused) %1 (Sincronización en pausa) - + No valid folder selected! ¡La carpeta seleccionada no es válida! - + The selected path is not a folder! ¡La ruta seleccionada no es un directorio! - + You have no permission to write to the selected folder! ¡Usted no tiene permiso para escribir en la carpeta seleccionada! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! El directorio local %1 es un enlace simbólico. El objetivo del enlace ya contiene un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - + There is already a sync from the server to this local folder. Please pick another local folder! Ya existe una tarea de sincronización entre el servidor y esta carpeta. Por favor elija otra carpeta local. - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! El directorio local %1 ya contiene un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! El directorio local %1 está dentro de un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. - + 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! El directorio local %1 es un enlace simbólico. El objetivo está incluido en un directorio usado en una conexión de sincronización de directorios. Por favor, elija otro. @@ -925,17 +946,17 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderStatusDelegate - + Add Folder Sync Connection Añadir Conexión para el Directorio de Sincronización - + Synchronizing with local folder Sincronizando con carpeta local - + File Archivo @@ -943,134 +964,144 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderStatusModel - + You need to be connected to add a folder Necesita estar conectado para añadir una carpeta - + Click this button to add a folder to synchronize. Haga clic en este botón para añadir una carpeta a sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error mientras se cargaba la lista de carpetas desde el servidor. - + Signed out Cerrar sesión - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Añadir carpetas está deshabilitado debido a que ya están sincronizándose todos sus archivos. Si desea sincronizar múltiples carpeta, elimine la carpeta raíz actualmente configurada. - + Fetching folder list from server... Obtención de lista de carpetas del servidor... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Buscando cambios en '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargando: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) cargar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 de %2, archivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n carpeta...Esperando por %n otras carpetas... - + Preparing to sync... Preparando para sincronizar... @@ -1078,12 +1109,12 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderWizard - + Add Folder Sync Connection Añadir Conexión para el Directorio de Sincronización - + Add Sync Connection Añadir Sincronización de Conexión @@ -1096,7 +1127,7 @@ Si continua con la sincronización todos los archivos serán remplazados por su Haga clic para seleccionar una carpeta local para sincronizar. - + Enter the path to the local folder. Ingrese la ruta de la carpeta local. @@ -1119,42 +1150,42 @@ Si continua con la sincronización todos los archivos serán remplazados por su Introduzca más abajo el nombre de la nueva carpeta que crear '%1': - + Folder was successfully created on %1. La carpeta fue creada con éxito en %1. - + Authentication failed accessing %1 Falló la autenticación al acceder a %1 - + Failed to create the folder on %1. Please check manually. Fallo al crear la carpeta %1. Por favor, revíselo manualmente. - + Failed to list a folder. Error: %1 Falló al listar una carpeta. Error: %1 - + Choose this to sync the entire account Elija esto para sincronizar la cuenta entera - + This folder is already being synced. Este directorio ya se ha sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya ha sincronizado <i>%1</i>, el cual es la carpeta de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Todavía se están sincronizando ficheros. <b>No</b> se admite la sincronización de otras carpetas. Si quiere sincronizar múltiples carpetas, por favor revise la carpeta raíz configurada. @@ -1175,22 +1206,22 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway No se ha recibido ninguna e-tag del servidor, revise el proxy/puerta de enlace - + We received a different E-Tag for resuming. Retrying next time. Se ha recibido una e-tag distinta para reanudar. Se volverá a intentar. - + Server returned wrong content-range El servidor ha devuelto un content-range erróneo - + Connection Timeout Tiempo de espera de conexión agotado @@ -1213,23 +1244,23 @@ Si continua con la sincronización todos los archivos serán remplazados por su A la bandeja del sistema - + Advanced Avanzado - + Ask for confirmation before synchronizing folders larger than Preguntar si se desea sincronizar carpetas mayores de - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Preguntar si se desea sincronizar carpetas de almacenes externos @@ -1249,28 +1280,28 @@ Si continua con la sincronización todos los archivos serán remplazados por su Usar Iconos &Monocromáticos - + Edit &Ignored Files Editar archivos &ignorados - + S&how crash reporter M&ostrar el informe de fallos - - + + About Acerca de - + Updates Actualizaciones - + &Restart && Update &Reiniciar && Actualizar @@ -1278,22 +1309,22 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> - + Reading from keychain failed with error: '%1' La lectura del llavero ha fallado y ha generado este error: '%1' - + Enter Password Introduzca la contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. @@ -1375,55 +1406,125 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Esta entrada la proporciona el sistema en '%1' y no se puede modificar en esta vista. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Salida del sistema - + &Search: &Buscar: - + &Find &Encontrar - + + &Capture debug messages + + + + Clear Borrar - + Clear the log display. Limpiar la pantalla de registros. - + S&ave Gu&ardar - + Save the log file to a file on disk for debugging. Guardar el archivo de registro a un archivo en disco para depuración. - + Save log file Guardar archivo de registro - + Error Error - + Could not write to log file %1 No se ha podido escribir en el archivo de registro %1 @@ -1431,24 +1532,16 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El archivo '%1'<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no</b> se puede guardar!</nobr> - - OCC::MoveJob - - - Connection timed out - Tiempo de conexión agotado - - OCC::NSISUpdater @@ -1560,27 +1653,27 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Limitar automáticamente - + Hostname of proxy server Nombre del host para servidor proxy - + Username for proxy server Nombre de usuario para el servidor proxy - + Password for proxy server Contraseña para el servidor proxy - + HTTP(S) proxy Proxy HTTP(S) - + SOCKS5 proxy Proxy SOCKS5 @@ -1593,78 +1686,111 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::NotificationWidget - + Created at %1 Creado en %1 - + Closing in a few seconds... Cerrando en pocos segundos... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 petición fallida en %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' seleccionado en %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nueva %1 actualización está lista - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Se instalará una nueva actualización de %1. Durante esta actualización puede que se soliciten privilegios adicionales. - + Downloading version %1. Please wait... Descargando la versión %1. Espere... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. No se puede descargar la actualización. Por favor, haga clic <a href='%1'>aquí</a> para iniciar una descarga manual. - + Could not check for new updates. No se puede comprobar si hay actualizaciones. - + %1 version %2 available. Restart application to start the update. %1 versión %2 disponible. Reiniciar aplicación para comenzar la actualización. - + New %1 version %2 available. Please use the system's update tool to install it. Nueva %1 versión %2 está disponible. Use la herramienta de actualización de su sistema para instalarla. - + Checking update server... Consultando al servidor de actualizaciones... - + Update status is unknown: Did not check for new updates. Estado de actualización desconocido: no se buscaron nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tiene la última versión. @@ -1677,43 +1803,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Conectar a %1 - + Setup local folder options Configurar opciones de carpeta local - + Connect... Conectar... - + %1 folder '%2' is synced to local folder '%3' La carpeta %1 '%2' está sincronizada con la carpeta local '%3' - + Sync the folder '%1' Sincronizar el directorio '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Advertencia:</strong> El directorio local no está vacío. ¡Seleccione una resolución!</small></p> - + Local Sync Folder Carpeta local de sincronización - - + + (%1) (%1) @@ -1746,7 +1872,7 @@ for additional privileges during the process. Configurar certificado TLS del Cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder</p></body></html> @@ -1754,47 +1880,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &Email - + Connect to %1 Conectar a %1 - + Enter user credentials Introduzca las credenciales de usuario + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Conectar a %1 - + Setup %1 server Configurar servidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Esta URL NO ES SEGURA; pues no está cifrada. No se recomienda usarla. - + This url is secure. You can use it. Esta url es segura. Puede utilizarla. - + &Next > &Siguiente > @@ -1802,22 +1941,22 @@ No se recomienda usarla. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Fallo al conectar %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 - + Trying to connect to %1 at %2... Intentando conectar a %1 desde %2... @@ -1837,109 +1976,109 @@ No se recomienda usarla. Acceso denegado por el servidor. Para verificar que usted tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio con su navegador. - + Invalid URL URL inválida. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> - + Creating local sync folder %1... Creando carpeta de sincronización local %1 - + ok bien - + failed. ha fallado. - + Could not create local folder %1 No se ha podido crear la carpeta local %1 - + No remote folder specified! ¡No se ha especificado ninguna carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectándola para sincronizacion. - + The folder creation resulted in HTTP error code %1 La creación de la carpeta ha producido el código de error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 - + Successfully connected to %1! ¡Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. - + Folder rename failed Error al renombrar la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No se puede eliminar y respaldar la carpeta porque la misma o un fichero en ella está abierto por otro programa. Por favor, cierre la carpeta o el fichero y reintente, o cancele la instalación. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> @@ -1947,12 +2086,12 @@ No se recomienda usarla. OCC::OwncloudWizard - + %1 Connection Wizard Asistente de conexión %1 - + Skip folders configuration Omitir la configuración de carpetas @@ -1960,33 +2099,25 @@ No se recomienda usarla. OCC::OwncloudWizardResultPage - + Everything set up! ¡Todo listo! - + Open Local Folder Abrir carpeta local - + Open %1 in Browser Abrir %1 en el navegador - - OCC::PUTFileJob - - - Connection Timeout - Tiempo de espera de conexión agotado - - OCC::PollJob - + Invalid JSON reply from the poll URL Respuesta JSON invalida desde URL @@ -1994,7 +2125,7 @@ No se recomienda usarla. OCC::PropagateDirectory - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2002,47 +2133,47 @@ No se recomienda usarla. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! ¡El archivo %1 no se puede descargar a causa de un conflicto con el nombre de un archivo local! - - The download would reduce free disk space below %1 - La descarga reduciría el espacio libre en disco por debajo de %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 El espacio libre en el disco es inferior a %1 - + File was deleted from server Se ha eliminado el archivo del servidor - + The file could not be downloaded completely. No se ha podido descargar el archivo completamente. - + The downloaded file is empty despite the server announced it should have been %1. El archivo descargado está vacio aunque el servidor dice que deberia haber sido %1. - + File %1 cannot be saved because of a local file name clash! ¡El fichero %1 no puede guardarse debido a un conflicto con el nombre de otro fichero local! - + File has changed since discovery El archivo ha cambiado desde que fue descubierto - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2050,17 +2181,12 @@ No se recomienda usarla. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falló la restauración: %1 - - Continue blacklisting: - Continuar añadiendo a su lista negra: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio fue eliminado de una carpeta de compartida de solo lectura pero la recuperación falló: %1 @@ -2068,22 +2194,22 @@ No se recomienda usarla. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 no pudo borrar el archivo %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atención, posible error de mayúsculas/minúsculas en %1 - + could not create folder %1 No se ha podido crear el directorio %1 - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2091,17 +2217,17 @@ No se recomienda usarla. OCC::PropagateLocalRemove - + Error removing '%1': %2; Error al borrar '%1': %2; - + Could not remove folder '%1' No se pudo eliminar la carpeta '%1' - + Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local @@ -2109,13 +2235,13 @@ No se recomienda usarla. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash El archivo %1 no se puede renombrar a %2 por causa de un conflicto con el nombre de un archivo local - - + + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2123,12 +2249,12 @@ No se recomienda usarla. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. El archvo fue eliminado de una carpeta compartida en modo de solo lectura. Ha sido recuperado. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 204, pero recibido "%1 %2". @@ -2136,12 +2262,12 @@ No se recomienda usarla. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2149,28 +2275,28 @@ No se recomienda usarla. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Esta carpeta no debe ser renombrada. Ha sido renombrada a su nombre original - + This folder must not be renamed. Please name it back to Shared. Esta carpeta no debe ser renombrada. Favor de renombrar a Compartida. - + The file was renamed but is part of a read only share. The original file was restored. El archivo fue renombrado, pero es parte de una carpeta compartida en modo de solo lectura. El archivo original ha sido recuperado. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". El código HTTP devuelto por el servidor es erróneo. Esperado 201, pero recibido "%1 %2". - - + + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2178,27 +2304,32 @@ No se recomienda usarla. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists El archivo %1 No puede ser subido porque ya existe otro con el mismo nombre, puede haber diferencias en mayusculas o minusculas - + File Removed Archivo eliminado - + Local file changed during syncing. It will be resumed. Archivo local cambió durante la sincronización. Será actualizado. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2206,32 +2337,32 @@ No se recomienda usarla. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2. - + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) - + Missing File ID from server Perdido archivo ID del servidor - + Missing ETag from server Perdido ETag del servidor @@ -2239,32 +2370,32 @@ No se recomienda usarla. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. El archivo fue modificado localmente; pero es parte de una carpeta compartida en modo de sólo lectura. Ha sido recuperado y su modificación está en el archivo de conflicto. - + Poll URL missing Falta la URL de la encuesta - + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no reconoció la última parte. (No había una e-tag presente) @@ -2282,42 +2413,42 @@ No se recomienda usarla. Etiqueta de texto - + Time Hora - + File Archivo - + Folder Carpeta - + Action Acción - + Size Tamaño - + Local sync protocol Protocolo de sincronización local - + Copy Copiar - + Copy the activity list to the clipboard. Copie la lista de actividades al portapapeles @@ -2358,7 +2489,7 @@ No se recomienda usarla. OCC::SelectiveSyncDialog - + Choose What to Sync Escoja qué sincronizar @@ -2366,33 +2497,33 @@ No se recomienda usarla. OCC::SelectiveSyncWidget - + Loading ... Cargando... - + Deselect remote folders you do not wish to synchronize. Deseleccione las carpetas remotas que no desea sincronizar. - + Name Nombre - + Size Tamaño - - + + No subfolders currently on the server. No hay subcarpetas actualmente en el servidor. - + An error occurred while loading the list of sub folders. Ha ocurrido un error mientras cargaba la lista de carpetas. @@ -2405,22 +2536,22 @@ No se recomienda usarla. Ajustes - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2428,27 +2559,27 @@ No se recomienda usarla. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2476,35 +2607,45 @@ No se recomienda usarla. Ruta de OwnCloud: - + %1 Sharing %1 Compartiendo - + %1 %1 - + Folder: %2 Carpeta: %2 - + The server does not allow sharing El servidor no permite compartir - + Retrieving maximum possible sharing permissions from server... Descargando el maximo número de permisos compartidos del servidor... - + The file can not be shared because it was shared without sharing permission. El archivo no puede compartirse; ya que fue compartido sin permisos correspondientes. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2514,92 +2655,126 @@ No se recomienda usarla. Compartir nuevo documento.odt - - Share link - Compartir enlace - - - + TextLabel Etiqueta de texto - + Set &password Establecer &contraseña - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Establecer fecha de v&encimiento - + Set password Establecer contraseña - - &Mail link - Enlace &Correo + + Link properties: + - Copy &link - Copiar &enlace + Show file listing + - + Allow editing Permitir edición - + Anyone with the link has access to the file/folder Quienquiera que posea el vínculo tendrá acceso al archivo/carpeta - + + P&assword protect Protegido por contr&aseña - + Password Protected Protegido con contraseña - + The file can not be shared because it was shared without sharing permission. El archivo no puede compartirse; ya que fue compartido sin permisos correspondientes. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Compartir public&amente requiere contraseña - + Please Set Password Por favor establece una contraseña - - - Could not open email client - No se pudo abrir el cliente de correo - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Ocurrió un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? - - - - - &Share link - &Compartir enlace - OCC::ShareUserGroupWidget @@ -2609,68 +2784,98 @@ No se recomienda usarla. Compartir nuevo documento.odt - + Share with users or groups ... Compartir con usuarios o grupos ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' No hay resultados para '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulario + - + TextLabel - Etiqueta de texto + - + can edit - puede editar + - + can share - puede compartir + - + ... - ... + - + create - crear + - + change - cambio + - + delete - borrar + OCC::ShibbolethCredentials - + Login Error Error al iniciar sesión - + You must sign in as user %1 Debe iniciar sesión como el usuario %1 @@ -2678,22 +2883,22 @@ No se recomienda usarla. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticar - + SSL Chipher Debug View Vista depuradador Chipher SSL - + Reauthentication required Debe volver a autenticarse - + Your session has expired. You need to re-login to continue to use the client. Su sesión ha caducado. Necesita volver a iniciarla para continuar usando el cliente. @@ -2701,26 +2906,46 @@ No se recomienda usarla. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartir con %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalles del certificado</h3> - + Common Name (CN): Nombre común (NC): - + Subject Alternative Names: Nombres alternativos del sujeto: @@ -2805,7 +3030,7 @@ No se recomienda usarla. %1 - + This connection is encrypted using %1 bit %2. Esta conexión está cifrada con %1 bit %2. @@ -2822,7 +3047,7 @@ No se recomienda usarla. Información del certificado: - + This connection is NOT secure as it is not encrypted. Esta conexión NO ES SEGURA, pues no está cifrada. @@ -2842,67 +3067,67 @@ No se recomienda usarla. Confiar en este certificado de todas maneras - + Untrusted Certificate Certificado sin verificar - + Cannot connect securely to <i>%1</i>: No puedo conectar de forma segura a <i>%1</i>: - + with Certificate %1 con certificado %1 - + &lt;not specified&gt; &lt;no especificado&gt; - - + + Organization: %1 Organización: %1 - - + + Unit: %1 Unidad: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Huella (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> - + Effective Date: %1 Fecha de vigencia: %1 - + Expiration Date: %1 Fecha de caducidad: %1 - + Issuer: %1 Emisor: %1 @@ -2910,285 +3135,300 @@ No se recomienda usarla. OCC::SyncEngine - + Success. Completado con éxito. - + CSync failed to load the journal file. The journal file is corrupted. CSync falló al cargar el archivo de diaro. El darchivo de diario se encuentra corrupto. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>El %1 complemento para csync no se ha podido cargar.<br/>Por favor, verifique la instalación</p> - + CSync got an error while processing internal trees. CSync encontró un error mientras procesaba los árboles de datos internos. - - CSync failed to reserve memory. - Hubo un fallo al reservar memoria para Csync - - - + CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. El proceso de actualización de CSync ha fallado. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la búsqueda del proxy - + CSync failed to authenticate at the %1 server. CSync: Falló la autenticación con el servidor %1. - + CSync failed to connect to the network. CSync: Falló la conexión con la red. - + A network connection timeout happened. Se sobrepasó el tiempo de espera de la conexión de red. - + A HTTP transmission error happened. Se ha producido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server El directorio montado no está disponible temporalmente en el servidor - + An error occurred while opening a folder Se produjo un error al abrir un directorio - + Error while reading folder. Error al leer el directorio. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Se ignoran los Archivos/Carpetas ocultos. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: No queda espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access CSync ha fallado al acceder - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falló al cargar o crear el archivo de diario. Asegúrese de tener permisos de lectura y escritura en el directorio local de sincronización. - + CSync failed due to unhandled permission denied. CSync falló debido a un permiso denegado. - + CSync tried to create a folder that already exists. CSync trató de crear un directorio que ya existe. - + The service is temporarily unavailable El servicio no está disponible temporalmente - + Access is forbidden Acceso prohibido - + An internal error number %1 occurred. Ocurrió un error interno número %1. - - The item is not synced because of previous errors: %1 - El elemento no está sincronizado por errores previos: %1 - - - + Symbolic links are not supported in syncing. No se admiten enlaces simbólicos en la sincronización. - + File is listed on the ignore list. El fichero está en la lista de ignorados - + File names ending with a period are not supported on this file system. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. - + File names containing the character '%1' are not supported on this file system. Los nombres de archivo que contengan el caracter '%1' no son compatibles con este sistema de archivos. - + The file name is a reserved name on this file system. El nombre del archivo es una palabra reservada del sistema de archivos. - + Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - + Filename is too long. El nombre del archivo es demasiado largo. - + Stat failed. Stat ha fallado. - + Filename encoding is not valid Los caracteres del nombre de fichero no son válidos - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renombre "%1" - - Unable to initialize a sync journal. - No se pudo inicializar un registro (journal) de sincronización. - - - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen @@ -3204,7 +3444,7 @@ No se recomienda usarla. OCC::Systray - + %1: %2 %1: %2 @@ -3212,17 +3452,17 @@ No se recomienda usarla. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>La versión %1. Para obtener más información, visite<a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuido por %1 y bajo la licencia GNU General Public License (GPL) versión 2.0.<br/>%2 y el logotipo de %2 son marcas registradas de %1 en los Estados Unidos y otros países, o ambos.</p> @@ -3230,17 +3470,17 @@ No se recomienda usarla. OCC::ValidateChecksumHeader - + The checksum header is malformed. La cabecera del archivo de comprobación es incorrecto. - + The checksum header contained an unknown checksum type '%1' La suma de comprobación de cabeceras contenía una suma de comprobación desconocida de tipo '%1' - + The downloaded file does not match the checksum, it will be resumed. El archivo descargado no coincide con el archivo de comprobación, será reanudado. @@ -3248,207 +3488,207 @@ No se recomienda usarla. OCC::ownCloudGui - + Please sign in Por favor, regístrese - + Folder %1: %2 Archivo %1: %2 - + No sync folders configured. No hay carpetas de sincronización configuradas. - + There are no sync folders configured. No hay carpetas configuradas para sincronizar. - + Open in browser Abrir en navegador - - - + + + Log in... Inicio de sesión... - - - + + + Log out Cerrar sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' Buscando cambios en '%1' - + Managed Folders: Carpetas administradas: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Salir de %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version Versión del servidor no soportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor en la cuenta %1 usa una versión antigua y no soportada %2. Usando este cliente con las versiones de servidor no soportadas no está probado y es potencialmente peligroso. Procede bajo tu propio riesgo. - + Disconnected from accounts: Desconectado desde cuentas: - + Account %1: %2 Cuenta %1: %2 - + Account synchronization is disabled La sincronización está deshabilitada - + Unpause all folders Despausar todas las carpetas - + Pause all folders Pausar todas las carpetas - + Unpause all synchronization Despausar todas las sincronizaciones - + Unpause synchronization Despausar la sincronización - + Pause all synchronization Pausar todas las sincronizaciones - + Pause synchronization Pausar la sincronización - + Log out of all accounts Terminar sessión en todas las cuentas - + Log in to all accounts... Iniciar sesión en todas las cuentas... - + New account... Nueva cuenta ... - + Crash now Only shows in debug mode to allow testing the crash handler Se ha producido un fallo - + No items synced recently No se han sincronizado elementos recientemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (quedan %3) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (quedan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado @@ -3456,7 +3696,7 @@ No se recomienda usarla. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Version %2. Para mas información visite: <a href="%3">https://%4</a></p><p>Para ayuda y asistencia , visite: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licenciado bajo la GNU General Public License (GPL) Version 2.0<br/>ownCloud y el logo de ownCloud son marcas registradas de ownCloud GmbH en los Estados Unidos, en otros paises o en ambos.</p> @@ -3559,78 +3799,42 @@ No se recomienda usarla. &Contraseña + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulario - - Server &address: - Uso servidor &Dirección: - - - - - TextLabel Etiqueta - - - Use &secure connection - Uso &conexión segura - - - - CheckBox - Casilla de verificación - - - - &Username: - &Usuario: - - - - Enter the ownCloud username. - Introduzca el nombre de usuario de ownCloud. - - - - &Password: - &Contraseña: - - - - Enter the ownCloud password. - Introduzca la contraseña de ownCloud. - - - - Do not allow the local storage of the password. - No permitir el almacenamiento local de la contraseña - - - - &Do not store password on local machine - &No guardar la contraseña en la máquina local - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Introduzca la dirección URL de ownCloud a la cual desea conectarse (sin http o https). - Ser&ver Address @@ -3674,7 +3878,7 @@ No se recomienda usarla. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3682,42 +3886,42 @@ No se recomienda usarla. QObject - + in the future en el futuro - + %n day(s) ago Hace %n día(s)Hace %n día(s) - + %n hour(s) ago Hace %n hora(s)Hace %n hora(s) - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute(s) ago Hace %n minutos(s)Hace %n minutos(s) - + Some time ago Hace unos momentos - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3726,57 +3930,57 @@ No se recomienda usarla. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año%n año(s) - + %n month(s) %n Mes%n Mese(s) - + %n day(s) %n dia%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 @@ -3797,102 +4001,97 @@ No se recomienda usarla. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Revisión Git <a href="%1">%2</a> en %3, %4 compilada usando Qt %5, %6</small></p> - - - built with %1 - Creado con %1 - progress - + Downloaded Descargado - + Uploaded Subido - + Server version downloaded, copied changed local file into conflict file Versión del servidor descargada, se ha copiado el fichero local cambiado al fichero en conflicto - + Deleted Eliminado - + Moved to %1 Movido a %1 - + Ignored Ignorado - + Filesystem access error Error de acceso al sistema de archivos - + Error Error - + Updated local metadata Actualizados metadatos locales - - + + Unknown Desconocido - + downloading descargando - + uploading subiendo - + deleting eliminando - + moving moviendo - + ignoring ignorando + - error error - + updating local metadata actualizando metadatos locales @@ -3900,54 +4099,77 @@ No se recomienda usarla. theme - + Status undefined Estado indefinido - + Waiting to start sync Esperando para comenzar la sincronización - + Sync is running Sincronizado en proceso - + Sync Success Sincronizado con éxito - + Sync Success, some files were ignored. Sincronizado con éxito, algunos archivos han sido ignorados. - + Sync Error Error de sincronización. - + Setup Error Error en la instalación - + Preparing to sync Preparando para sincronizar - + Aborting... Cancelando... - + Sync is paused La sincronización está en pausa. + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index f35f41e29..1adc9833f 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El archivo de destino tiene un tamaño o fecha de modificación inesperado @@ -81,6 +81,24 @@ EtiquetaDeTexto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancelar @@ -136,188 +154,204 @@ Conectado con <server> como <user> - + No account configured. No hay cuenta configurada. - + Add new - + Remove Borrar - + Account Cuenta - + Choose what to sync - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Falló la creacion de la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No pudó ser creada la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Querés interrumpirla? - + %1 in use - + %1 as <i>%2</i> %1 de <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1 - + Server %1 is temporarily unavailable. El servidor %1 esta temporalmente sin conexión - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Registrado desde %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Sin conexión a %1 desde %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Confirmar la eliminación de la cuenta - + <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> - + Remove connection Eliminar conexión - + + Open folder Abrir carpeta - - + + Log out Cerrar la sesión - + Resume sync Reanudar sincronización - + Pause sync Pausar sincronización - + <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> <p>Realmente quieres detener la sincronización de la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> eliminara ningun archivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible acerca del uso del almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Desautentificado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servicio no disponible - + + Maintenance mode + + + + Network error Error de red - + Configuration error Error de configuración - + + Asking Credentials + + + + Unknown account state Estado de la cuenta desconocido @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol Protocolo de Sincronización - - List of ignored or erroneous files - - - - - Copy - Copiar - - - - Copy the activity list to the clipboard. - Copiar la lista de actividades al portapapeles. - - - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Copiado al portapapeles @@ -448,47 +477,47 @@ EtiquetaDeTexto - + Server Activities - + Copy Copiar - + Copy the activity list to the clipboard. Copiar la lista de actividades al portapapeles. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured No hay una cuenta ownCloud configurada. - + The configured server for this client is too old La configuración del servidor al cliente es obsoleta - + Please update to the latest server and restart the client. Por favor actualice a la última versión del servidor y reinicie el cliente. - + Authentication error: Either username or password are wrong. Error de autentificación: el usuario o contraseña es incorrecta. - + timeout agotado - + The provided credentials are not correct Las credenciales otorgadas no son correctas - - OCC::DeleteJob - - - Connection timed out - Tiempo de conexión agotado - - OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. El directorio local %1 no existe. - + %1 should be a folder but is not. %1 debé ser una carpeta pero no lo es. - + %1 is not readable. No se puede leer %1. - + %1 has been removed. %1 names a file. %1 ha sido eliminado. - + %1 has been downloaded. %1 names a file. %1 ha sido descargado. - + %1 has been updated. %1 names a file. %1 ha sido actualizado - + %1 has been renamed to %2. %1 and %2 name files. - + %1 has been moved to %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. - + Sync Activity Actividad de Sync - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? ¿Borrar todos los archivos? - + Remove all files Borrar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state No se pudo - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Una antigua sincronización con journaling '%1' fue encontrada, pero no se pudo eliminar. Por favor, asegurate que ninguna aplicación la está utilizando. - + (backup) - + (backup %1) - + Undefined State. Estado no definido. - + Waiting to start syncing. - + Preparing for sync. Preparando la sincronización. - + Sync is running. Sincronización en funcionamiento. - + Last Sync was successful. La última sincronización fue exitosa. - + Last Sync was successful, but with warnings on individual files. El último Sync fue exitoso, pero hubo advertencias en archivos individuales. - + Setup Error. Error de configuración. - + User Abort. Interrumpir. - + Sync is paused. La sincronización está en pausa. - + %1 (Sync is paused) %1 (Sincronización en pausa) - + No valid folder selected! - + The selected path is not a folder! - + You have no permission to write to the selected folder! ¡No tenés permisos para escribir el directorio seleccionado! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File Archivo @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out Desautentificado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Cargado %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 Archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... - + Preparing to sync... Preparando para sincronizar... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Clic para seleccionar un directorio local a sincornizar - + Enter the path to the local folder. Ingrese el path al directorio local. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. El directorio fue creado con éxito en %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. Fallo al crear el directorio en %1. Por favor chequee manualmente. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Seleccioná acá para sincronizar la cuenta completa - + This folder is already being synced. Este folder ya está siendo sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, el cual es el directorio de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + Server returned wrong content-range - + Connection Timeout @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced Avanzado - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Edit &Ignored Files - + S&how crash reporter - - + + About Acerca de - + Updates Actualizaciones - + &Restart && Update @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Ingresar contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Esta entrada es provista por el sistema en '%1' y no puede ser modificada en esta vista. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Contenido del log - + &Search: - + &Find &Encontrar - + + &Capture debug messages + + + + Clear Borrar - + Clear the log display. Limpiar la pantalla de registros. - + S&ave G&uardar - + Save the log file to a file on disk for debugging. Guardar el log en un archivo en disco para depuración. - + Save log file Guardar archivo de log - + Error Error - + Could not write to log file %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El archivo '%1'<br/>no puede ser abierto para escritura.<br/><br/>¡El archivo de log <b>no</b> puede ser guardado!</nobr> - - OCC::MoveJob - - - Connection timed out - Tiempo de conexión agotado - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Limitar automáticamente - + Hostname of proxy server Nombre del host para servidor proxy - + Username for proxy server Nombre de usuario para el servidor proxy - + Password for proxy server Contraseña para el servidor proxy - + HTTP(S) proxy Proxy HTTP(S) - + SOCKS5 proxy Proxy SOCKS5 @@ -1582,78 +1675,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. @@ -1666,43 +1792,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Conectar a %1 - + Setup local folder options Configurar opciones de directorio local - + Connect... Conectar... - + %1 folder '%2' is synced to local folder '%3' El directorio %1 '%2' está sincronizado con el directorio local '%3' - + Sync the folder '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Directorio local de sincronización - - + + (%1) @@ -1735,7 +1861,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1743,46 +1869,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 Conectar a %1 - + Enter user credentials Ingresá las credenciales de usuario + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Conectar a %1 - + Setup %1 server Configurando servidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. - + This url is secure. You can use it. Esta URL es segura. La podés usar. - + &Next > @@ -1790,22 +1929,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado a %1: versión de %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falló al conectarse a %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo excedido mientras se intentaba conectar a %1 desde %2. - + Trying to connect to %1 at %2... Intentando conectar a %1 en %2... @@ -1825,109 +1964,109 @@ It is not advisable to use it. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> El directorio de sincronización local %1 ya existe, configurándolo para la sincronización.<br/><br/> - + Creating local sync folder %1... - + ok aceptar - + failed. Error. - + Could not create local folder %1 No fue posible crear el directorio local %1 - + No remote folder specified! ¡No se ha especificado un directorio remoto! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 Creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. El directorio remoto %1 fue creado con éxito. - + The remote folder %1 already exists. Connecting it for syncing. El directorio remoto %1 ya existe. Estableciendo conexión para sincronizar. - + The folder creation resulted in HTTP error code %1 La creación del directorio resultó en un error HTTP con código de error %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto, probablemente porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Se prtodujo un error <tt>%2</tt> al crear el directorio remoto %1. - + A sync connection from %1 to remote directory %2 was set up. Fue creada una conexión de sincronización desde %1 al directorio remoto %2. - + Successfully connected to %1! Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No fue posible establecer la conexión a %1. Por favor, intentalo nuevamente. - + Folder rename failed Error Al Renombrar Directorio - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Directorio local %1 creado</b></font> @@ -1935,12 +2074,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 Asistente de Conexión - + Skip folders configuration @@ -1948,33 +2087,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! ¡Todo configurado! - + Open Local Folder Abrir directorio local - + Open %1 in Browser - - OCC::PUTFileJob - - - Connection Timeout - - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1982,7 +2113,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1990,47 +2121,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server - + The file could not be downloaded completely. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database @@ -2038,17 +2169,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2056,22 +2182,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2079,17 +2205,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2097,13 +2223,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2111,12 +2237,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2124,12 +2250,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database @@ -2137,28 +2263,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. - + This folder must not be renamed. Please name it back to Shared. - + The file was renamed but is part of a read only share. The original file was restored. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database @@ -2166,27 +2292,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2194,32 +2325,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2227,32 +2358,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2270,42 +2401,42 @@ It is not advisable to use it. EtiquetaDeTexto - + Time Hora - + File Archivo - + Folder Carpeta - + Action Acción - + Size Tamaño - + Local sync protocol - + Copy Copiar - + Copy the activity list to the clipboard. Copiar la lista de actividades al portapapeles. @@ -2346,7 +2477,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Elige @@ -2354,33 +2485,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Cargando... - + Deselect remote folders you do not wish to synchronize. - + Name Nombre - + Size Tamaño - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2393,22 +2524,22 @@ It is not advisable to use it. Configuración - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2416,27 +2547,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2464,35 +2595,45 @@ It is not advisable to use it. - + %1 Sharing - + %1 %1 - + Folder: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2502,92 +2643,126 @@ It is not advisable to use it. - - Share link - Compartir vínculo - - - + TextLabel EtiquetaDeTexto - + Set &password - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date - + Set password - - &Mail link + + Link properties: - Copy &link + Show file listing - + Allow editing - + Anyone with the link has access to the file/folder - + + P&assword protect - + Password Protected - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password - + Please Set Password - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - - OCC::ShareUserGroupWidget @@ -2597,68 +2772,98 @@ It is not advisable to use it. - + Share with users or groups ... Compartir con usuario o grupo ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulario + - + TextLabel - EtiquetaDeTexto + - + can edit - podés editar + - + can share - puede compartir + - + ... - + create - crear + - + change - + delete - borrar + OCC::ShibbolethCredentials - + Login Error - + You must sign in as user %1 @@ -2666,22 +2871,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticarse - + SSL Chipher Debug View - + Reauthentication required - + Your session has expired. You need to re-login to continue to use the client. @@ -2689,26 +2894,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> - + Common Name (CN): - + Subject Alternative Names: @@ -2793,7 +3018,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. @@ -2809,7 +3034,7 @@ It is not advisable to use it. - + This connection is NOT secure as it is not encrypted. @@ -2828,67 +3053,67 @@ It is not advisable to use it. Confiar en este certificado de todas maneras - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 con certificado %1 - + &lt;not specified&gt; &lt;no especificado&gt; - - + + Organization: %1 Empresa: %1 - - + + Unit: %1 Unidad: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Huella (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Huella (SHA1): <tt>%1</tt> - + Effective Date: %1 Desde: %1 - + Expiration Date: %1 - + Issuer: %1 Generado por: %1 @@ -2896,285 +3121,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Éxito. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>No fue posible cargar el plugin de %1 para csync.<br/>Por favor, verificá la instalación</p> - + CSync got an error while processing internal trees. CSync tuvo un error mientras procesaba los árboles de datos internos. - - CSync failed to reserve memory. - CSync falló al reservar memoria. - - - + CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. Falló el proceso de actualización de CSync. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la busqueda del proxy. - + CSync failed to authenticate at the %1 server. CSync: fallo al autenticarse en el servidor %1. - + CSync failed to connect to the network. CSync: fallo al conectarse a la red - + A network connection timeout happened. - + A HTTP transmission error happened. Ha ocurrido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: No hay más espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - - The item is not synced because of previous errors: %1 - - - - + Symbolic links are not supported in syncing. Los vínculos simbólicos no está soportados al sincronizar. - + File is listed on the ignore list. El archivo está en la lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Imposible inicializar un diario de sincronización. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3190,7 +3430,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3198,17 +3438,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3216,17 +3456,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3234,207 +3474,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Por favor, inicie sesión - + Folder %1: %2 Directorio %1: %2 - + No sync folders configured. Los directorios de sincronización no están configurados. - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out Cerrar la sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' - + Managed Folders: Directorios administrados: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador... - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Cancelar %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No se sincronizaron elementos recientemente - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date actualizado @@ -3442,7 +3682,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3545,78 +3785,42 @@ It is not advisable to use it. &Contraseña + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulario - - Server &address: - Servidor &dirección: - - - - - TextLabel EtiquetaDeTexto - - - Use &secure connection - Usar conexión &segura - - - - CheckBox - CasillaDeVerificación - - - - &Username: - &NombreDeUsuario: - - - - Enter the ownCloud username. - Escribí el nombre de usuario ownCloud. - - - - &Password: - &Contraseña - - - - Enter the ownCloud password. - Escribí la contraseña de ownCloud. - - - - Do not allow the local storage of the password. - No permitir el almacenamiento local de la contraseña - - - - &Do not store password on local machine - &No guarde la contraseña en el equipo local - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Escribí la URL del sistema ownCloud al que te querés conectar (sin http ni https) - Ser&ver Address @@ -3661,7 +3865,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3669,42 +3873,42 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3713,57 +3917,57 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3784,102 +3988,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Descargado - + Uploaded Subido - + Server version downloaded, copied changed local file into conflict file - + Deleted Borrado - + Moved to %1 Movido a %1 - + Ignored Ignorado - + Filesystem access error Error de acceso al sistema de archivos - + Error Error - + Updated local metadata - - + + Unknown Desconocido - + downloading descargando - + uploading subiendo - + deleting Eliminado - + moving Movido - + ignoring ignorado + - error error - + updating local metadata @@ -3887,54 +4086,77 @@ It is not advisable to use it. theme - + Status undefined Estado indefinido - + Waiting to start sync Esperando para comenzar sincronización - + Sync is running Sincronización en ejecución - + Sync Success Sincronización Exitosa - + Sync Success, some files were ignored. Syncronización exitosa, algunos archivos fueron ignorados. - + Sync Error Error de Sync - + Setup Error Error de instalación - + Preparing to sync Preparando para la sincronizacipon - + Aborting... Abortando... - + Sync is paused Sincronización Pausada + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_et.ts b/translations/client_et.ts index 571e86992..1698e8054 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Sihtkausta fail on ootamatu suuruse või muutmise ajaga @@ -81,6 +81,24 @@ Tekstisilt + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Loobu @@ -136,188 +154,204 @@ Ühendatud <server> kasutajana <user> - + No account configured. Ühtegi kontot pole seadistatud - + Add new Lisa uus - + Remove Eemalda - + Account Konto - + Choose what to sync Vali, mida sünkroniseerida - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Kausta loomine ebaõnnestus - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Sünkroniseerimine on käimas - + The syncing operation is running.<br/>Do you want to terminate it? Sünkroniseerimine on käimas.<br/>Kas sa soovid seda lõpetada? - + %1 in use %1 kasutusel - + %1 as <i>%2</i> %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Ühendatud %1 - + Server %1 is temporarily unavailable. Server %1 pole ajutiselt saadaval. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. - + Log in Logi sisse - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Kinnita konto eemaldamine - + <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> - + Remove connection Eemalda ühendus - + + Open folder Ava kaust - - + + Log out Logi välja - + Resume sync Taasta sünroonimist - + Pause sync Peata sünkroonimine - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. Hetkel pole mahu kasutuse info saadaval. - + No %1 connection configured. Ühtegi %1 ühendust pole seadistatud. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Välja logitud - + Disconnected Lahti ühendatud - + Connected Ühendatud - + Service unavailable Teenus pole saadaval - + + Maintenance mode + + + + Network error Võrgu viga - + Configuration error Seadistamise tõrge - + + Asking Credentials + + + + Unknown account state Tundmatu konto olek @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveri aktiivsus - + Sync Protocol Sünkroniseerimisprotokoll - - List of ignored or erroneous files - - - - - Copy - Kopeeri - - - - Copy the activity list to the clipboard. - Kopeeri tegevuste nimistu puhvrisse. - - - + Not Synced Pole sünkroonitud - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopeeritud lõikepuhvrisse @@ -448,47 +477,47 @@ Tekstisilt - + Server Activities Serveri tegevused - + Copy Kopeeri - + Copy the activity list to the clipboard. Kopeeri tegevuste nimistu puhvrisse. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Ühtegi ownCloud kontot pole seadistatud - + The configured server for this client is too old Seadistatud server on selle kliendi jaoks liiga vana - + Please update to the latest server and restart the client. Palun uuenda server viimasele versioonile ning taaskäivita klient. - + Authentication error: Either username or password are wrong. Autentimise tõrge: Kasutajanimi või parool on vale - + timeout aegumine - + The provided credentials are not correct Sisestatud kasutajatunnused pole õiged - - OCC::DeleteJob - - - Connection timed out - Ühendus aegus - - OCC::DiscoveryMainThread - + Aborted by the user Kasutaja poolt tühistatud @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Kohalikku kausta %1 pole olemas. - + %1 should be a folder but is not. - + %1 is not readable. %1 pole loetav. - + %1 has been removed. %1 names a file. %1 on eemaldatud. - + %1 has been downloaded. %1 names a file. %1 on alla laaditud. - + %1 has been updated. %1 names a file. %1 on uuendatud. - + %1 has been renamed to %2. %1 and %2 name files. %1 on ümber nimetatud %2. - + %1 has been moved to %2. %1 on tõstetud %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 sünkroniseerimine ebaõnnestus tõrke tõttu. Lisainfot vaata logist. - + Sync Activity Sünkroniseerimise tegevus - + Could not read system exclude file Süsteemi väljajätmiste faili lugemine ebaõnnestus - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Kustutada kõik failid? - + Remove all files Kustutada kõik failid - + Keep files Säilita failid - + This sync would reset the files to an earlier 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? - + Backup detected Leiti varukoopia - + Normal Synchronisation Tavaline sünkroonimine - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Ei suutnud tühistada kataloogi staatust - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Leiti vana sünkroniseeringu zurnaal '%1', kuid selle eemaldamine ebaõnnenstus. Palun veendu, et seda kasutaks ükski programm. - + (backup) (varukoopia) - + (backup %1) (varukoopia %1) - + Undefined State. Määramata staatus. - + Waiting to start syncing. Oodatakse sünkroonimise alustamist. - + Preparing for sync. Valmistun sünkroniseerima. - + Sync is running. Sünkroniseerimine on käimas. - + Last Sync was successful. Viimane sünkroniseerimine oli edukas. - + Last Sync was successful, but with warnings on individual files. Viimane sünkroniseering oli edukas, kuid mõned failid põhjustasid tõrkeid. - + Setup Error. Seadistamise viga. - + User Abort. Kasutaja tühistamine. - + Sync is paused. Sünkroniseerimine on peatatud. - + %1 (Sync is paused) %1 (Sünkroniseerimine on peatatud) - + No valid folder selected! Sobilikku kausta pole valitud! - + The selected path is not a folder! Valitud asukoht pole kaust! - + You have no permission to write to the selected folder! Sul puuduvad õigused valitud kataloogi kirjutamiseks! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File Fail @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Kausta lisamiseks pead sa olema ühendatud - + Click this button to add a folder to synchronize. Sünkroniseeritava kausta lisamiseks kliki sellele nupule. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Välja logitud - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sünkroniseerimine %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) allalaadimine %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) üleslaadimine %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 / %2, fail %3 / %4 - + file %1 of %2 fail %1 / %2-st - + Waiting... Ootamine... - + Waiting for %n other folder(s)... - + Preparing to sync... Sünkroniseerimiseks valmistumine... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Klõpsa valimaks kohalikku sünkroniseeritavat kataloogi. - + Enter the path to the local folder. Sisesta otsingutee kohaliku kataloogini. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. %1 - kaust on loodud. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. Kausta loomine ebaõnnestus - %1. Palun kontrolli käsitsi. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Vali see sünkroniseering tervele kontole - + This folder is already being synced. Seda kataloogi juba sünkroniseeritakse. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sa juba sünkroniseerid <i>%1</i>, mis on <i>%2</i> ülemkataloog. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Sa juba sünkroniseerid kõiki oma faile. Teise kataloogi sünkroniseering <b>ei ole</b> toetatud. Kui soovid sünkroniseerida mitut kataloogi, palun eemalda hektel seadistatud sünkroniseeritav juurkataloog. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ühtegi E-Silti ei saabunud serverist, kontrolli puhverserverit/lüüsi. - + We received a different E-Tag for resuming. Retrying next time. Saime jätkamiseks erineva E-Sildi. Proovin järgmine kord uuesti. - + Server returned wrong content-range Server tagastas vale vahemiku - + Connection Timeout Ühenduse aegumine @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Süsteemisalve jaoks - + Advanced Täpsem - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Kasuta ühevärvilisi ikoone - + Edit &Ignored Files Muuda &ignoreeritud faile - + S&how crash reporter &Näita kokkujooksmise teavitajat - - + + About Info - + Updates Uuendused - + &Restart && Update &Taaskäivita && Uuenda @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Sisesta parool - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Selle kirje on pakkunud süsteem '%1' ning seda ei saa antud vaates muuta. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Logi väljund - + &Search: &Otsi; - + &Find Leia: - + + &Capture debug messages + + + + Clear Tühjenda - + Clear the log display. Tühjenda näidatav logi. - + S&ave S&alvesta - + Save the log file to a file on disk for debugging. Salvesta logi fail kettale täpsemaks uurimiseks. - + Save log file Salvesta logifail - + Error Viga - + Could not write to log file %1 Logifaili %1 kirjutamine ebaõnnestus @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Viga - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Faili '%1'<br/>ei saa kirjutamiseks avada.<br/><br/>Logi väljundit <b>ei saa</b> salvestada!</nobr> - - OCC::MoveJob - - - Connection timed out - Ühendus aegus - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Piira automaatselt - + Hostname of proxy server Proksiserveri hostinimi - + Username for proxy server Proksiserveri kasutajanimi - + Password for proxy server Proksiserveri parool - + HTTP(S) proxy HTTP(S) proksi - + SOCKS5 proxy SOCKS5 proksi @@ -1582,78 +1675,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Uus %1 uuendus on valmis - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... Laadin alla versiooni %1. Palun oota... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Ei suutnud uuendust alla laadida. Palun klõpsa käsitsi uuenduse alla laadimiseks <a href='%1'>siia</a> %2 - + Could not check for new updates. Uuenduste kontrollimine ebaõnnestus. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Kontrollin uuendusserverit... - + Update status is unknown: Did not check for new updates. Uuenduse staatus on teadmata: Uuendusi ei kontrollitud. - + No updates available. Your installation is at the latest version. Uuendusi pole saadaval. Kasutad kõige viimast versiooni. @@ -1666,43 +1792,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Ühendu %1 - + Setup local folder options Seadista kohaliku kataloogi valikud - + Connect... Ühenda... - + %1 folder '%2' is synced to local folder '%3' %1 kataloog '%2' on sünkroniseeritud kohalikku kataloogi '%3' - + Sync the folder '%1' Sünkrooni kaust '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Kohalik Sync Kataloog - - + + (%1) (%1) @@ -1735,7 +1861,7 @@ for additional privileges during the process. Seadista kliendipoolne TLS sertifikaat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1743,47 +1869,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 Ühendu %1 - + Enter user credentials Sisesta kasutajaandmed + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Ühendu %1 - + Setup %1 server Seadista %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. See url EI OLE turvaline, kuna see pole krüpteeritud. Selle kasutamine pole soovitatav. - + This url is secure. You can use it. See aadress on turvaline. Võid seda kasutada. - + &Next > &Edasi > @@ -1791,22 +1930,22 @@ Selle kasutamine pole soovitatav. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Edukalt ühendatud %1: %2 versioon %3 (4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ühendumine ebaõnnestus %1 %2-st:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Püüan ühenduda %1 kohast %2 @@ -1826,109 +1965,109 @@ Selle kasutamine pole soovitatav. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Kohalik kataloog %1 on juba olemas. Valmistan selle ette sünkroniseerimiseks. - + Creating local sync folder %1... Kohaliku kausta %1 sünkroonimise loomine ... - + ok ok - + failed. ebaõnnestus. - + Could not create local folder %1 Ei suuda tekitada kohalikku kataloogi %1 - + No remote folder specified! Ühtegi võrgukataloogi pole määratletud! - + Error: %1 Viga: %1 - + creating folder on ownCloud: %1 loon uue kataloogi ownCloudi: %1 - + Remote folder %1 created successfully. Eemalolev kaust %1 on loodud. - + The remote folder %1 already exists. Connecting it for syncing. Serveris on kataloog %1 juba olemas. Ühendan selle sünkroniseerimiseks. - + The folder creation resulted in HTTP error code %1 Kausta tekitamine lõppes HTTP veakoodiga %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Kataloogi loomine serverisse ebaõnnestus, kuna kasutajatõendid on valed!<br/>Palun kontrolli oma kasutajatunnust ja parooli.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Serveris oleva kataloogi tekitamine ebaõnnestus tõenäoliselt valede kasutajatunnuste tõttu.</font><br/>Palun mine tagasi ning kontrolli kasutajatunnust ning parooli.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Kataloogi %1 tekitamine serverisse ebaõnnestus veaga <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. Loodi sünkroniseerimisühendus kataloogist %1 serveri kataloogi %2 - + Successfully connected to %1! Edukalt ühendatud %1! - + Connection to %1 could not be established. Please check again. Ühenduse loomine %1 ebaõnnestus. Palun kontrolli uuesti. - + Folder rename failed Kataloogi ümbernimetamine ebaõnnestus - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ei suuda eemaldada ning varundada kataloogi kuna kataloog või selles asuv fail on avatud mõne teise programmi poolt. Palun sulge kataloog või fail ning proovi uuesti või katkesta paigaldus. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Kohalik kataloog %1 edukalt loodud!</b></font> @@ -1936,12 +2075,12 @@ Selle kasutamine pole soovitatav. OCC::OwncloudWizard - + %1 Connection Wizard %1 seadistamise juhendaja - + Skip folders configuration Jäta kaustade seadistamine vahele @@ -1949,33 +2088,25 @@ Selle kasutamine pole soovitatav. OCC::OwncloudWizardResultPage - + Everything set up! Kõik on seadistatud! - + Open Local Folder Ava Kohalik Kataloog - + Open %1 in Browser Ava %1 veebilehitsejas - - OCC::PUTFileJob - - - Connection Timeout - Ühenduse aegumine - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1983,7 +2114,7 @@ Selle kasutamine pole soovitatav. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1991,47 +2122,47 @@ Selle kasutamine pole soovitatav. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Faili %1 ei saa alla laadida kuna on konflikt kohaliku faili nimega. - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server Fail on serverist kustutatud - + The file could not be downloaded completely. Faili täielik allalaadimine ebaõnnestus. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! Faili %1 ei saa salvestada kuna on nime konflikt kohaliku failiga! - + File has changed since discovery Faili on pärast avastamist muudetud - + Error writing metadata to the database @@ -2039,17 +2170,12 @@ Selle kasutamine pole soovitatav. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Taastamine ebaõnnestus: %1 - - Continue blacklisting: - Jätka mustas nimekirjas hoidmist: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2057,22 +2183,22 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ei saa kustutada faili %1, viga: %2 - + Attention, possible case sensitivity clash with %1 Tähelepanu, võimalik tõusutundliku nime konflikt %1-ga - + could not create folder %1 kausta %1 loomine ebaõnnestus - + Error writing metadata to the database @@ -2080,17 +2206,17 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalRemove - + Error removing '%1': %2; Viga eemaldamisel '%1': %2; - + Could not remove folder '%1' Kausta '%1' eemaldamine ebaõnnestus - + Could not remove %1 because of a local file name clash Ei saa eemaldada %1 kuna on konflikt kohaliku faili nimega @@ -2098,13 +2224,13 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Faili %1 ei saa ümber nimetada %2-ks, kuna on konflikt kohaliku faili nimega - - + + Error writing metadata to the database @@ -2112,12 +2238,12 @@ Selle kasutamine pole soovitatav. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Fail oli eemaldatud kirjutamisõiguseta kataloogist. See on nüüd taastatud. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Server saatis vale HTTP koodi. Ootuspärane kood oli 204, aga saadeti kood "%1 %2". @@ -2125,12 +2251,12 @@ Selle kasutamine pole soovitatav. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server saatis vale HTTP koodi. Ootuspärane kood oli 201, aga saadeti kood "%1 %2". - + Error writing metadata to the database @@ -2138,28 +2264,28 @@ Selle kasutamine pole soovitatav. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Kausta ei tohi ümber nimetada. Kausta algne nimi taastati. - + This folder must not be renamed. Please name it back to Shared. Kausta nime ei tohi muuta. Palun pane selle nimeks tagasi Shared. - + The file was renamed but is part of a read only share. The original file was restored. Fail oli ümber nimetatud, kuid see on osa kirjutamisõiguseta jagamisest. Algne fail taastati. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server saatis vale HTTP koodi. Ootuspärane kood oli 201, aga saadeti kood "%1 %2". - - + + Error writing metadata to the database @@ -2167,27 +2293,32 @@ Selle kasutamine pole soovitatav. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Fail eemaldatud - + Local file changed during syncing. It will be resumed. Kohalik fail muutus sünkroniseeringu käigus. See taastakse. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2195,32 +2326,32 @@ Selle kasutamine pole soovitatav. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. Kohalik fail on eemaldatud sünkroniseeringu käigus. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2228,32 +2359,32 @@ Selle kasutamine pole soovitatav. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Faili on lokaalselt muudetud, kuid see on osa kirjutamisõiguseta jagamisest. See on taastatud ning sinu muudatus on konfliktses failis. - + Poll URL missing Küsitluse URL puudub - + The local file was removed during sync. Kohalik fail on eemaldatud sünkroniseeringu käigus. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2271,42 +2402,42 @@ Selle kasutamine pole soovitatav. Tekstisilt - + Time Aeg - + File Fail - + Folder Kaust - + Action Tegevus - + Size Suurus - + Local sync protocol - + Copy Kopeeri - + Copy the activity list to the clipboard. Kopeeri tegevuste nimistu puhvrisse. @@ -2347,7 +2478,7 @@ Selle kasutamine pole soovitatav. OCC::SelectiveSyncDialog - + Choose What to Sync Vali, mida sünkroniseerida @@ -2355,33 +2486,33 @@ Selle kasutamine pole soovitatav. OCC::SelectiveSyncWidget - + Loading ... Laadimine ... - + Deselect remote folders you do not wish to synchronize. - + Name Nimi - + Size Suurus - - + + No subfolders currently on the server. Serveris pole praegu alamkaustasid. - + An error occurred while loading the list of sub folders. @@ -2394,22 +2525,22 @@ Selle kasutamine pole soovitatav. Seaded - + Activity Toimingud - + General Üldine - + Network Võrk - + Account Konto @@ -2417,27 +2548,27 @@ Selle kasutamine pole soovitatav. OCC::SettingsDialogMac - + %1 %1 - + Activity Toimingud - + General Üldine - + Network Võrk - + Account Konto @@ -2465,35 +2596,45 @@ Selle kasutamine pole soovitatav. ownCloudi kaust: - + %1 Sharing %1 jagamine - + %1 %1 - + Folder: %2 Kaust: %2 - + The server does not allow sharing See server ei luba jagamist - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2503,92 +2644,126 @@ Selle kasutamine pole soovitatav. Jaga faili NewDocument.odt - - Share link - Jaga linki - - - + TextLabel Tekstisilt - + Set &password Määra &parool - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Määra &aegumise kuupäev - + Set password Määra parool - - &Mail link + + Link properties: - Copy &link - Kopeeri &link + Show file listing + - + Allow editing Luba muutmine - + Anyone with the link has access to the file/folder - + + P&assword protect P&arooliga kaitstud - + Password Protected Parooliga kaitstud - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Avalik j&agamine nõuab parooli - + Please Set Password Palun määra parool - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &Jaga linki - OCC::ShareUserGroupWidget @@ -2598,68 +2773,98 @@ Selle kasutamine pole soovitatav. Jaga faili NewDocument.odt - + Share with users or groups ... Jaga kasutajate või gruppidega ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Vorm + - + TextLabel - Tekstisilt + - + can edit - saab muuta + - + can share - saab jagada + - + ... - ... + - + create - loo + - + change - muuda + - + delete - kustuta + OCC::ShibbolethCredentials - + Login Error Sisselogimise viga - + You must sign in as user %1 Pead sisse logima kui kasutaja %1 @@ -2667,22 +2872,22 @@ Selle kasutamine pole soovitatav. OCC::ShibbolethWebView - + %1 - Authenticate %1 - autentimine - + SSL Chipher Debug View - + Reauthentication required Vajalik on uuesti autentimine - + Your session has expired. You need to re-login to continue to use the client. Sinu sessioon on aegunud. Sa pead kliendi kasutamiseks uuesti sisse logima. @@ -2690,26 +2895,46 @@ Selle kasutamine pole soovitatav. OCC::SocketApi - + Share with %1 parameter is ownCloud Jagatud kasutajaga %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifikaadi detailid</h3> - + Common Name (CN): Üldine nimi (CN): - + Subject Alternative Names: Subjekti Alternatiivsed Nimed: @@ -2794,7 +3019,7 @@ Selle kasutamine pole soovitatav. %1 - + This connection is encrypted using %1 bit %2. Ühendus on krüpteeritud kasutades %1 bitt %2 @@ -2811,7 +3036,7 @@ Selle kasutamine pole soovitatav. Seritifikaadi informatsioon: - + This connection is NOT secure as it is not encrypted. See url EI OLE turvaline, kuna see pole krüpteeritud. @@ -2831,67 +3056,67 @@ Selle kasutamine pole soovitatav. Usalda siiski seda sertifikaati - + Untrusted Certificate Tundmatu sertifikaat - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 sertifikaadiga %1 - + &lt;not specified&gt; &lt;pole määratud&gt; - - + + Organization: %1 Organisatsioon: %1 - - + + Unit: %1 Ühik: %1 - - + + Country: %1 Riik: %1 - + Fingerprint (MD5): <tt>%1</tt> Sõrmejälg (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Sõrmejälg (SHA1): <tt>%1</tt> - + Effective Date: %1 Efektiivne kuupäev: %1 - + Expiration Date: %1 Aegumise kuupäev: %1 - + Issuer: %1 Esitaja: %1 @@ -2899,285 +3124,300 @@ Selle kasutamine pole soovitatav. OCC::SyncEngine - + Success. Korras. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Ei suuda laadida csync lisa %1.<br/>Palun kontrolli paigaldust!</p> - + CSync got an error while processing internal trees. CSync sai vea sisemiste andmestruktuuride töötlemisel. - - CSync failed to reserve memory. - CSync ei suutnud mälu reserveerida. - - - + CSync fatal parameter error. CSync parameetri saatuslik viga. - + CSync processing step update failed. CSync uuendusprotsess ebaõnnestus. - + CSync processing step reconcile failed. CSync tasakaalustuse protsess ebaõnnestus. - + CSync could not authenticate at the proxy. CSync ei suutnud puhverserveris autoriseerida. - + CSync failed to lookup proxy or server. Csync ei suuda leida puhverserverit. - + CSync failed to authenticate at the %1 server. CSync autoriseering serveris %1 ebaõnnestus. - + CSync failed to connect to the network. CSync võrguga ühendumine ebaõnnestus. - + A network connection timeout happened. Toimus võrgukatkestus. - + A HTTP transmission error happened. HTTP ülekande viga. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Serveris %1 on ruum otsas. - + CSync unspecified error. CSync tuvastamatu viga. - + Aborted by the user Kasutaja poolt tühistatud - + CSync failed to access CSyncile ligipääs ebaõnnestus - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Teenus pole ajutiselt saadaval - + Access is forbidden Ligipääs on keelatud - + An internal error number %1 occurred. - - The item is not synced because of previous errors: %1 - Üksust ei sünkroniseeritud eelnenud vigade tõttu: %1 - - - + Symbolic links are not supported in syncing. Sümboolsed lingid ei ole sünkroniseerimisel toetatud. - + File is listed on the ignore list. Fail on märgitud ignoreeritavate nimistus. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Faili nimi on liiga pikk. - + Stat failed. - + Filename encoding is not valid Failinime kodeering pole kehtiv - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Ei suuda lähtestada sünkroniseeringu zurnaali. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas @@ -3193,7 +3433,7 @@ Selle kasutamine pole soovitatav. OCC::Systray - + %1: %2 %1: %2 @@ -3201,17 +3441,17 @@ Selle kasutamine pole soovitatav. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3219,17 +3459,17 @@ Selle kasutamine pole soovitatav. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3237,207 +3477,207 @@ Selle kasutamine pole soovitatav. OCC::ownCloudGui - + Please sign in Palun logi sisse - + Folder %1: %2 Kaust %1: %2 - + No sync folders configured. Sünkroniseeritavaid kaustasid pole seadistatud. - + There are no sync folders configured. Sünkroniseeritavaid kaustasid pole määratud. - + Open in browser Ava veebilehitsejas - - - + + + Log in... Logi sisse... - - - + + + Log out Logi välja - + Recent Changes Hiljutised muudatused - + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + Managed Folders: Hallatavad kaustad: - + Open folder '%1' Ava kaust '%1' - + Open %1 in browser Ava %1 veebilehitsejas - + Unknown status Tundmatu staatus - + Settings... Seaded... - + Details... Üksikasjad... - + Help Abiinfo - + Quit %1 Lõpeta %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Kontodest lahtiühendatud - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Logi välja kõikidelt kontodelt - + Log in to all accounts... Logi sisse kõikidesse kontodesse... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Jookse kokku - + No items synced recently Ühtegi üksust pole hiljuti sünkroniseeritud - + Syncing %1 of %2 (%3 left) Sünkroniseerin %1 %2-st (%3 veel) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sünkroniseerin %1 (%2 veel) - + Syncing %1 Sünkroniseerimine %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajakohane @@ -3445,7 +3685,7 @@ Selle kasutamine pole soovitatav. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3548,78 +3788,42 @@ Selle kasutamine pole soovitatav. &Parool + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Vorm - - Server &address: - Serveri &aadress: - - - - - TextLabel Tekstisilt - - - Use &secure connection - Ka&suta turvalist ühendust - - - - CheckBox - Märkekast - - - - &Username: - Kas&utajanimi: - - - - Enter the ownCloud username. - Sisesta ownCloudi kasutajanimi. - - - - &Password: - &Parool: - - - - Enter the ownCloud password. - Sisesta ownCloudi parool. - - - - Do not allow the local storage of the password. - Ära luba parooli salvestamist kohalikul kettal. - - - - &Do not store password on local machine - &Ära talleta parooli siin arvutis. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Sisesta ühendatava ownCloud-i URL (ilma http või https-ita). - Ser&ver Address @@ -3663,7 +3867,7 @@ Selle kasutamine pole soovitatav. QApplication - + QT_LAYOUT_DIRECTION @@ -3671,42 +3875,42 @@ Selle kasutamine pole soovitatav. QObject - + in the future tulevikus - + %n day(s) ago - + %n hour(s) ago - + now kohe - + Less than a minute ago Vähem kui minut tagasi - + %n minute(s) ago - + Some time ago Mõni aeg tagasi - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3715,57 +3919,57 @@ Selle kasutamine pole soovitatav. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3786,102 +3990,97 @@ Selle kasutamine pole soovitatav. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Allalaetud - + Uploaded Üles laetud - + Server version downloaded, copied changed local file into conflict file - + Deleted Kustutatud - + Moved to %1 Tõstetud %1 - + Ignored Eiratud - + Filesystem access error Failisüsteemi ligipääsu viga - + Error Viga - + Updated local metadata - - + + Unknown Tundmatu - + downloading allalaadimine - + uploading üleslaadimine - + deleting kustutan - + moving liigutan - + ignoring eiran + - error viga - + updating local metadata @@ -3889,54 +4088,77 @@ Selle kasutamine pole soovitatav. theme - + Status undefined Staatus on määramata - + Waiting to start sync Oodatakse sünkroniseerimise alustamist - + Sync is running Sünkroniseerimine on käimas - + Sync Success Sünkroniseerimine on tehtud - + Sync Success, some files were ignored. Sünkroniseering õnnestus, mõnda faili ignoreeriti. - + Sync Error Sünkroniseerimise viga - + Setup Error Viga sünkroniseerimisel - + Preparing to sync Sünkroniseerimiseks valmistumine - + Aborting... Tühistamine ... - + Sync is paused Sünkroniseerimine on peatatud + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_eu.ts b/translations/client_eu.ts index fae7ce9db..299aaa2cb 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Helburuko fitxategiak espero ez den tamaina edo aldaketa data du @@ -68,12 +68,12 @@ Lorem ipsum dolor sit amet - + Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporm - + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporm @@ -81,6 +81,24 @@ TestuEtiketa + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -106,17 +124,17 @@ Synchronize all - + Sinkronizatu dena Synchronize none - + Ez sinkronizatu ezer Apply manual changes - + Aplikatu eskuzko aldaketak @@ -125,8 +143,8 @@ - - + + Cancel Ezeztatu @@ -136,188 +154,204 @@ <user> bezala <server>-n konektatuta - + No account configured. Ez da konturik konfiguratu. - + Add new Gehitu berria - + Remove Ezabatu - + Account Kontua - + Choose what to sync Hautatu zer sinkronizatu - + Force sync now - + Behartu orain sinkronizatzen - + Restart sync - + Berrabiarazi sinkronizazioa - + Remove folder sync connection Ezabatu karpeta honen konexioa - + Folder creation failed Karpeta sortzeak huts egin du - + <p>Could not create local folder <i>%1</i>. <p>Ezin izan da <i>%1</i> bertako karpeta sortu. - + Confirm Folder Sync Connection Removal Baieztatu Karpetaren Konexioaren Ezabatzea - + Remove Folder Sync Connection Ezabatu Karpeta Honen Konexioa - + Sync Running Sinkronizazioa martxan da - + The syncing operation is running.<br/>Do you want to terminate it? Sinkronizazio martxan da.<br/>Bukatu nahi al duzu? - + %1 in use - + %1 erabiltzen - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Zerbitzariaren bertsioa %1 zaharra eta euskarririk gabekoa da! Zure ardurapean aritu. - + Connected to %1. %1ra konektatuta. - + Server %1 is temporarily unavailable. %1 zerbitzaria ez dago orain eskuragarri - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. %1etik saioa itxita. - - No connection to %1 at %2. + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + + Connecting to %1... + + + + + No connection to %1 at %2. + Konexiorik ez %1-ekin %2-etan + + + Log in Hasi saioa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Baieztatu Kontuaren Ezabatzea - + <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> - + Remove connection Ezabatu konexioa - + + Open folder Ireki karpeta - - + + Log out Saioa bukatu - + Resume sync Berrekin sinkronizazioa - + Pause sync Gelditu sinkronizazioa - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %2tik %1 erabilita - + Currently there is no storage usage information available. Orain ez dago eskuragarri biltegiratze erabileraren informazioa. - + No %1 connection configured. Ez dago %1 konexiorik konfiguratuta. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Saioa bukatuta - + Disconnected Deskonektatuta - + Connected Konektatuta - + Service unavailable Zerbitzua ez dago eskuragarri - + + Maintenance mode + + + + Network error Sare errorea - + Configuration error Konfigurazio errorea - + + Asking Credentials + + + + Unknown account state Kontuaren egoera ezezaguna @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Zerbitzariaren Jarduera - + Sync Protocol Sinkronizazio protokoloa - - List of ignored or erroneous files - - - - - Copy - Kopiatu - - - - Copy the activity list to the clipboard. - Kopiatu jarduera zerrenda arbelara. - - - + Not Synced Sinkronizatu gabekoak - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Arbelera kopiatua @@ -448,47 +477,47 @@ TestuEtiketa - + Server Activities Zerbitzariaren Jarduerak - + Copy Kopiatu - + Copy the activity list to the clipboard. Kopiatu jarduera zerrenda arbelara. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>%1 kontuak ez ditu jarduerak gaituta. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,19 +563,19 @@ OCC::Application - + Error accessing the configuration file - + Errorea ezarpen fitxategia atzitzean - + There was an error while accessing the configuration file at %1. - + Errore bat gertatu da ezarpen fitxategia atzitzean %1-etan - + Quit ownCloud - + Irten ownCloud-etik @@ -575,56 +604,48 @@ OCC::CleanupPollsJob - + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::ConnectionValidator - + No ownCloud account configured Ez dago ownCloud konturik konfiguratuta - + The configured server for this client is too old Bezero honentzako konfiguratutako zerbitzaria oso zaharra da - + Please update to the latest server and restart the client. Mesedez eguneratu zerbitzarira eta berrabiarazi bezeroa. - + Authentication error: Either username or password are wrong. Autentikazio errorea: Erabiltzaile izena edota pasahitza gaizki daude. - + timeout denbora iraungi da - + The provided credentials are not correct Emandako kredentzialak ez dira zuzenak - - OCC::DeleteJob - - - Connection timed out - Konexioa iraungi da - - OCC::DiscoveryMainThread - + Aborted by the user Erabiltzaileak bertan behera utzita @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Bertako %1 karpeta ez da existitzen. - + %1 should be a folder but is not. %1 karpeta bat izan behar zen baina ez da. - + %1 is not readable. %1 ezin da irakurri. - + %1 has been removed. %1 names a file. %1 ezabatua izan da. - + %1 has been downloaded. %1 names a file. %1 deskargatu da. - + %1 has been updated. %1 names a file. %1 kargatu da. - + %1 has been renamed to %2. %1 and %2 name files. %1 %2-(e)ra berrizendatu da. - + %1 has been moved to %2. %1 %2-(e)ra mugitu da. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 ezin izan da sinkronizatu akats bat dela eta. Ikusi egunerkoa zehaztapen gehiago izateko. - + Sync Activity Sinkronizazio Jarduerak - + Could not read system exclude file Ezin izan da sistemako baztertutakoen fitxategia irakurri - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ezabatu Fitxategi Guztiak? - + Remove all files Ezabatu fitxategi guztiak - + Keep files Mantendu fitxategiak - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Ezin izan da karpetaren egoera berrezarri - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Aurkitu da '%1' sinkronizazio erregistro zaharra, baina ezin da ezabatu. Ziurtatu aplikaziorik ez dela erabiltzen ari. - + (backup) - + (backup %1) - + Undefined State. Definitu gabeko egoera. - + Waiting to start syncing. Itxoiten sinkronizazioa hasteko. - + Preparing for sync. Sinkronizazioa prestatzen. - + Sync is running. Sinkronizazioa martxan da. - + Last Sync was successful. Azkeneko sinkronizazioa ongi burutu zen. - + Last Sync was successful, but with warnings on individual files. Azkenengo sinkronizazioa ongi burutu zen, baina banakako fitxategi batzuetan abisuak egon dira. - + Setup Error. Konfigurazio errorea. - + User Abort. Erabiltzaileak bertan behera utzi. - + Sync is paused. Sinkronizazioa pausatuta dago. - + %1 (Sync is paused) %1 (Sinkronizazioa pausatuta dago) - + No valid folder selected! Ez da karpeta egokirik hautatu! - + The selected path is not a folder! Hautatutako bidea ez da karpeta bat! - + You have no permission to write to the selected folder! Ez daukazu hautatutako karpetan idazteko baimenik! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Gehitu Karpeta Sinkronizatzeko Konexioa - + Synchronizing with local folder - + File Fitxategia @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. Errorea zerbitzaritik karpeten zerrenda eskuratzean. - + Signed out Saioa bukatuta - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Zerbitzaritik karpeta zerrenda eskuratzen... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 Sinkronizatzen - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Deskargatu %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) igo %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 - %3tik) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1. fitxategia %2tik - + Waiting... Itxoiten... - + Waiting for %n other folder(s)... Itxoiten beste karpeta %n...Itxoiten beste %n karpeta... - + Preparing to sync... Sinkronizatzeko prestatzen... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Gehitu Karpeta Sinkronizatzeko Konexioa - + Add Sync Connection Gehitu Sinkronizazio Konexioa @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Klikatu sinkronizatzeko bertako karpeta bat sinkronizatzeko. - + Enter the path to the local folder. Sartu bertako karpeta berriaren bidea: @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Sartu behean sortuko den karpeta berriaren izena '%1': - + Folder was successfully created on %1. %1-en karpeta ongi sortu da. - + Authentication failed accessing %1 Autentikazioak huts egin du %1en sartzean - + Failed to create the folder on %1. Please check manually. Huts egin du %1-(e)an karpeta sortzen. Egiaztatu eskuz. - + Failed to list a folder. Error: %1 Karpetaren zerrenda lortzeak huts egin du: Error: %1 - + Choose this to sync the entire account Hautatu hau kontu osoa sinkronizatzeko - + This folder is already being synced. Karpeta hau dagoeneko sinkronizatzen ari da. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Dagoeneko <i>%1</i> sinkronizatzen ari zara, <i>%2</i>-ren guraso karpeta dena. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Dagoeneko fitxategi guztiak sinkronizatzen ari zara. <b>Ezin<b> da sinkronizatu beste karpeta bat. Hainbat karpeta batera sinkronizatu nahi baduzu ezaba ezazu orain konfiguratuta duzun sinkronizazio karpeta nagusia. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ez da E-Tagik jaso zerbitzaritik, egiaztatu Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. Jarraitzeko E-Tag ezberdina jaso dugu. Hurrengoan saiatuko gara berriz. - + Server returned wrong content-range Zerbitzariak eduki-hein desegokia itzuli du - + Connection Timeout Konexioa denboraz kanpo @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced Aurreratua - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Erabili &Kolore Bakarreko Ikonoak - + Edit &Ignored Files - + S&how crash reporter - - + + About Honi buruz - + Updates Eguneraketak - + &Restart && Update Be&rrabiarazi eta Eguneratu @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Sartu Pasahitza - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1366,55 +1397,125 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Egunkari Irteera - + &Search: &Bilaketa: - + &Find &Aurkitu: - + + &Capture debug messages + + + + Clear Garbitu - + Clear the log display. Garbitu egunkari bistaratzea. - + S&ave &Gorde - + Save the log file to a file on disk for debugging. Gorde egunkari fitxategia fitxategi batean arazteko. - + Save log file Gorde egunkari fitxategia - + Error Errorea - + Could not write to log file %1 @@ -1422,24 +1523,16 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::Logger - + Error Errorea - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' Fitxategia<br/> ezin da idazteko ireki.<br/><br/>Egunkariaren irteera <b>ezin</b> da gorde!</nobr> - - OCC::MoveJob - - - Connection timed out - Konexioa denboraz kanpo - - OCC::NSISUpdater @@ -1537,7 +1630,7 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Limit to 3/4 of estimated bandwidth - + Mugatu estimatutako banda zabaleraren 3/4etara @@ -1551,27 +1644,27 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Automatikoki mugatu - + Hostname of proxy server Proxy zerbitzariaren hostalari izena - + Username for proxy server Proxy zerbitzariaren erabiltzaile izena - + Password for proxy server Proxy zerbitzarirako pasahitza - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1584,127 +1677,160 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + Ixten segundo gutxi barru... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... %1 Bertsioa deskargatzen. Mesedez itxoin... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. Ezin da eguneraketarik bilatu. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Eguneraketa zerbitzaria galdetzen... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. Ez dago eguneraketarik eskuragarri. Zure instalazioa azkenengo bertsioa da. Update Check - + Begiratu bertsio berririk ba ote den OCC::OwncloudAdvancedSetupPage - + Connect to %1 %1ra konektatu - + Setup local folder options Konfiguratu bertako karpeten aukerak - + Connect... Konektatu... - + %1 folder '%2' is synced to local folder '%3' - + Sync the folder '%1' '%1' karpeta sinkronizatu - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Sinkronizazio karpeta lokala - - + + (%1) (%1) @@ -1737,7 +1863,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1745,47 +1871,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 %1ra konektatu - + Enter user credentials Sartu erabiltzailearen kredentzialak + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 %1ra konektatu - + Setup %1 server Konfiguratu %1 zerbitzaria - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Url hori EZ da segurua ez baitago kodetuta. Ez da gomendagarria erabltzea. - + This url is secure. You can use it. Url hau segurua da. Berau erabili dezakezu. - + &Next > &Hurrengoa > @@ -1793,22 +1932,22 @@ Ez da gomendagarria erabltzea. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Konexioa ongi burutu da %1 zerbitzarian: %2 bertsioa %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Denbora iraungi da %1era %2n konektatzen saiatzean. - + Trying to connect to %1 at %2... %2 zerbitzarian dagoen %1 konektatzen... @@ -1828,109 +1967,109 @@ Ez da gomendagarria erabltzea. - + Invalid URL - + Baliogabeko URLa - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Bertako %1 karpeta dagoeneko existitzen da, sinkronizaziorako prestatzen.<br/><br/> - + Creating local sync folder %1... - + Bertako %1 sinkronizazio karpeta sortzen... - + ok ados - + failed. huts egin du. - + Could not create local folder %1 Ezin da %1 karpeta lokala sortu - + No remote folder specified! Ez da urruneko karpeta zehaztu! - + Error: %1 Errorea: %1 - + creating folder on ownCloud: %1 ownClouden karpeta sortzen: %1 - + Remote folder %1 created successfully. Urruneko %1 karpeta ongi sortu da. - + The remote folder %1 already exists. Connecting it for syncing. Urruneko %1 karpeta dagoeneko existintzen da. Bertara konetatuko da sinkronizatzeko. - + The folder creation resulted in HTTP error code %1 Karpeta sortzeak HTTP %1 errore kodea igorri du - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Huts egin du urrutiko karpeta sortzen emandako kredintzialak ez direlako zuzenak!<br/> Egin atzera eta egiaztatu zure kredentzialak.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Urruneko karpeten sortzeak huts egin du ziuraski emandako kredentzialak gaizki daudelako.</font><br/>Mesedez atzera joan eta egiaztatu zure kredentzialak.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Urruneko %1 karpetaren sortzeak huts egin du <tt>%2</tt> errorearekin. - + A sync connection from %1 to remote directory %2 was set up. Sinkronizazio konexio bat konfiguratu da %1 karpetatik urruneko %2 karpetara. - + Successfully connected to %1! %1-era ongi konektatu da! - + Connection to %1 could not be established. Please check again. %1 konexioa ezin da ezarri. Mesedez egiaztatu berriz. - + Folder rename failed Karpetaren berrizendatzeak huts egin du - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ezin da karpeta ezabatu eta kopia egin, karpeta edo barruko fitxategiren bat beste programa batean irekita dagoelako. Mesedez itxi karpeta edo fitxategia eta sakatu berrekin edo ezeztatu konfigurazioa. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Bertako sinkronizazio %1 karpeta ongi sortu da!</b></font> @@ -1938,12 +2077,12 @@ Ez da gomendagarria erabltzea. OCC::OwncloudWizard - + %1 Connection Wizard %1 Konexio Morroia - + Skip folders configuration Saltatu karpeten ezarpenak @@ -1951,33 +2090,25 @@ Ez da gomendagarria erabltzea. OCC::OwncloudWizardResultPage - + Everything set up! Dena konfiguratu da! - + Open Local Folder Ireki karpeta lokala - + Open %1 in Browser Ireki %1 Arakatzailean - - OCC::PUTFileJob - - - Connection Timeout - Konexioa denboraz kanpo - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1985,73 +2116,68 @@ Ez da gomendagarria erabltzea. OCC::PropagateDirectory - + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server Fitxategia zerbitzaritik ezabatua izan da - + The file could not be downloaded completely. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2059,40 +2185,40 @@ Ez da gomendagarria erabltzea. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 Ezin da %1 karpeta sortu - + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2100,26 +2226,26 @@ Ez da gomendagarria erabltzea. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2127,102 +2253,107 @@ Ez da gomendagarria erabltzea. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Karpeta hau ezin da berrizendatu. Bere jatorrizko izenera berrizendatu da. - + This folder must not be renamed. Please name it back to Shared. Karpeta hau ezin da berrizendatu. Mesedez jarri berriz Shared izena. - + The file was renamed but is part of a read only share. The original file was restored. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database - + Errorea metadatuak datu-basean idaztean OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Fitxategia Ezabatua - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - - Error writing metadata to the database + + Upload of %1 exceeds the quota for the folder + + + Error writing metadata to the database + Errorea metadatuak datu-basean idaztean + OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. Fitxategi lokala ezabatu da sinkronizazioan. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2230,32 +2361,32 @@ Ez da gomendagarria erabltzea. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. Fitxategi lokala ezabatu da sinkronizazioan. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2273,42 +2404,42 @@ Ez da gomendagarria erabltzea. TestuEtiketa - + Time Noiz - + File Fitxategia - + Folder Karpeta - + Action Ekintza - + Size Tamaina - + Local sync protocol Bertako sinkronizazio protokolo - + Copy Kopiatu - + Copy the activity list to the clipboard. Kopiatu jarduera zerrenda arbelara. @@ -2349,7 +2480,7 @@ Ez da gomendagarria erabltzea. OCC::SelectiveSyncDialog - + Choose What to Sync Hautatu zer sinkronizatu @@ -2357,33 +2488,33 @@ Ez da gomendagarria erabltzea. OCC::SelectiveSyncWidget - + Loading ... Kargatzen... - + Deselect remote folders you do not wish to synchronize. - + Name Izena - + Size Tamaina - - + + No subfolders currently on the server. Ez dago azpikarpetarik zerbitzarian. - + An error occurred while loading the list of sub folders. @@ -2396,22 +2527,22 @@ Ez da gomendagarria erabltzea. Ezarpenak - + Activity Jarduera - + General Orokorra - + Network Sarea - + Account Kontua @@ -2419,27 +2550,27 @@ Ez da gomendagarria erabltzea. OCC::SettingsDialogMac - + %1 %1 - + Activity Jarduera - + General Orokorra - + Network Sarea - + Account Kontua @@ -2467,35 +2598,45 @@ Ez da gomendagarria erabltzea. ownCloud-en bidea: - + %1 Sharing - + %1 %1 - + Folder: %2 Karpeta: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2505,92 +2646,126 @@ Ez da gomendagarria erabltzea. - - Share link - Elkarbanatu lotura - - - + TextLabel TestuEtiketa - + Set &password Ezarri &pasahitza - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Ezarri &muga data - + Set password Ezarri pasahitza - - &Mail link + + Link properties: - Copy &link - Kopiatu &lotura + Show file listing + - + Allow editing Baimendu editatzea - + Anyone with the link has access to the file/folder - + + P&assword protect - + Password Protected - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password - + Please Set Password Mesedez Ezarri Pasahitza - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - - OCC::ShareUserGroupWidget @@ -2600,68 +2775,98 @@ Ez da gomendagarria erabltzea. - + Share with users or groups ... Elkarbanatu erabiltzaile edo taldearekin... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formularioa + - + TextLabel - TestuEtiketa + - + can edit - editatu dezake + - + can share - elkarbana dezake + - + ... - ... + - + create - sortu + - + change - aldatu + - + delete - ezabatu + OCC::ShibbolethCredentials - + Login Error Errorea sartzean - + You must sign in as user %1 @@ -2669,22 +2874,22 @@ Ez da gomendagarria erabltzea. OCC::ShibbolethWebView - + %1 - Authenticate - + SSL Chipher Debug View - + Reauthentication required Berautentikatzea beharrezkoa - + Your session has expired. You need to re-login to continue to use the client. @@ -2692,26 +2897,46 @@ Ez da gomendagarria erabltzea. OCC::SocketApi - + Share with %1 parameter is ownCloud + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>>Ziurtagiriaren Zehaztapenak</h3> - + Common Name (CN): Izen Arrunta (IA): - + Subject Alternative Names: @@ -2796,7 +3021,7 @@ Ez da gomendagarria erabltzea. %1 - + This connection is encrypted using %1 bit %2. @@ -2812,7 +3037,7 @@ Ez da gomendagarria erabltzea. Ziurtagiriaren informazioa: - + This connection is NOT secure as it is not encrypted. @@ -2831,67 +3056,67 @@ Ez da gomendagarria erabltzea. Fidatu ziurtagiri honetaz hala ere - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 %1 ziurtagiriarekin - + &lt;not specified&gt; &lt;zehaztu gabe&gt; - - + + Organization: %1 Erakundea: %1 - - + + Unit: %1 Unitatea: %1 - - + + Country: %1 Herrialdea: %1 - + Fingerprint (MD5): <tt>%1</tt> Hatz-marka (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Hatz-marka (SHA1): <tt>%1</tt> - + Effective Date: %1 Balio-data: %1 - + Expiration Date: %1 - + Issuer: %1 Jaulkitzailea: %1 @@ -2899,285 +3124,300 @@ Ez da gomendagarria erabltzea. OCC::SyncEngine - + Success. Arrakasta. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csyncen %1 plugina ezin da kargatu.<br/>Mesedez egiaztatu instalazioa!</p> - + CSync got an error while processing internal trees. CSyncek errorea izan du barne zuhaitzak prozesatzerakoan. - - CSync failed to reserve memory. - CSyncek huts egin du memoria alokatzean. - - - + CSync fatal parameter error. CSync parametro larri errorea. - + CSync processing step update failed. CSync prozesatzearen eguneratu urratsak huts egin du. - + CSync processing step reconcile failed. CSync prozesatzearen berdinkatze urratsak huts egin du. - + CSync could not authenticate at the proxy. CSyncek ezin izan du proxya autentikatu. - + CSync failed to lookup proxy or server. CSyncek huts egin du zerbitzaria edo proxia bilatzean. - + CSync failed to authenticate at the %1 server. CSyncek huts egin du %1 zerbitzarian autentikatzean. - + CSync failed to connect to the network. CSyncek sarera konektatzean huts egin du. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP transmisio errore bat gertatu da. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Errore bat egon da karpeta bat irekitzearkoan - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Ez dago lekurik %1 zerbitzarian. - + CSync unspecified error. CSyncen zehaztugabeko errorea. - + Aborted by the user Erabiltzaileak bertan behera utzita - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - - The item is not synced because of previous errors: %1 - - - - + Symbolic links are not supported in syncing. Esteka sinbolikoak ezin dira sinkronizatu. - + File is listed on the ignore list. Fitxategia baztertutakoen zerrendan dago. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Ezin izan da sinkronizazio egunerokoa hasieratu. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria @@ -3193,7 +3433,7 @@ Ez da gomendagarria erabltzea. OCC::Systray - + %1: %2 %1: %2 @@ -3201,17 +3441,17 @@ Ez da gomendagarria erabltzea. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>%1 Bertsioa. Informazio gehiago eskuratzeko ikusi <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3219,17 +3459,17 @@ Ez da gomendagarria erabltzea. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3237,207 +3477,207 @@ Ez da gomendagarria erabltzea. OCC::ownCloudGui - + Please sign in Mesedez saioa hasi - + Folder %1: %2 - + No sync folders configured. Ez dago sinkronizazio karpetarik definituta. - + There are no sync folders configured. Ez dago sinkronizazio karpetarik definituta. - + Open in browser Ireki nabigatzailean - - - + + + Log in... Saioa hasi... - - - + + + Log out Saioa bukatu - + Recent Changes Azkenengo Aldaketak - + Checking for changes in '%1' - + Managed Folders: Kudeatutako karpetak: - + Open folder '%1' Ireki '%1' karpeta - + Open %1 in browser Ireki %1 arakatzailean - + Unknown status Egoera ezezaguna - + Settings... Ezarpenak... - + Details... Xehetasunak... - + Help Laguntza - + Quit %1 %1etik Irten - + Disconnected from %1 %1etik deskonektatuta - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Kontuetatik deskonektatuta: - + Account %1: %2 %1 Kontua: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Saioa bukatu kontu guztietan - + Log in to all accounts... Saioa hasi kontu guztietan... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Ez da azken aldian ezer sinkronizatu - + Syncing %1 of %2 (%3 left) Sinkronizatzen %1 %2tik (%3 faltan) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sinkronizatzen %1 (%2faltan) - + Syncing %1 %1 Sinkronizatzen - + %1 (%2, %3) %1 (%2, %3) - + Up to date Eguneratua @@ -3445,7 +3685,7 @@ Ez da gomendagarria erabltzea. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3548,78 +3788,42 @@ Ez da gomendagarria erabltzea. &Pasahitza + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formularioa - - Server &address: - Zerbitzariaren &helbidea: - - - - - TextLabel TestuEtiketa - - - Use &secure connection - Erabili konexio &segurua - - - - CheckBox - Aukerakutxa - - - - &Username: - &Erabiltzaile izena: - - - - Enter the ownCloud username. - Sartu zure ownCloud erabiltzaile izena. - - - - &Password: - &Pasahitza: - - - - Enter the ownCloud password. - Sartu zure ownCloud pasahitza. - - - - Do not allow the local storage of the password. - Ez baimendu pasahitzaren bertako biltegiratzea. - - - - &Do not store password on local machine - &Ez gorde pasahitza ordenagailuan - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Sartu konektatu nahi duzun ownCloud zerbitzariaren urla (http edo https gabe). - Ser&ver Address @@ -3663,7 +3867,7 @@ Ez da gomendagarria erabltzea. QApplication - + QT_LAYOUT_DIRECTION @@ -3671,42 +3875,42 @@ Ez da gomendagarria erabltzea. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - Orain dela minutu bat baino gutxiago + orain dela minutu bat baino gutxiago - + %n minute(s) ago - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3715,57 +3919,57 @@ Ez da gomendagarria erabltzea. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3775,7 +3979,7 @@ Ez da gomendagarria erabltzea. System Tray not available - + Sistemaren erretilua ez dago erabilgarri @@ -3786,102 +3990,97 @@ Ez da gomendagarria erabltzea. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Giteko <a href="%1">%2</a>. errebisiotik konpilatuta %3-an, %4etan Qt %5, %6 erabiliz</small></p> - - - built with %1 - - progress - + Downloaded Deskargatua - + Uploaded Igoa - + Server version downloaded, copied changed local file into conflict file - + Deleted Ezabatuta - + Moved to %1 %1era mugituta - + Ignored - + Filesystem access error - + Error Errorea - + Updated local metadata - - + + Unknown Ezezaguna - + downloading deskargatzen - + uploading igotzen - + deleting ezabatzen - + moving mugitzen - + ignoring + - error errorea - + updating local metadata @@ -3889,54 +4088,77 @@ Ez da gomendagarria erabltzea. theme - + Status undefined Definitu gabeko egoera - + Waiting to start sync Itxoiten sinkronizazioaren hasiera - + Sync is running Sinkronizazioa martxan da - + Sync Success Sinkronizazioa ongi burutu da - + Sync Success, some files were ignored. Sinkronizazioa ongi burutu da, fitxategi batzuk baztertu dira. - + Sync Error Sinkronizazio Errorea - + Setup Error Konfigurazio Errorea - + Preparing to sync Sinkronizazioa prestatzen - + Aborting... Bertan-behera uzten - + Sync is paused Sinkronizazioa pausatuta dago + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 998bb53ed..fd91b4a62 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time فایل مقصد دارای سایز و یا تاریخ ویرایش غیرمتعارف است @@ -81,6 +81,24 @@ برچسب متنی + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel منصرف شدن @@ -136,188 +154,204 @@ متصل به <server> به عنوان <user> - + No account configured. هیچ حساب‌کاربری‌ای تنظیم نشده‌ است. - + Add new - + Remove حذف - + Account حساب کاربری - + Choose what to sync انتخاب موارد همگام‌سازی - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running همگام سازی در حال اجراست - + The syncing operation is running.<br/>Do you want to terminate it? عملیات همگام سازی در حال اجراست.<br/>آیا دوست دارید آن را متوقف کنید؟ - + %1 in use - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. متصل به %1. - + Server %1 is temporarily unavailable. سرور %1 بصورت موقت خارج از دسترس است. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. - + Log in ورود - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal - + <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> - + Remove connection - + + Open folder بازکردن پوشه - - + + Log out خروج - + Resume sync از سر‎گیری همگام‌سازی - + Pause sync توقف به‌هنگام‌سازی - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. - + No %1 connection configured. بدون %1 اتصال پیکربندی شده. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out خارج شد - + Disconnected - + Connected متصل - + Service unavailable سرویس خارج از دسترس - + + Maintenance mode + + + + Network error خطای شبکه - + Configuration error - + + Asking Credentials + + + + Unknown account state @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol پروتکل همگام سازی - - List of ignored or erroneous files - - - - - Copy - کپی کردن - - - - Copy the activity list to the clipboard. - - - - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard کپی به کلیپ بورد @@ -448,47 +477,47 @@ برچسب متنی - + Server Activities - + Copy کپی کردن - + Copy the activity list to the clipboard. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured - + The configured server for this client is too old - + Please update to the latest server and restart the client. - + Authentication error: Either username or password are wrong. - + timeout - + The provided credentials are not correct - - OCC::DeleteJob - - - Connection timed out - - - OCC::DiscoveryMainThread - + Aborted by the user متوقف شده توسط کاربر @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. پوشه محلی %1 موجود نیست. - + %1 should be a folder but is not. - + %1 is not readable. %1 قابل خواندن نیست. - + %1 has been removed. %1 names a file. %1 حذف شده است. - + %1 has been downloaded. %1 names a file. %1 بارگزاری شد. - + %1 has been updated. %1 names a file. %1 بروز رسانی شده است. - + %1 has been renamed to %2. %1 and %2 name files. %1 به %2 تغییر نام داده شده است. - + %1 has been moved to %2. %1 به %2 انتقال داده شده است. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. - + Sync Activity فعالیت همگام سازی - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? حذف تمام فایل ها؟ - + Remove all files حذف تمام فایل ها - + Keep files نگه داشتن فایل ها - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state نمی تواند حالت پوشه را تنظیم مجدد کند - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (backup) - + (backup %1) (پشتیبان %1) - + Undefined State. موقعیت تعریف نشده - + Waiting to start syncing. - + Preparing for sync. آماده سازی برای همگام سازی کردن. - + Sync is running. همگام سازی در حال اجراست - + Last Sync was successful. آخرین همگام سازی موفقیت آمیز بود - + Last Sync was successful, but with warnings on individual files. - + Setup Error. خطا در پیکر بندی. - + User Abort. خارج کردن کاربر. - + Sync is paused. همگام سازی فعلا متوقف شده است - + %1 (Sync is paused) %1 (همگام‌سازی موقتا متوقف شده است) - + No valid folder selected! هیچ پوشه‌ی معتبری انتخاب نشده است! - + The selected path is not a folder! - + You have no permission to write to the selected folder! شما اجازه نوشتن در پوشه های انتخاب شده را ندارید! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File فایل @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. برای افزودن پوشه به همگام‌سازی روی این دکمه کلیک کنید. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out خارج شد - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" همگام‌سازی %1 - - + + , رشته های ترجمه نشده - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) دانلود %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) آپلود %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 از %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 فایل %1 از %2 - + Waiting... درحال انتظار... - + Waiting for %n other folder(s)... در انتظار برای %n پوشه‌‎ی دیگر ... - + Preparing to sync... آماده‌سازی همگام‌سازی ... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Enter the path to the local folder. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. پوشه با موفقیت ایجاد شده است %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. این پوشه همگام‌سازی شده است. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + Server returned wrong content-range - + Connection Timeout تایم اوت اتصال @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced پیشرفته - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Edit &Ignored Files - + S&how crash reporter - - + + About درباره - + Updates به روز رسانی ها - + &Restart && Update @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password رمز را وارد کنید - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output - + &Search: &جستجو: - + &Find &پیدا کردن - + + &Capture debug messages + + + + Clear معلوم - + Clear the log display. - + S&ave &ذخیره سازی - + Save the log file to a file on disk for debugging. - + Save log file ذخیره فایل لاگ - + Error خطا - + Could not write to log file %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error خطا - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> - - OCC::MoveJob - - - Connection timed out - - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from محدودسازی خودکار - + Hostname of proxy server نام میزبان سرور پروکسی - + Username for proxy server نام کاربری سرور پروکسی - + Password for proxy server رمزعبور برای سرور پروکسی - + HTTP(S) proxy پروکسی HTTP(S) - + SOCKS5 proxy پروکسی SOCKS5 @@ -1582,78 +1675,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. @@ -1666,43 +1792,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 متصل به %1 - + Setup local folder options - + Connect... اتصال... - + %1 folder '%2' is synced to local folder '%3' %1 پوشه '%2' با پوشه محلی همگام شده است '%3' - + Sync the folder '%1' همگام‌سازی پوشه‌ی '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder پوشه همگام سازی محلی - - + + (%1) (%1) @@ -1735,7 +1861,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1743,46 +1869,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 متصل به %1 - + Enter user credentials + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 متصل به %1 - + Setup %1 server راه‌اندازی %1 سرور - + This url is NOT secure as it is not encrypted. It is not advisable to use it. - + This url is secure. You can use it. این ادرس امن است. شما می توانید از آن استفاده کنید. - + &Next > &بعدی> @@ -1790,22 +1929,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green"> با موفقیت متصل شده است به %1: %2 نسخه %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ارتباط ناموفق با %1 در %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... تلاش برای اتصال %1 به %2... @@ -1825,109 +1964,109 @@ It is not advisable to use it. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> پوشه همگام سازی محلی %1 در حال حاضر موجود است، تنظیم آن برای همگام سازی. <br/><br/> - + Creating local sync folder %1... - + ok خوب - + failed. ناموفق. - + Could not create local folder %1 نمی تواند پوشه محلی ایجاد کند %1 - + No remote folder specified! - + Error: %1 خطا: %1 - + creating folder on ownCloud: %1 ایجاد کردن پوشه بر روی ownCloud: %1 - + Remote folder %1 created successfully. پوشه از راه دور %1 با موفقیت ایجاد شده است. - + The remote folder %1 already exists. Connecting it for syncing. در حال حاضر پوشه از راه دور %1 موجود است. برای همگام سازی به آن متصل شوید. - + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ایجاد پوشه از راه دور ناموفق بود به علت اینکه اعتبارهای ارائه شده اشتباه هستند!<br/>لطفا اعتبارهای خودتان را بررسی کنید.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red"> ایجاد پوشه از راه دور ناموفق بود، شاید به علت اعتبارهایی که ارئه شده اند، اشتباه هستند.</font><br/> لطفا باز گردید و اعتبار خود را بررسی کنید.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. ایجاد پوشه از راه دور %1 ناموفق بود با خطا <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. یک اتصال همگام سازی از %1 تا %2 پوشه از راه دور راه اندازی شد. - + Successfully connected to %1! با موفقیت به %1 اتصال یافت! - + Connection to %1 could not be established. Please check again. اتصال به %1 نمی تواند مقرر باشد. لطفا دوباره بررسی کنید. - + Folder rename failed تغییر نام پوشه ناموفق بود - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b> پوشه همگام سازی محلی %1 با موفقیت ساخته شده است!</b></font> @@ -1935,12 +2074,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard - + Skip folders configuration @@ -1948,33 +2087,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! - + Open Local Folder باز کردن پوشه محلی - + Open %1 in Browser - - OCC::PUTFileJob - - - Connection Timeout - تایم اوت اتصال - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1982,7 +2113,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1990,47 +2121,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server فایل از روی سرور حذف شد - + The file could not be downloaded completely. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database @@ -2038,17 +2169,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2056,22 +2182,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 امکان ایجاد پوشه %1 وجود ندارد - + Error writing metadata to the database @@ -2079,17 +2205,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; خطا در حذف '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2097,13 +2223,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2111,12 +2237,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2124,12 +2250,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database @@ -2137,28 +2263,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. - + This folder must not be renamed. Please name it back to Shared. - + The file was renamed but is part of a read only share. The original file was restored. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database @@ -2166,27 +2292,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed فایل حذف شد - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2194,32 +2325,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. فایل محلی در حین همگام‌سازی حذف شده است. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2227,32 +2358,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. فایل محلی در حین همگام‌سازی حذف شده است. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2270,42 +2401,42 @@ It is not advisable to use it. برچسب متنی - + Time زمان - + File فایل - + Folder پوشه - + Action فعالیت - + Size اندازه - + Local sync protocol - + Copy کپی کردن - + Copy the activity list to the clipboard. @@ -2346,7 +2477,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync انتخاب موارد همگام‌سازی @@ -2354,33 +2485,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... درحال بارگذاری... - + Deselect remote folders you do not wish to synchronize. - + Name نام - + Size اندازه - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2393,22 +2524,22 @@ It is not advisable to use it. تنظیمات - + Activity فعالیت - + General عمومی - + Network شبکه - + Account حساب کاربری @@ -2416,27 +2547,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity فعالیت - + General عمومی - + Network شبکه - + Account حساب کاربری @@ -2464,35 +2595,45 @@ It is not advisable to use it. مسیر ownCloud: - + %1 Sharing %1 اشتراک‌گذاری - + %1 %1 - + Folder: %2 پوشه: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2502,92 +2643,126 @@ It is not advisable to use it. - - Share link - اشتراک گذاشتن لینک - - - + TextLabel برچسب متنی - + Set &password تعیین &رمزعبور - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date تعیین &تاریخ انقضا - + Set password تعیین رمزعبور - - &Mail link + + Link properties: - Copy &link - کپی & لینک + Show file listing + - + Allow editing اجازه‌ی ویرایش - + Anyone with the link has access to the file/folder - + + P&assword protect - + Password Protected محافظت شده توسط رمزعبور - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password - + Please Set Password لطفا رمزعبور را تعیین کنید - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &اشتراک‌گذاری لینک - OCC::ShareUserGroupWidget @@ -2597,68 +2772,98 @@ It is not advisable to use it. - + Share with users or groups ... اشتراک گذاری با کاربران یا گروه ها ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - فرم + - + TextLabel - برچسب متنی + - + can edit - می توان ویرایش کرد + - + can share - قابل به اشتراک گذاری + - + ... - + create - ایجاد + - + change - تغییر + - + delete - حذف + OCC::ShibbolethCredentials - + Login Error خطای ورود - + You must sign in as user %1 @@ -2666,22 +2871,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate - + SSL Chipher Debug View - + Reauthentication required - + Your session has expired. You need to re-login to continue to use the client. @@ -2689,26 +2894,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud اشتراک‌گذاری با %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>جزئیات گواهینامه s</h3> - + Common Name (CN): نام مشترک (CN): - + Subject Alternative Names: @@ -2793,7 +3018,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. @@ -2809,7 +3034,7 @@ It is not advisable to use it. اطلاعات گواهینامه: - + This connection is NOT secure as it is not encrypted. @@ -2828,67 +3053,67 @@ It is not advisable to use it. د رهر صورت به این گواهی نامه اطمینان کن. - + Untrusted Certificate گواهینامه‎ی غیر معتبر - + Cannot connect securely to <i>%1</i>: عدم امکان اتصال امن به <i>%1</i>: - + with Certificate %1 با گواهی %1 - + &lt;not specified&gt; &lt؛ مشخص نشده است &gt؛ - - + + Organization: %1 سازماندهی : %1 - - + + Unit: %1 واحد: %1 - - + + Country: %1 کشور: %1 - + Fingerprint (MD5): <tt>%1</tt> اثر انگشت (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> اثرانگشت (SHA1): <tt>%1</tt> - + Effective Date: %1 تاریخ موثر: %1 - + Expiration Date: %1 تاریخ انقضا: %1 - + Issuer: %1 صادرکننده: %1 @@ -2896,285 +3121,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. موفقیت - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>ماژول %1 برای csync نمی تواند بارگذاری شود.<br/>لطفا نصب را بررسی کنید!</p> - + CSync got an error while processing internal trees. CSync هنگام پردازش درختان داخلی یک خطا دریافت نمود. - - CSync failed to reserve memory. - CSync موفق به رزرو حافظه نشد است. - - - + CSync fatal parameter error. - + CSync processing step update failed. مرحله به روز روسانی پردازش CSync ناموفق بود. - + CSync processing step reconcile failed. مرحله تطبیق پردازش CSync ناموفق بود. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. عدم موفقیت CSync برای مراجعه به پروکسی یا سرور. - + CSync failed to authenticate at the %1 server. عدم موفقیت CSync برای اعتبار دادن در %1 سرور. - + CSync failed to connect to the network. عدم موفقیت CSync برای اتصال به شبکه. - + A network connection timeout happened. - + A HTTP transmission error happened. خطا در انتقال HTTP اتفاق افتاده است. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder یک خطا در هنگام باز کردن یک پوشه رخ داده‌ است - + Error while reading folder. خطا در هنگام خواندن پوشه - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: فضا در %1 سرور در دسترس نیست. - + CSync unspecified error. خطای نامشخص CSync - + Aborted by the user متوقف شده توسط کاربر - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable سرویس بصورت موقت خارج از دسترس است - + Access is forbidden - + An internal error number %1 occurred. یک خطای داخلی با شماره خطای %1 رخ داده است. - - The item is not synced because of previous errors: %1 - - - - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. نام فایل خیلی طولانی است. - + Stat failed. وضعیت ناموفق - + Filename encoding is not valid رمزگذاری نام فایل معتبر نیست - + Invalid characters, please rename "%1" کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - - Unable to initialize a sync journal. - - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا @@ -3190,7 +3430,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3198,17 +3438,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>نسخه %1. برای اطلاعات بیشتر لطفا اینجا را مشاهده کنید t <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3216,17 +3456,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3234,207 +3474,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in لطفا وارد شوید - + Folder %1: %2 پوشه %1: %2 - + No sync folders configured. هیچ پوشه ای همگام سازی شده‌ای تنظیم نشده است - + There are no sync folders configured. هیچ پوشه‌ای برای همگام‌سازی تنظیم نشده است. - + Open in browser باز کردن در مرورگر - - - + + + Log in... ورود... - - - + + + Log out خروج - + Recent Changes تغییرات اخیر - + Checking for changes in '%1' - + Managed Folders: پوشه های مدیریت شده: - + Open folder '%1' بازکردن پوشه‌ی '%1' - + Open %1 in browser - + Unknown status وضعیت نامعلوم - + Settings... تنظیمات... - + Details... جزئیات... - + Help راه‌نما - + Quit %1 خروج %1 - + Disconnected from %1 قطع‌شده از %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 حساب‌کاربری %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently هیچ موردی به تازگی همگام‌سازی نشده است - + Syncing %1 of %2 (%3 left) همگام‌سازی %1 از%2 (%3 باقیمانده) - + Syncing %1 of %2 - + Syncing %1 (%2 left) همگام‌سازی %1 (%2 باقیمانده) - + Syncing %1 همگام‌سازی %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date تا تاریخ @@ -3442,7 +3682,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3545,78 +3785,42 @@ It is not advisable to use it. &رمزعبور + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form فرم - - Server &address: - سرور& آدرس: - - - - - TextLabel برچسب متنی - - - Use &secure connection - استفاده & ارتباط امن - - - - CheckBox - - - - - &Username: - & نام کاربری: - - - - Enter the ownCloud username. - نام کاربری ownCloud را وارد کنید. - - - - &Password: - &رمزعبور: - - - - Enter the ownCloud password. - وارد کردن رمزعبور ownCloud . - - - - Do not allow the local storage of the password. - - - - - &Do not store password on local machine - &رمز عبور را بر روی دستگاه محلی ذخیره نکن - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - آدرس ownCloud را وارد کنید، شما می خواهید متصل شوید (بدون http یا https). - Ser&ver Address @@ -3660,7 +3864,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3668,42 +3872,42 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3712,57 +3916,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3783,102 +3987,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded دریافت شده اند - + Uploaded بارگذاری شده است. - + Server version downloaded, copied changed local file into conflict file - + Deleted حذف شده - + Moved to %1 به %1 انتقال یافت - + Ignored نادیده گرفته شد - + Filesystem access error خطای دسترسی به فایل‌های سیستمی - + Error خطا - + Updated local metadata - - + + Unknown نامشخص - + downloading در حال دانلود - + uploading در حال آپلود - + deleting در حال حذف - + moving در حال انتقال - + ignoring نادیده گرفتن + - error خطا - + updating local metadata @@ -3886,54 +4085,77 @@ It is not advisable to use it. theme - + Status undefined - + Waiting to start sync در حال انتظار برای شروع همگام‌سازی - + Sync is running همگام سازی در حال اجراست - + Sync Success همگام‌سازی با موفقیت انجام شد - + Sync Success, some files were ignored. همگام‌سازی موفق، تعداد از فایل‌ها نادیده گرفته شده‌اند. - + Sync Error خطای همگام‌سازی - + Setup Error خطای نصب - + Preparing to sync آماده‌سازی همگام‌سازی - + Aborting... - + Sync is paused همگام‌سازیی فعلا متوقف شده است + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_fi.ts b/translations/client_fi.ts index bb15cff50..03e9d8c6e 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Kohdetiedostolla on odottamaton koko tai muokkausaika @@ -81,6 +81,24 @@ TekstiLeima + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Peruuta @@ -136,188 +154,204 @@ Yhdistetty palvelimeen <server> käyttäen tunnusta <user> - + No account configured. Tiliä ei ole määritelty. - + Add new Lisää uusi - + Remove Poista - + Account Tili - + Choose what to sync Valitse synkronoitavat tiedot - + Force sync now Pakota synkronointi nyt - + Restart sync Käynnistä synkronointi uudelleen - + Remove folder sync connection Poista kansion synkronointiyhteys - + Folder creation failed Kansion luominen epäonnistui - + <p>Could not create local folder <i>%1</i>. <p>Paikallisen kansion <i>%1</i> luominen epäonnistui. - + Confirm Folder Sync Connection Removal Vahvista kansion synkronointiyhteyden poisto - + Remove Folder Sync Connection Poista kansion synkronointiyhteys - + Sync Running Synkronointi meneillään - + The syncing operation is running.<br/>Do you want to terminate it? Synkronointioperaatio on meneillään.<br/>Haluatko keskeyttää sen? - + %1 in use %1 käytössä - + %1 as <i>%2</i> %1 käyttäjänä <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Palvelimen versio %1 on vanha ja sen tuki on loppunut! Jatka omalla vastuulla. - + Connected to %1. Yhteys muodostettu kohteeseen %1. - + Server %1 is temporarily unavailable. Palvelin %1 ei ole juuri nyt saatavilla. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Kirjauduttu ulos kohteesta %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Ei yhteyttä kohteeseen %1 osoitteessa %2. - + Log in Kirjaudu sisään - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Vahvista tilin poistaminen - + <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> <p>Haluatko varmasti poistaa tilin <i>%1</i>?</p><p><b>Huomio:</b> Tämä toimenpide <b>ei</b> poista mitään tiedostoja.</p> - + Remove connection Poista yhteys - + + Open folder Avaa kansio - - + + Log out Kirjaudu ulos - + Resume sync Palauta synkronointi - + Pause sync Keskeytä synkronointi - + <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> <p>Haluatko varmasti lopettaa kansion <i>%1</i> synkronoinnin?</p><p><b>Huomio:</b> Tämä toimenpide <b>ei</b> poista mitään tiedostoja.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1/%2 (%3 %) käytössä. Jotkin kansiot, mukaan lukien verkkojaot ja jaetut kansiot, voivat sisältää eri rajoitukset. - + %1 of %2 in use %1/%2 käytössä - + Currently there is no storage usage information available. Tallennustilan käyttötietoja ei ole juuri nyt saatavilla. - + No %1 connection configured. %1-yhteyttä ei ole määritelty. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Kirjauduttu ulos - + Disconnected Yhteys katkaistu - + Connected Yhdistetty - + Service unavailable Palvelu ei ole käytettävissä - + + Maintenance mode + + + + Network error Verkkovirhe - + Configuration error Asetusvirhe - + + Asking Credentials + + + + Unknown account state Tuntematon tilin tila @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Palvelimen toimet - + Sync Protocol Synkronointiprotokolla - - List of ignored or erroneous files - Luettelo ohitettavista tai virheellisistä tiedostoista - - - - Copy - Kopioi - - - - Copy the activity list to the clipboard. - Kopioi toimilista leikepöydälle. - - - + Not Synced Ei synkronoitu - + Not Synced (%1) %1 is the number of not synced files. Ei synkronoitu (%1) - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopioitu leikepöydälle @@ -448,47 +477,47 @@ TekstiLeima - + Server Activities Palvelimen toimet - + Copy Kopioi - + Copy the activity list to the clipboard. Kopioi toimilista leikepöydälle. - + Action Required: Notifications Toimenpiteitä vaaditaan: ilmoitukset - + <br/>Account %1 does not have activities enabled. <br/>Tilillä %1 ei ole toimia käytössä. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured ownCloud-tiliä ei ole määritelty - + The configured server for this client is too old Määritelty palvelin on ohjelmistoversioltaan liian vanha tälle asiakasohjelmistolle - + Please update to the latest server and restart the client. Päivitä uusimpaan palvelinversioon ja käynnistä asiakasohjelmisto uudelleen. - + Authentication error: Either username or password are wrong. Tunnistautumisvirhe: käyttäjätunnus tai salasana on väärin. - + timeout aikakatkaisu - + The provided credentials are not correct Annetut tilitiedot eivät ole oikein - - OCC::DeleteJob - - - Connection timed out - Yhteys aikakatkaistiin - - OCC::DiscoveryMainThread - + Aborted by the user Keskeytetty käyttäjän toimesta @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Paikallista kansiota %1 ei ole olemassa. - + %1 should be a folder but is not. Kohteen %1 pitäisi olla kansio, mutta se ei kuitenkaan ole kansio. - + %1 is not readable. %1 ei ole luettavissa. - + %1 has been removed. %1 names a file. %1 on poistettu. - + %1 has been downloaded. %1 names a file. %1 on ladattu. - + %1 has been updated. %1 names a file. %1 on päivitetty. - + %1 has been renamed to %2. %1 and %2 name files. %1 on nimetty uudeelleen muotoon %2. - + %1 has been moved to %2. %1 on siirretty kohteeseen %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. Kohdetta %1 ei voi synkronoida virheen vuoksi. Katso tarkemmat tiedot lokista. - + Sync Activity Synkronointiaktiviteetti - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Poistetaanko kaikki tiedostot? - + Remove all files Poista kaikki tiedostot - + Keep files Säilytä tiedostot - + This sync would reset the files to an earlier 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? - + Backup detected Varmuuskopio poistettu - + Normal Synchronisation Normaali synkronointi - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Kansion tilaa ei voitu alustaa - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (varmuuskopio) - + (backup %1) (varmuuskopio %1) - + Undefined State. Määrittelemätön tila. - + Waiting to start syncing. Odotetaan synkronoinnin aloitusta. - + Preparing for sync. Valmistellaan synkronointia. - + Sync is running. Synkronointi on meneillään. - + Last Sync was successful. Viimeisin synkronointi suoritettiin onnistuneesti. - + Last Sync was successful, but with warnings on individual files. Viimeisin synkronointi onnistui, mutta yksittäisten tiedostojen kanssa ilmeni varoituksia. - + Setup Error. Asetusvirhe. - + User Abort. - + Sync is paused. Synkronointi on keskeytetty. - + %1 (Sync is paused) %1 (Synkronointi on keskeytetty) - + No valid folder selected! Kelvollista kansiota ei ole valittu! - + The selected path is not a folder! Valittu polku ei ole kansio! - + You have no permission to write to the selected folder! Sinulla ei ole kirjoitusoikeutta valittuun kansioon! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Paikallinen kansio %1 sisältää kansion, jota käytetään kansion synkronointiyhteydessä. Valitse toinen kansio! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Lisää kansion synkronointiyhteys - + Synchronizing with local folder Synkronoidaan paikallisen kansion kanssa - + File Tiedosto @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Yhteyden tulee olla muodostettu, jotta voit lisätä kansion - + Click this button to add a folder to synchronize. Napsauta valitaksesi synkronoitavan kansion. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Virhe ladatessa kansiolistausta palvelimelta. - + Signed out Kirjauduttu ulos - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Kansion lisääminen on poistettu käytöstä, koska synkronoit jo kaikki tiedostot. Jos haluat synkronoida useita kansioita, poista nykyisen juurikansion synkronointiyhteys. - + Fetching folder list from server... Haetaan kansioluetteloa palvelimelta... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkronoidaan %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 jäljellä, %1/%2, tiedosto %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, tiedosto %3/%4 - + file %1 of %2 tiedosto %1/%2 - + Waiting... Odotetaan... - + Waiting for %n other folder(s)... Odotetaan %n muuta kansiota...Odotetaan %n muuta kansiota... - + Preparing to sync... Valmistaudutaan synkronointiin... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Lisää kansion synkronointiyhteys - + Add Sync Connection Lisää synkronointiyhteys @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Napsauta valitaksesi synkronoitavan paikalliskansion. - + Enter the path to the local folder. Anna paikallisen kansion polku @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 Kansion listaaminen epäonnistui. Virhe: %1 - + Choose this to sync the entire account Valitse tämä synkronoidaksesi koko tilin - + This folder is already being synced. Tätä kansiota synkronoidaan jo. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synkronoit jo kansiota <i>%1</i>, ja se on kansion <i>%2</i> yläkansio. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + Server returned wrong content-range - + Connection Timeout Yhteys aikakatkaistiin @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Ilmoitusalueelle - + Advanced Lisäasetukset - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" Mt - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Käytä &mustavalkoisia kuvakkeita - + Edit &Ignored Files Muokkaa &ohitettavia tiedostoja - + S&how crash reporter N&äytä kaatumisraportoija - - + + About Tietoja - + Updates Päivitykset - + &Restart && Update &Käynnistä uudelleen && päivitä @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Anna %1-salasana:<br><br>Käyttäjä: %2<br>Tili: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Anna salasana - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1366,55 +1397,125 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Loki - + &Search: &Etsi: - + &Find &Etsi - + + &Capture debug messages + + + + Clear Tyhjennä - + Clear the log display. Tyhjennä lokinäyttö. - + S&ave &Tallenna - + Save the log file to a file on disk for debugging. Tallenna loki tiedostoon virheenetsintää varten. - + Save log file Tallenna lokitiedosto - + Error Virhe - + Could not write to log file %1 Lokitiedostoon %1 kirjoittaminen epäonnistui @@ -1422,24 +1523,16 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::Logger - + Error Virhe - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Tiedostoa '%1'<br/>ei voida avata kirjoittamista varten.<br/><br/>Lokitulostusta<b>ei</b>pystytä tallentamaan!</nobr> - - OCC::MoveJob - - - Connection timed out - Yhteys aikakatkaistiin - - OCC::NSISUpdater @@ -1551,27 +1644,27 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Rajoita automaattisesti - + Hostname of proxy server Välityspalvelinkoneen nimi - + Username for proxy server Välityspalvelimen käyttäjätunnus - + Password for proxy server Välityspalvelimen salasana - + HTTP(S) proxy HTTP(S)-välityspalvelin - + SOCKS5 proxy SOCKS5-välityspalvelin @@ -1584,78 +1677,111 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::NotificationWidget - + Created at %1 Luotu %1 - + Closing in a few seconds... Suljetaan muutamassa sekunnissa... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' valittu %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Uusi %1-päivitys valmiina - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Uusi %1-päivitys on valmiina asennettavaksi. Päivitysohjelma saattaa pyytää lisäoikeuksia päivityksen aikana. - + Downloading version %1. Please wait... Ladataan versiota %1. Odota hetki... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Päivityksen lataaminen epäonnistui. Napsauta <a href='%1'>tästä</a> ladataksesi päivityksen manuaalisesti. - + Could not check for new updates. Päivitysten tarkistus epäonnistui. - + %1 version %2 available. Restart application to start the update. %1-versio %2 saatavilla. Käynnistä sovellus uudelleen aloittaaksesi päivityksen. - + New %1 version %2 available. Please use the system's update tool to install it. Uusi %1-versio %2 on saatavilla. Käytä järjestelmän päivitystyökalua asentaaksesi sen. - + Checking update server... Tarkistetaan päivityspalvelinta... - + Update status is unknown: Did not check for new updates. Päivityksen tila on tuntematon: uusia päivityksiä ei tarkistettu. - + No updates available. Your installation is at the latest version. Päivityksiä ei ole saatavilla. Käytössäsi on uusin versio. @@ -1668,43 +1794,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Muodosta yhteys - %1 - + Setup local folder options Aseta paikallisen kansion valinnat - + Connect... Yhdistä... - + %1 folder '%2' is synced to local folder '%3' %1-kansio '%2' on synkronoitu paikalliseen kansioon '%3' - + Sync the folder '%1' Synkronoi kansio '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Varoitus:</strong> Paikallinen kansio ei ole tyhjä. Valitse jatkotoimenpide!</small></p> - + Local Sync Folder Paikallinen synkronointikansio - - + + (%1) (%1) @@ -1737,7 +1863,7 @@ for additional privileges during the process. Määritä asiakaspuolen TLS-varmenteen asetukset - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Yhteys palvelimen salattuun osoitteeseen <em>%1</em> epäonnistui. Miten haluat edetä?</p></body></html> @@ -1745,47 +1871,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &Sähköpostiosoite - + Connect to %1 Muodosta yhteys - %1 - + Enter user credentials Anna käyttäjätiedot + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Muodosta yhteys - %1 - + Setup %1 server %1-palvelimen asetuksien määritys - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Tämä osoite ei ole turvallinen, koska sitä ei ole salattu. Osoitteen käyttäminen ei ole suositeltavaa. - + This url is secure. You can use it. Tämä osoite on turvallinen. Voit käyttää sitä. - + &Next > &Seuraava > @@ -1793,22 +1932,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Muodostettu yhteys onnistuneesti kohteeseen %1: %2 versio %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Yhteys %1iin osoitteessa %2 epäonnistui:<br/>%3 - + Timeout while trying to connect to %1 at %2. Aikakatkaisu yrittäessä yhteyttä kohteeseen %1 osoitteessa %2. - + Trying to connect to %1 at %2... Yritetään yhdistetää palvelimeen %1 portissa %2... @@ -1828,109 +1967,109 @@ Osoitteen käyttäminen ei ole suositeltavaa. Palvelin esti käyttämisen. Vahvista käyttöoikeutesi palvelimeen <a href="%1">napsauttamalla tästä</a> ja kirjaudu palveluun selaimella. - + Invalid URL Virheellinen verkko-osoite - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Paikallinen kansio %1 on jo olemassa, asetetaan se synkronoitavaksi.<br/><br/> - + Creating local sync folder %1... Luodaan paikallista synkronointikansiota %1... - + ok ok - + failed. epäonnistui. - + Could not create local folder %1 Paikalliskansion %1 luonti epäonnistui - + No remote folder specified! Etäkansiota ei määritelty! - + Error: %1 Virhe: %1 - + creating folder on ownCloud: %1 luodaan kansio ownCloudiin: %1 - + Remote folder %1 created successfully. Etäkansio %1 luotiin onnistuneesti. - + The remote folder %1 already exists. Connecting it for syncing. Etäkansio %1 on jo olemassa. Otetaan siihen yhteyttä tiedostojen täsmäystä varten. - + The folder creation resulted in HTTP error code %1 Kansion luonti aiheutti HTTP-virhekoodin %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Etäkansion luominen epäonnistui koska antamasi tunnus/salasana ei täsmää!<br/>Ole hyvä ja palaa tarkistamaan tunnus/salasana</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Pilvipalvelun etäkansion luominen ei onnistunut , koska tunnistautumistietosi ovat todennäköisesti väärin.</font><br/>Palaa takaisin ja tarkista käyttäjätunnus ja salasana.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Etäkansion %1 luonti epäonnistui, virhe <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Täsmäysyhteys kansiosta %1 etäkansioon %2 on asetettu. - + Successfully connected to %1! Yhteys kohteeseen %1 muodostettiin onnistuneesti! - + Connection to %1 could not be established. Please check again. Yhteyttä osoitteeseen %1 ei voitu muodostaa. Ole hyvä ja tarkista uudelleen. - + Folder rename failed Kansion nimen muuttaminen epäonnistui - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Paikallinen synkronointikansio %1 luotu onnistuneesti!</b></font> @@ -1938,12 +2077,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::OwncloudWizard - + %1 Connection Wizard %1-yhteysavustaja - + Skip folders configuration Ohita kansioiden määritykset @@ -1951,33 +2090,25 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::OwncloudWizardResultPage - + Everything set up! Kaikki valmiina! - + Open Local Folder Avaa paikallinen kansio - + Open %1 in Browser Avaa %1 selaimessa - - OCC::PUTFileJob - - - Connection Timeout - Yhteys aikakatkaistiin - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1985,7 +2116,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateDirectory - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -1993,47 +2124,47 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 - Lataaminen laskisi vapaan levytilan määrän alle rajan %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Levyllä on vapaata tilaa vähemmän kuin %1 - + File was deleted from server Tiedosto poistettiin palvelimelta - + The file could not be downloaded completely. Tiedostoa ei voitu ladata täysin. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery Tiedosto on muuttunut löytymisen jälkeen - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2041,17 +2172,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2059,22 +2185,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 kansiota %1 ei voitu luoda - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2082,17 +2208,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalRemove - + Error removing '%1': %2; Virhe poistaessa '%1': %2; - + Could not remove folder '%1' Ei voitu poistaa kansiota '%1' - + Could not remove %1 because of a local file name clash @@ -2100,13 +2226,13 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2114,12 +2240,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". HTTP-palvelin palautti väärän koodin. Odotettiin koodia 204, vastaanotettiin "%1 %2". @@ -2127,12 +2253,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". HTTP-palvelin palautti väärän koodin. Odotettiin koodia 201, vastaanotettiin "%1 %2". - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2140,28 +2266,28 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Tätä kansiota ei ole tule nimetä uudelleen. Muutetaan takaisin alkuperäinen nimi. - + This folder must not be renamed. Please name it back to Shared. - + The file was renamed but is part of a read only share. The original file was restored. Tiedosto nimettiin uudelleen, mutta se on osa "vain luku"-jakoa. Alkuperäinen tiedosto palautettiin. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". HTTP-palvelin palautti väärän koodin. Odotettiin koodia 201, vastaanotettiin "%1 %2". - - + + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2169,27 +2295,32 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Tiedosto poistettu - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2197,32 +2328,32 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. Paikallinen tiedosto poistettiin synkronoinnin aikana. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + Unexpected return code from server (%1) Odottamaton paluukoodi palvelimelta (%1) - + Missing File ID from server - + Missing ETag from server @@ -2230,32 +2361,32 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. Paikallinen tiedosto poistettiin synkronoinnin aikana. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2273,42 +2404,42 @@ Osoitteen käyttäminen ei ole suositeltavaa. TekstiLeima - + Time Aika - + File Tiedosto - + Folder Kansio - + Action Toiminto - + Size Koko - + Local sync protocol Paikallinen synkronointiprotokolla - + Copy Kopioi - + Copy the activity list to the clipboard. Kopioi toimilista leikepöydälle. @@ -2349,7 +2480,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SelectiveSyncDialog - + Choose What to Sync Valitse synkronoitavat tiedot @@ -2357,33 +2488,33 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SelectiveSyncWidget - + Loading ... Ladataan... - + Deselect remote folders you do not wish to synchronize. - + Name Nimi - + Size Koko - - + + No subfolders currently on the server. Palvelimella ei ole alihakemistoja juuri nyt. - + An error occurred while loading the list of sub folders. Alikansioluetteloa ladatessa tapahtui virhe. @@ -2396,22 +2527,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. Asetukset - + Activity Toimet - + General Yleiset - + Network Verkko - + Account Tili @@ -2419,27 +2550,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SettingsDialogMac - + %1 %1 - + Activity Toimet - + General Yleiset - + Network Verkko - + Account Tili @@ -2467,35 +2598,45 @@ Osoitteen käyttäminen ei ole suositeltavaa. ownCloud-polku: - + %1 Sharing %1 - Jakaminen - + %1 %1 - + Folder: %2 Kansio: %2 - + The server does not allow sharing Palvelin ei salli jakamista - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2505,92 +2646,126 @@ Osoitteen käyttäminen ei ole suositeltavaa. Jaa UusiAsiakirja.odt - - Share link - Jaa linkki - - - + TextLabel TekstiLeima - + Set &password Aseta &salasana - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Aseta &vanhenemispäivä - + Set password Aseta salasana - - &Mail link - &Lähetä linkki sähköpostitse + + Link properties: + - Copy &link - Kopioi &linkki + Show file listing + - + Allow editing Salli muokkaus - + Anyone with the link has access to the file/folder - + + P&assword protect &Suojaa salasanalla - + Password Protected Salasanasuojattu - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password &Julkinen jakaminen vaatii salasanan - + Please Set Password Aseta salasana - - - Could not open email client - Sähköpostisovelluksen avaaminen epäonnistui - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &Jaa linkki - OCC::ShareUserGroupWidget @@ -2600,68 +2775,98 @@ Osoitteen käyttäminen ei ole suositeltavaa. Jaa UusiAsiakirja.odt - + Share with users or groups ... Jaa käyttäjien tai ryhmien kanssa… - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Ei tuloksia haulla '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Lomake + - + TextLabel - TekstiLeima + - + can edit - voi muokata + - + can share - jaa + - + ... - ... + - + create - luo + - + change - muuta + - + delete - poista + OCC::ShibbolethCredentials - + Login Error Kirjautumisvirhe - + You must sign in as user %1 Sinun tulee kirjautua käyttäjänä %1 @@ -2669,22 +2874,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Tunnistaudu - + SSL Chipher Debug View - + Reauthentication required Tunnistaudu uudelleen - + Your session has expired. You need to re-login to continue to use the client. Istunto on vanhentunut. Kirjaudu uudelleen jatkaaksesi sovelluksen käyttämistä. @@ -2692,26 +2897,46 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SocketApi - + Share with %1 parameter is ownCloud + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Varmenteen tiedot</h3> - + Common Name (CN): Yleinen nimi (CN): - + Subject Alternative Names: @@ -2796,7 +3021,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. %1 - + This connection is encrypted using %1 bit %2. Yhteys on salattu, käytössä %1-bittinen %2. @@ -2813,7 +3038,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Varmenteen tiedot: - + This connection is NOT secure as it is not encrypted. Yhteys EI OLE turvallinen, koska sitä ei ole salattu. @@ -2833,67 +3058,67 @@ Osoitteen käyttäminen ei ole suositeltavaa. Luota tähän varmisteeseen silti - + Untrusted Certificate Varmenne ei ole luotettu - + Cannot connect securely to <i>%1</i>: Yhteyttä kohteeseen <i>%1</i> ei voi muodostaa turvallisesti: - + with Certificate %1 varmenteella %1 - + &lt;not specified&gt; &lt;ei määritelty&gt; - - + + Organization: %1 Organisaatio: %1 - - + + Unit: %1 Yksikkö: %1 - - + + Country: %1 Maa: %1 - + Fingerprint (MD5): <tt>%1</tt> Sormenjälki (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Sormenjälki (SHA1): <tt>%1</tt> - + Effective Date: %1 Voimassa oleva päivämäärä: %1 - + Expiration Date: %1 Vanhenemispäivä: %1 - + Issuer: %1 Myöntäjä: %1 @@ -2901,285 +3126,300 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SyncEngine - + Success. Onnistui. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>%1-liitännäistä csyncia varten ei voitu ladata.<br/>Varmista asennuksen toimivuus!</p> - + CSync got an error while processing internal trees. Csync-synkronointipalvelussa tapahtui virhe sisäisten puurakenteiden prosessoinnissa. - - CSync failed to reserve memory. - CSync ei onnistunut varaamaan muistia. - - - + CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. CSync ei onnistunut yhdistämään verkkoon. - + A network connection timeout happened. Tapahtui verkon aikakatkaisu. - + A HTTP transmission error happened. Tapahtui HTTP-välitysvirhe. - + The mounted folder is temporarily not available on the server Liitetty kansio on väliaikaisesti pois käytöstä tällä palvelimella - + An error occurred while opening a folder Kansiota avatessa tapahtui virhe - + Error while reading folder. Kansiota lukiessa tapahtui virhe - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Tiedosto/kansi ohitetaan, koska se on piilotettu. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: %1-palvelimella ei ole tilaa vapaana. - + CSync unspecified error. CSync - määrittämätön virhe. - + Aborted by the user Keskeytetty käyttäjän toimesta - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Palvelu ei ole juuri nyt käytettävissä - + Access is forbidden Pääsy estetty - + An internal error number %1 occurred. Sisäinen virhe, numero %1. - - The item is not synced because of previous errors: %1 - Kohdetta ei synkronoitu aiempien virheiden vuoksi: %1 - - - + Symbolic links are not supported in syncing. Symboliset linkit eivät ole tuettuja synkronoinnissa. - + File is listed on the ignore list. Tiedosto on ohituslistalla. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Tiedoston nimi on liian pitkä. - + Stat failed. Stat epäonnistui. - + Filename encoding is not valid Tiedostonimen merkistökoodaus ei ole kelvollista - + Invalid characters, please rename "%1" Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - - Unable to initialize a sync journal. - - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde @@ -3195,7 +3435,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::Systray - + %1: %2 %1: %2 @@ -3203,17 +3443,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versio %1. Lisätietoja osoitteessa <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Tekijänoikeus ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3221,17 +3461,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ValidateChecksumHeader - + The checksum header is malformed. Tarkistesumman otsake on muodostettu väärin. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3239,207 +3479,207 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ownCloudGui - + Please sign in Kirjaudu sisään - + Folder %1: %2 Kansio %1: %2 - + No sync folders configured. Synkronointikansioita ei ole määritetty. - + There are no sync folders configured. Synkronointikansioita ei ole määritelty. - + Open in browser Avaa selaimessa - - - + + + Log in... Kirjaudu sisään... - - - + + + Log out Kirjaudu ulos - + Recent Changes Viimeisimmät muutokset - + Checking for changes in '%1' - + Managed Folders: Hallitut kansiot: - + Open folder '%1' Avaa kansio '%1' - + Open %1 in browser Avaa %1 selaimeen - + Unknown status Tuntematon tila - + Settings... Asetukset... - + Details... Tiedot... - + Help Ohje - + Quit %1 Lopeta %1 - + Disconnected from %1 Katkaise yhteys kohteeseen %1 - + Unsupported Server Version Palvelimen versio ei ole tuettu - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Katkaistu yhteys tileihin: - + Account %1: %2 Tili %1: %2 - + Account synchronization is disabled Tilin synkronointi on poistettu käytöstä - + Unpause all folders - + Pause all folders Keskeytä kaikki kansiot - + Unpause all synchronization Palauta kaikki synkronointi - + Unpause synchronization Palauta synkronointi - + Pause all synchronization Keskeytä kaikki synkronointi - + Pause synchronization Keskeytä synkronointi - + Log out of all accounts Kirjaudu ulos kaikista tileistä - + Log in to all accounts... Kirjaudu kaikille tileille... - + New account... Uusi tili... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Kohteita ei ole synkronoitu äskettäin - + Syncing %1 of %2 (%3 left) Synkronoidaan %1/%2 (%3 jäljellä) - + Syncing %1 of %2 Synkronoidaan %1/%2 - + Syncing %1 (%2 left) Synkronoidaan %1 (%2 jäljellä) - + Syncing %1 Synkronoidaan %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajan tasalla @@ -3447,7 +3687,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3550,78 +3790,42 @@ Osoitteen käyttäminen ei ole suositeltavaa. &Salasana + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Lomake - - Server &address: - Palvelimen &osoite: - - - - - TextLabel TekstiLeima - - - Use &secure connection - Käytä salattua &yhteyttä - - - - CheckBox - Ruksauslaatikko - - - - &Username: - &Käyttäjätunnus: - - - - Enter the ownCloud username. - Anna ownCloudin käyttäjätunnus. - - - - &Password: - &Salasana: - - - - Enter the ownCloud password. - Anna ownCloudin salasana. - - - - Do not allow the local storage of the password. - Älä tallenna salasanaa paikallisesti, vaan kysy joka kerta kun ohjelma käynnistyy. - - - - &Do not store password on local machine - &Älä tallenna salasanaa paikalliselle koneelle - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Anna sen ownCloudin verkko-osoite, johon haluat yhdistää (ilman http- tai https-etuliitettä). - Ser&ver Address @@ -3665,7 +3869,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. QApplication - + QT_LAYOUT_DIRECTION @@ -3673,42 +3877,42 @@ Osoitteen käyttäminen ei ole suositeltavaa. QObject - + in the future tulevaisuudessa - + %n day(s) ago %n päivä sitten%n päivää sitten - + %n hour(s) ago %n tunti sitten%n tuntia sitten - + now nyt - + Less than a minute ago Alle minuutti sitten - + %n minute(s) ago %n minuutti sitten%n minuuttia sitten - + Some time ago Jokin aika sitten - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3717,57 +3921,57 @@ Osoitteen käyttäminen ei ole suositeltavaa. Utility - + %L1 GB %L1 Gt - + %L1 MB %L1 Mt - + %L1 KB %L1 kt - + %L1 B %L1 t - + %n year(s) %n vuosi%n vuotta - + %n month(s) %n kuukausi%n kuukautta - + %n day(s) %n päivä%n päivää - + %n hour(s) %n tunti%n tuntia - + %n minute(s) %n minuutti%n minuuttia - + %n second(s) %n sekunti%n sekuntia - + %1 %2 %1 %2 @@ -3788,102 +3992,97 @@ Osoitteen käyttäminen ei ole suositeltavaa. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Koostettu Git-revisiosta <a href="%1">%2</a> %3, %4 käyttäen Qt:n versiota %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Ladattu - + Uploaded Lähetetty - + Server version downloaded, copied changed local file into conflict file - + Deleted Poistettu - + Moved to %1 - + Ignored - + Filesystem access error Tiedostojärjestelmän käyttövirhe - + Error Virhe - + Updated local metadata - - + + Unknown Tuntematon - + downloading ladataan - + uploading lähetetään - + deleting poistetaan - + moving siirretään - + ignoring + - error virhe - + updating local metadata @@ -3891,54 +4090,77 @@ Osoitteen käyttäminen ei ole suositeltavaa. theme - + Status undefined Tila on määrittelemätön. - + Waiting to start sync Odotetaan synkronoinnin käynnistymistä - + Sync is running Synkronointi meneillään - + Sync Success Synkronointi valmistui - + Sync Success, some files were ignored. Synkronointi onnistui, jotkin tiedostot ohitettiin. - + Sync Error Synkronointivirhe - + Setup Error Asetusvirhe. - + Preparing to sync Valmistaudutaan synkronointiin - + Aborting... Keskeytetään... - + Sync is paused Synkronointi on keskeytetty + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 5c4fcc8bf..33af765a8 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Le fichier de destination a une taille ou une date de modification inattendue @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Annuler @@ -136,188 +154,204 @@ Connecté au serveur <server> avec le compte <user> - + No account configured. Aucun compte configuré. - + Add new Ajouter un nouveau compte - + Remove Supprimer - + Account Compte - + Choose what to sync Sélectionner le contenu à synchroniser - + Force sync now Forcer la synchronisation maintenant - + Restart sync Redémarrer la synchronisation - + Remove folder sync connection Supprimer la synchronisation du dossier - + Folder creation failed Échec de création du dossier - + <p>Could not create local folder <i>%1</i>. <p>Impossible de créer le dossier local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmer une suppression de synchronisation de dossier - + Remove Folder Sync Connection Supprimer la synchronisation de ce dossier - + Sync Running Synchronisation en cours - + The syncing operation is running.<br/>Do you want to terminate it? La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? - + %1 in use %1 utilisés - + %1 as <i>%2</i> %1 avec le compte <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La version %1 du serveur est ancienne et n'est pas prise en charge. Continuez à vos risques et périls. - + Connected to %1. Connecté au serveur %1. - + Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Session sur %1 fermée. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Aucune connexion au serveur %1 à l'adresse %2. - + Log in Se connecter - + There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - + There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - + There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés par qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - + Confirm Account Removal Confirmation de retrait du compte - + <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> <p>Êtes-vous certain de vouloir retirer <i>%1</i> des comptes synchronisés avec le serveur ?</p><p><b>Remarque :</b> cela ne supprimera pas votre compte sur le serveur et aucun fichier ne sera supprimé ni localement ni en ligne.</p> - + Remove connection Retirer le compte - + + Open folder Ouvrir le dossier local - - + + Log out Se déconnecter - + Resume sync Reprendre la synchronisation - + Pause sync Mettre en pause - + <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> <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. - + %1 of %2 in use %1 utilisés sur %2 - + Currently there is no storage usage information available. Actuellement aucune information d'utilisation de stockage n'est disponible. - + No %1 connection configured. Aucune connexion à %1 configurée @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Session fermée - + Disconnected Déconnecté - + Connected Connecté - + Service unavailable Service indisponible - + + Maintenance mode + + + + Network error Erreur réseau - + Configuration error Erreur de configuration - + + Asking Credentials + + + + Unknown account state Etat du compte inconnu @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Activité serveur - + Sync Protocol - Activité locale + Activité de synchronisation - - List of ignored or erroneous files - Historique des fichiers exclus ou en erreur - - - - Copy - Copier - - - - Copy the activity list to the clipboard. - Copier la liste d'activités dans le presse-papier - - - + Not Synced Fichiers non synchronisés - + Not Synced (%1) %1 is the number of not synced files. Non Synchronisé (%1) - + The server activity list has been copied to the clipboard. L'historique des opérations sur le serveur a été copié dans le presse-papier. - + The sync activity list has been copied to the clipboard. L'historique des opérations locales a été copié dans le presse-papier. - + The list of unsynced items has been copied to the clipboard. La liste des éléments non synchronisés a été copiée dans le presse-papier. - + Copied to clipboard Copié dans le presse-papier @@ -448,47 +477,47 @@ TextLabel - + Server Activities Historique des opérations sur le serveur - + Copy Copier - + Copy the activity list to the clipboard. Copier la liste d'activités dans le presse-papier - + Action Required: Notifications Action exigée : Notifications - + <br/>Account %1 does not have activities enabled. <br/>Le compte %1 n'a aucune activité activée. - + You received %n new notification(s) from %2. Vous avez reçu %n nouvelle notification de %2.Vous avez reçu %n nouvelles notifications de %2. - + You received %n new notification(s) from %1 and %2. Vous avez reçu 1 nouvelle notification de %1 et %2.Vous avez reçu %n nouvelles notifications de %1 et %2. - + You received new notifications from %1, %2 and other accounts. Vous avez reçu de nouvelles notifications de %1, %2 et d'autres comptes. - + %1 Notifications - Action Required %1 Notifications - Action Requise @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erreur lors de l'accès au fichier de configuration - + There was an error while accessing the configuration file at %1. Une erreur s'est produite lors de l'accès au fichier de configuration situé dans %1. - + Quit ownCloud Quitter ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Aucun compte ownCloud configuré - + The configured server for this client is too old Le serveur configuré pour ce client est trop vieux - + Please update to the latest server and restart the client. Veuillez mettre à jour le serveur vers la dernière version et redémarrer le client. - + Authentication error: Either username or password are wrong. Erreur d'authentification: nom d'utilisateur et/ou mot de passe incorrect(s). - + timeout délai d'attente - + The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes - - OCC::DeleteJob - - - Connection timed out - Délai de connexion dépassé - - OCC::DiscoveryMainThread - + Aborted by the user Interrompu par l'utilisateur @@ -632,113 +653,113 @@ OCC::Folder - + Local folder %1 does not exist. Le dossier local %1 n'existe pas. - + %1 should be a folder but is not. %1 devrait être un dossier mais ne l'est pas. - + %1 is not readable. %1 ne peut pas être lu. - + %1 has been removed. %1 names a file. %1 a été supprimé. - + %1 has been downloaded. %1 names a file. %1 a été téléchargé. - + %1 has been updated. %1 names a file. %1 a été mis à jour. - + %1 has been renamed to %2. %1 and %2 name files. %1 a été renommé en %2. - + %1 has been moved to %2. %1 a été déplacé vers %2. - + %1 and %n other file(s) have been removed. %1 a été supprimé.%1 et %n autres fichiers ont été supprimés. - + %1 and %n other file(s) have been downloaded. %1 a été téléchargé.%1 et %n autres fichiers ont été téléchargés. - + %1 and %n other file(s) have been updated. %1 a été mis à jour.%1 et %n autres fichiers ont été mis à jour. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 a été renommé en %2.%1 a été renommé en %2 et %n autres fichiers ont été renommés. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 a été déplacé vers %2.%1 a été déplacé vers %2 et %n autres fichiers ont été déplacés. - + %1 has and %n other file(s) have sync conflicts. %1 a un conflit de synchronisation.%1 et %n autres fichiers ont des problèmes de synchronisation. - + %1 has a sync conflict. Please check the conflict file! %1 a un problème de synchronisation. Merci de vérifier le fichier conflit ! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 ne peut pas être synchronisé en raison d'erreurs. Consultez les logs pour les détails.%1 et %n autres fichiers n'ont pas pu être synchronisés en raison d'erreurs. Consultez les logs pour les détails. - + %1 could not be synced due to an error. See the log for details. %1 n'a pu être synchronisé pour cause d'erreur. Consultez les logs pour les détails. - + Sync Activity Activité de synchronisation - + Could not read system exclude file Impossible de lire le fichier d'exclusion du système - + A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - + A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. @@ -746,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -762,7 +783,7 @@ Si vous décidez de garder ces fichiers, ils seront synchronisés à nouveau ave Si vous décidez de supprimer ces fichiers, ils vous seront inaccessibles, sauf si vous en êtes le propriétaire. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -771,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce S'il s'agissait d'un accident et que vous choisissiez de garder vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - + Remove All Files? Supprimer tous les fichiers ? - + Remove all files Supprimer tous les fichiers - + Keep files Garder les fichiers - + This sync would reset the files to an earlier 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? @@ -795,17 +816,17 @@ Cela peut être dû à une copie de sauvegarde restaurée sur le serveur. Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? - + Backup detected Sauvegarde détectée - + Normal Synchronisation Synchronisation normale - + Keep Local Files as Conflict Garder les fichiers locaux comme Conflits @@ -813,112 +834,112 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderMan - + Could not reset folder state Impossible de réinitialiser l'état du dossier - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Un ancien fichier journal '%1' a été trouvé, mais ne peut être supprimé. Veuillez vous assurer qu’aucune application ne l'utilise en ce moment. - + (backup) (sauvegarde) - + (backup %1) (sauvegarde %1) - + Undefined State. Statut indéfini. - + Waiting to start syncing. En attente de synchronisation. - + Preparing for sync. Préparation de la synchronisation. - + Sync is running. Synchronisation en cours - + Last Sync was successful. Synchronisation terminée avec succès - + Last Sync was successful, but with warnings on individual files. Synchronisation terminée avec des avertissements pour certains fichiers - + Setup Error. Erreur d'installation. - + User Abort. Abandon par l'utilisateur. - + Sync is paused. La synchronisation est en pause. - + %1 (Sync is paused) %1 (Synchronisation en pause) - + No valid folder selected! Aucun dossier valable sélectionné ! - + The selected path is not a folder! Le chemin sélectionné n'est pas un dossier ! - + You have no permission to write to the selected folder! Vous n'avez pas la permission d'écrire dans le dossier sélectionné ! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Le dossier local %1 contient un lien symbolique. La cible du lien contient un dossier déjà synchronisé. Veuillez en choisir un autre ! - + There is already a sync from the server to this local folder. Please pick another local folder! Il y a déjà une synchronisation depuis le serveur vers ce dossier local. Merci de choisir un autre dossier local ! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Le dossier local %1 contient un dossier déjà utilisé pour une synchronisation de dossiers. Veuillez en choisir un autre ! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Le dossier local %1 se trouve dans un dossier déjà configuré pour une synchronisation de dossier. Veuillez en choisir un autre ! - + 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! Le dossier local %1 est un lien symbolique. Le dossier vers lequel le lien pointe est inclus dans un dossier déjà configuré pour une synchronisation de dossier. Veuillez en choisir un autre ! @@ -926,17 +947,17 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderStatusDelegate - + Add Folder Sync Connection Ajouter une synchronisation de dossier - + Synchronizing with local folder Sélectionnez les sous-dossiers à synchroniser à partir du dossier local - + File Fichier @@ -944,134 +965,144 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderStatusModel - + You need to be connected to add a folder Vous devez être connecté pour ajouter un dossier - + Click this button to add a folder to synchronize. Cliquez ce bouton pour ajouter un dossier à synchroniser. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. - + Signed out Session fermée - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. L'ajout de dossier est désactivé car vous synchronisez déjà tous vos fichiers. Si vous voulez synchroniser plusieurs dossiers, supprimez d'abord le dossier racine configuré actuellement. - + Fetching folder list from server... Récupération de la liste des dossiers depuis le serveur... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Recherche de modifications dans '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisation de %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) réception %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) envoi %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 sur %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 sur %2, fichier %3 sur %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 sur %2, fichier %3 sur %4 - + file %1 of %2 fichier %1 sur %2 - + Waiting... En attente ... - + Waiting for %n other folder(s)... En attente de %n autre(s) dossier(s)En attente de %n autre(s) dossier(s) - + Preparing to sync... Préparation à la synchronisation @@ -1079,12 +1110,12 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderWizard - + Add Folder Sync Connection Ajouter une synchronisation de dossier - + Add Sync Connection Ajouter une Synchronisation @@ -1097,7 +1128,7 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Cliquez pour choisir un dossier local à synchroniser. - + Enter the path to the local folder. Entrez le chemin du dossier local. @@ -1120,42 +1151,42 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Entrez le nom du nouveau dossier à créer dans '%1' : - + Folder was successfully created on %1. Le dossier a été créé sur %1 - + Authentication failed accessing %1 Erreur d'authentification lors de l'accès à %1 - + Failed to create the folder on %1. Please check manually. Échec à la création du dossier sur %1. Veuillez vérifier manuellement. - + Failed to list a folder. Error: %1 Impossible de lister un dossier. Erreur : %1 - + Choose this to sync the entire account Sélectionnez ceci pour synchroniser l'ensemble du compte - + This folder is already being synced. Ce dossier est déjà en cours de synchronisation. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Vous synchronisez déja <i>%1</i>, qui est un dossier parent de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Vous sychronisez déjà tous vos fichiers. Synchroniser un autre dossier n'est <b>pas</b> pris en charge. Si vous voulez synchroniser plusieurs dossiers, veuillez supprimer la synchronisation du dossier racine qui est configurée actuellement. @@ -1176,22 +1207,22 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Aucun E-Tag reçu du serveur, vérifiez le proxy / la passerelle - + We received a different E-Tag for resuming. Retrying next time. Nous avons reçu un E-Tag différent pour reprendre le téléchargement. Nouvel essai la prochaine fois. - + Server returned wrong content-range Le serveur a retourné une gamme de contenu erronée - + Connection Timeout Délai d'attente de connexion dépassé @@ -1214,23 +1245,23 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Pour la zone de notification - + Advanced Avancé - + Ask for confirmation before synchronizing folders larger than Demander confirmation avant de synchroniser les dossiers de taille supérieure à - + MB Trailing part of "Ask confirmation before syncing folder larger than" Mo - + Ask for confirmation before synchronizing external storages Demander confirmation avant de synchroniser des stockages externes @@ -1250,28 +1281,28 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Utiliser les icônes &monochromes - + Edit &Ignored Files Modifier les fichiers exclus - + S&how crash reporter Affic&her le rapport d'incident - - + + About À propos - + Updates Mises à jour - + &Restart && Update &Redémarrer && Mettre à jour @@ -1279,22 +1310,22 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Merci de saisir le mot de passe de %1 :<br><br>Utilisateur : %2<br>Compte : %3<br> - + Reading from keychain failed with error: '%1' Erreur lors de l'accès au trousseau : '%1' - + Enter Password Saisissez le mot de passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. @@ -1376,55 +1407,125 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Cette entrée est fournie par le système dans '%1' et ne peut être modifiée dans cette vue. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Consigner la sortie dans des fichiers de log - + &Search: &Recherche : - + &Find &Chercher - + + &Capture debug messages + + + + Clear Effacer - + Clear the log display. Effacer la fenêtre de logs. - + S&ave S&auvegarder - + Save the log file to a file on disk for debugging. Enregistrer le fichier de log sur le disque à des fins de débogage. - + Save log file Enregistrer le fichier de log - + Error Erreur - + Could not write to log file %1 Impossible d'écrire dans le fichier de log %1 @@ -1432,24 +1533,16 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::Logger - + Error Erreur - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Le fichier '%1'<br/>ne peut être ouvert en écriture.<br/><br/>Le fichier de journalisation <b>ne peut pas</b> être enregistré !</nobr> - - OCC::MoveJob - - - Connection timed out - Délai de connexion dépassé - - OCC::NSISUpdater @@ -1561,27 +1654,27 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Limiter automatiquement - + Hostname of proxy server Nom d'hôte du serveur proxy - + Username for proxy server Nom d'utilisateur pour le serveur proxy - + Password for proxy server Mot de passe pour le serveur proxy - + HTTP(S) proxy Proxy HTTP(S) - + SOCKS5 proxy Proxy SOCKS5 @@ -1594,79 +1687,112 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::NotificationWidget - + Created at %1 Créé à %1 - + Closing in a few seconds... Fermeture dans quelques secondes... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' La requête %1 a échoué à %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' sélectionné à %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Une nouvelle mise à jour de %1 est disponible - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Une nouvelle mise à jour de %1 est sur le point d'être installée. L'assistant peut demander des privilèges additionnels durant le processus. - + Downloading version %1. Please wait... Téléchargement de la version %1. Merci de patienter... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Impossible de télécharger la mise à jour. Veuillez la <a href='%1'>télécharger manuellement</a>. - + Could not check for new updates. Impossible de vérifier la présence de nouvelles mises à jour. - + %1 version %2 available. Restart application to start the update. %1 version %2 disponible. Redémarrez l'application pour commencer la mise à jour. - + New %1 version %2 available. Please use the system's update tool to install it. Une nouvelle version (%2) de %1 est disponible. Pour l'installer, veuillez utiliser l'outil de mise à jour du système. - + Checking update server... Interrogation du serveur de mises à jour... - + Update status is unknown: Did not check for new updates. L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. - + No updates available. Your installation is at the latest version. Aucune mise à jour disponible. Votre installation est à jour. @@ -1679,43 +1805,43 @@ L'assistant peut demander des privilèges additionnels durant le processus. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Connexion à %1 - + Setup local folder options Configurez les options de dossier local - + Connect... Connexion… - + %1 folder '%2' is synced to local folder '%3' le dossier %1 '%2' est synchronisé avec le dossier local '%3' - + Sync the folder '%1' Synchroniser le dossier '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Attention :</strong> Le dossier local n'est pas vide. Que voulez-vous faire ?</small></p> - + Local Sync Folder Dossier de synchronisation local - - + + (%1) (%1) @@ -1748,7 +1874,7 @@ L'assistant peut demander des privilèges additionnels durant le processus. Configurer le certificat TLS client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> @@ -1756,47 +1882,60 @@ L'assistant peut demander des privilèges additionnels durant le processus. OCC::OwncloudHttpCredsPage - + &Email &Adresse mail - + Connect to %1 Connexion à %1 - + Enter user credentials Saisissez les identifiants de connexion de l'utilisateur + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Connexion à %1 - + Setup %1 server Configurez le serveur %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Cette adresse n'est PAS sécurisée car non chiffrée. Il est déconseillé de l'utiliser. - + This url is secure. You can use it. Cette URL est sécurisée. Vous pouvez l'utiliser. - + &Next > &Suivant > @@ -1804,22 +1943,22 @@ Il est déconseillé de l'utiliser. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Échec de la connexion à %1 sur %2 :<br/>%3 - + Timeout while trying to connect to %1 at %2. Délai d'attente dépassé lors de la connexion à %1 sur %2. - + Trying to connect to %1 at %2... Tentative de connexion à %1 sur %2 ... @@ -1839,109 +1978,109 @@ Il est déconseillé de l'utiliser. Accès impossibe. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. - + Invalid URL URL invalide - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> - + Creating local sync folder %1... Création du dossier local de synchronisation %1... - + ok ok - + failed. échoué. - + Could not create local folder %1 Impossible de créer le dossier local %1 - + No remote folder specified! Aucun dossier distant spécifié ! - + Error: %1 Erreur : %1 - + creating folder on ownCloud: %1 création d'un dossier sur ownCloud : %1 - + Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. - + The remote folder %1 already exists. Connecting it for syncing. Le dossier distant %1 existe déjà. Connexion. - + The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. - + Successfully connected to %1! Connecté avec succès à %1 ! - + Connection to %1 could not be established. Please check again. La connexion à %1 n'a pu être établie. Veuillez réessayer. - + Folder rename failed Echec du renommage du dossier - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossible de supprimer et de sauvegarder le dossier parce que ce dossier ou un de ses fichiers est ouvert dans un autre programme. Veuillez fermer le dossier ou le fichier et ré-essayer, ou annuler l'installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> @@ -1949,12 +2088,12 @@ Il est déconseillé de l'utiliser. OCC::OwncloudWizard - + %1 Connection Wizard Assistant de Connexion %1 - + Skip folders configuration Passer outre la configuration des dossiers @@ -1962,33 +2101,25 @@ Il est déconseillé de l'utiliser. OCC::OwncloudWizardResultPage - + Everything set up! Tout est configuré ! - + Open Local Folder Ouvrir le dossier local - + Open %1 in Browser Ouvrir %1 dans le navigateur web - - OCC::PUTFileJob - - - Connection Timeout - Délai d'attente de connexion dépassé - - OCC::PollJob - + Invalid JSON reply from the poll URL L'URL interrogéé a renvoyé une réponse json non valide @@ -1996,7 +2127,7 @@ Il est déconseillé de l'utiliser. OCC::PropagateDirectory - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2004,47 +2135,47 @@ Il est déconseillé de l'utiliser. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Le fichier %1 ne peut pas être téléchargé en raison d'un conflit sur le nom de fichier local. - - The download would reduce free disk space below %1 - Le téléchargement réduirait l'espace libre à moins de %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Il y a moins de %1 d'espace libre sur le disque - + File was deleted from server Le fichier a été supprimé du serveur - + The file could not be downloaded completely. Le fichier n'a pas pu être téléchargé intégralement. - + The downloaded file is empty despite the server announced it should have been %1. Le fichier téléchargé est vide bien que le serveur indique que sa taille devrait être de %1. - + File %1 cannot be saved because of a local file name clash! Le fichier %1 n'a pas pu être sauvegardé en raison d'un conflit sur le nom du fichier local ! - + File has changed since discovery Le fichier a changé depuis sa découverte - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2052,17 +2183,12 @@ Il est déconseillé de l'utiliser. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Échec de la restauration : %1 - - Continue blacklisting: - Conserver sur liste noire : - - - + A file or folder was removed from a read only share, but restoring failed: %1 Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1 @@ -2070,22 +2196,22 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 impossible de supprimer le fichier %1. Erreur : %2 - + Attention, possible case sensitivity clash with %1 Attention, collision possible avec %1 à cause de la casse - + could not create folder %1 Impossible de créer le dossier %1 - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2093,17 +2219,17 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erreur lors de la suppression de '%1' : %2; - + Could not remove folder '%1' Impossible de supprimer le dossier '%1' - + Could not remove %1 because of a local file name clash Impossible de supprimer %1 à cause d'un conflit local de nom de fichier @@ -2111,13 +2237,13 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Le fichier %1 ne peut pas être renommé en %2 à cause d'un conflit local de nom de fichier - - + + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2125,12 +2251,12 @@ Il est déconseillé de l'utiliser. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Le fichier a été supprimé d'un partage en lecture seule. Il a été restauré. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 204 mais la valeur reçue est "%1 %2". @@ -2138,12 +2264,12 @@ Il est déconseillé de l'utiliser. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2151,28 +2277,28 @@ Il est déconseillé de l'utiliser. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Ce dossier ne doit pas être renommé. Il sera renommé avec son nom original. - + This folder must not be renamed. Please name it back to Shared. Le nom de ce dossier ne doit pas être changé. Veuillez le renommer en Shared. - + The file was renamed but is part of a read only share. The original file was restored. Le fichier a été renommé mais appartient à un partage en lecture seule. Le fichier original a été restauré. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Le code HTTP retourné par le serveur n'est pas valide. La valeur attendue est 201 mais la valeur reçue est "%1 %2". - - + + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2180,27 +2306,32 @@ Il est déconseillé de l'utiliser. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Impossible d'envoyer le fichier %1 car un autre fichier de même nom existe, différant seulement par la casse. - + File Removed Fichier supprimé - + Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. Elle va reprendre. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2208,32 +2339,32 @@ Il est déconseillé de l'utiliser. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2. - + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + Unexpected return code from server (%1) Le serveur a retourné un code inattendu (%1) - + Missing File ID from server L'identifiant de fichier est manquant sur le serveur - + Missing ETag from server L'information Etag de modification de fichier est manquante sur le serveur @@ -2241,32 +2372,32 @@ Il est déconseillé de l'utiliser. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Le fichier a été modifié localement mais appartient à un partage en lecture seule. Il a été restauré et vos modifications sont présentes dans le fichiers de conflit. - + Poll URL missing URL de sondage manquante - + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + The server did not acknowledge the last chunk. (No e-tag was present) Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent). @@ -2284,42 +2415,42 @@ Il est déconseillé de l'utiliser. TextLabel - + Time Heure - + File Fichier - + Folder Dossier - + Action Action - + Size Taille - + Local sync protocol - Historique des opérations locales + Historique des opérations de synchronisation locale - + Copy Copier - + Copy the activity list to the clipboard. Copier la liste d'activités dans le presse-papier @@ -2360,7 +2491,7 @@ Il est déconseillé de l'utiliser. OCC::SelectiveSyncDialog - + Choose What to Sync Sélectionner le contenu à synchroniser @@ -2368,33 +2499,33 @@ Il est déconseillé de l'utiliser. OCC::SelectiveSyncWidget - + Loading ... Chargement… - + Deselect remote folders you do not wish to synchronize. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. - + Name Nom - + Size Taille - - + + No subfolders currently on the server. Aucun sous-dossier sur le serveur. - + An error occurred while loading the list of sub folders. Une erreur est survenue lors du chargement de la liste des sous-dossiers. @@ -2407,22 +2538,22 @@ Il est déconseillé de l'utiliser. Paramètres - + Activity Activité - + General Paramètres - + Network Réseau - + Account Compte @@ -2430,27 +2561,27 @@ Il est déconseillé de l'utiliser. OCC::SettingsDialogMac - + %1 %1 - + Activity Activité - + General Paramètres - + Network Réseau - + Account Compte @@ -2478,35 +2609,45 @@ Il est déconseillé de l'utiliser. Chemin ownCloud : - + %1 Sharing Partage %1 - + %1 %1 - + Folder: %2 Dossier: %2 - + The server does not allow sharing Le serveur ne prend pas en charge le partage - + Retrieving maximum possible sharing permissions from server... Récupération des permissions de partage maximales possibles depuis le serveur... - + The file can not be shared because it was shared without sharing permission. Le fichier ne peut pas être partagé car il a été partagé sans permission de repartage. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2516,92 +2657,126 @@ Il est déconseillé de l'utiliser. Partager NewDocument.odt - - Share link - Partager par lien public - - - + TextLabel TextLabel - + Set &password Enregistrer le mot de &passe - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Spécifier une date d'&expiration - + Set password Définir le mot de passe - - &Mail link - Envoyer le lien + + Link properties: + - Copy &link - Copier le &lien + Show file listing + - + Allow editing Permettre la modification - + Anyone with the link has access to the file/folder Quiconque dispose du lien a accès aux fichiers/dossiers - + + P&assword protect Protéger par mot de p&asse - + Password Protected Protégé par mot de passe - + The file can not be shared because it was shared without sharing permission. Le fichier ne peut pas être partagé car il a été partagé sans permission de repartage. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Le p&artage public nécessite un mot de passe - + Please Set Password Veuillez choisir un mot de passe - - - Could not open email client - Impossible d'ouvrir le client de messagerie - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? - - - - - &Share link - Partager par &lien public - OCC::ShareUserGroupWidget @@ -2611,68 +2786,98 @@ Il est déconseillé de l'utiliser. Partager NewDocument.odt - + Share with users or groups ... Partager avec des utilisateurs ou groupes... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Aucun résultat pour '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Form + - + TextLabel - TextLabel + - + can edit - peut modifier + - + can share - peut partager + - + ... - ... + - + create - création + - + change - modification + - + delete - suppression + OCC::ShibbolethCredentials - + Login Error Erreur de connexion - + You must sign in as user %1 Vous devez vous connecter en tant qu'utilisateur %1 @@ -2680,22 +2885,22 @@ Il est déconseillé de l'utiliser. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Authentifier - + SSL Chipher Debug View Vue de débug Chipher SSL - + Reauthentication required Nouvelle authentification nécessaire - + Your session has expired. You need to re-login to continue to use the client. Votre session a expiré. Vous devez vous connecter à nouveau pour continuer à utiliser le client. @@ -2703,26 +2908,46 @@ Il est déconseillé de l'utiliser. OCC::SocketApi - + Share with %1 parameter is ownCloud Partager avec %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Détails du certificat</h3> - + Common Name (CN): Nom commun (CN) : - + Subject Alternative Names: Noms alternatifs du sujet : @@ -2807,7 +3032,7 @@ Il est déconseillé de l'utiliser. %1 - + This connection is encrypted using %1 bit %2. Cette connexion est chiffrée en utilisant %1 bit %2. @@ -2824,7 +3049,7 @@ Il est déconseillé de l'utiliser. Informations du certificat : - + This connection is NOT secure as it is not encrypted. Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. @@ -2844,67 +3069,67 @@ Il est déconseillé de l'utiliser. Faire confiance à ce certificat malgré tout - + Untrusted Certificate Certificat non fiable - + Cannot connect securely to <i>%1</i>: Impossible de se connecter de manière sécurisée à <i>%1</i> : - + with Certificate %1 avec certificat %1 - + &lt;not specified&gt; &lt;non spécifié&gt; - - + + Organization: %1 Organisation : %1 - - + + Unit: %1 Unité : %1 - - + + Country: %1 Pays : %1 - + Fingerprint (MD5): <tt>%1</tt> Empreinte (MD5) : <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> - + Effective Date: %1 Date de début de validité : %1 - + Expiration Date: %1 Date d'expiration : %1 - + Issuer: %1 Émetteur : %1 @@ -2912,285 +3137,300 @@ Il est déconseillé de l'utiliser. OCC::SyncEngine - + Success. Succès. - + CSync failed to load the journal file. The journal file is corrupted. CSync a échoué à charger du fichier journal. Le fichier journal est corrompu. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Le module additionnel %1 pour csync n'a pas pu être chargé.<br/>Merci de vérifier votre installation !</p> - + CSync got an error while processing internal trees. Erreur CSync lors du traitement des arbres internes. - - CSync failed to reserve memory. - Erreur lors de l'allocation mémoire par CSync. - - - + CSync fatal parameter error. Erreur fatale CSync : mauvais paramètre. - + CSync processing step update failed. Erreur CSync lors de l'opération de mise à jour - + CSync processing step reconcile failed. Erreur CSync lors de l'opération de réconciliation - + CSync could not authenticate at the proxy. CSync n'a pu s'authentifier auprès du proxy. - + CSync failed to lookup proxy or server. CSync n'a pu trouver le proxy ou serveur auquel se connecter. - + CSync failed to authenticate at the %1 server. CSync n'a pu s'authentifier auprès du serveur %1. - + CSync failed to connect to the network. CSync n'a pu établir une connexion au réseau. - + A network connection timeout happened. Le délai d'attente de la connexion réseau a été dépassé. - + A HTTP transmission error happened. Une erreur de transmission HTTP s'est produite. - + The mounted folder is temporarily not available on the server Le dossier monté est temporairement indisponible sur le serveur - + An error occurred while opening a folder Une erreur est survenue lors de l'ouverture d'un dossier - + Error while reading folder. Erreur lors de la lecture du dossier. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Le fichier ou dossier a été ignoré car il est masqué. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync : Aucun espace disponible sur le serveur %1. - + CSync unspecified error. Erreur CSync inconnue. - + Aborted by the user Interrompu par l'utilisateur - + CSync failed to access CSync n'a pas pu accéder à - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync n’a pu charger ou créer le fichier de journalisation. Veuillez vérifier que vous possédez les droits en lecture/écriture dans le dossier de synchronisation local. - + CSync failed due to unhandled permission denied. CSync a échoué en raison d'un refus de permission non pris en charge. - + CSync tried to create a folder that already exists. CSync a tenté de créer un dossier déjà présent. - + The service is temporarily unavailable Le service est temporairement indisponible. - + Access is forbidden L'accès est interdit - + An internal error number %1 occurred. Une erreur interne numéro %1 est survenue. - - The item is not synced because of previous errors: %1 - Cet élément n'a pas été synchronisé en raison des erreurs précédentes : %1 - - - + Symbolic links are not supported in syncing. Les liens symboliques ne sont pas pris en charge par la synchronisation. - + File is listed on the ignore list. Le fichier est présent dans la liste des fichiers à exclure. - + File names ending with a period are not supported on this file system. Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. - + File names containing the character '%1' are not supported on this file system. Les noms de fichier contenant le caractère '%1' ne sont pas pris en charge sur votre système. - + The file name is a reserved name on this file system. Le nom du fichier est réservé sur votre système. - + Filename contains trailing spaces. Le nom du fichier se fini par des espaces. - + Filename is too long. Le nom de fichier est trop long. - + Stat failed. Stat échoué. - + Filename encoding is not valid L'encodage du nom de fichier n'est pas valide - + Invalid characters, please rename "%1" Caractères non valides. Veuillez renommer "%1" - - Unable to initialize a sync journal. - Impossible d'initialiser un journal de synchronisation. - - - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source @@ -3206,7 +3446,7 @@ Il est déconseillé de l'utiliser. OCC::Systray - + %1: %2 %1 : %2 @@ -3214,17 +3454,17 @@ Il est déconseillé de l'utiliser. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. Pour plus d'information, visitez <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud, Inc.</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribué par %1 et sous licence GNU General Public License (GPL) Version 2.0.<br/>%2 et le logo %2 sont des marques enregistrées de %1 aux Etats-Unis, dans d'autres pays, ou les deux.</p> @@ -3232,17 +3472,17 @@ Il est déconseillé de l'utiliser. OCC::ValidateChecksumHeader - + The checksum header is malformed. L'entête de somme de contrôle est mal formée. - + The checksum header contained an unknown checksum type '%1' L'en-tête de la somme de contrôle contenait un type de somme de contrôle inconnu '%1' - + The downloaded file does not match the checksum, it will be resumed. Le fichier téléchargé ne correspond pas à la somme de contrôle, il va être téléchargé à nouveau. @@ -3250,207 +3490,207 @@ Il est déconseillé de l'utiliser. OCC::ownCloudGui - + Please sign in Veuillez vous connecter - + Folder %1: %2 Dossier %1 : %2 - + No sync folders configured. Aucun dossier synchronisé n'est configuré - + There are no sync folders configured. Aucun dossier à synchroniser n'est configuré - + Open in browser Ouvrir dans le navigateur web - - - + + + Log in... Connexion... - - - + + + Log out Se déconnecter - + Recent Changes Modifications récentes - + Checking for changes in '%1' Recherche de modifications dans '%1' - + Managed Folders: Dossiers configurés - + Open folder '%1' Ouvrir le dossier local '%1' - + Open %1 in browser Ouvrir %1 dans le navigateur - + Unknown status Statut inconnu - + Settings... Paramètres... - + Details... Toutes les modifications... - + Help Aide... - + Quit %1 Quitter %1 - + Disconnected from %1 Déconnecté de %1 - + Unsupported Server Version Version du Serveur non prise en charge - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Le serveur sur le compte %1 fonctionne avec une version ancienne et non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. - + Disconnected from accounts: Déconnecté des comptes : - + Account %1: %2 Compte %1 : %2 - + Account synchronization is disabled La synchronisation est en pause - + Unpause all folders Relancer tous les dossiers - + Pause all folders Mettre en pause tous les dossiers - + Unpause all synchronization Relancer toutes les synchronisations - + Unpause synchronization Relancer la synchronisation - + Pause all synchronization Mettre en pause toutes les synchronisations - + Pause synchronization Mettre en pause la synchronisation - + Log out of all accounts Se déconnecter de tous les comptes - + Log in to all accounts... Se connecter à tous les comptes... - + New account... Nouveau compte… - + Crash now Only shows in debug mode to allow testing the crash handler Plantage maintenant - + No items synced recently Aucun élément synchronisé récemment - + Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restantes) - + Syncing %1 of %2 Synchronisation %1 sur %2 - + Syncing %1 (%2 left) Synchronisation de %1 (%2 restantes) - + Syncing %1 Synchronisation de %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date À jour @@ -3458,7 +3698,7 @@ Il est déconseillé de l'utiliser. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3561,78 +3801,42 @@ Il est déconseillé de l'utiliser. &Mot de passe + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulaire - - Server &address: - &Adresse du serveur : - - - - - TextLabel Zone de texte - - - Use &secure connection - Utiliser une connexion &sécurisée - - - - CheckBox - Case à cocher - - - - &Username: - &Nom d'utilisateur : - - - - Enter the ownCloud username. - Veuillez saisir le nom d'utilisateur ownCloud. - - - - &Password: - &Mot de passe : - - - - Enter the ownCloud password. - Veuillez saisir le mot de passe ownCloud. - - - - Do not allow the local storage of the password. - Ne pas permettre la mémorisation du mot de passe en local. - - - - &Do not store password on local machine - Ne &pas mémoriser le mot de passe sur la machine locale - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Veuillez saisir l'adresse du serveur ownCloud auquel vous souhaitez vous connecter (sans http ni https). - Ser&ver Address @@ -3676,7 +3880,7 @@ Il est déconseillé de l'utiliser. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3684,42 +3888,42 @@ Il est déconseillé de l'utiliser. QObject - + in the future Dans le futur - + %n day(s) ago HierIl y a %n jours - + %n hour(s) ago Il y a %n heureIl y a %n heures - + now maintenant - + Less than a minute ago Il y a moins d'une minute - + %n minute(s) ago Il y a %n minuteIl y a %n minutes - + Some time ago Il y a quelque temps - + %1: %2 this displays an error string (%2) for a file %1 %1 : %2 @@ -3728,57 +3932,57 @@ Il est déconseillé de l'utiliser. Utility - + %L1 GB %L1 Go - + %L1 MB %L1 Mo - + %L1 KB %L1 Ko - + %L1 B %L1 octets - + %n year(s) %n an%n ans - + %n month(s) %n mois%n mois - + %n day(s) %n jour%n jours - + %n hour(s) %n heure%n heures - + %n minute(s) %n minute%n minutes - + %n second(s) %n seconde%n secondes - + %1 %2 %1 %2 @@ -3799,102 +4003,97 @@ Il est déconseillé de l'utiliser. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construit à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6.</small><p> - - - built with %1 - réalisé avec %1 - progress - + Downloaded Reçu - + Uploaded Envoyé - + Server version downloaded, copied changed local file into conflict file La version du serveur est téléchargée, les changements locaux ont été copiés dans un fichier conflit. - + Deleted Supprimé - + Moved to %1 Déplacé vers %1 - + Ignored Ignoré - + Filesystem access error Erreur d'accès au système de fichiers - + Error Erreur - + Updated local metadata Métadonnées locales mises à jour - - + + Unknown Inconnu - + downloading téléchargement de - + uploading téléversement - + deleting suppression - + moving déplacement - + ignoring Ignore + - error erreur - + updating local metadata Mise à jour des métadonnées locales @@ -3902,54 +4101,77 @@ Il est déconseillé de l'utiliser. theme - + Status undefined Statut indéfini - + Waiting to start sync Synchronisation en attente - + Sync is running Synchronisation en cours - + Sync Success Synchronisation réussie - + Sync Success, some files were ignored. Synchronisation terminée avec succès, certains fichiers ont été ignorés. - + Sync Error Erreur de synchronisation - + Setup Error Erreur de configuration - + Preparing to sync Préparation à la synchronisation - + Aborting... Annulation... - + Sync is paused La synchronisation est en pause + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 77d352a4e..3ff42e260 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O ficheiro de destino ten un tamaño ou unha hora de modificación non agardados @@ -81,6 +81,24 @@ Etiqueta de texto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancelar @@ -136,188 +154,204 @@ Conectado con <server> como <user> - + No account configured. Non hai contas configuradas. - + Add new Engadir novo - + Remove Retirar - + Account Conta - + Choose what to sync Escolla que sincronizar - + Force sync now Forzar a sincronización - + Restart sync Reiniciar a sincronización - + Remove folder sync connection Retirar a conexión da sincronización do cartafol - + Folder creation failed Non foi posíbel crear o cartafol - + <p>Could not create local folder <i>%1</i>. <p>Non foi posíbel crear o cartafol local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmar a retirada da conexión da sincronización do cartafol - + Remove Folder Sync Connection Retirar a conexión da sincronización do cartafol - + Sync Running Sincronización en proceso - + The syncing operation is running.<br/>Do you want to terminate it? Estase a realizar a sincronización.<br/>Quere interrompela e rematala? - + %1 in use %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Este servidor da versión %1 é vello e non ten soporte! Vostede verá o que fai. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O servidor %1 non está dispoñíbel temporalmente. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Desconectado de %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Non hai conexión con %1 en %2. - + Log in Acceder - + There are folders that were not synchronized because they are too big: Hai cartafoles que non se sincronizaron por ser demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hai cartafoles que non se sincronizaron porque son almacenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Hai cartafoles que non se sincronizaron porque son demasiado grandes ou almacenamentos externos: - + Confirm Account Removal Confirme a retirada da conta - + <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> <p>De verdade quere retirar a conexión a conta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>non</b> eliminará ningún ficheiro.</p> - + Remove connection Retirar conexión - + + Open folder Abrir o cartafol - - + + Log out Desconectar - + Resume sync Continuar coa sincronización - + Pause sync Por en pausa a sincronización - + <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> <p>Quere realmente deixar de sincronizar o cartafol <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>non</b> eliminará ningún ficheiro.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algúns cartafoles, incluíndo os compartidos e os montados en rede, poderían ter diferentes límites. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente non hai dispoñíbel ningunha información sobre o uso do almacenamento. - + No %1 connection configured. Non se configurou a conexión %1. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Desconectado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Servizo non dispoñíbel - + + Maintenance mode + + + + Network error Produciuse un erro de rede - + Configuration error Produciuse un erro de configuración - + + Asking Credentials + + + + Unknown account state Estado da conta descoñecido @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Actividade do servidor - + Sync Protocol Protocolo de sincronización - - List of ignored or erroneous files - Lista de ficheiros ignorados ou con erros - - - - Copy - Copiar - - - - Copy the activity list to the clipboard. - Copiar a lista da actividade no portapapeis. - - - + Not Synced Non sincronizado - + Not Synced (%1) %1 is the number of not synced files. Non sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de actividade do servidor copiouse no portapapeis. - + The sync activity list has been copied to the clipboard. A lista de actividade de sincronización foi copiada ao portapapeis. - + The list of unsynced items has been copied to the clipboard. A lista de elementos non sincronizados foi copiada ao portapapeis. - + Copied to clipboard Copiado no portapapeis. @@ -448,47 +477,47 @@ Etiqueta de texto - + Server Activities Actividades do servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista da actividade no portapapeis. - + Action Required: Notifications Acción requerida: Notificacións - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 non ten as actividades habilitadas. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Non hai configurada ningunha conta ownCloud - + The configured server for this client is too old O servidor configurado para este cliente é moi antigo - + Please update to the latest server and restart the client. Actualice ao último servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Produciuse un erro de autenticación: Ou o nome de usuario ou o contrasinal poderían ser erróneos - + timeout caducidade - + The provided credentials are not correct As credenciais fornecidas non son correctas - - OCC::DeleteJob - - - Connection timed out - Esgotouse o tempo de conexión - - OCC::DiscoveryMainThread - + Aborted by the user Interrompido polo usuario @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. O cartafol local %1 non existe. - + %1 should be a folder but is not. - + %1 is not readable. %1 non é lexíbel. - + %1 has been removed. %1 names a file. %1 foi retirado satisfactoriamente. - + %1 has been downloaded. %1 names a file. %1 foi descargado satisfactoriamente. - + %1 has been updated. %1 names a file. %1 foi enviado satisfactoriamente. - + %1 has been renamed to %2. %1 and %2 name files. %1 foi renomeado satisfactoriamente a %2 - + %1 has been moved to %2. %1 foi movido satisfactoriamente a %2 - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 non puido sincronizarse por mor dun erro. Vexa os detalles no rexistro. - + Sync Activity Actividade de sincronización - + Could not read system exclude file Non foi posíbel ler o ficheiro de exclusión do sistema - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Retirar todos os ficheiros? - + Remove all files Retirar todos os ficheiros - + Keep files Manter os ficheiros - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Non foi posíbel restabelecer o estado do cartafol - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Atopouse un rexistro de sincronización antigo en «%1» máis non pode ser retirado. Asegúrese de que non o está a usar ningunha aplicación. - + (backup) (copia de seguranza) - + (backup %1) (copia de seguranza %1) - + Undefined State. Estado sen definir. - + Waiting to start syncing. - + Preparing for sync. Preparando para sincronizar. - + Sync is running. Estase sincronizando. - + Last Sync was successful. A última sincronización fíxose correctamente. - + Last Sync was successful, but with warnings on individual files. A última sincronización fíxose correctamente, mais con algún aviso en ficheiros individuais. - + Setup Error. Erro de configuración. - + User Abort. Interrompido polo usuario. - + Sync is paused. Sincronización en pausa. - + %1 (Sync is paused) %1 (sincronización en pausa) - + No valid folder selected! Non seleccionou ningún cartafol correcto! - + The selected path is not a folder! - + You have no permission to write to the selected folder! Vostede non ten permiso para escribir neste cartafol! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File Ficheiro @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Ten que estar conectado para engadir un cartafol - + Click this button to add a folder to synchronize. Prema nesta botón para engadir un cartafol para sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Desconectado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Prema para escoller un cartafol local para sincronizar. - + Enter the path to the local folder. Escriba a ruta ao cartafol local. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Introduza o nome do novo cartafol que se creará a seguir «%1»: - + Folder was successfully created on %1. Creouse correctamente o cartafol en %1. - + Authentication failed accessing %1 Non foi posíbel facer a autenticación accedendo a %1 - + Failed to create the folder on %1. Please check manually. Non foi posíbel crear o cartafol en %1. Compróbeo manualmente. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Escolla isto para sincronizar toda a conta - + This folder is already being synced. Este cartafol xa está sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Xa está a sincronizar <i>%1</i>, é o cartafol pai de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Xa se están a sincronizar todos os ficheiros. Isto <b>non</b> é compatíbel co sincronización doutro cartafol. Se quere sincronizar varios cartafoles, retire a sincronización do cartafol raíz configurado actualmente. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Non se recibiu a «E-Tag» do servidor, comprobe o proxy e/ou a pasarela - + We received a different E-Tag for resuming. Retrying next time. Recibiuse unha «E-Tag» diferente para continuar. Tentándoo outra vez. - + Server returned wrong content-range O servidor devolveu un intervalo de contidos estragado - + Connection Timeout Esgotouse o tempo de conexión @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Para a área de notificación - + Advanced Avanzado - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Edit &Ignored Files - + S&how crash reporter - - + + About Sobre - + Updates Actualizacións - + &Restart && Update &Reiniciar e actualizar @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' A lectura do chaveiro fallou co erro: «%1» - + Enter Password Escriba o contrasinal - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Esta entrada é fornecida polo sistema en «%1» e non pode ser modificado nesta vista. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Rexistro da saída - + &Search: &Buscar: - + &Find &Atopar - + + &Capture debug messages + + + + Clear Limpar - + Clear the log display. Limpar a saída de rexistro. - + S&ave &Gardar - + Save the log file to a file on disk for debugging. Gardar o ficheiro de rexistro a un ficheiro no disco para depuración. - + Save log file Gardar o ficheiro de rexistro - + Error Erro - + Could not write to log file %1 Non se puido escribir no ficheiro de rexistro %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>O ficheiro «%1»<br/> non se pode abrir para escritura.<br/><br/>A saída do rexistro <b>non</n> se pode gardar!</nobr> - - OCC::MoveJob - - - Connection timed out - Esgotouse o tempo de conexión - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Limitar automáticamente - + Hostname of proxy server Nome de host para o servidor proxy - + Username for proxy server Nome de usuario para o servidor proxy - + Password for proxy server Contrasinal para o servidor proxy - + HTTP(S) proxy Proxy HTTP(S) - + SOCKS5 proxy Proxy SOCKS5 @@ -1582,79 +1675,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Preparada a nova actualización %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Está a piques de instalarse unha nova actualización para %1. O proceso de actualización pode pedir privilexios adicionais durante o procedemento. - + Downloading version %1. Please wait... Descargando a versión %1. Agarde... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Non foi posíbel descargar a actualización. Prema <a href='%1'>aquí</a> para descargar manualmente a actualización. - + Could not check for new updates. Non foi posíbel comprobar se hai novas actualizacións. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Comprobando o servidor de actualizacións... - + Update status is unknown: Did not check for new updates. O estado da actualización é descoñecido: non se comprobaron as actualizacións. - + No updates available. Your installation is at the latest version. Non hai actualizacións dispoñíbeis. A instalación xa está na versión máis recente @@ -1667,43 +1793,43 @@ actualización pode pedir privilexios adicionais durante o procedemento. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Conectar con %1 - + Setup local folder options Estabelecer as opcións do cartafol local - + Connect... Conectar... - + %1 folder '%2' is synced to local folder '%3' O cartafol %1 «%2» está sincronizado co cartafol local «%3» - + Sync the folder '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Sincronización do cartafol local - - + + (%1) (%1) @@ -1736,7 +1862,7 @@ actualización pode pedir privilexios adicionais durante o procedemento.Configurar o certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Produciuse un erro ao conectar co enderezo seguro do servidor <em>%1</em>. Como quere proceder?</p></body></html> @@ -1744,47 +1870,60 @@ actualización pode pedir privilexios adicionais durante o procedemento. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 Conectar con %1 - + Enter user credentials Escriba as credenciais do usuario + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Conectar con %1 - + Setup %1 server Estabelecer o servidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Este sitio de Internet non é seguro, xa que non está cifrado. Recomendámoslle que non o use. - + This url is secure. You can use it. Este URL é seguro. Pode utilizalo. - + &Next > &Seguinte > @@ -1792,22 +1931,22 @@ Recomendámoslle que non o use. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectouse correctamente a %1: %2 versión %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Non foi posíbel conectar con %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Esgotouse o tempo tentando conectarse a %1 en %2... - + Trying to connect to %1 at %2... Tentando conectarse a %1 en %2... @@ -1827,109 +1966,109 @@ Recomendámoslle que non o use. Acceso prohibido polo servidor. Para comprobar que dispón do acceso axeitado, <a href="%1">prema aquí</a> para acceder ao servizo co seu navegador. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> O cartafol de sincronización local %1 xa existe. Configurándoo para a sincronización.<br/><br/> - + Creating local sync folder %1... Creando un cartafol local de sincronización %1... - + ok aceptar - + failed. fallou. - + Could not create local folder %1 Non foi posíbel crear o cartafol local %1 - + No remote folder specified! Non foi especificado o cartafol remoto! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 creando o cartafol en ownCloud: %1 - + Remote folder %1 created successfully. O cartafol remoto %1 creouse correctamente. - + The remote folder %1 already exists. Connecting it for syncing. O cartafol remoto %1 xa existe. Conectándoo para a sincronización. - + The folder creation resulted in HTTP error code %1 A creación do cartafol resultou nun código de erro HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A creación do cartafol remoto fracasou por por de seren incorrectas as credenciais!<br/>Volva atrás e comprobe as súas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A creación do cartafol remoto fallou probabelmente debido a que as credenciais que se deron non foran as correctas.</font><br/>Volva atrás e comprobe as súas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Produciuse un fallo ao crear o cartafol remoto %1 e dou o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Estabeleceuse a conexión de sincronización de %1 ao directorio remoto %2. - + Successfully connected to %1! Conectou satisfactoriamente con %1 - + Connection to %1 could not be established. Please check again. Non foi posíbel estabelecer a conexión con %1. Compróbeo de novo. - + Folder rename failed Non foi posíbel renomear o cartafol - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Non é posíbel retirar e facer unha copia de seguranza do cartafol, xa que o cartafol ou un ficheiro está aberto noutro programa Peche o cartafol ou o ficheiro e ténteo de novo, ou cancele a acción. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>O cartafol local de sincronización %1 creouse correctamente!</b></font> @@ -1937,12 +2076,12 @@ Recomendámoslle que non o use. OCC::OwncloudWizard - + %1 Connection Wizard Asistente de conexión %1 - + Skip folders configuration Omitir a configuración dos cartafoles @@ -1950,33 +2089,25 @@ Recomendámoslle que non o use. OCC::OwncloudWizardResultPage - + Everything set up! Todo axustado! - + Open Local Folder Abrir o cartafol local - + Open %1 in Browser Abrir %1 no navegador - - OCC::PUTFileJob - - - Connection Timeout - Esgotouse o tempo de conexión - - OCC::PollJob - + Invalid JSON reply from the poll URL O URL requirido devolveu unha resposta JSON incorrecta @@ -1984,7 +2115,7 @@ Recomendámoslle que non o use. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1992,47 +2123,47 @@ Recomendámoslle que non o use. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Non é posíbel descargar o ficheiro %1 por mor dunha colisión co nome dun ficheiro local! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server O ficheiro vai seren eliminado do servidor - + The file could not be downloaded completely. Non foi posíbel descargar completamente o ficheiro. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! Non foi posíbel gardar o ficheiro %1 por mor dunha colisión co nome dun ficheiro local! - + File has changed since discovery O ficheiro cambiou após seren atopado - + Error writing metadata to the database @@ -2040,17 +2171,12 @@ Recomendámoslle que non o use. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Fallou a restauración: %1 - - Continue blacklisting: - Continuar as listas negras: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2058,22 +2184,22 @@ Recomendámoslle que non o use. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atención, posíbel colisión entre maiúsculas e minúsculas con %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2081,17 +2207,17 @@ Recomendámoslle que non o use. OCC::PropagateLocalRemove - + Error removing '%1': %2; Produciuse un erro ao retirar «%1»: %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Non é posíbel retirar %1 por mor dunha colisión co nome dun ficheiro local @@ -2099,13 +2225,13 @@ Recomendámoslle que non o use. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Non é posíbel renomear o ficheiro %1 como %2 por mor dunha colisión co nome dun ficheiro local - - + + Error writing metadata to the database @@ -2113,12 +2239,12 @@ Recomendámoslle que non o use. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Foi retirado un ficheiro desde unha compartición de só lectura. Foi restaurado. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". O servidor devolveu código HTTP incorrecto. Agardábase 204, mais recibiuse «%1 %2». @@ -2126,12 +2252,12 @@ Recomendámoslle que non o use. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". O servidor devolveu código HTTP incorrecto. Agardábase 201, mais recibiuse «%1 %2». - + Error writing metadata to the database @@ -2139,28 +2265,28 @@ Recomendámoslle que non o use. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Non é posíbel renomear este cartafol. Non se lle cambiou o nome, mantense o orixinal. - + This folder must not be renamed. Please name it back to Shared. Non é posíbel renomear este cartafol. Devólvalle o nome ao compartido. - + The file was renamed but is part of a read only share. The original file was restored. O ficheiro foi renomeado mais é parte dunha compartición de só lectura. O ficheiro orixinal foi restaurado. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". O servidor devolveu código HTTP incorrecto. Agardábase 201, mais recibiuse «%1 %2». - - + + Error writing metadata to the database @@ -2168,27 +2294,32 @@ Recomendámoslle que non o use. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Ficheiro retirado - + Local file changed during syncing. It will be resumed. O ficheiro local cambiou durante a sincronización. Retomase. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2196,32 +2327,32 @@ Recomendámoslle que non o use. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2. - + The local file was removed during sync. O ficheiro local retirarase durante a sincronización. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2229,32 +2360,32 @@ Recomendámoslle que non o use. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O ficheiro foi editado localmente mais é parte dunha compartición de só lectura. O ficheiro foi restaurado e a súa edición atopase no ficheiro de conflitos. - + Poll URL missing Non se atopa o URL requirido - + The local file was removed during sync. O ficheiro local retirarase durante a sincronización. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2272,42 +2403,42 @@ Recomendámoslle que non o use. Etiqueta de texto - + Time Hora - + File Ficheiro - + Folder Cartafol - + Action Acción - + Size Tamaño - + Local sync protocol - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista da actividade no portapapeis. @@ -2348,7 +2479,7 @@ Recomendámoslle que non o use. OCC::SelectiveSyncDialog - + Choose What to Sync Escolla que sincronizar @@ -2356,33 +2487,33 @@ Recomendámoslle que non o use. OCC::SelectiveSyncWidget - + Loading ... Cargando ... - + Deselect remote folders you do not wish to synchronize. - + Name Nome - + Size Tamaño - - + + No subfolders currently on the server. Actualmente non hai subcartafoles no servidor. - + An error occurred while loading the list of sub folders. @@ -2395,22 +2526,22 @@ Recomendámoslle que non o use. Axustes - + Activity Actividade - + General Xeral - + Network Rede - + Account Conta @@ -2418,27 +2549,27 @@ Recomendámoslle que non o use. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividade - + General Xeral - + Network Rede - + Account Conta @@ -2466,35 +2597,45 @@ Recomendámoslle que non o use. Ruta ao ownCloud: - + %1 Sharing Compartindo %1 - + %1 %1 - + Folder: %2 Cartafol: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. Non é posíbel compartir o ficheiro, xa que foi compartido sen permisis para compartir. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2504,92 +2645,126 @@ Recomendámoslle que non o use. Compartir NovoDocumento.odt - - Share link - Ligazón para compartir - - - + TextLabel Etiqueta de texto - + Set &password Estabelecer o &contrasinal - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Definir a &data de caducidade - + Set password Estabelecer o contrasinal - - &Mail link + + Link properties: - Copy &link - Copiar a &ligazón + Show file listing + - + Allow editing Permitir a edición - + Anyone with the link has access to the file/folder - + + P&assword protect Contr&asinal de protección - + Password Protected Protexido con contrasinal - + The file can not be shared because it was shared without sharing permission. Non é posíbel compartir o ficheiro, xa que foi compartido sen permisis para compartir. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password A comp&artición pública precisa de contrasinal - + Please Set Password Estabeleza o contrasinal - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &Ligazón para compartir - OCC::ShareUserGroupWidget @@ -2599,68 +2774,98 @@ Recomendámoslle que non o use. Compartir NovoDocumento.odt - + Share with users or groups ... Compartir con usuarios ou grupos ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulario + - + TextLabel - Etiqueta de texto + - + can edit - pode editar + - + can share - pode compartir + - + ... - ... + - + create - crear + - + change - cambio + - + delete - eliminar + OCC::ShibbolethCredentials - + Login Error Erro de acceso - + You must sign in as user %1 Ten que rexistrarse como usuario %1 @@ -2668,22 +2873,22 @@ Recomendámoslle que non o use. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticado - + SSL Chipher Debug View - + Reauthentication required É necesario volver autenticarse - + Your session has expired. You need to re-login to continue to use the client. Caducou a sesión. É necesario que volva a acceder para seguir usando o cliente. @@ -2691,26 +2896,46 @@ Recomendámoslle que non o use. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartir con %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalles do certificado</h3> - + Common Name (CN): Nome común (CN): - + Subject Alternative Names: Nomes alternativos do titular: @@ -2795,7 +3020,7 @@ Recomendámoslle que non o use. %1 - + This connection is encrypted using %1 bit %2. Esta conexión está cifrada empregando %1 a %2 bits. @@ -2812,7 +3037,7 @@ Recomendámoslle que non o use. Información do certificado: - + This connection is NOT secure as it is not encrypted. Esta conexión non é segura e non está cifrada. @@ -2832,67 +3057,67 @@ Recomendámoslle que non o use. Confiar igualmente neste certificado - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 co certificado %1 - + &lt;not specified&gt; &lt;sen especificar&gt; - - + + Organization: %1 Organización: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Pegada dixital (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Pegada dixital (SHA1): <tt>%1</tt> - + Effective Date: %1 Data de aplicación: %1 - + Expiration Date: %1 Data de caducidade: %1 - + Issuer: %1 Emisor: %1 @@ -2900,285 +3125,300 @@ Recomendámoslle que non o use. OCC::SyncEngine - + Success. Correcto. - + CSync failed to load the journal file. The journal file is corrupted. Produciuse un fallo en CSync ao cargar o ficheiro de rexistro. O ficheiro de rexistro está estragado. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Non foi posíbel cargar o engadido %1 para CSync.<br/>Verifique a instalación!</p> - + CSync got an error while processing internal trees. CSync tivo un erro ao procesar árbores internas. - - CSync failed to reserve memory. - Produciuse un fallo ao reservar memoria para CSync. - - - + CSync fatal parameter error. Produciuse un erro fatal de parámetro CSync. - + CSync processing step update failed. Produciuse un fallo ao procesar o paso de actualización de CSync. - + CSync processing step reconcile failed. Produciuse un fallo ao procesar o paso de reconciliación de CSync. - + CSync could not authenticate at the proxy. CSync non puido autenticarse no proxy. - + CSync failed to lookup proxy or server. CSYNC no puido atopar o servidor proxy. - + CSync failed to authenticate at the %1 server. CSync non puido autenticarse no servidor %1. - + CSync failed to connect to the network. CSYNC no puido conectarse á rede. - + A network connection timeout happened. Excedeuse do tempo de espera para a conexión á rede. - + A HTTP transmission error happened. Produciuse un erro na transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Non hai espazo dispoñíbel no servidor %1. - + CSync unspecified error. Produciuse un erro non especificado de CSync - + Aborted by the user Interrompido polo usuario - + CSync failed to access Produciuse un fallo ao reservar memoria para CSync. - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable O servizo está temporalmente inaccesíbel. - + Access is forbidden - + An internal error number %1 occurred. Produciuse un erro interno número %1. - - The item is not synced because of previous errors: %1 - Este elemento non foi sincronizado por mor de erros anteriores: %1 - - - + Symbolic links are not supported in syncing. As ligazóns simbolicas non son admitidas nas sincronizacións - + File is listed on the ignore list. O ficheiro está na lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. O nome de ficheiro é longo de máis. - + Stat failed. Fallou a obtención de estatísticas. - + Filename encoding is not valid O nome de ficheiro codificado non é correcto - + Invalid characters, please rename "%1" Caracteres incorrectos, déalle outro nome a «%1» - - Unable to initialize a sync journal. - Non é posíbel preparar un rexistro de sincronización. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe @@ -3194,7 +3434,7 @@ Recomendámoslle que non o use. OCC::Systray - + %1: %2 %1: %2 @@ -3202,17 +3442,17 @@ Recomendámoslle que non o use. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versión %1. Para obter máis información visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado baixo a Licenza Pública Xeral (GPL) GNU Versión 2.0.<br/>Os logotipos %2 e %2 son marcas rexistradas de %1 nos Estados Unidos de Norte América e/ou outros países.</p> @@ -3220,17 +3460,17 @@ Recomendámoslle que non o use. OCC::ValidateChecksumHeader - + The checksum header is malformed. A cabeceira da suma de comprobación é incorrecta. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. O ficheiro descargado non coincide coa suma de comprobación. Retomase. @@ -3238,207 +3478,207 @@ Recomendámoslle que non o use. OCC::ownCloudGui - + Please sign in Ten que rexistrarse - + Folder %1: %2 Cartafol %1: %2 - + No sync folders configured. Non se configuraron cartafoles de sincronización. - + There are no sync folders configured. Non existen cartafoles de sincronización configurados. - + Open in browser Abrir no navegador - - - + + + Log in... - - - + + + Log out Desconectar - + Recent Changes Cambios recentes - + Checking for changes in '%1' - + Managed Folders: Cartafoles xestionados: - + Open folder '%1' Abrir o cartafol «%1» - + Open %1 in browser Abrir %1 nun navegador - + Unknown status Estado descoñecido - + Settings... Axustes... - + Details... Detalles... - + Help Axuda - + Quit %1 Saír de %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Desconectado das contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrou agora - + No items synced recently Non hai elementos sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 of %2 (restan %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sincronizando %1 (restan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado @@ -3446,7 +3686,7 @@ Recomendámoslle que non o use. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3549,78 +3789,42 @@ Recomendámoslle que non o use. &Contrasinal + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulario - - Server &address: - &Enderezo do servidor: - - - - - TextLabel Etiqueta de texto - - - Use &secure connection - Empregar unha conexión &segura - - - - CheckBox - Caixa de verificación - - - - &Username: - Nome de &usuario: - - - - Enter the ownCloud username. - Introduce o nome de usuario de ownCloud. - - - - &Password: - &Contrasinal: - - - - Enter the ownCloud password. - Introduza o contrasinal de ownCloud. - - - - Do not allow the local storage of the password. - Non permitir o almacenamento local do contrasinal. - - - - &Do not store password on local machine - &Non almacenar o contrasinal na máquina local. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Introduza o URL de ownCloud se quere conectarse a (sen http ou https). - Ser&ver Address @@ -3664,7 +3868,7 @@ Recomendámoslle que non o use. QApplication - + QT_LAYOUT_DIRECTION @@ -3672,42 +3876,42 @@ Recomendámoslle que non o use. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3716,57 +3920,57 @@ Recomendámoslle que non o use. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3787,102 +3991,97 @@ Recomendámoslle que non o use. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir de la revisión Git <a href="%1">%2</a> en %3, %4 usando Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Descargado - + Uploaded Enviado - + Server version downloaded, copied changed local file into conflict file - + Deleted Eliminado - + Moved to %1 Movido a %1 - + Ignored Ignorado - + Filesystem access error Produciuse un erro de acceso ao sistema de ficheiros - + Error Erro - + Updated local metadata - - + + Unknown Descoñecido - + downloading descargando - + uploading enviando - + deleting eliminando - + moving movendo - + ignoring ignorando + - error erro - + updating local metadata @@ -3890,54 +4089,77 @@ Recomendámoslle que non o use. theme - + Status undefined Estado sen definir - + Waiting to start sync Agardando o comezo da sincronización - + Sync is running Sincronización en proceso - + Sync Success Sincronización realizada - + Sync Success, some files were ignored. A sincronización foi correcta, algúns ficheiros foron ignorados. - + Sync Error Produciuse un erro de sincronización - + Setup Error Erro de configuración - + Preparing to sync Preparando para sincronizar - + Aborting... Cancelando... - + Sync is paused Sincronización en pausa + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_hu.ts b/translations/client_hu.ts index c82a752a4..5ae7bdab2 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time A cél fájl váratlan méretű vagy módosítási dátumú @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Mégsem @@ -136,188 +154,204 @@ Csatlakoztatva <user> felhasználóval ehhez: <server> - + No account configured. Nincs beállított kapcsolat. - + Add new Új hozzáadása - + Remove Eltávolítás - + Account Fiók - + Choose what to sync Szinkronizálandó elemek kiválasztása - + Force sync now - + Restart sync - + Remove folder sync connection Könyvtár szinkronizációs kapcsolat törlése - + Folder creation failed Könyvtár létrehozása nem sikerült - + <p>Could not create local folder <i>%1</i>. <p>Nem lehet helyi könyvtárat létrehozni: <i>%1</i>. - + Confirm Folder Sync Connection Removal Könyvtár szinkronizációs kapcsolat törlésének megerősítése - + Remove Folder Sync Connection Könyvtár szinkronizációs kapcsolat törlése - + Sync Running Szinkronizálás fut - + The syncing operation is running.<br/>Do you want to terminate it? A szinkronizálás folyamatban van. <br/>Szakítsuk meg? - + %1 in use %1 használatban - + %1 as <i>%2</i> %1, mint <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. %1 szerver verzió régi és már nem támogatott! Folytatás saját felelősségre. - + Connected to %1. Csatlakozva: %1. - + Server %1 is temporarily unavailable. %1 szerver jelenleg nem elérhető. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Kijelentkezve innen: %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Nincs kapcsolat ehhez: %1 ekkor: %2. - + Log in Bejelentkezés - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Fiók törlésének megerősítése - + <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> <p>Tényleg törölni szeretné a kapcsolatot <i>%1</i> fiókkal?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove connection Kapcsolat törlése - + + Open folder Könyvtár megnyitása - - + + Log out Kilépés - + Resume sync Szinkronizálás folytatása - + Pause sync Szinkronizálás szüneteltetése - + <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> <p>Tényleg leszeretné állítani <i>%1</i> könyvtár szinkronizálását?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) / %2 használatban. Néhány könyvtár - beleértve a hálózati megosztásokat és a megosztott könyvtárakat - eltérő korlátozással rendelkezhet. - + %1 of %2 in use %1 / %2 használatban - + Currently there is no storage usage information available. Jelenleg nem érhető el tárhelyhasználati információ. - + No %1 connection configured. Nincs beállított kapcsolat: %1. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Kijelentkezve - + Disconnected Szétcsatlakozva - + Connected Csatlakozva - + Service unavailable Szolgáltatás nem érhető el - + + Maintenance mode + + + + Network error Hálózati hiba - + Configuration error Beállítási hiba - + + Asking Credentials + + + + Unknown account state Ismeretlen fiók állapot @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Szerver aktivitás - + Sync Protocol Szinkronizációs protokoll - - List of ignored or erroneous files - Kihagyott vagy hibás fájlok listázása - - - - Copy - Másolás - - - - Copy the activity list to the clipboard. - Az aktivitási lista másolása a vágólapra. - - - + Not Synced Nincs szinkronizálva - + Not Synced (%1) %1 is the number of not synced files. Nincs szinkronizálva (%1) - + The server activity list has been copied to the clipboard. A szerver aktivitási lista a vágólapra másolva. - + The sync activity list has been copied to the clipboard. A szinkronizációs aktivitási lista a vágólapra másolva. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Másolva a vágólapra @@ -448,47 +477,47 @@ TextLabel - + Server Activities Szerver aktivitások - + Copy Másolás - + Copy the activity list to the clipboard. Aktivitási lista másolása a vágólapra. - + Action Required: Notifications Beavatkozás szükséges: Értesítések - + <br/>Account %1 does not have activities enabled. <br /> %1 fióknak nincsenek engedélyezve az aktivitások. - + You received %n new notification(s) from %2. %n új értesítést kapott innen: %2.%n új értesítést kapott innen: %2. - + You received %n new notification(s) from %1 and %2. %n új értesítést kapott innen: %1 és %2.%n új értesítést kapott innen: %1 és %2. - + You received new notifications from %1, %2 and other accounts. Új értesítést kapott innen: %1, %2 és további fiókoktól. - + %1 Notifications - Action Required %1 értesítések - Beavatkozás szükséges @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Nincs ownCloud fiók beállítva - + The configured server for this client is too old A beállított szerver ehhez a klienshez túl régi - + Please update to the latest server and restart the client. Kérjük, frissítse a szervert az utolsó verzióra és indítsa újra a klienst. - + Authentication error: Either username or password are wrong. Hitelesítési hiba: A felhasználónév vagy a jelszó hibás. - + timeout időtúllépés - + The provided credentials are not correct A megadott adatok helytelenek. - - OCC::DeleteJob - - - Connection timed out - A kapcsolat időtúllépés miatt megszakadt - - OCC::DiscoveryMainThread - + Aborted by the user Felhasználó megszakította @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. %1 helyi mappa nem létezik. - + %1 should be a folder but is not. %1 valószínűleg könyvtár, de nem az. - + %1 is not readable. %1 nem olvasható. - + %1 has been removed. %1 names a file. %1 sikeresen törölve. - + %1 has been downloaded. %1 names a file. %1 sikeresen letöltve. - + %1 has been updated. %1 names a file. %1 sikeresen feltöltve. - + %1 has been renamed to %2. %1 and %2 name files. %1 átnevezve erre: %2. - + %1 has been moved to %2. %1 áthelyezve ide: %2. - + %1 and %n other file(s) have been removed. %1 és %n további fájl törölve.%1 és %n további fájl törölve. - + %1 and %n other file(s) have been downloaded. %1 és %n további fájl letöltve.%1 és %n további fájl letöltve. - + %1 and %n other file(s) have been updated. %1 és %n további fájl feltöltve.%1 és %n további fájl feltöltve. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 átnevezve erre: %2 és még %n további fájl átnevezve.%1 átnevezve erre: %2 és még %n további fájl átnevezve. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 áthelyezve ide: %2 és még %n további fájl áthelyezve.%1 áthelyezve ide: %2 és még %n további fájl áthelyezve. - + %1 has and %n other file(s) have sync conflicts. %1 és %n további fájl szinkronizálási konfliktussal rendelkezik.%1 és %n további fájl szinkronizálási konfliktussal rendelkezik. - + %1 has a sync conflict. Please check the conflict file! %1 fájl szinkronizálási konfliktussal rendelkezik. Kérjük ellenőrizze a konfliktus fájlt! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 és %n további fájlt nem sikerült szinkronizálni. Bővebb információ a naplófájlban.%1 és %n további fájlt nem sikerült szinkronizálni. Bővebb információ a naplófájlban. - + %1 could not be synced due to an error. See the log for details. %1 nem sikerült szinkronizálni. Bővebb információ a naplófájlban. - + Sync Activity Szinkronizálási aktivitás - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Törli az összes fájlt? - + Remove all files Összes fájl eltávolítása - + Keep files Fájlok megtartása - + This sync would reset the files to an earlier 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? - + Backup detected Biztonsági mentés észlelve - + Normal Synchronisation Normal szinkronizáció - + Keep Local Files as Conflict Helyi file-ok megtartása konfliktusként @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. - + (backup) (biztonsági mentés) - + (backup %1) (biztonsági mentés: %1) - + Undefined State. Ismeretlen állapot. - + Waiting to start syncing. Várakozás a szinkronizálás elindítására. - + Preparing for sync. Előkészítés szinkronizációhoz. - + Sync is running. Szinkronizálás fut. - + Last Sync was successful. Legutolsó szinkronizálás sikeres volt. - + Last Sync was successful, but with warnings on individual files. Az utolsó szinkronizáció sikeresen lefutott, de néhány figyelmeztetés van. - + Setup Error. Beállítás hiba. - + User Abort. Felhasználó megszakította. - + Sync is paused. Szinkronizálás megállítva. - + %1 (Sync is paused) %1 (szinkronizálás megállítva) - + No valid folder selected! Nincs érvényes könyvtár kiválasztva! - + The selected path is not a folder! A kiválasztott elérési út nem könyvtár! - + You have no permission to write to the selected folder! Nincs joga a kiválasztott könyvtár írásához! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder - + File Fájl @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Kijelentkezve - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names - + , '%1' - + '%1' Argument is a file name - + '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 szinkronizálása - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) letöltés: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) feltöltés: %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 maradt, %1 / %2, %3 / %4 fájl - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1 / %2 fájl - + Waiting... Várakozás... - + Waiting for %n other folder(s)... Várakozás %n további könyvtárra...Várakozás %n további könyvtárra... - + Preparing to sync... Felkészülés szinkronizálásra... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an A szinkronizáláshoz válasszon ki egy helyi mappát. - + Enter the path to the local folder. Adjon meg a helyi könyvtár elérési útját. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Folder was successfully created on %1. A mappa sikeresen létrehozva: %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. Ez a mappa már szinkronizálva van. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. - + Server returned wrong content-range - + Connection Timeout Kapcsolat időtúllépés @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Rendszertálcára - + Advanced Haladó - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an &Monokróm ikonok használata - + Edit &Ignored Files K&ihagyott fájlok szerkesztése - + S&how crash reporter &Hibabejelentő megjelenítése - - + + About Rólunk - + Updates Frissítések - + &Restart && Update Új&raindítás és frissítés @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Jelszómegadás - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1319,12 +1350,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Pattern - + Minta Allow Deletion - + Törlés engedélyezése @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Kimenet naplózása - + &Search: Kere&sés: - + &Find &Keres - + + &Capture debug messages + + + + Clear Törlés - + Clear the log display. Törölje a naplózás kimenetét. - + S&ave Menté&s - + Save the log file to a file on disk for debugging. A naplófájl mentése a helyi gépre. - + Save log file Naplófájl mentése - + Error Hiba - + Could not write to log file %1 Naplófájl írása nem lehet: %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Hiba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' fájlt<br/>nem lehet írásra megnyitni.<br/><br/>A naplózás kimenete <b>nem</b> menthető!</nobr> - - OCC::MoveJob - - - Connection timed out - A kapcsolat időtúllépés miatt megszakadt - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Korlátozás automatikusan - + Hostname of proxy server Proxy kiszolgáló - + Username for proxy server Proxy felhasználónév - + Password for proxy server Proxy jelszó - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1582,78 +1675,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Elérhető új %1 frissítés - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... %1 verzió letöltése. Kérjük, várjon... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nem lehetett letölteni a frissítést. Kérjük, kattints <a href='%1'>ide</a> a frissítés kézi letöltéséhez. - + Could not check for new updates. Nem lehet ellenőrzi a frissítéseket. - + %1 version %2 available. Restart application to start the update. %1 verzió %2 elérhető. Kérjük, indítsa újra az alkalmazást a frissítés elkezdéséhez. - + New %1 version %2 available. Please use the system's update tool to install it. Új %1 verzió %2 elérhető. Kérjük, a telepítéshez a rendszer frissítési eszközét használja. - + Checking update server... Frissítési szerver ellenőrzése... - + Update status is unknown: Did not check for new updates. Frissítési állapot ismeretlen: Nem lehet ellenőrizni a frissítéseket. - + No updates available. Your installation is at the latest version. Nincs újabb kiadás. Ez a legfrissebb verzió. @@ -1666,43 +1792,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Csatlakozás: %1 - + Setup local folder options - + Connect... Csatlakozás... - + %1 folder '%2' is synced to local folder '%3' - + Sync the folder '%1' „%1” könyvtár szinkronizálása - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Helyi Sync mappa - - + + (%1) (%1) @@ -1735,7 +1861,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1743,46 +1869,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + &E-mail - + Connect to %1 Csatlakozás: %1 - + Enter user credentials Azonosítási adatok megadása + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Csatlakozás: %1 - + Setup %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. - + This url is secure. You can use it. Ez az url biztonságos. - + &Next > &Következő > @@ -1790,22 +1929,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Sikeresen csatlakozott az %1-hoz: %2 verziószám %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Próbál kapcsolódni az %1-hoz: %2... @@ -1825,109 +1964,109 @@ It is not advisable to use it. - + Invalid URL - + Érvénytelen URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A helyi %1 mappa már létezik, állítsa be a szinkronizálódását.<br/><br/> - + Creating local sync folder %1... - + ok ok - + failed. sikertelen. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 Hiba: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. %1 távoli nappa sikeresen létrehozva. - + The remote folder %1 already exists. Connecting it for syncing. A %1 távoli mappa már létezik. Csatlakoztassa a szinkronizációhoz. - + The folder creation resulted in HTTP error code %1 A könyvtár létrehozásakor keletkezett HTTP hibakód %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A távoli mappa létrehozása sikertelen, valószínűleg mivel hibásak a megdott hitelesítési adatok.</font><br/>Lépjen vissza és ellenőrizze a belépési adatokat.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A távoli %1 mappa létrehozása nem sikerült. Hibaüzenet: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A szinkronizációs kapcsolat a %1 és a %2 távoli mappa között létrejött. - + Successfully connected to %1! Sikeresen csatlakozva: %1! - + Connection to %1 could not be established. Please check again. A kapcsolat a %1 kiszolgálóhoz sikertelen. Ellenőrizze újra. - + Folder rename failed A mappa átnevezése nem sikerült - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Helyi %1 szinkronizációs mappa sikeresen létrehozva!</b></font> @@ -1935,12 +2074,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 kapcsolódási varázsló - + Skip folders configuration @@ -1948,33 +2087,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Minden beállítva! - + Open Local Folder Helyi mappa megnyitása - + Open %1 in Browser %1 megnyitása böngészőben - - OCC::PUTFileJob - - - Connection Timeout - Kapcsolat időtúllépés - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1982,7 +2113,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1990,47 +2121,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server A fájl törlésre került a szerverről - + The file could not be downloaded completely. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database @@ -2038,17 +2169,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2056,22 +2182,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2079,17 +2205,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2097,13 +2223,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2111,12 +2237,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2124,12 +2250,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database @@ -2137,28 +2263,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. - + This folder must not be renamed. Please name it back to Shared. - + The file was renamed but is part of a read only share. The original file was restored. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database @@ -2166,27 +2292,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Fájl törölve - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2194,32 +2325,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. A helyi fájl el lett távolítva a szinkronizálás alatt. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2227,32 +2358,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. A helyi fájl el lett távolítva a szinkronizálás alatt. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2270,42 +2401,42 @@ It is not advisable to use it. TextLabel - + Time Idő - + File Fájl - + Folder Mappa - + Action Művelet - + Size Méret - + Local sync protocol - + Copy Másolás - + Copy the activity list to the clipboard. Az aktivitási lista másolása a vágólapra. @@ -2346,7 +2477,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Szinkronizálandó elemek kiválasztása @@ -2354,33 +2485,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Betöltés ... - + Deselect remote folders you do not wish to synchronize. - + Name Név - + Size Méret - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2393,22 +2524,22 @@ It is not advisable to use it. Beállítások - + Activity Aktivitás - + General Általános - + Network Hálózat - + Account Fiók @@ -2416,27 +2547,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitás - + General Általános - + Network Hálózat - + Account Fiók @@ -2464,35 +2595,45 @@ It is not advisable to use it. ownCloud útvonala: - + %1 Sharing %1 megosztás - + %1 %1 - + Folder: %2 Könyvtár: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. A fájlt nem lehetett megosztani, mert megosztási jogosultság nélkül lett megosztva. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2502,92 +2643,126 @@ It is not advisable to use it. - - Share link - Megosztás hivatkozással - - - + TextLabel TextLabel - + Set &password &Jelszó beállítása - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date &Lejárati dátum beállítása - + Set password Jelszó beállítása - - &Mail link + + Link properties: - Copy &link - &Hivatkozás másolása + Show file listing + - + Allow editing Szerkesztés engedélyezése - + Anyone with the link has access to the file/folder - + + P&assword protect J&elszóval védve - + Password Protected Jelszóval védett - + The file can not be shared because it was shared without sharing permission. A fájlt nem lehetett megosztani, mert megosztási jogosultság nélkül lett megosztva. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Nyilvános me&gosztáshoz szükség van jelszóra - + Please Set Password Kérjük, állíts be egy jelszót - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - Hivatkozás &megosztása - OCC::ShareUserGroupWidget @@ -2597,68 +2772,98 @@ It is not advisable to use it. - + Share with users or groups ... Megosztás felhasználókkal vagy csoportokkal ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Űrlap + - + TextLabel - TextLabel + - + can edit - módosíthat + - + can share - megosztható + - + ... - ... + - + create - létrehoz + - + change - változtatás + - + delete - törlés + OCC::ShibbolethCredentials - + Login Error Bejelentkezési hiba - + You must sign in as user %1 %1 felhasználóként kell belépned @@ -2666,22 +2871,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Azonosítás - + SSL Chipher Debug View - + Reauthentication required Felhasználóazonosítás szükséges - + Your session has expired. You need to re-login to continue to use the client. @@ -2689,26 +2894,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Megosztás vele: %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Tanúsítvány részletei</h3> - + Common Name (CN): Általános név (CN): - + Subject Alternative Names: A tárgy további nevei: @@ -2793,7 +3018,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. Ez a kapcsolat %1 bittel van titkosítva: %2. @@ -2810,7 +3035,7 @@ It is not advisable to use it. Tanúsítvány adatok: - + This connection is NOT secure as it is not encrypted. @@ -2829,67 +3054,67 @@ It is not advisable to use it. Mindenképp fogadja el ezt a tanúsítványt - + Untrusted Certificate Nem megbízható tanúsítvány - + Cannot connect securely to <i>%1</i>: Nem sikerült biztonságosan csatlakozni ide: <i>%1</i>: - + with Certificate %1 %1 tanúsítvánnyal - + &lt;not specified&gt; &lt;nincs megadva&gt; - - + + Organization: %1 Szervezet: %1 - - + + Unit: %1 Egység: %1 - - + + Country: %1 Ország: %1 - + Fingerprint (MD5): <tt>%1</tt> Ellenőrzőkód (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Ellenőrzőkód (SHA1): <tt>%1</tt> - + Effective Date: %1 Tényleges dátum: %1 - + Expiration Date: %1 Lejárati dátum: %1 - + Issuer: %1 Kibocsátó: %1 @@ -2897,285 +3122,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Sikerült. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Az %1 beépülőmodul a csync-hez nem tölthető be.<br/>Ellenőrizze a telepítést!</p> - + CSync got an error while processing internal trees. A CSync hibába ütközött a belső adatok feldolgozása közben. - - CSync failed to reserve memory. - Hiba a CSync memórifoglalásakor. - - - + CSync fatal parameter error. CSync hibás paraméterhiba. - + CSync processing step update failed. CSync frissítés feldolgozása meghíusult. - + CSync processing step reconcile failed. CSync egyeztetési lépés meghíusult. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. A CSync nem találja a proxy kiszolgálót. - + CSync failed to authenticate at the %1 server. A CSync nem tuja azonosítani magát a %1 kiszolgálón. - + CSync failed to connect to the network. CSync hálózati kapcsolódási hiba. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP átviteli hiba történt. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Nincs szabad tárhely az %1 kiszolgálón. - + CSync unspecified error. CSync ismeretlen hiba. - + Aborted by the user Felhasználó megszakította - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable A szolgáltatás ideiglenesen nem elérhető - + Access is forbidden - + An internal error number %1 occurred. - - The item is not synced because of previous errors: %1 - - - - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. Fájl a kizárási listán. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Fájlnév túl nagy. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" Érvénytelen karakterek, kérjük nevezd át: %1 - - Unable to initialize a sync journal. - - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás @@ -3191,7 +3431,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3199,17 +3439,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> %1 verzió elérhető. <p>További információk: <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3217,17 +3457,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3235,207 +3475,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Belépés szükséges - + Folder %1: %2 Mappa %1: %2 - + No sync folders configured. Nincsenek megadva szinkronizálandó mappák. - + There are no sync folders configured. Nincsenek megadva szinkronizálandó mappák. - + Open in browser Megnyitás böngészőben - - - + + + Log in... Bejelentkezés... - - - + + + Log out Kilépés - + Recent Changes Legutóbbi változások - + Checking for changes in '%1' - + Managed Folders: Kezelt mappák: - + Open folder '%1' „%1” könyvtár megnyitása - + Open %1 in browser %1 megnyitása böngészőben - + Unknown status Ismeretlen állapot - + Settings... Beállítások... - + Details... Részletek... - + Help Súgó - + Quit %1 %1 kilépés - + Disconnected from %1 Szétcsatlakozva innen: %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Szétcsatlakozva a fiókokból: ó - + Account %1: %2 %1 fiók: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Mostanában nincs szinkronizált elem - + Syncing %1 of %2 (%3 left) %1/%2 szinkronizálása (%3 maradt) - + Syncing %1 of %2 - + Syncing %1 (%2 left) %1 szinkronizálása (%2 maradt) - + Syncing %1 %1 szinkronizálása - + %1 (%2, %3) %1 (%2, %3) - + Up to date Naprakész @@ -3443,7 +3683,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3546,78 +3786,42 @@ It is not advisable to use it. &Jelszó + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Űrlap - - Server &address: - Kiszolgáló &címe: - - - - - TextLabel TextLabel - - - Use &secure connection - Biztonságos &kapcsolat használata - - - - CheckBox - Jelölőnégyzet - - - - &Username: - &Felhsználó név: - - - - Enter the ownCloud username. - Írja be az ownCloud felhasználónevét. - - - - &Password: - &Jelszó: - - - - Enter the ownCloud password. - Írja be az ownCloud jelszavát. - - - - Do not allow the local storage of the password. - Nem engedélyezem a jelszó helyi tárolását. - - - - &Do not store password on local machine - &Ne tárolja a jelszót a helyi számítógépen - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Írja be az ownCloud kiszolgáló nevét amihez kapcsolódni szeretne (http és https nélkül). - Ser&ver Address @@ -3661,7 +3865,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3669,42 +3873,42 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3713,57 +3917,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3784,102 +3988,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Fordítva a <a href="%1">%2</a> Git revizíóból, %3, %4 Qt %5, %6 felhasználásával</small></p> - - - built with %1 - - progress - + Downloaded Letöltve - + Uploaded Feltöltve - + Server version downloaded, copied changed local file into conflict file - + Deleted Törölve - + Moved to %1 Áthelyezve ide: %1 - + Ignored Kihagyva - + Filesystem access error Fájlrendszer hozzáférési hiba - + Error Hiba - + Updated local metadata - - + + Unknown Ismeretlen - + downloading letöltés - + uploading feltöltés - + deleting törlés - + moving áthelyezés - + ignoring kihagyás + - error hiba - + updating local metadata @@ -3887,54 +4086,77 @@ It is not advisable to use it. theme - + Status undefined Meghatározatlan állapot - + Waiting to start sync Várakozás a szinkronizálás elindulására - + Sync is running Szinkronizálás fut - + Sync Success Szinkronizálás sikeres - + Sync Success, some files were ignored. Szinkronizálás sikeres, néhány fájl kihagyva - + Sync Error Szinkronizálási hiba - + Setup Error Telepítési hiba - + Preparing to sync Felkészülés szinkronizálásra - + Aborting... Megszakítás... - + Sync is paused Szinkronizálás leállítva + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_it.ts b/translations/client_it.ts index c254697a9..999f3bf1f 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Il file di destinazione ha una dimensione o un'ora di modifica inattesa @@ -81,6 +81,24 @@ EtichettaTesto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Annulla @@ -136,188 +154,204 @@ Connesso a <server> come <user> - + No account configured. Nessun account configurato. - + Add new Aggiungi nuovo - + Remove Rimuovi - + Account Account - + Choose what to sync Scegli cosa sincronizzare - + Force sync now Forza ora la sincronizzazione - + Restart sync Riavvia sincronizzazione - + Remove folder sync connection Rimuovi connessione di sincronizzazione cartelle - + Folder creation failed Creazione della cartella non riuscita - + <p>Could not create local folder <i>%1</i>. <p>Impossibile creare la cartella locale <i>%1</i>. - + Confirm Folder Sync Connection Removal Conferma rimozione connessione di sincronizzazione cartelle - + Remove Folder Sync Connection Rimuovi connessione di sincronizzazione cartelle - + Sync Running La sincronizzazione è in corso - + The syncing operation is running.<br/>Do you want to terminate it? L'operazione di sincronizzazione è in corso.<br/>Vuoi terminarla? - + %1 in use %1 in uso - + %1 as <i>%2</i> %1 come <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versione %1 del server è datata e non supportata! Continua a tuo rischio. - + Connected to %1. Connesso a %1. - + Server %1 is temporarily unavailable. Il server %1 è temporaneamente non disponibile. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Disconnesso da %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Nessuna connessione a %1 su %2. - + Log in Accedi - + There are folders that were not synchronized because they are too big: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi: - + There are folders that were not synchronized because they are external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono archiviazioni esterne: - + There are folders that were not synchronized because they are too big or external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi o archiviazioni esterne: - + Confirm Account Removal Conferma rimozione account - + <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> <p>Vuoi davvero eliminare la connessione all'account <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + Remove connection Rimuovi connessione - + + Open folder Apri cartella - - + + Log out Esci - + Resume sync Riprendi la sincronizzazione - + Pause sync Sospendi la sincronizzazione - + <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> <p>Vuoi davvero fermare la sincronizzazione della cartella <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) di %2 in uso. Alcune cartelle, incluse quelle montate in rete o le cartelle condivise, potrebbero avere limiti diversi. - + %1 of %2 in use %1% di %2 in uso - + Currently there is no storage usage information available. Non ci sono informazioni disponibili sull'utilizzo dello spazio di archiviazione. - + No %1 connection configured. Nessuna connessione di %1 configurata. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Disconnesso - + Disconnected Disconnesso - + Connected Connesso - + Service unavailable Servizio non disponibile - + + Maintenance mode + + + + Network error Errore di rete - + Configuration error Errore di configurazione - + + Asking Credentials + + + + Unknown account state Stato dell'account sconosciuto @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Attività del server - + Sync Protocol Protocollo di sincronizzazione - - List of ignored or erroneous files - Elenco dei file ignorati o errati - - - - Copy - Copia - - - - Copy the activity list to the clipboard. - Copia l'elenco delle attività negli appunti. - - - + Not Synced Non sincronizzata - + Not Synced (%1) %1 is the number of not synced files. Non sincronizzata (%1) - + The server activity list has been copied to the clipboard. L'elenco di attività del server è stato copiato negli appunti. - + The sync activity list has been copied to the clipboard. L'elenco di attività di sincronizzazione è stato copiato negli appunti. - + The list of unsynced items has been copied to the clipboard. L'elenco di elementi non sincronizzati è stato copiato negli appunti. - + Copied to clipboard Copiato negli appunti @@ -448,47 +477,47 @@ EtichettaTesto - + Server Activities Attività del server - + Copy Copia - + Copy the activity list to the clipboard. Copia l'elenco delle attività negli appunti. - + Action Required: Notifications Azione richiesta: notifiche - + <br/>Account %1 does not have activities enabled. <br/>L'account %1 non ha attività abilitate. - + You received %n new notification(s) from %2. Hai ricevuto %n nuova notifica da %2.Hai ricevuto %n nuove notifiche da %2. - + You received %n new notification(s) from %1 and %2. Hai ricevuto %n nuova notifica da %1 e %2.Hai ricevuto %n nuove notifiche da %1 e %2. - + You received new notifications from %1, %2 and other accounts. Hai ricevuto nuove notifiche da %1, %2 e altri account. - + %1 Notifications - Action Required %1 notifiche - azione richiesta @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Errore accedendo al file di configurazione - + There was an error while accessing the configuration file at %1. Si è verificato un errore durante l'accesso al file di configurazione su %1. - + Quit ownCloud Esci da ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Nessun account ownCloud configurato. - + The configured server for this client is too old Il server configurato per questo client è troppo datato - + Please update to the latest server and restart the client. Aggiorna all'ultima versione del server e riavvia il client. - + Authentication error: Either username or password are wrong. Errore di autenticazione: nome utente o password errati. - + timeout timeout - + The provided credentials are not correct Le credenziali fornite non sono corrette - - OCC::DeleteJob - - - Connection timed out - Connessione scaduta - - OCC::DiscoveryMainThread - + Aborted by the user Interrotto dall'utente @@ -632,113 +653,113 @@ OCC::Folder - + Local folder %1 does not exist. La cartella locale %1 non esiste. - + %1 should be a folder but is not. %1 dovrebbe essere una cartella, ma non lo è. - + %1 is not readable. %1 non è leggibile. - + %1 has been removed. %1 names a file. %1 è stato rimosso. - + %1 has been downloaded. %1 names a file. %1 è stato scaricato. - + %1 has been updated. %1 names a file. %1 è stato aggiornato. - + %1 has been renamed to %2. %1 and %2 name files. %1 è stato rinominato in %2. - + %1 has been moved to %2. %1 è stato spostato in %2. - + %1 and %n other file(s) have been removed. %1 e %n altro file sono stati rimossi.%1 e %n altri file sono stati rimossi. - + %1 and %n other file(s) have been downloaded. %1 e %n altro file sono stati scaricati.%1 e %n altri file sono stati scaricati. - + %1 and %n other file(s) have been updated. %1 e %n altro file sono stati aggiornati.%1 e %n altri file sono stati aggiornati. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 è stato rinominato in %2 e %n altro file sono stati rinominati.%1 è stato rinominato in %2 e %n altri file sono stati rinominati. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 è stato spostato in %2 e %n altro file sono stati spostati.%1 è stato spostato in %2 e %n altri file sono stati spostati. - + %1 has and %n other file(s) have sync conflicts. %1 e %n altro file hanno conflitti di sincronizzazione.%1 e %n altri file hanno conflitti di sincronizzazione. - + %1 has a sync conflict. Please check the conflict file! %1 ha un conflitto di sincronizzazione. Controlla il file in conflitto! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. 1% e %n altro file non sono stati sincronizzati a causa di errori. Controlla il log per i dettagli.1% e %n altri file non sono stati sincronizzati a causa di errori. Controlla il log per i dettagli. - + %1 could not be synced due to an error. See the log for details. %1 non può essere sincronizzato a causa di un errore. Controlla il log per i dettagli. - + Sync Activity Sincronizza attività - + Could not read system exclude file Impossibile leggere il file di esclusione di sistema - + A new folder larger than %1 MB has been added: %2. Una nuova cartella più grande di %1 MB è stata aggiunta: %2. - + A folder from an external storage has been added. Una nuova cartella da un'archiviazione esterna è stata aggiunta. @@ -746,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Vai nelle impostazioni e selezionala se vuoi scaricarla. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -759,29 +780,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Vuoi rimuovere tutti i file? - + Remove all files Rimuovi tutti i file - + Keep files Mantieni i file - + This sync would reset the files to an earlier 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? @@ -790,17 +811,17 @@ Ciò potrebbe verificarsi in seguito al ripristino di un backup sul server. Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tutti i tuoi file con file più datati in uno stato precedente. Vuoi mantenere i tuoi file locali più recenti come file di conflitto? - + Backup detected Backup rilevato - + Normal Synchronisation Sincronizzazione normale - + Keep Local Files as Conflict Mantieni i file locali come conflitto @@ -808,112 +829,112 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderMan - + Could not reset folder state Impossibile ripristinare lo stato della cartella - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. È stato trovato un vecchio registro di sincronizzazione '%1', ma non può essere rimosso. Assicurati che nessuna applicazione lo stia utilizzando. - + (backup) (copia di sicurezza) - + (backup %1) (copia di sicurezza %1) - + Undefined State. Stato non definito. - + Waiting to start syncing. In attesa di iniziare la sincronizzazione. - + Preparing for sync. Preparazione della sincronizzazione. - + Sync is running. La sincronizzazione è in corso. - + Last Sync was successful. L'ultima sincronizzazione è stata completata correttamente. - + Last Sync was successful, but with warnings on individual files. Ultima sincronizzazione avvenuta, ma con avvisi relativi a singoli file. - + Setup Error. Errore di configurazione. - + User Abort. Interrotto dall'utente. - + Sync is paused. La sincronizzazione è sospesa. - + %1 (Sync is paused) %1 (La sincronizzazione è sospesa) - + No valid folder selected! Nessuna cartella valida selezionata! - + The selected path is not a folder! Il percorso selezionato non è una cartella! - + You have no permission to write to the selected folder! Non hai i permessi di scrittura per la cartella selezionata! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! La cartella locale %1 contiene un collegamento simbolico. La destinazione del collegamento contiene una cartella già sincronizzata. Selezionane un'altra! - + There is already a sync from the server to this local folder. Please pick another local folder! Esiste già una sincronizzazione dal server a questa cartella locale. Seleziona un'altra cartella locale! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! La cartella locale %1 contiene già una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! La cartella locale %1 è già contenuta in una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! - + 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! La cartella locale %1 è un collegamento simbolico. La destinazione del collegamento è già contenuta in una cartella utilizzata in una connessione di sincronizzazione delle cartelle. Selezionane un'altra! @@ -921,17 +942,17 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderStatusDelegate - + Add Folder Sync Connection Aggiungi connessioni di sincronizzazione cartelle - + Synchronizing with local folder Sincronizzazione con cartella locale - + File File @@ -939,134 +960,144 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderStatusModel - + You need to be connected to add a folder Devi essere connesso per aggiungere una cartella - + Click this button to add a folder to synchronize. Fai clic su questo pulsante per aggiungere una cartella da sincronizzare. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Errore durante il caricamento dell'elenco delle cartelle dal server. - + Signed out Disconnesso - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. L'aggiunta di una cartella è disabilitata perché stai già sincronizzando tutti i tuoi file. Se desideri sincronizzare più cartelle, rimuovi la cartella radice attualmente configurata. - + Fetching folder list from server... Recupero dell'elenco delle cartelle dal server... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Controllo delle modifiche in '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizzazione di %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ricezione %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) invio %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 di %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 rimanenti, %1 di %2, file %3 di %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 di %2, file %3 di %4 - + file %1 of %2 file %1 di %2 - + Waiting... Attendere... - + Waiting for %n other folder(s)... In attesa di %n altra cartella...In attesa di %n altre cartelle... - + Preparing to sync... Preparazione della sincronizzazione... @@ -1074,12 +1105,12 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderWizard - + Add Folder Sync Connection Aggiungi connessioni di sincronizzazione cartelle - + Add Sync Connection Aggiungi connessione di sincronizzazione @@ -1092,7 +1123,7 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Fai clic per selezionare una cartella locale da sincronizzare. - + Enter the path to the local folder. Digita il percorso della cartella locale. @@ -1115,42 +1146,42 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Digita il nome della nuova cartella da creare sotto a '%1': - + Folder was successfully created on %1. La cartella è stata creata correttamente su %1. - + Authentication failed accessing %1 Autenticazione non riuscita durante l'accesso a %1 - + Failed to create the folder on %1. Please check manually. Non è stato possibile creare la cartella su %1. Controlla manualmente. - + Failed to list a folder. Error: %1 Impossibile elencare una cartella. Errore: %1 - + Choose this to sync the entire account Selezionala per sincronizzare l'intero account - + This folder is already being synced. Questa cartella è già sincronizzata. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Stai già sincronizzando <i>%1</i>, che è la cartella superiore di <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Stai già sincronizzando tutti i tuoi file. La sincronizzazione di un'altra cartella <b>non</b> è supportata. Se vuoi sincronizzare più cartelle, rimuovi la configurazione della cartella principale di sincronizzazione. @@ -1171,22 +1202,22 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nessun e-tag ricevuto dal server, controlla il proxy/gateway - + We received a different E-Tag for resuming. Retrying next time. Abbiamo ricevuto un e-tag diverso per il recupero. Riprova più tardi. - + Server returned wrong content-range Il server ha restituito un content-range errato - + Connection Timeout Connessione scaduta @@ -1209,23 +1240,23 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Per il vassoio di sistema - + Advanced Avanzate - + Ask for confirmation before synchronizing folders larger than Chiedi conferma prima di scaricare cartelle più grandi di - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Chiedi conferma prima di sincronizzare storage esterni @@ -1245,28 +1276,28 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Usa le icone &monocolore - + Edit &Ignored Files Mod&ifica file ignorati - + S&how crash reporter Mostra il rapporto di c&hiusura inattesa - - + + About Informazioni - + Updates Aggiornamenti - + &Restart && Update &Riavvia e aggiorna @@ -1274,22 +1305,22 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Digita la password di %1:<br><br>Utente: '%2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' Lettura dal portachiavi non riuscita con errore: '%1' - + Enter Password Digita password - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Fai clic qui</a> per richiedere una password dell'applicazione dall'interfaccia web. @@ -1371,55 +1402,125 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Questa voce è fornita dal sistema in '%1' e non può essere modificata in questa vista. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Risultato log - + &Search: &Cerca: - + &Find Tro&va - + + &Capture debug messages + + + + Clear Cancella - + Clear the log display. Svuota la visualizzazione del log. - + S&ave S&alva - + Save the log file to a file on disk for debugging. Salva un file di log sul disco per il debug. - + Save log file Salva file di log - + Error Errore - + Could not write to log file %1 Impossibile scrivere il file di log di %1 @@ -1427,24 +1528,16 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::Logger - + Error Errore - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Il file '%1'<br/>non può essere aperto in scrittura.<br/><br/>Il risultato del log <b>non</b> può essere salvato!</nobr> - - OCC::MoveJob - - - Connection timed out - Connessione scaduta - - OCC::NSISUpdater @@ -1556,27 +1649,27 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Limita automaticamente - + Hostname of proxy server Nome host del server proxy - + Username for proxy server Nome utente del server proxy - + Password for proxy server Password del server proxy - + HTTP(S) proxy Proxy HTTP(S) - + SOCKS5 proxy Proxy SOCKS5 @@ -1589,78 +1682,111 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::NotificationWidget - + Created at %1 Creato alle %1 - + Closing in a few seconds... Chiusura tra pochi secondi... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 richiesta non riuscita alle %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' selezionato alle %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Un nuovo aggiornamento di %1 è pronto - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Un nuovo aggiornamento di %1 sta per essere installato. L'aggiornamento potrebbe richiedere privilegi aggiuntivi durante l'avanzamento. - + Downloading version %1. Please wait... Scaricamento della versione %1. Attendi... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Impossibile scaricare l'aggiornamento. Fai clic <a href='%1'>qui</a> per scaricare l'aggiornamento manualmente. - + Could not check for new updates. Impossibile verificare la presenza di nuovi aggiornamenti. - + %1 version %2 available. Restart application to start the update. La versione %2 di %1 è disponibile. Riavvia l'applicazione per iniziare l'aggiornamento. - + New %1 version %2 available. Please use the system's update tool to install it. Nuova versione %2 di %1 disponibile. Utilizza lo strumento di aggiornamento di sistema per installarla. - + Checking update server... Controllo server degli aggiornamenti... - + Update status is unknown: Did not check for new updates. Lo stato di aggiornamento è sconosciuto. Non è possibile verificare la presenza di nuovi aggiornamenti. - + No updates available. Your installation is at the latest version. Non ci sono aggiornamenti disponibili. La tua installazione è aggiornata all'ultima versione. @@ -1673,43 +1799,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Connetti a %1 - + Setup local folder options Configura le opzioni della cartella locale - + Connect... Connetti... - + %1 folder '%2' is synced to local folder '%3' La cartella '%2' di %1 è sincronizzata con la cartella locale '%3' - + Sync the folder '%1' Sincronizza la cartella '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Avviso:</strong> la cartella locale non è vuota. Scegli una soluzione.</small></p> - + Local Sync Folder Cartella locale di sincronizzazione - - + + (%1) (%1) @@ -1742,7 +1868,7 @@ for additional privileges during the process. Configura certificato TLS lato client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Connessione all'indirizzo sicuro del server <em>%1</em> non riuscita. Come desideri procedere?</p></body></html> @@ -1750,47 +1876,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email Posta &elettronica - + Connect to %1 Connetti a %1 - + Enter user credentials Digita le credenziali dell'utente + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Connetti a %1 - + Setup %1 server Configura il server %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Questo URL NON è sicuro poiché non è cifrato. Non è consigliabile utilizzarlo. - + This url is secure. You can use it. Questo URL è sicuro. Puoi utilizzarlo. - + &Next > Ava&nti > @@ -1798,22 +1937,22 @@ Non è consigliabile utilizzarlo. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connesso correttamente a %1: %2 versione %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Connessione a %1 su %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo scaduto durante il tentativo di connessione a %1 su %2. - + Trying to connect to %1 at %2... Tentativo di connessione a %1 su %2... @@ -1833,109 +1972,109 @@ Non è consigliabile utilizzarlo. Accesso negato dal server. Per verificare di avere i permessi appropriati, <a href="%1">fai clic qui</a> per accedere al servizio con il tuo browser. - + Invalid URL URL non valido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La cartella di sincronizzazione locale %1 esiste già, impostata per la sincronizzazione.<br/><br/> - + Creating local sync folder %1... Creazione della cartella locale di sincronizzazione %1... - + ok ok - + failed. non riuscita. - + Could not create local folder %1 Impossibile creare la cartella locale %1 - + No remote folder specified! Nessuna cartella remota specificata! - + Error: %1 Errore: %1 - + creating folder on ownCloud: %1 creazione cartella su ownCloud: %1 - + Remote folder %1 created successfully. La cartella remota %1 è stata creata correttamente. - + The remote folder %1 already exists. Connecting it for syncing. La cartella remota %1 esiste già. Connessione in corso per la sincronizzazione - + The folder creation resulted in HTTP error code %1 La creazione della cartella ha restituito un codice di errore HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La creazione della cartella remota non è riuscita poiché le credenziali fornite sono errate!<br/>Torna indietro e verifica le credenziali.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creazione della cartella remota non è riuscita probabilmente perché le credenziali fornite non sono corrette.</font><br/>Torna indietro e controlla le credenziali inserite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creazione della cartella remota %1 non riuscita con errore <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una connessione di sincronizzazione da %1 alla cartella remota %2 è stata stabilita. - + Successfully connected to %1! Connesso con successo a %1! - + Connection to %1 could not be established. Please check again. La connessione a %1 non può essere stabilita. Prova ancora. - + Folder rename failed Rinomina della cartella non riuscita - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossibile rimuovere o creare una copia di sicurezza della cartella poiché la cartella o un file in essa contenuto è aperta in un altro programma. Chiudi la cartella o il file e premi Riprova o annulla la configurazione. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Cartella locale %1 creata correttamente!</b></font> @@ -1943,12 +2082,12 @@ Non è consigliabile utilizzarlo. OCC::OwncloudWizard - + %1 Connection Wizard Procedura guidata di connessione di %1 - + Skip folders configuration Salta la configurazione delle cartelle @@ -1956,33 +2095,25 @@ Non è consigliabile utilizzarlo. OCC::OwncloudWizardResultPage - + Everything set up! Configurazione completata! - + Open Local Folder Apri cartella locale - + Open %1 in Browser Apri %1 nel browser - - OCC::PUTFileJob - - - Connection Timeout - Connessione scaduta - - OCC::PollJob - + Invalid JSON reply from the poll URL Risposta JSON non valida dall'URL di richiesta @@ -1990,7 +2121,7 @@ Non è consigliabile utilizzarlo. OCC::PropagateDirectory - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -1998,47 +2129,47 @@ Non è consigliabile utilizzarlo. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Il file %1 non può essere scaricato a causa di un conflitto con un file locale. - - The download would reduce free disk space below %1 - Lo scaricamento ridurrà lo spazio libero su disco al di sotto di %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Lo spazio libero su disco è inferiore a %1 - + File was deleted from server Il file è stato eliminato dal server - + The file could not be downloaded completely. Il file non può essere scaricato completamente. - + The downloaded file is empty despite the server announced it should have been %1. Il file scaricato è vuoto nonostante il server indicasse una dimensione di %1. - + File %1 cannot be saved because of a local file name clash! Il file %1 non può essere salvato a causa di un conflitto con un file locale. - + File has changed since discovery Il file è stato modificato dal suo rilevamento - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2046,17 +2177,12 @@ Non è consigliabile utilizzarlo. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ripristino non riuscito: %1 - - Continue blacklisting: - Continua la lista nera: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Un file o una cartella è stato rimosso da una condivisione in sola lettura, ma il ripristino non è riuscito: %1 @@ -2064,22 +2190,22 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Impossibile eliminare il file %1, errore: %2 - + Attention, possible case sensitivity clash with %1 Attenzione, possibile conflitto relativo all'uso di maiuscole e minuscole con %1 - + could not create folder %1 impossibile creare la cartella %1 - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2087,17 +2213,17 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalRemove - + Error removing '%1': %2; Errore durante la rimozione di '%1': %2; - + Could not remove folder '%1' Impossibile rimuovere la cartella '%1' - + Could not remove %1 because of a local file name clash Impossibile rimuovere %1 a causa di un conflitto con un file locale @@ -2105,13 +2231,13 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Il file %1 non può essere rinominato in %2 a causa di un conflitto con il nome di un file locale - - + + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2119,12 +2245,12 @@ Non è consigliabile utilizzarlo. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Il file è stato rimosso da una condivisione in sola lettura. È stato ripristinato. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Codice HTTP errato restituito dal server. Atteso 204, ma ricevuto "%1 %2". @@ -2132,12 +2258,12 @@ Non è consigliabile utilizzarlo. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Codice HTTP errato restituito dal server. Atteso 201, ma ricevuto "%1 %2". - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2145,28 +2271,28 @@ Non è consigliabile utilizzarlo. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Questa cartella non può essere rinominata. Il nome originale è stato ripristinato. - + This folder must not be renamed. Please name it back to Shared. Questa cartella non può essere rinominata. Ripristina il nome Shared. - + The file was renamed but is part of a read only share. The original file was restored. Il file è stato rinominato, ma è parte di una condivisione in sola lettura. Il file originale è stato ripristinato. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Codice HTTP errato restituito dal server. Atteso 201, ma ricevuto "%1 %2". - - + + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2174,27 +2300,32 @@ Non è consigliabile utilizzarlo. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Il file %1 non può essere caricato poiché esiste un altro file con lo stesso nome, ma con differenze tra maiuscole e minuscole - + File Removed File rimosso - + Local file changed during syncing. It will be resumed. Il file locale è stato modificato durante la sincronizzazione. Sarà ripristinato. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2202,32 +2333,32 @@ Non è consigliabile utilizzarlo. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2. - + The local file was removed during sync. Il file locale è stato rimosso durante la sincronizzazione. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + Unexpected return code from server (%1) Codice di uscita inatteso dal server (%1) - + Missing File ID from server File ID mancante dal server - + Missing ETag from server ETag mancante dal server @@ -2235,32 +2366,32 @@ Non è consigliabile utilizzarlo. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Il file è stato modificato localmente, ma è parte di una condivisione in sola lettura. È stato ripristinato e la tua modifica è nel file di conflitto. - + Poll URL missing URL di richiesta mancante - + The local file was removed during sync. Il file locale è stato rimosso durante la sincronizzazione. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + The server did not acknowledge the last chunk. (No e-tag was present) Il server non ha riconosciuto l'ultimo pezzo. (Non era presente alcun e-tag) @@ -2278,42 +2409,42 @@ Non è consigliabile utilizzarlo. EtichettaTesto - + Time Ora - + File File - + Folder Cartella - + Action Azione - + Size Dimensione - + Local sync protocol Protocollo di sincronizzazione locale - + Copy Copia - + Copy the activity list to the clipboard. Copia l'elenco delle attività negli appunti. @@ -2354,7 +2485,7 @@ Non è consigliabile utilizzarlo. OCC::SelectiveSyncDialog - + Choose What to Sync Scegli cosa sincronizzare @@ -2362,33 +2493,33 @@ Non è consigliabile utilizzarlo. OCC::SelectiveSyncWidget - + Loading ... Caricamento in corso... - + Deselect remote folders you do not wish to synchronize. Deseleziona le cartelle remote che non desideri sincronizzare. - + Name Nome - + Size Dimensione - - + + No subfolders currently on the server. Attualmente non ci sono sottocartelle sul server. - + An error occurred while loading the list of sub folders. Si è verificato un errore durante il caricamento dell'elenco delle sottocartelle. @@ -2401,22 +2532,22 @@ Non è consigliabile utilizzarlo. Impostazioni - + Activity Attività - + General Generale - + Network Rete - + Account Account @@ -2424,27 +2555,27 @@ Non è consigliabile utilizzarlo. OCC::SettingsDialogMac - + %1 %1 - + Activity Attività - + General Generale - + Network Rete - + Account Account @@ -2472,35 +2603,45 @@ Non è consigliabile utilizzarlo. Percorso di ownCloud: - + %1 Sharing Condivisione %1 - + %1 %1 - + Folder: %2 Cartella: %2 - + The server does not allow sharing Il server non consente la condivisione - + Retrieving maximum possible sharing permissions from server... Recupero di tutti i permessi di condivisione possibili dal server... - + The file can not be shared because it was shared without sharing permission. Il file non può essere condiviso poiché è stato condiviso senza il permesso di condivisione. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2510,92 +2651,126 @@ Non è consigliabile utilizzarlo. Condividi NuovoDocumento.odt - - Share link - Condividi collegamento - - - + TextLabel EtichettaTesto - + Set &password Imposta &password - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Imposta data di scad&enza - + Set password imposta la password - - &Mail link - Collega&mento tramite posta + + Link properties: + - Copy &link - Copia co&llegamento + Show file listing + - + Allow editing Consenti la modifica - + Anyone with the link has access to the file/folder Chiunque sia in possesso del collegamento ha accesso al file/cartella - + + P&assword protect Proteggi con p&assword - + Password Protected Protetta da password - + The file can not be shared because it was shared without sharing permission. Il file non può essere condiviso poiché è stato condiviso senza il permesso di condivisione. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password La condivisione pubblic&a richiede una password - + Please Set Password imposta la password - - - Could not open email client - Impossibile aprire il client di posta - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Si è verificato un errore durante l'avvio del client di posta per creare un nuovo messaggio. Forse non hai ancora configurato alcun client di posta predefinito? - - - - - &Share link - Condividi colle&gamento - OCC::ShareUserGroupWidget @@ -2605,68 +2780,98 @@ Non è consigliabile utilizzarlo. Condividi NuovoDocumento.odt - + Share with users or groups ... Condividi con utenti o gruppi... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Nessun risultato per '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Modulo + - + TextLabel - EtichettaTesto + - + can edit - può modificare + - + can share - può condividere + - + ... - ... + - + create - crea + - + change - cambia + - + delete - elimina + OCC::ShibbolethCredentials - + Login Error Errore di accesso - + You must sign in as user %1 Devi accedere con l'utente %1 @@ -2674,22 +2879,22 @@ Non è consigliabile utilizzarlo. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticazione - + SSL Chipher Debug View Vista debug cifrario SSL - + Reauthentication required Nuova autenticazione richiesta - + Your session has expired. You need to re-login to continue to use the client. La tua sessione è scaduta. Devi effettuare nuovamente l'accesso per continuare a utilizzare il client. @@ -2697,26 +2902,46 @@ Non è consigliabile utilizzarlo. OCC::SocketApi - + Share with %1 parameter is ownCloud Condividi con %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Dettagli del certificato</h3> - + Common Name (CN): Nome comune (CN): - + Subject Alternative Names: Nomi alternativi soggetto (SAN): @@ -2801,7 +3026,7 @@ Non è consigliabile utilizzarlo. %1 - + This connection is encrypted using %1 bit %2. Questa connessione è cifrata utilizzando %1 bit %2. @@ -2818,7 +3043,7 @@ Non è consigliabile utilizzarlo. Informazioni sul certificato: - + This connection is NOT secure as it is not encrypted. Questa connessione NON è sicura poiché non è cifrata. @@ -2838,67 +3063,67 @@ Non è consigliabile utilizzarlo. Fidati comunque di questo certificato - + Untrusted Certificate Certificato non attendibile - + Cannot connect securely to <i>%1</i>: Impossibile collegarsi in modo sicuro a <i>%1</i>: - + with Certificate %1 con certificato %1 - + &lt;not specified&gt; &lt;non specificato&gt; - - + + Organization: %1 Organizzazione: %1 - - + + Unit: %1 Reparto: %1 - - + + Country: %1 Nazione: %1 - + Fingerprint (MD5): <tt>%1</tt> Impronta digitale (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Impronta digitale (SHA1): <tt>%1</tt> - + Effective Date: %1 Data effettiva: %1 - + Expiration Date: %1 Data di scadenza: %1 - + Issuer: %1 Emittente: %1 @@ -2906,285 +3131,300 @@ Non è consigliabile utilizzarlo. OCC::SyncEngine - + Success. Successo. - + CSync failed to load the journal file. The journal file is corrupted. CSync non è riuscito a scrivere il file di registro. Il file di registro è danneggiato. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Il plugin %1 per csync non può essere caricato.<br/>Verifica l'installazione!</p> - + CSync got an error while processing internal trees. Errore di CSync durante l'elaborazione degli alberi interni. - - CSync failed to reserve memory. - CSync non è riuscito a riservare la memoria. - - - + CSync fatal parameter error. Errore grave di parametro di CSync. - + CSync processing step update failed. La fase di aggiornamento di CSync non è riuscita. - + CSync processing step reconcile failed. La fase di riconciliazione di CSync non è riuscita. - + CSync could not authenticate at the proxy. CSync non è in grado di autenticarsi al proxy. - + CSync failed to lookup proxy or server. CSync non è riuscito a trovare un proxy o server. - + CSync failed to authenticate at the %1 server. CSync non è riuscito ad autenticarsi al server %1. - + CSync failed to connect to the network. CSync non è riuscito a connettersi alla rete. - + A network connection timeout happened. Si è verificato un timeout della connessione di rete. - + A HTTP transmission error happened. Si è verificato un errore di trasmissione HTTP. - + The mounted folder is temporarily not available on the server La cartella montata è temporaneamente indisponibile sul server - + An error occurred while opening a folder Si è verificato un errore durante l'apertura di una cartella - + Error while reading folder. Errore durante la lettura della cartella. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Il file/cartella è ignorato poiché è nascosto. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sono disponibili solo %1, servono almeno %2 per iniziare - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: spazio insufficiente sul server %1. - + CSync unspecified error. Errore non specificato di CSync. - + Aborted by the user Interrotto dall'utente - + CSync failed to access CSync non è riuscito ad accedere - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync non è riuscito a caricare o a creare il file journal. Assicurati di avere i permessi di lettura e scrittura nella cartella di sincronizzazione locale. - + CSync failed due to unhandled permission denied. Problema di CSync a causa di un permesso negato non gestito. - + CSync tried to create a folder that already exists. CSync ha cercato di creare una cartella già esistente. - + The service is temporarily unavailable Il servizio è temporaneamente non disponibile - + Access is forbidden L'accesso è vietato - + An internal error number %1 occurred. SI è verificato un errore interno numero %1. - - The item is not synced because of previous errors: %1 - L'elemento non è sincronizzato a causa dell'errore precedente: %1 - - - + Symbolic links are not supported in syncing. I collegamenti simbolici non sono supportati dalla sincronizzazione. - + File is listed on the ignore list. Il file è stato aggiunto alla lista ignorati. - + File names ending with a period are not supported on this file system. I nomi del file che terminano con un punto non sono supportati su questo file system. - + File names containing the character '%1' are not supported on this file system. I nomi del file che contengono il carattere '%1' non sono supportati su questo file system. - + The file name is a reserved name on this file system. Il nome del file è un nome riservato su questo file system. - + Filename contains trailing spaces. Il nome del file contiene spazi alla fine. - + Filename is too long. Il nome del file è troppo lungo. - + Stat failed. Stat non riuscita. - + Filename encoding is not valid La codifica del nome del file non è valida - + Invalid characters, please rename "%1" Caratteri non validi, rinomina "%1" - - Unable to initialize a sync journal. - Impossibile inizializzare il registro di sincronizzazione. - - - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine @@ -3200,7 +3440,7 @@ Non è consigliabile utilizzarlo. OCC::Systray - + %1: %2 %1: %2 @@ -3208,17 +3448,17 @@ Non è consigliabile utilizzarlo. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versione %1. Per ulteriori informazioni vedi <a href="%2">3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuito da %1 e sotto licenza GNU General Public License (GPL) versione 2.0.<br/>%2 e il logo di %2 sono marchi registrati di %1 negli Stati Uniti, in altri paesi o entrambi.</p> @@ -3226,17 +3466,17 @@ Non è consigliabile utilizzarlo. OCC::ValidateChecksumHeader - + The checksum header is malformed. L'intestazione del codice di controllo non è valida. - + The checksum header contained an unknown checksum type '%1' L'intestazione di controllo conteneva un tipo di codice di controllo '%1' sconosciuto - + The downloaded file does not match the checksum, it will be resumed. Il file scaricato non verifica il codice di controllo, sarà ripristinato. @@ -3244,207 +3484,207 @@ Non è consigliabile utilizzarlo. OCC::ownCloudGui - + Please sign in Accedi - + Folder %1: %2 Cartella %1: %2 - + No sync folders configured. Nessuna cartella configurata per la sincronizzazione. - + There are no sync folders configured. Non è stata configurata alcuna cartella per la sincronizzazione. - + Open in browser Apri nel browser - - - + + + Log in... Accedi... - - - + + + Log out Esci - + Recent Changes Modifiche recenti - + Checking for changes in '%1' Controllo delle modifiche in '%1' - + Managed Folders: Cartelle gestite: - + Open folder '%1' Apri la cartella '%1' - + Open %1 in browser Apri %1 nel browser... - + Unknown status Stato sconosciuto - + Settings... Impostazioni... - + Details... Dettagli... - + Help Aiuto - + Quit %1 Esci da %1 - + Disconnected from %1 Disconnesso dal %1 - + Unsupported Server Version Versione del server non supportata - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Il server dell'account %1 esegue una versione %2 datata e non supportata. L'utilizzo del client con versioni non supportate non è sperimentato ed è potenzialmente pericoloso. Continua a tuo rischio. - + Disconnected from accounts: Disconnesso dagli account: - + Account %1: %2 Account %1: %2 - + Account synchronization is disabled La sincronizzazione dell'account è disabilitata - + Unpause all folders Riprendi tutte le cartelle - + Pause all folders Sospendi tutte le cartelle - + Unpause all synchronization Riprendi tutte le sincronizzazioni - + Unpause synchronization Riprendi la sincronizzazione - + Pause all synchronization Sospendi tutte le sincronizzazioni - + Pause synchronization Sospendi la sincronizzazione - + Log out of all accounts Disconnetti tutti gli account - + Log in to all accounts... Accedi a tutti gli account... - + New account... Nuovo account... - + Crash now Only shows in debug mode to allow testing the crash handler Chiusura immediata - + No items synced recently Nessun elemento sincronizzato di recente - + Syncing %1 of %2 (%3 left) Sincronizzazione di %1 di %2 (%3 rimanenti) - + Syncing %1 of %2 Sincronizzazione di %1 di %2 - + Syncing %1 (%2 left) Sincronizzazione di %1 (%2 rimanenti) - + Syncing %1 Sincronizzazione di %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aggiornato @@ -3452,7 +3692,7 @@ Non è consigliabile utilizzarlo. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3555,78 +3795,42 @@ Non è consigliabile utilizzarlo. &Password + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Modulo - - Server &address: - Indiri&zzo del server: - - - - - TextLabel EtichettaTesto - - - Use &secure connection - Usa connessione &sicura - - - - CheckBox - CasellaSelezione - - - - &Username: - Nome &utente: - - - - Enter the ownCloud username. - Digita il nome utente di ownCloud. - - - - &Password: - &Password: - - - - Enter the ownCloud password. - Digita la password di ownCloud. - - - - Do not allow the local storage of the password. - Non consentire l'archiviazione locale della password. - - - - &Do not store password on local machine - Non salvare la passwor&d sulla macchina locale - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Digita l'URL di ownCloud al quale vuoi collegarti (senza http o https). - Ser&ver Address @@ -3670,7 +3874,7 @@ Non è consigliabile utilizzarlo. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3678,42 +3882,42 @@ Non è consigliabile utilizzarlo. QObject - + in the future nel futuro - + %n day(s) ago %n giorno fa%n giorni fa - + %n hour(s) ago %n ora fa%n ore fa - + now adesso - + Less than a minute ago Meno di un minuto fa - + %n minute(s) ago %n minuto fa%n minuti fa - + Some time ago Tempo fa - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3722,57 +3926,57 @@ Non è consigliabile utilizzarlo. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) % anno%n anni - + %n month(s) %n mese%n mesi - + %n day(s) %n giorno%n giorni - + %n hour(s) %n ora%n ore - + %n minute(s) %n minuto%n minuti - + %n second(s) %n secondo%n secondi - + %1 %2 %1 %2 @@ -3793,102 +3997,97 @@ Non è consigliabile utilizzarlo. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Compilato dalla revisione Git <a href="%1">%2</a> il %3, %4 utilizzando Qt %5, %6</small><p> - - - built with %1 - creato con %1 - progress - + Downloaded Scaricato - + Uploaded Caricato - + Server version downloaded, copied changed local file into conflict file Versione del server scaricata, il file locale modificato è stato copiato come file di conflitto - + Deleted Eliminato - + Moved to %1 Spostato in %1 - + Ignored Ignorato - + Filesystem access error Errore di accesso al filesystem - + Error Errore - + Updated local metadata Metadati locali aggiornati - - + + Unknown Sconosciuto - + downloading scaricamento in corso - + uploading caricamento in corso - + deleting eliminazione - + moving spostamento - + ignoring ignorare + - error errore - + updating local metadata metadati locali aggiornati @@ -3896,54 +4095,77 @@ Non è consigliabile utilizzarlo. theme - + Status undefined Stato non definito - + Waiting to start sync In attesa di sincronizzazione - + Sync is running La sincronizzazione è in corso - + Sync Success Sincronizzazione completata - + Sync Success, some files were ignored. Sincronizzazione avvenuta, alcuni file sono stati ignorati. - + Sync Error Errore di sincronizzazione - + Setup Error Errore di configurazione - + Preparing to sync Preparazione della sincronizzazione - + Aborting... Interruzione in corso... - + Sync is paused La sincronizzazione è sospesa + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 841ece957..351566f43 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 指定先のファイルは予期しないサイズまたは変更時間です @@ -81,6 +81,24 @@ テキストラベル + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel キャンセル @@ -136,188 +154,204 @@ <server> に <user> で接続中 - + No account configured. アカウントが未設定です。 - + Add new 新規追加 - + Remove 削除 - + Account アカウント - + Choose what to sync 同期フォルダーを選択 - + Force sync now 今すぐ強制的に同期 - + Restart sync 同期を再実行 - + Remove folder sync connection 同期フォルダー接続を削除 - + Folder creation failed フォルダーの作成に失敗しました - + <p>Could not create local folder <i>%1</i>. <p>ローカルフォルダー <i>%1</i> を作成できません。 - + Confirm Folder Sync Connection Removal 同期フォルダー接続の削除を確認 - + Remove Folder Sync Connection 同期フォルダー接続を削除 - + Sync Running 同期を実行中 - + The syncing operation is running.<br/>Do you want to terminate it? 同期作業を実行中です。<br/>終了しますか? - + %1 in use %1 を使用中 - + %1 as <i>%2</i> <i>%2</i> の %1 - + The server version %1 is old and unsupported! Proceed at your own risk. サーバーバージョン %1 は古くサポートされていません!自己責任で進んでください。 - + Connected to %1. %1 に接続 - + Server %1 is temporarily unavailable. サーバー %1 は一時的に利用できません - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. %1 からサインアウトしました。 - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. %2 の %1 への接続がありません。 - + Log in ログイン - + There are folders that were not synchronized because they are too big: 大きすぎるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are external storages: 外部ストレージにあるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are too big or external storages: 大きすぎたか、外部ストレージにあるため同期されなかったフォルダーがあります: - + Confirm Account Removal アカウント削除確認 - + <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> <p> アカウント <i>%1</i> を本当に削除しますか?</p><p><b>注意:</b> これによりファイルが一切削除されることはありません。</p> - + Remove connection 接続削除 - + + Open folder フォルダーを開く - - + + Log out ログアウト - + Resume sync 再開 - + Pause sync 一時停止 - + <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> <p>フォルダー<i>%1</i>の同期を本当に止めますか?</p><p><b>注:</b> これによりファイルが一切削除されることはありません。</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %2 の %1(%3%) 利用中。外部ネットワークストレージや共有フォルダーを含むフォルダーがある場合は、容量の上限値が異なる可能性があります。 - + %1 of %2 in use %2 のうち %1 を使用中 - + Currently there is no storage usage information available. 現在、利用できるストレージ利用状況はありません。 - + No %1 connection configured. %1 の接続は設定されていません。 @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out サインアウト - + Disconnected 切断しました - + Connected 接続しました - + Service unavailable サービスが利用できません - + + Maintenance mode + + + + Network error ネットワークエラー - + Configuration error 設定エラー - + + Asking Credentials + + + + Unknown account state 不明なアカウント状態 @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity サーバーアクティビティ - + Sync Protocol 同期状況 - - List of ignored or erroneous files - 無視またはエラーになったファイルのリスト - - - - Copy - コピー - - - - Copy the activity list to the clipboard. - アクティビティ一覧をコピーする - - - + Not Synced 同期対象外 - + Not Synced (%1) %1 is the number of not synced files. 未同期 (%1) - + The server activity list has been copied to the clipboard. サーバーアクティビティリストをクリップボードにコピーしました。 - + The sync activity list has been copied to the clipboard. 同期状況をクリップボードにコピーしました。 - + The list of unsynced items has been copied to the clipboard. 同期されていないアイテムのリストがクリップボードにコピーされました。 - + Copied to clipboard クリップボードにコピー @@ -448,47 +477,47 @@ テキストラベル - + Server Activities サーバーアクティビティ - + Copy コピー - + Copy the activity list to the clipboard. アクティビティ一覧をコピーする - + Action Required: Notifications 操作が必要: 通知 - + <br/>Account %1 does not have activities enabled. <br/>%1 アカウントは、 アクティビティを有効にしていません。 - + You received %n new notification(s) from %2. %2 から %n の新しい通知がありました。 - + You received %n new notification(s) from %1 and %2. %1 と %2 から %n の新しい通知がありました。 - + You received new notifications from %1, %2 and other accounts. %1 と %2 、その他アカウントから新しい通知がありました。 - + %1 Notifications - Action Required 通知 %1 - 操作が必要です。 @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file 設定ファイルのアクセスでエラーが発生しました - + There was an error while accessing the configuration file at %1. 設定ファイルの %1 行目にアクセスしている時にエラーが発生しました。 - + Quit ownCloud ownCloudを終了 @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured ownCloudアカウントが設定されていません - + The configured server for this client is too old このクライアントのサーバー設定は古すぎます。 - + Please update to the latest server and restart the client. サーバーを最新にアップデートして、クライアントを再起動してください。 - + Authentication error: Either username or password are wrong. 認証エラー: ユーザー名またはパスワードが間違っています。 - + timeout タイムアウト - + The provided credentials are not correct 入力された資格情報が正しくありません - - OCC::DeleteJob - - - Connection timed out - 接続タイムアウト - - OCC::DiscoveryMainThread - + Aborted by the user ユーザーによって中止されました @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. ローカルフォルダー %1 は存在しません。 - + %1 should be a folder but is not. %1 はフォルダーのはずですが、そうではないようです。 - + %1 is not readable. %1 は読み込み可能ではありません。 - + %1 has been removed. %1 names a file. %1 は削除されました。 - + %1 has been downloaded. %1 names a file. %1 はダウンロードされました。 - + %1 has been updated. %1 names a file. %1 が更新されました。 - + %1 has been renamed to %2. %1 and %2 name files. %1 の名前が %2 に変更されました。 - + %1 has been moved to %2. %1 は %2 に移動しました。 - + %1 and %n other file(s) have been removed. %1 とその他 %n 個のファイルが削除されました。 - + %1 and %n other file(s) have been downloaded. %1 とその他 %n 個のファイルがダウンロードされました。 - + %1 and %n other file(s) have been updated. %1 とその他 %n 個のファイルが更新されました。 - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 を %2 にファイル名を変更し、その他 %n 個のファイル名を変更しました。 - + %1 has been moved to %2 and %n other file(s) have been moved. %1 を %2 に移動し、その他 %n 個のファイルを移動しました。 - + %1 has and %n other file(s) have sync conflicts. %1 と その他 %n 個のファイルが同期で衝突しました。 - + %1 has a sync conflict. Please check the conflict file! %1 が同期で衝突しています。コンフリクトファイルを確認してください。 - + %1 and %n other file(s) could not be synced due to errors. See the log for details. エラーにより、%1 と その他 %n 個のファイルが同期できませんでした。ログで詳細を確認してください。 - + %1 could not be synced due to an error. See the log for details. エラーにより %1 が未同期です。ログで詳細を確認してください。 - + Sync Activity 同期アクティビティ - + Could not read system exclude file システム上の除外ファイルを読み込めません - + A new folder larger than %1 MB has been added: %2. %1 MB より大きな新しいフォルダーが追加されました: %2 - + A folder from an external storage has been added. 外部ストレージからフォルダーが追加されました。 - + Please go in the settings to select it if you wish to download it. このフォルダーをダウンロードするには設定画面で選択してください。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 「すべてのファイルを削除」を選択すると、あなたが所有者でない限り、ファイルは使用できなくなります。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce 「ファイルを残す」を選択した場合、ファイルはサーバーから再同期されます。 - + Remove All Files? すべてのファイルを削除しますか? - + Remove all files すべてのファイルを削除 - + Keep files ファイルを残す - + This sync would reset the files to an earlier 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? この同期により同期フォルダー '%1' のファイルが以前のものに戻されます。 これは、バックアップがサーバー上に復元されたためです。 通常と同じように同期を続けると、すべてのファイルが以前の状態の古いファイルによって上書きされます。最新のローカルファイルを競合ファイルとして保存しますか? - + Backup detected バックアップが検出されました - + Normal Synchronisation 正常同期 - + Keep Local Files as Conflict コンフリクト時にローカルファイルを保持 @@ -810,112 +831,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state フォルダーの状態をリセットできませんでした - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. 古い同期ジャーナル '%1' が見つかりましたが、削除できませんでした。それを現在使用しているアプリケーションが存在しないか確認してください。 - + (backup) (バックアップ) - + (backup %1) (%1をバックアップ) - + Undefined State. 未定義の状態。 - + Waiting to start syncing. 同期開始を待機中 - + Preparing for sync. 同期の準備中。 - + Sync is running. 同期を実行中です。 - + Last Sync was successful. 最後の同期は成功しました。 - + Last Sync was successful, but with warnings on individual files. 最新の同期は成功しました。しかし、一部のファイルに問題がありました。 - + Setup Error. 設定エラー。 - + User Abort. ユーザーによる中止。 - + Sync is paused. 同期を一時停止しました。 - + %1 (Sync is paused) %1 (同期を一時停止) - + No valid folder selected! 有効なフォルダーが選択されていません! - + The selected path is not a folder! 指定のパスは、フォルダーではありません! - + You have no permission to write to the selected folder! 選択されたフォルダーに書き込み権限がありません - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! ローカルフォルダー %1 にはシンボリックリンクが含まれています。リンク先にはすでに同期されたフォルダーが含まれているため、別のフォルダーを選択してください! - + There is already a sync from the server to this local folder. Please pick another local folder! すでに同期されたフォルダーがあります。別のフォルダーを選択してください! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! ローカルフォルダー %1 にはすでに同期フォルダーとして利用されてるフォルダーを含んでいます。他のフォルダーを選択してください。 - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! ローカルフォルダー %1 には同期フォルダーとして利用されているフォルダーがあります。他のフォルダーを選択してください。 - + 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! ローカルフォルダー %1 には同期フォルダーとして利用されているフォルダーがあります。他のフォルダーを選択してください! @@ -923,17 +944,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection 同期フォルダーを追加 - + Synchronizing with local folder ローカルフォルダーを同期中 - + File ファイル @@ -941,134 +962,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder フォルダーを追加するためには、接続している必要があります。 - + Click this button to add a folder to synchronize. このボタンをクリックして同期フォルダーを追加してください。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. サーバーからフォルダーのリスト取得時にエラー - + Signed out サインアウト - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. すでに同期対象のフォルダーのため、追加したフォルダーを無効にしました。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダーの同期設定を削除してください。 - + Fetching folder list from server... サーバーからフォルダーリストを取得中... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' '%1' の更新を確認しています - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同期中 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ダウンロード %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) アップロード %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 中 %3 完了) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 残り%5、%2中%1完了 、ファイル%4個中%3個完了 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, ファイル数 %3 of %4 - + file %1 of %2 %1 / %2 ファイル - + Waiting... 待機中... - + Waiting for %n other folder(s)... %n 他のフォルダーの完了待ち... - + Preparing to sync... 同期の準備中... @@ -1076,12 +1107,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 同期フォルダーを追加 - + Add Sync Connection 同期接続を追加 @@ -1094,7 +1125,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an 同期したいローカルフォルダーをクリックしてください。 - + Enter the path to the local folder. ローカルフォルダーのパスを入力してください。 @@ -1117,42 +1148,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an '%1'の下に新しいフォルダーの名前を入力: - + Folder was successfully created on %1. %1 にフォルダーが作成されました。 - + Authentication failed accessing %1 %1 アクセス中に認証に失敗しました - + Failed to create the folder on %1. Please check manually. %1 にフォルダーを作成できませんでした。手作業で確認してください。 - + Failed to list a folder. Error: %1 フォルダーをリストアップできません。エラー: %1 - + Choose this to sync the entire account アカウント全体を同期する場合はこちらを選択 - + This folder is already being synced. このフォルダーはすでに同期されています。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i>は、<i>%2</i>の親フォルダーですでに同期しています。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. すべてのファイルはすでに同期されています。他のフォルダーの同期は<b>サポートしていません</>。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダー同期設定を削除してください。 @@ -1173,22 +1204,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway サーバーからE-Tagを受信できません。プロキシ/ゲートウェイを確認してください。 - + We received a different E-Tag for resuming. Retrying next time. 同期再開時に違う E-Tagを受信しました。次回リトライします。 - + Server returned wrong content-range サーバーが間違ったcontent-rangeを返しました - + Connection Timeout 接続タイムアウト @@ -1211,23 +1242,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an システムトレイ - + Advanced 詳細設定 - + Ask for confirmation before synchronizing folders larger than 指定された容量以上のフォルダーは同期前に確認する - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages 外部ストレージと同期する前に確認する @@ -1247,28 +1278,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an モノクロアイコンを使用(&M) - + Edit &Ignored Files 除外ファイルリストを編集(&I) - + S&how crash reporter クラッシュ報告を表示(&H) - - + + About バージョン情報 - + Updates アップデート - + &Restart && Update 再起動してアップデート(&R) @@ -1276,22 +1307,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> %1 のパスワードを入力してください:<br> <br>ユーザー:%2<br>アカウント:%3<br> - + Reading from keychain failed with error: '%1' 鍵情報の読み込みに失敗しました。エラー: '%1' - + Enter Password パスワードを入力してください - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">ここをクリック</a>してウェブインターフェースからアプリパスワードをリクエストしてください。 @@ -1373,55 +1404,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from このエントリーは、システム '%1' から提供されています。この画面では変更できません。 + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output ログ出力 - + &Search: &検索 - + &Find 検索(&F) - + + &Capture debug messages + + + + Clear クリア - + Clear the log display. ログの表示をクリアする。 - + S&ave 保存(&A) - + Save the log file to a file on disk for debugging. デバッグ目的でディスクにログファイルを保存する - + Save log file ログファイルを保存 - + Error エラー - + Could not write to log file %1 ログファイル%1に書き込みできませんでした。 @@ -1429,24 +1530,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error エラー - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>ファイル '%1'<br/>を書き込み用で開けませんでした。<br/><br/>ログ出力を<b>保存できません</b>でした!</nobr> - - OCC::MoveJob - - - Connection timed out - 接続タイムアウト - - OCC::NSISUpdater @@ -1558,27 +1651,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from 自動的に制限 - + Hostname of proxy server プロキシサーバーのホスト名 - + Username for proxy server プロキシサーバーのユーザー名 - + Password for proxy server プロキシサーバーのパスワード - + HTTP(S) proxy HTTP(S)プロキシ - + SOCKS5 proxy SOCKS5プロキシ @@ -1591,78 +1684,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 %1 を作成しました。 - + Closing in a few seconds... 数秒以内に接続を終了します。 - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' リクエスト %1 が %2 に失敗 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' が %2 に選択されました + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready 新しい %1 アップデートの準備完了 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. %1 の新しいアップデートのインストール準備ができました。アップデートのインストール中、追加の権限が必要な場合があります。 - + Downloading version %1. Please wait... バージョン %1 をダウンロードしています。しばらくお待ちください... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. アップデートをダウンロードできませんでした。手動でアップデートするには、<a href='%1'>ここ</a> をクリックしてください。 - + Could not check for new updates. アップデートを確認できませんでした。 - + %1 version %2 available. Restart application to start the update. %1 のバージョン %2 が利用できます。アップデートを開始するためにアプリケーションを再起動してください。 - + New %1 version %2 available. Please use the system's update tool to install it. %1 の新しいバージョン %2 に更新できます。アプリのアップデートツールでインストールしてください。 - + Checking update server... アップデートをチェックしています.... - + Update status is unknown: Did not check for new updates. 更新状況が不明です: 更新をチェックしていません。 - + No updates available. Your installation is at the latest version. 利用可能なアップデートはありません。最新版がインストールされています。 @@ -1675,43 +1801,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 %1 に接続中 - + Setup local folder options ローカルフォルダーのオプションを設定 - + Connect... 接続... - + %1 folder '%2' is synced to local folder '%3' %1 フォルダー '%2' はローカルフォルダー '%3' と同期しています - + Sync the folder '%1' '%1' フォルダーを同期 - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>警告:</strong> ローカルフォルダーは空ではありません。解決方法を選択してください!</small></p> - + Local Sync Folder ローカル同期フォルダー - - + + (%1) (%1) @@ -1744,7 +1870,7 @@ for additional privileges during the process. クライアントサイドTLS証明書を設定 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>安全なサーバーアドレス <em>%1</em> に接続できませんでした。どのように進めますか?</p></body></html> @@ -1752,46 +1878,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email メール(&E) - + Connect to %1 %1 に接続中 - + Enter user credentials ユーザー資格情報を入力 + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 %1 に接続中 - + Setup %1 server %1 サーバーを設定 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. このURLは暗号化されていないため安全ではありません。利用はお勧めしません。 - + This url is secure. You can use it. このURLは安全です。利用可能です。 - + &Next > 次(&N) > @@ -1799,22 +1938,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">正常に %1 へ接続されました:%2 バージョン %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 の %1 に接続に失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 の %1 へ接続を試みた際にタイムアウトしました。 - + Trying to connect to %1 at %2... %2 の %1 へ接続を試みています... @@ -1834,109 +1973,109 @@ It is not advisable to use it. サーバーによってアクセスが拒否されています。適切なアクセス権があるか検証するには、<a href="%1">ここをクリック</a>してブラウザーでサービスにアクセスしてください。 - + Invalid URL 無効なURL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ローカルの同期フォルダー %1 はすでに存在するため、同期の設定をしてください。<br/><br/> - + Creating local sync folder %1... ローカル同期フォルダー %1 を作成中... - + ok OK - + failed. 失敗。 - + Could not create local folder %1 ローカルフォルダー %1 を作成できませんでした - + No remote folder specified! リモートフォルダーが指定されていません! - + Error: %1 エラー: %1 - + creating folder on ownCloud: %1 ownCloud上にフォルダーを作成中: %1 - + Remote folder %1 created successfully. リモートフォルダー %1 は正常に生成されました。 - + The remote folder %1 already exists. Connecting it for syncing. リモートフォルダー %1 はすでに存在します。同期のために接続しています。 - + The folder creation resulted in HTTP error code %1 フォルダーの作成はHTTPのエラーコード %1 で終了しました - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 指定された資格情報が間違っているため、リモートフォルダーの作成に失敗しました!<br/>前に戻って資格情報を確認してください。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">おそらく資格情報が間違っているため、リモートフォルダーの作成に失敗しました。</font><br/>前に戻り、資格情報をチェックしてください。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. リモートフォルダー %1 の作成がエラーで失敗しました。<tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. %1 からリモートディレクトリ %2 への同期接続を設定しました。 - + Successfully connected to %1! %1への接続に成功しました! - + Connection to %1 could not be established. Please check again. %1 への接続を確立できませんでした。もう一度確認してください。 - + Folder rename failed フォルダー名の変更に失敗しました。 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. フォルダーまたはその中にあるファイルが他のプログラムで開かれているため、フォルダーの削除やバックアップができません。フォルダーまたはファイルを閉じてから再試行するか、セットアップをキャンセルしてください。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ローカルの同期フォルダー %1 は正常に作成されました!</b></font> @@ -1944,12 +2083,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 接続ウィザード - + Skip folders configuration フォルダー設定をスキップ @@ -1957,33 +2096,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! すべてセットアップされました! - + Open Local Folder ローカルフォルダーを開く - + Open %1 in Browser %1 をブラウザーで開く - - OCC::PUTFileJob - - - Connection Timeout - 接続タイムアウト - - OCC::PollJob - + Invalid JSON reply from the poll URL 不正なJSONがポーリングURLから返りました @@ -1991,7 +2122,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -1999,47 +2130,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! ファイル %1 はローカルファイル名が衝突しているためダウンロードできません! - - The download would reduce free disk space below %1 - ダウンロードすると、空き容量が %1 になります + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 ディスク空き容量が %1 よりも少なくなっています - + File was deleted from server ファイルはサーバーから削除されました - + The file could not be downloaded completely. このファイルのダウンロードは完了しませんでした - + The downloaded file is empty despite the server announced it should have been %1. サーバーが通知しているファイルは %1 であるべきですが、ダウンロードファイルは空でした。 - + File %1 cannot be saved because of a local file name clash! %1 はローカルファイル名が衝突しているため保存できません! - + File has changed since discovery ファイルは発見以降に変更されました - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2047,17 +2178,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 復元に失敗: %1 - - Continue blacklisting: - ブラックリストの続き: - - - + A file or folder was removed from a read only share, but restoring failed: %1 ファイルまたはフォルダーが読み込み専用の共有から削除されましたが、復元に失敗しました: %1 @@ -2065,22 +2191,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ファイル %1 を削除できません。エラー: %2 - + Attention, possible case sensitivity clash with %1 注意: %1 で大文字小文字が競合している可能性 - + could not create folder %1 フォルダー %1 を作成できません - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2088,17 +2214,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; '%1'の削除エラー: %2; - + Could not remove folder '%1' フォルダー '%1'を削除できません - + Could not remove %1 because of a local file name clash %1 はローカルファイル名が衝突しているため削除できませんでした @@ -2106,13 +2232,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash ファイル %1 はローカルファイル名が衝突しているため %2 に名前を変更できません - - + + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2120,12 +2246,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. ファイルが読み込み専用の共有から削除されました。ファイルは復元されました。 - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". 誤ったHTTPコードがサーバーから返されました。204のはずが、"%1 %2"が返りました。 @@ -2133,12 +2259,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 誤ったHTTPコードがサーバーから返されました。201のはずが、"%1 %2"が返りました。 - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2146,28 +2272,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. このフォルダー名は変更できません。元の名前に戻します。 - + This folder must not be renamed. Please name it back to Shared. このフォルダー名は変更できません。名前を Shared に戻してください。 - + The file was renamed but is part of a read only share. The original file was restored. ファイルの名前が変更されましたが、読み込み専用の共有の一部です。オリジナルのファイルが復元されました。 - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 誤ったHTTPコードがサーバーから返されました。201のはずが、"%1 %2"が返りました。 - - + + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2175,27 +2301,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists ファイル %1 は、大文字と小文字の区別が違う同じ名前のファイルが存在するためアップロードできません - + File Removed ファイルを削除しました - + Local file changed during syncing. It will be resumed. ローカルファイルが同期中に変更されました。再開されます。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2203,32 +2334,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. 5.4.2 以下のQt でHTTP 接続リセットが強制終了されました - + The local file was removed during sync. ローカルファイルを同期中に削除します。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + Unexpected return code from server (%1) サーバー (%1) からの予期しない戻りコード - + Missing File ID from server サーバーからファイルIDの戻りがありません - + Missing ETag from server サーバーからETagの戻りがありません @@ -2236,32 +2367,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. 5.4.2 以下のQt でHTTP 接続リセットが強制終了されました - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. ファイルがローカルで編集されましたが、読み込み専用の共有の一部です。ファイルは復元され、あなたの編集は競合するファイル内にあります。 - + Poll URL missing ポーリングURLがありません - + The local file was removed during sync. ローカルファイルを同期中に削除します。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + The server did not acknowledge the last chunk. (No e-tag was present) サーバーは最終チャンクを認識しませんでした。(e-tag が存在しませんでした) @@ -2279,42 +2410,42 @@ It is not advisable to use it. テキストラベル - + Time 時刻 - + File ファイル - + Folder フォルダー - + Action アクション - + Size サイズ - + Local sync protocol ローカルファイル同期状況 - + Copy コピー - + Copy the activity list to the clipboard. アクティビティ一覧をコピーする @@ -2355,7 +2486,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 同期フォルダーを選択 @@ -2363,33 +2494,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... 読込中 ... - + Deselect remote folders you do not wish to synchronize. 同期したくないリモートのサブフォルダーは、同期対象から外せます。 - + Name 名前 - + Size サイズ - - + + No subfolders currently on the server. 現在サーバーにサブフォルダーはありません。 - + An error occurred while loading the list of sub folders. サーバーからフォルダーのリスト取得時にエラーが発生しました。 @@ -2402,22 +2533,22 @@ It is not advisable to use it. 設定 - + Activity アクティビティ - + General 一般 - + Network ネットワーク - + Account アカウント @@ -2425,27 +2556,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity アクティビティ - + General 一般 - + Network ネットワーク - + Account アカウント @@ -2473,35 +2604,45 @@ It is not advisable to use it. OwnCloudのパス: - + %1 Sharing %1 を共有中 - + %1 %1 - + Folder: %2 フォルダー: %2 - + The server does not allow sharing サーバーで共有を許可していません - + Retrieving maximum possible sharing permissions from server... サーバーから共有権限を取得できる最大数で取得しています - + The file can not be shared because it was shared without sharing permission. 再共有権限がない共有ため、このファイルは共有できません。 + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2511,92 +2652,126 @@ It is not advisable to use it. Share NewDocument.odt - - Share link - URLで共有 - - - + TextLabel テキストラベル - + Set &password パスワードを設定(&P) - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date 有効期限を設定(&E) - + Set password パスワードを設定 - - &Mail link - メールリンク(&M) + + Link properties: + - Copy &link - &linkをコピー + Show file listing + - + Allow editing 編集を許可 - + Anyone with the link has access to the file/folder リンクを知っている人はファイル/フォルダにアクセスできます - + + P&assword protect パスワード保護(&A) - + Password Protected パスワード保護 - + The file can not be shared because it was shared without sharing permission. 再共有権限がない共有ため、このファイルは共有できません。 - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password 共有するにはパスワードが必要(&A) - + Please Set Password パスワードを入力してください - - - Could not open email client - 電子メールクライアントを開くことができませんでした - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - メールクライアントを起動して新しいメッセージを作成するときにエラーが発生しました。デフォルトのメールクライアントが設定されていませんか? - - - - - &Share link - リンク共有(&S) - OCC::ShareUserGroupWidget @@ -2606,68 +2781,98 @@ It is not advisable to use it. Share NewDocument.odt - + Share with users or groups ... ユーザーもしくはグループと共有 ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' '%1' は見つかりませんでした + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - フォーム + - + TextLabel - テキストラベル + - + can edit - 編集を許可 + - + can share - 共有可 + - + ... - + - + create - 作成 + - + change - 更新 + - + delete - 削除 + OCC::ShibbolethCredentials - + Login Error ログインエラー - + You must sign in as user %1 ユーザー %1 としてログインする必要があります @@ -2675,22 +2880,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - 認証 - + SSL Chipher Debug View SSL暗号デバッグ表示 - + Reauthentication required 再認証が必要 - + Your session has expired. You need to re-login to continue to use the client. セッションの期限が切れました。クライアントを使用し続けるには再ログインが必要です。 @@ -2698,26 +2903,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud %1 と共有 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>詳細認証情報</h3> - + Common Name (CN): コモンネーム(CN): - + Subject Alternative Names: サブジェクトの別名: @@ -2802,7 +3027,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. この接続は、%1 の %2 bit を使って暗号化されています。 @@ -2819,7 +3044,7 @@ It is not advisable to use it. 認証情報: - + This connection is NOT secure as it is not encrypted. 暗号化されていないので、この接続は安全ではありません。 @@ -2839,67 +3064,67 @@ It is not advisable to use it. この証明書を信用する - + Untrusted Certificate 信頼できない証明書 - + Cannot connect securely to <i>%1</i>: <i>%1</i> にセキュアに接続できません: - + with Certificate %1 証明書 %1 - + &lt;not specified&gt; &lt;指定されていません&gt; - - + + Organization: %1 組織名: %1 - - + + Unit: %1 部門名: %1 - - + + Country: %1 国: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 発効日: %1 - + Expiration Date: %1 有効期限: %1 - + Issuer: %1 発行者: %1 @@ -2907,285 +3132,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSyncはジャーナルファイルの読み込みに失敗しました。ジャーナルファイルが破損しています。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csync 用の %1 プラグインをロードできませんでした。<br/>インストール状態を確認してください!</p> - + CSync got an error while processing internal trees. CSyncは内部ツリーの処理中にエラーに遭遇しました。 - - CSync failed to reserve memory. - CSyncで使用するメモリの確保に失敗しました。 - - - + CSync fatal parameter error. CSyncの致命的なパラメータエラーです。 - + CSync processing step update failed. CSyncの処理ステップの更新に失敗しました。 - + CSync processing step reconcile failed. CSyncの処理ステップの調停に失敗しました。 - + CSync could not authenticate at the proxy. CSyncはそのプロキシで認証できませんでした。 - + CSync failed to lookup proxy or server. CSyncはプロキシもしくはサーバーの参照に失敗しました。 - + CSync failed to authenticate at the %1 server. CSyncは %1 サーバーでの認証に失敗しました。 - + CSync failed to connect to the network. CSyncはネットワークへの接続に失敗しました。 - + A network connection timeout happened. ネットワーク接続のタイムアウトが発生しました。 - + A HTTP transmission error happened. HTTPの伝送エラーが発生しました。 - + The mounted folder is temporarily not available on the server サーバー上のマウント済フォルダーが一時的に利用できません。 - + An error occurred while opening a folder フォルダーを開く際にエラーが発生しました - + Error while reading folder. フォルダーの読み込みエラー - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. 隠しファイル/フォルダーのため無視されました - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: %1 サーバーには利用可能な空き領域がありません。 - + CSync unspecified error. CSyncの未指定のエラーです。 - + Aborted by the user ユーザーによって中止されました - + CSync failed to access CSync は接続できませんでした - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSyncはジャーナルファイルの読み込みや作成に失敗しました。ローカルの同期フォルダーに読み書きの権限があるか確認してください。 - + CSync failed due to unhandled permission denied. CSync が処理できないパーミション拒否により失敗しました - + CSync tried to create a folder that already exists. CSyncはすでに存在するフォルダーを作成しようとしました。 - + The service is temporarily unavailable サーバーは一時的に利用できません - + Access is forbidden アクセスが禁止されています - + An internal error number %1 occurred. 内部エラー番号 %1 が発生しました。 - - The item is not synced because of previous errors: %1 - このアイテムは以前にエラーが発生したため同期しません: %1 - - - + Symbolic links are not supported in syncing. 同期機能はシンボリックリンクをサポートしていません。 - + File is listed on the ignore list. ファイルは除外リストに登録されています。 - + File names ending with a period are not supported on this file system. 末尾にピリオドを使うファイル名はサポートされていません - + File names containing the character '%1' are not supported on this file system. ファイル名に使用できない文字列が含まれています: '%1' - + The file name is a reserved name on this file system. ファイル名はこのファイルシステムで予約されている名前です。 - + Filename contains trailing spaces. ファイル名末尾にスペースが含まれます。 - + Filename is too long. ファイル名が長すぎます - + Stat failed. 情報取得エラー - + Filename encoding is not valid ファイル名のエンコーディングが無効です。 - + Invalid characters, please rename "%1" 無効な文字です、"%1" を変更してください。 - - Unable to initialize a sync journal. - 同期ジャーナルの初期化ができません。 - - - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 @@ -3201,7 +3441,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3209,17 +3449,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>バージョン %1. 詳細な情報は<a href='%2'>%3</a>を確認してください。</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 が配布し、 GNU General Public License (GPL) バージョン2.0 の下でライセンスされています。<br/>%2 及び %2 のロゴはアメリカ合衆国またはその他の国、あるいはその両方における %1 の登録商標です。</p> @@ -3227,17 +3467,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. ヘッダーのチェックサムが異常です。 - + The checksum header contained an unknown checksum type '%1' チェックサムヘッダーに '%1' という未知のチェックサムが含まれていました - + The downloaded file does not match the checksum, it will be resumed. ダウンロードしたファイルがチェックサムエラーです。再ダウンロードします。 @@ -3245,207 +3485,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in サインインしてください - + Folder %1: %2 フォルダー %1: %2 - + No sync folders configured. 同期フォルダーが設定されていません。 - + There are no sync folders configured. 同期するフォルダーがありません。 - + Open in browser ブラウザーで開く - - - + + + Log in... ログイン... - - - + + + Log out ログアウト - + Recent Changes 最近変更されたファイル - + Checking for changes in '%1' '%1' の更新を確認しています - + Managed Folders: 管理フォルダー: - + Open folder '%1' フォルダー ’%1’ を開く - + Open %1 in browser %1をブラウザーで開く - + Unknown status 不明な状態 - + Settings... 設定... - + Details... 詳細... - + Help ヘルプ - + Quit %1 %1 を終了 - + Disconnected from %1 %1 から切断されました - + Unsupported Server Version サポートされていないサーバーバージョン - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. %1 アカウントのサーバーのバージョン %2 は古く、未サポートです。この未サポートのサーバーバージョンとこのクライアントでの組み合わせは、未テストで潜在的な危険があります。ご利用は自己責任でお願いいたします。 - + Disconnected from accounts: アカウントから切断: - + Account %1: %2 アカウント %1: %2 - + Account synchronization is disabled アカウントの同期は無効になっています - + Unpause all folders すべてのフォルダーの同期を再開 - + Pause all folders すべてのフォルダーの同期を一時停止 - + Unpause all synchronization すべての同期を再開 - + Unpause synchronization 同期を再開 - + Pause all synchronization すべての同期を一時停止 - + Pause synchronization 同期を一時停止 - + Log out of all accounts 全てのアカウントからログアウト - + Log in to all accounts... 全てのアカウントにログイン - + New account... 新規アカウント... - + Crash now Only shows in debug mode to allow testing the crash handler クラッシュしました。 - + No items synced recently 最近同期されたアイテムはありません。 - + Syncing %1 of %2 (%3 left) 同期中 %2 中 %1 (残り %3) - + Syncing %1 of %2 %2 の %1 を同期しています - + Syncing %1 (%2 left) 同期中 %1 (残り %2) - + Syncing %1 同期中 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新です @@ -3453,7 +3693,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3556,78 +3796,42 @@ It is not advisable to use it. パスワード(&P) + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form フォーム - - Server &address: - サーバーアドレス(&A): - - - - - TextLabel テキストラベル - - - Use &secure connection - 暗号化通信を利用(&S) - - - - CheckBox - チェックボックス - - - - &Username: - ユーザー名(&U): - - - - Enter the ownCloud username. - ownCloudのユーザー名を入力してください。 - - - - &Password: - パスワード(&P): - - - - Enter the ownCloud password. - ownCloudのパスワードを入力してください。 - - - - Do not allow the local storage of the password. - パスワードのローカルストレージへの保存を許可しない。 - - - - &Do not store password on local machine - パスワードをローカルマシンに保存しない(&D) - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - 接続するownCloudのURLを(httpやhttpsを含めずに)入力してください。 - Ser&ver Address @@ -3671,7 +3875,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3679,42 +3883,42 @@ It is not advisable to use it. QObject - + in the future 今後 - + %n day(s) ago %n日前 - + %n hour(s) ago %n 時間前 - + now - + Less than a minute ago 1分以内 - + %n minute(s) ago %n 分前 - + Some time ago 数分前 - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3723,57 +3927,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n ヶ月 - + %n day(s) %n 日 - + %n hour(s) %n 時間 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 @@ -3794,102 +3998,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small><a href="%1">%2</a> %3, %4 のGitリビジョンからのビルド Qt %5, %6 を利用</small></p> - - - built with %1 - %1 で構築されました - progress - + Downloaded ダウンロード済み - + Uploaded アップロード済み - + Server version downloaded, copied changed local file into conflict file サーバー側バージョンがダウンロードされました。変更されたローカルファイルは、コンフリクトファイルにコピーしました。 - + Deleted 削除済み - + Moved to %1 %1に移動済み - + Ignored 除外しました - + Filesystem access error ファイルシステムのアクセスエラー - + Error エラー - + Updated local metadata ローカルメタデータが更新されました - - + + Unknown 不明 - + downloading ダウンロード中 - + uploading アップロード中 - + deleting 削除しています - + moving 移動しています - + ignoring 除外: + - error エラー - + updating local metadata ローカルメタデータの更新中 @@ -3897,54 +4096,77 @@ It is not advisable to use it. theme - + Status undefined 未定義の状態 - + Waiting to start sync 同期開始を待っています - + Sync is running 同期を実行中 - + Sync Success 同期成功 - + Sync Success, some files were ignored. 同期が完了しました。一部のファイルが除外されました。 - + Sync Error 同期エラー - + Setup Error 設定エラー - + Preparing to sync 同期の準備中 - + Aborting... 中止しています... - + Sync is paused 同期を一時停止 + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 64979cce4..14cd40ab4 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Målfilen har uventet størrelse eller endringstidspunkt @@ -81,6 +81,24 @@ Tekst-etikett + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Avbryt @@ -136,188 +154,204 @@ Tilkoblet <server> som <user> - + No account configured. Ingen konto konfigurert. - + Add new Legg til ny - + Remove Fjern - + Account Konto - + Choose what to sync Velg hva som synkroniseres - + Force sync now Tving synkronisering nå - + Restart sync Prøv synkronisering igjen - + Remove folder sync connection Fjern tilkobling for mappe-synkronisering - + Folder creation failed Oppretting av mappe feilet - + <p>Could not create local folder <i>%1</i>. <p>Klarte ikke å opprette lokal mappe <i>%1</i>. - + Confirm Folder Sync Connection Removal Bekreft fjerning av tilkobling for mappe-synkronisering - + Remove Folder Sync Connection Fjern tilkobling for mappe-synkronisering - + Sync Running Synkroniserer... - + The syncing operation is running.<br/>Do you want to terminate it? Synkronisering kjører.<br/>Vil du avbryte den? - + %1 in use %1 i bruk - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server-versjonen %1 er gammel og støttes ikke! Fortsett på egen risiko. - + Connected to %1. Tilkoblet %1. - + Server %1 is temporarily unavailable. Server %1 er midlertidig utilgjengelig. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Logget ut fra %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Ingen tilkobling til %1 på %2. - + Log in Logg inn - + There are folders that were not synchronized because they are too big: Noen mapper ble ikke synkronisert fordi de er for store - + There are folders that were not synchronized because they are external storages: Noen mapper ble ikke synkronisert fordi de er eksterne lagringsplasser: - + There are folders that were not synchronized because they are too big or external storages: Noen mapper ble ikke synkronisert fordi de er for store eller de er eksterne lagringsplasser: - + Confirm Account Removal Bekreft fjerning av konto - + <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> <p>Vil du virkelig fjerne tilkoblingen til kontoen <i>%1</i>?</p><p><b>Merk:</b> Dette vil <b>ikke</b> slette noen filer.</p> - + Remove connection Fjern tilkobling - + + Open folder Åpne mappe - - + + Log out Logg ut - + Resume sync Fortsett synkronisering - + Pause sync Sett synkronisering på pause - + <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> <p>Vil du virkelig stoppe synkronisering av mappen <i>%1</i>?</p><p><b>Merk:</b> Dette vil <b>ikke</b> slette noen filer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) av %2 i bruk. Noen mapper, inkludert nettverkstilkoblede eller delte mapper, kan ha andre begrensninger. - + %1 of %2 in use %1 av %2 i bruk - + Currently there is no storage usage information available. Ingen informasjon om bruk av lagringsplass tilgjengelig for øyeblikket. - + No %1 connection configured. Ingen %1-forbindelse konfigurert. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Logget ut - + Disconnected Frakoblet - + Connected Tilkoblet - + Service unavailable Tjeneste utilgjengelig - + + Maintenance mode + + + + Network error Nettverksfeil - + Configuration error Konfigurasjonsfeil - + + Asking Credentials + + + + Unknown account state Ukjent kontotilstand @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Server-aktivitet - + Sync Protocol Synkroniseringsprotokoll - - List of ignored or erroneous files - Liste over filer som er ignorert eller har feil - - - - Copy - Kopier - - - - Copy the activity list to the clipboard. - Kopier aktivitetslisten til utklippstavlen. - - - + Not Synced Ikke synkronisert - + Not Synced (%1) %1 is the number of not synced files. Ikke synkronisert (%1) - + The server activity list has been copied to the clipboard. Server-aktivitetslisten er kopiert til utklippstavlen. - + The sync activity list has been copied to the clipboard. Synkroniserings-aktivitetslisten er kopiert til utklippstavlen. - + The list of unsynced items has been copied to the clipboard. Listen med usynkroniserte elementer ble kopiert til utklippstavlen. - + Copied to clipboard Kopiert til utklippstavlen @@ -448,47 +477,47 @@ Tekst-etikett - + Server Activities Server-aktiviteter - + Copy Kopier - + Copy the activity list to the clipboard. Kopier aktivitetslisten til utklippstavlen. - + Action Required: Notifications Handling kreves: Varsler - + <br/>Account %1 does not have activities enabled. <br/>Konto %1 har ikke aktiviteter aktivert. - + You received %n new notification(s) from %2. Du mottok %n nytt varsel fra %2.Du mottok %n nye varsler fra %2. - + You received %n new notification(s) from %1 and %2. Du mottok %n nytt varsel fra %1 og %2.Du mottok %n nye varsler fra %1 og %2. - + You received new notifications from %1, %2 and other accounts. Du mottok nye varsler fra %1, %2 og andre kontoer. - + %1 Notifications - Action Required %1 varsler - Handling kreves @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Feil ved lesing av konfigurasjonsfil - + There was an error while accessing the configuration file at %1. En feil oppstod ved aksessering av konfigurasjonsfilen på %1. - + Quit ownCloud Avslutt ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Ingen ownCloud-konter konfigurert - + The configured server for this client is too old Den konfigurerte serveren for denne klienten er for gammel - + Please update to the latest server and restart the client. Vennligst oppdatert til den nyeste serveren og start klienten på nytt. - + Authentication error: Either username or password are wrong. Autentiseringsfeil: Bruker navn eller passord er feil. - + timeout tidsavbrudd - + The provided credentials are not correct Oppgitt påloggingsinformasjon er feil - - OCC::DeleteJob - - - Connection timed out - Forbindelsen fikk tidsavbrudd - - OCC::DiscoveryMainThread - + Aborted by the user Avbrutt av brukeren @@ -632,124 +653,124 @@ OCC::Folder - + Local folder %1 does not exist. Lokal mappe %1 eksisterer ikke. - + %1 should be a folder but is not. %1 skal være en mappe men er ikke det. - + %1 is not readable. %1 kan ikke leses. - + %1 has been removed. %1 names a file. %1 har blitt fjernet. - + %1 has been downloaded. %1 names a file. %1 har blitt lastet ned. - + %1 has been updated. %1 names a file. %1 har blitt oppdatert. - + %1 has been renamed to %2. %1 and %2 name files. %1 har blitt omdøpt til %2. - + %1 has been moved to %2. %1 har blitt flyttet til %2. - + %1 and %n other file(s) have been removed. %1 og %2 annen fil har blitt fjernet.%1 og %2 andre filer har blitt fjernet. - + %1 and %n other file(s) have been downloaded. - %1 og %2 annen fil har blitt lastet ned.%1 og %2 andre filer har blitt lastet ned. + %1 og %2 annen fil har blitt lastet ned.%1 og %n andre filer har blitt lastet ned. - + %1 and %n other file(s) have been updated. - %1 og %2 annen fil har blitt oppdatert.%1 og %2 andre filer har blitt oppdatert. + %1 og %2 annen fil har blitt oppdatert.%1 og %n andre filer har blitt oppdatert. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 er blitt omdøpt til %2 og %n annen fil har blitt omdøpt.%1 er blitt omdøpt til %2 og %n andre filer har blitt omdøpt. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 er blitt flyttet til %2 og %n annen fil har blitt flyttet.%1 er blitt flyttet til %2 og %n andre filer har blitt flyttet. - + %1 has and %n other file(s) have sync conflicts. %1 og %n andre filer har synkroniseringskonflikter.%1 og %n andre filer har synkroniseringskonflikter. - + %1 has a sync conflict. Please check the conflict file! %1 har en synkroniseringskonflikt. Sjekk konflikt-filen. - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 og %n andre filer kunne ikke synkroniseres pga. feil. Se loggen for detaljer.%1 og %n andre filer kunne ikke synkroniseres pga. feil. Se loggen for detaljer. - + %1 could not be synced due to an error. See the log for details. %1 kunne ikke synkroniseres pga. en feil. Se loggen for detaljer. - + Sync Activity Synkroniseringsaktivitet - + Could not read system exclude file Klarte ikke å lese systemets ekskluderingsfil - + A new folder larger than %1 MB has been added: %2. En ny mappe større enn %1 MB er blitt lagt til: %2. - + A folder from an external storage has been added. En mappe fra et eksternt lager er blitt lagt til. - + Please go in the settings to select it if you wish to download it. Gå til Innstillinger og velg den hvis du ønsker å laste den ned. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -760,7 +781,7 @@ Hvis du velger å beholde filene, vil de bli synkronisert tilbake til serveren h Hvis du velger å slette filene, blir de utilgjengelige for deg hvis du ikke er eieren av filen. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -769,22 +790,22 @@ Er du sikker på at du ønsker å synkronisere denne handlingen med serveren? Hvis det var et uhell og du velger å beholde filene, vil de bli synkronisert tilbake fra serveren. - + Remove All Files? Fjerne alle filer? - + Remove all files Fjern alle filer - + Keep files Behold filer - + This sync would reset the files to an earlier 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? @@ -793,17 +814,17 @@ Dette kan være fordi en backup ble gjenopprettet på serveren. Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrevet av en eldre fil i en tidligere tilstand. Ønsker du å beholde dine ferskeste lokale filer som konflikt-filer? - + Backup detected Backup oppdaget - + Normal Synchronisation Normal synkronisering - + Keep Local Files as Conflict Behold lokale filer som konflikt @@ -811,112 +832,112 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderMan - + Could not reset folder state Klarte ikke å tilbakestille mappetilstand - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. En gammel synkroniseringsjournal '%1' ble funnet men kunne ikke fjernes. Pass på at ingen applikasjoner bruker den. - + (backup) (sikkerhetskopi) - + (backup %1) (sikkerhetskopi %1) - + Undefined State. Udefinert tilstand. - + Waiting to start syncing. Venter på å starte synkronisering. - + Preparing for sync. Forbereder synkronisering. - + Sync is running. Synkronisering kjører. - + Last Sync was successful. Siste synkronisering var vellykket. - + Last Sync was successful, but with warnings on individual files. Siste synkronisering var vellykket, men med advarsler på enkelte filer. - + Setup Error. Feil med oppsett. - + User Abort. Brukeravbrudd. - + Sync is paused. Synkronisering er satt på pause. - + %1 (Sync is paused) %1 (Synkronisering er satt på pause) - + No valid folder selected! Ingen gyldig mappe valgt! - + The selected path is not a folder! Den valgte stien er ikke en mappe! - + You have no permission to write to the selected folder! Du har ikke skrivetilgang til den valgte mappen! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Den lokale mappen %1 inneholder en symbolsk lenke. Målet for lenken inneholder en mappe som allerede er synkronisert. Velg en annen mappe! - + There is already a sync from the server to this local folder. Please pick another local folder! Det er allerede en synkronisering fra serveren til denne lokale mappen. Velg en annen mappe! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Den lokale mappen %1 inneholder allerede en mappe brukt i en mappe-synkronisering. Velg en annen! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Den lokale mappen %1 er allerede en undermappe av en mappe brukt i en mappe-synkronisering. Velg en annen! - + 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! Den lokale mappen %1 er en symbolsk lenke. Målet for lenken er allerede en undermappe av en mappe brukt i en mappe-synkronisering. Velg en annen! @@ -924,17 +945,17 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderStatusDelegate - + Add Folder Sync Connection Legg til mappe-synkronisering - + Synchronizing with local folder Synkroniserer med lokal mappe - + File Fil @@ -942,134 +963,144 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderStatusModel - + You need to be connected to add a folder Du må være tilkoblet for å legge til en mappe - + Click this button to add a folder to synchronize. Klikk denne knappen for å legge til en mappe som skal synkroniseres. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Feil ved innlasting av listen av mapper fra serveren. - + Signed out Logget ut - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Du kan ikke legge til en mappe fordi du allerede synkroniserer alle filene dine. Hvis du ønsker å synkronisere individuelle mapper, må du fjerne synkroniseringen av rotmappen som er konfigurert. - + Fetching folder list from server... Henter mappeliste fra server.. - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Ser etter endringer i '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserer %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) nedlasting %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) opplasting %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 igjen, %1 av %2, fil %3 of %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Venter.. - + Waiting for %n other folder(s)... Venter på %n annen mappe...Venter på %n andre mappe(r)... - + Preparing to sync... Forbereder synkronisering... @@ -1077,12 +1108,12 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderWizard - + Add Folder Sync Connection Legg til mappe-synkronisering - + Add Sync Connection Legg til tilkobling for synkronisering @@ -1095,7 +1126,7 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Klikk for å velge en lokal mappe å synkronisere. - + Enter the path to the local folder. Legg inn stien til den lokale mappen. @@ -1118,42 +1149,42 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Oppgi navnet på den nye mappen som skal opprettes under '%1': - + Folder was successfully created on %1. Mappen ble opprettet på %1. - + Authentication failed accessing %1 Autentisering feilet ved tilgang til %1 - + Failed to create the folder on %1. Please check manually. Klarte ikke å opprette mappen på %1. Sjekk manuelt. - + Failed to list a folder. Error: %1 Klarte ikke å liste en mappe. Feil: %1 - + Choose this to sync the entire account Velg dette for å synkronisere en hel konto - + This folder is already being synced. Denne mappen synkroniseres allerede. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkroniserer allerede <i>%1</i>, som er foreldremappe for <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Du synkroniserer allerede alle filene dine. Synkronisering av enda en mappe støttes <b>ikke</b>. Hvis du vil synkronisere flere mapper må du fjerne den konfigurerte synkroniseringen av rotmappe. @@ -1174,22 +1205,22 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ingen E-Tag mottatt fra server. Sjekk proxy/gateway. - + We received a different E-Tag for resuming. Retrying next time. Vi mottok en forskjellig E-Tag for å fortsette. Prøver igjen neste gang. - + Server returned wrong content-range Serveren returnerte feil content-range - + Connection Timeout Tidsavbrudd ved tilkobling @@ -1212,23 +1243,23 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev For systemkurven - + Advanced Avansert - + Ask for confirmation before synchronizing folders larger than Be om bekreftelse før synkronisering av mapper større enn - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Be om bekreftelse før synkronisering av eksterne lagre @@ -1248,28 +1279,28 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Bruk svart/&hvite ikoner - + Edit &Ignored Files Rediger &ignorerte filer - + S&how crash reporter Vis &krasj-rapportering - - + + About Om - + Updates Oppdateringer - + &Restart && Update &Omstart && Oppdater @@ -1277,22 +1308,22 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Legg inn %1-passord:<br><br>Bruker: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Lesing fra nøkkelring feilet med feil: '%1' - + Enter Password Legg inn passord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikk her</a> for å be om et app-passord fra web-grensesnittet. @@ -1374,55 +1405,125 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Denne oppføringen er gitt av systemet på '%1' og kan ikke endres i denne visningen. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Logg - + &Search: &Søk: - + &Find &Finn - + + &Capture debug messages + + + + Clear Tøm - + Clear the log display. Tøm loggvisningen. - + S&ave L&agre - + Save the log file to a file on disk for debugging. Lagre logg til disken for feilsøking - + Save log file Lagre logg fil - + Error Feil - + Could not write to log file %1 Kunne ikke skrive til loggfil %1 @@ -1430,24 +1531,16 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::Logger - + Error Feil - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Fil '%1'<br/>kan ikke åpnes for skriving.<br/><br/>Loggen kan <b>ikke</b> lagres!</nobr> - - OCC::MoveJob - - - Connection timed out - Forbindelsen fikk tidsavbrudd - - OCC::NSISUpdater @@ -1559,27 +1652,27 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Begrens automatisk - + Hostname of proxy server Servernavnet til proxy-serveren - + Username for proxy server Brukernavn for proxy-server - + Password for proxy server Passord for proxy-server - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1592,79 +1685,112 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::NotificationWidget - + Created at %1 Opprettet %1 - + Closing in a few seconds... Lukkes om noen sekunder... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 forespørsel feilet %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' valgt %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Ny %1-oppdatering er klar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. En ny oppdatering for %1 er i ferd med å bli installert. Oppdateringen kan be om flere rettigheter under behandlingen. - + Downloading version %1. Please wait... Laster ned versjon %1. Vennligst vent... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Klarte ikke å laste ned oppdateringen. Klikk <a href='%1'>her</a> for å laste ned oppdateringen manuelt. - + Could not check for new updates. Klarte ikke å se etter nye oppdateringer. - + %1 version %2 available. Restart application to start the update. %1 versjon %2 tilgjengelig. Start applikasjonen på nytt for å starte oppdatering. - + New %1 version %2 available. Please use the system's update tool to install it. Ny %1 versjon %2 tilgjengelig. Bruk systemets oppdateringsverktøy til å installere den. - + Checking update server... Sjekker oppdaterings-server... - + Update status is unknown: Did not check for new updates. Oppdateringsstatus er ukjent: Sjekket ikke for nye oppdateringer. - + No updates available. Your installation is at the latest version. Ingen oppdateringer tilgjengelig. Du har den nyeste versjonen. @@ -1677,43 +1803,43 @@ kan be om flere rettigheter under behandlingen. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Koble til %1 - + Setup local folder options Sett opp valg for lokal mappe - + Connect... Koble til... - + %1 folder '%2' is synced to local folder '%3' %1 mappe '%2' er synkronisert til lokal mappe '%3' - + Sync the folder '%1' Synkroniser mappen '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Advarsel:</strong> Den lokale mappen er ikke tom. Velg en løsning!</small></p> - + Local Sync Folder Lokal synkroniseringsmappe - - + + (%1) (%1) @@ -1746,7 +1872,7 @@ kan be om flere rettigheter under behandlingen. Konfigurer TLS-sertifikat på klientsiden - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Klarte ikke å koble til den sikre server-addressen <em>%1</em>. Hvordan vil du gå videre?</p></body></html> @@ -1754,47 +1880,60 @@ kan be om flere rettigheter under behandlingen. OCC::OwncloudHttpCredsPage - + &Email &E-post - + Connect to %1 Koble til %1 - + Enter user credentials Legg inn påloggingsinformasjon + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Koble til %1 - + Setup %1 server Sett opp %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Denne url er IKKE sikker fordi den ikke er kryptert. Det er ikke tilrådelig å bruke den. - + This url is secure. You can use it. Denne url-en er sikker. Du kan bruke den. - + &Next > &Neste > @@ -1802,22 +1941,22 @@ Det er ikke tilrådelig å bruke den. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Vellykket oppkobling mot %1: %2 versjon %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Klarte ikke å koble til %1 på %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tidsavbrudd ved oppkobling mot %1 på %2. - + Trying to connect to %1 at %2... Prøver å koble til %1 på %2... @@ -1837,109 +1976,109 @@ Det er ikke tilrådelig å bruke den. Tilgang forbudt av serveren. For å sjekke om du har gyldig tilgang, <a href="%1">klikk her</a> for å aksessere tjenesten med nettleseren din. - + Invalid URL Ugyldig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkroniseringsmappe %1 finnes allerede. Setter den opp for synkronisering.<br/><br/> - + Creating local sync folder %1... Oppretter lokal synkroniseringsmappe %1... - + ok ok - + failed. feilet. - + Could not create local folder %1 Klarte ikke å opprette lokal mappe %1 - + No remote folder specified! Ingen ekstern mappe spesifisert! - + Error: %1 Feil: %1 - + creating folder on ownCloud: %1 oppretter mappe på ownCloud: %1 - + Remote folder %1 created successfully. Ekstern mappe %1 ble opprettet. - + The remote folder %1 already exists. Connecting it for syncing. Ekstern mappe %1 finnes allerede. Kobler den til for synkronisering. - + The folder creation resulted in HTTP error code %1 Oppretting av mappe resulterte i HTTP-feilkode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Oppretting av ekstern mappe feilet fordi påloggingsinformasjonen er feil!<br/>Gå tilbake og sjekk brukernavnet og passordet ditt.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Oppretting av ekstern mappe feilet, sannsynligvis fordi oppgitt påloggingsinformasjon er feil.</font><br/>Vennligst gå tilbake og sjekk ditt brukernavn og passord.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Oppretting av ekstern mappe %1 feilet med feil <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsforbindelse fra %1 til ekstern mappe %2 ble satt opp. - + Successfully connected to %1! Forbindelse til %1 opprettet! - + Connection to %1 could not be established. Please check again. Klarte ikke å etablere forbindelse til %1. Sjekk igjen. - + Folder rename failed Omdøping av mappe feilet - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan ikke fjerne og sikkerhetskopiere mappen fordi mappen eller en fil i mappen er åpen i et annet program. Lukk mappen eller filen og prøv igjen, eller avbryt oppsettet. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Oppretting av lokal synkroniseringsmappe %1 vellykket!</b></font> @@ -1947,12 +2086,12 @@ Det er ikke tilrådelig å bruke den. OCC::OwncloudWizard - + %1 Connection Wizard %1 Veiviser for tilkobling - + Skip folders configuration Hopp over mappekonfigurasjon @@ -1960,33 +2099,25 @@ Det er ikke tilrådelig å bruke den. OCC::OwncloudWizardResultPage - + Everything set up! Alt er satt opp! - + Open Local Folder Åpne lokal mappe - + Open %1 in Browser Åpne %1 i nettleser - - OCC::PUTFileJob - - - Connection Timeout - Tidsavbrudd ved tilkobling - - OCC::PollJob - + Invalid JSON reply from the poll URL Ugyldig JSON-svar fra forespørsels-URL @@ -1994,7 +2125,7 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateDirectory - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2002,47 +2133,47 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Fil %1 kan ikke lastes ned på grunn av lokalt sammenfall av filnavn! - - The download would reduce free disk space below %1 - Nedlastingen ville ha redusert ledig diskplass til under %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Ledig plass på disk er mindre enn %1 - + File was deleted from server Filen ble slettet fra serveren - + The file could not be downloaded completely. Hele filen kunne ikke lastes ned. - + The downloaded file is empty despite the server announced it should have been %1. Nedlastet fil er tom, selv om serveren annonserte at den skulle være %1. - + File %1 cannot be saved because of a local file name clash! Fil %1 kan ikke lagres på grunn av lokal konflikt med filnavn. - + File has changed since discovery Filen er endret siden den ble oppdaget - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2050,17 +2181,12 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Gjenoppretting feilet: %1 - - Continue blacklisting: - Fortsett svartelisting: - - - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mappe ble fjernet fra en deling med lesetilgang, men gjenoppretting feilet: %1 @@ -2068,22 +2194,22 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 klarte ikke å slette fil %1, feil: %2 - + Attention, possible case sensitivity clash with %1 Merk! mulig sammenfall med %1 pga. sensitivitet for store/små bokstaver - + could not create folder %1 klarte ikke å opprette mappe %1 - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2091,17 +2217,17 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalRemove - + Error removing '%1': %2; Feil ved fjerning av '%1': %2; - + Could not remove folder '%1' Klarte ikke å fjerne mappe '%1' - + Could not remove %1 because of a local file name clash Kunne ikke fjerne %1 på grunn av lokalt sammenfall av filnavn @@ -2109,13 +2235,13 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Fil %1 kan ikke omdøpes til %2 på grunn av lokalt sammenfall av filnavn - - + + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2123,12 +2249,12 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Filen er blitt fjernet fra en deling med lesetilgang. Den ble gjenopprettet. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Feil HTTP-kode returnert fra server. Ventet 204, men mottok "%1 %2". @@ -2136,12 +2262,12 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Feil HTTP-kode returnert fra server. Ventet 201, men mottok "%1 %2". - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2149,28 +2275,28 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Denne mappen må ikke omdøpes. Den er omdøpt tilbake til sitt opprinnelige navn. - + This folder must not be renamed. Please name it back to Shared. Denne mappen må ikke omdøpes. Vennligst omdøp den tilbake til Shared. - + The file was renamed but is part of a read only share. The original file was restored. Filen ble gitt nytt navn mer er en del av en deling med lesetilgang. Den opprinnelige filen ble gjenopprettet. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Feil HTTP-kode returnert fra server. Ventet 201, men mottok "%1 %2". - - + + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2178,27 +2304,32 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Fil %1 kan ikke lastes opp fordi en annen fil eksisterer med samme navn, bare med forskjellige store og små bokstaver i navnet. - + File Removed Fil fjernet - + Local file changed during syncing. It will be resumed. Lokal fil endret under synkronisering. Den vil gjenopptas. - + Local file changed during sync. Lokal fil endret under synkronisering. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2206,32 +2337,32 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Tvinger avbryting av jobb ved HTTP connection reset med Qt < 5.4.2. - + The local file was removed during sync. Den lokale filen ble fjernet under synkronisering. - + Local file changed during sync. Lokal fil endret under synkronisering. - + Unexpected return code from server (%1) Uventet returkode fra serveren (%1) - + Missing File ID from server Mangler File ID fra server - + Missing ETag from server Mangler ETag fra server @@ -2239,32 +2370,32 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Tvinger avbryting av jobb ved HTTP connection reset med Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Filen ble redigert lokalt men er en del av en deling med lesetilgang. Den er blitt gjenopprettet og din endring er i konfliktfilen. - + Poll URL missing Forespørsels-URL mangler - + The local file was removed during sync. Den lokale filen ble fjernet under synkronisering. - + Local file changed during sync. Lokal fil endret under synkronisering. - + The server did not acknowledge the last chunk. (No e-tag was present) Serveren godtok ikke den siste deloverføringen. (Ingen e-tag var tilstede) @@ -2282,42 +2413,42 @@ Det er ikke tilrådelig å bruke den. Tekst-etikett - + Time Tid - + File Fil - + Folder Mappe - + Action Handling - + Size Størrelse - + Local sync protocol Lokal synkroniseringsprotokoll - + Copy Kopier - + Copy the activity list to the clipboard. Kopier aktivitetslisten til utklippstavlen. @@ -2358,7 +2489,7 @@ Det er ikke tilrådelig å bruke den. OCC::SelectiveSyncDialog - + Choose What to Sync Velg hva som synkroniseres @@ -2366,33 +2497,33 @@ Det er ikke tilrådelig å bruke den. OCC::SelectiveSyncWidget - + Loading ... Laster ... - + Deselect remote folders you do not wish to synchronize. Fjern valg for eksterne mapper som du ikke ønsker å synkronisere. - + Name Navn - + Size Størrelse - - + + No subfolders currently on the server. Ingen undermapper på serveren nå - + An error occurred while loading the list of sub folders. Det oppstod en feil ved lasting av liten med undermapper. @@ -2405,22 +2536,22 @@ Det er ikke tilrådelig å bruke den. Innstillinger - + Activity Aktivitet - + General Generelt - + Network Nettverk - + Account Konto @@ -2428,27 +2559,27 @@ Det er ikke tilrådelig å bruke den. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitet - + General Generelt - + Network Nettverk - + Account Konto @@ -2476,35 +2607,45 @@ Det er ikke tilrådelig å bruke den. ownCloud-sti: - + %1 Sharing %1-deling - + %1 %1 - + Folder: %2 Mappe: %2 - + The server does not allow sharing Serveren tillater ikke deling - + Retrieving maximum possible sharing permissions from server... Henter maksimalt mulige delerettigheter fra serveren... - + The file can not be shared because it was shared without sharing permission. Filen kan ikke deles fordi den ble delt uten adgang til å dele. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2514,92 +2655,126 @@ Det er ikke tilrådelig å bruke den. Del NewDocument.odt - - Share link - Del lenke - - - + TextLabel Tekst-etikett - + Set &password Sett &passord - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Sett &utløpsdato - + Set password Sett passord - - &Mail link - &Epost-lenke + + Link properties: + - Copy &link - Kopier &lenke + Show file listing + - + Allow editing Tillat redigering - + Anyone with the link has access to the file/folder Alle med linken har tilgang til filen/mappen - + + P&assword protect P&assordbeskyttelse - + Password Protected Passordbeskyttet - + The file can not be shared because it was shared without sharing permission. Filen kan ikke deles fordi den ble delt uten adgang til å dele. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Offentlig d&eling krever et passord - + Please Set Password Sett passord - - - Could not open email client - Klarte ikke å åpne epost-klient - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Det oppstod en feil ved oppstart av epost-klienten for å lage en ny melding. Kanskje ingen standard epost-klient er konfigurert? - - - - - &Share link - &Del lenke - OCC::ShareUserGroupWidget @@ -2609,68 +2784,98 @@ Det er ikke tilrådelig å bruke den. Del NewDocument.odt - + Share with users or groups ... Del med brukere eller grupper ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Ingen resultater for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Skjema + - + TextLabel - Tekst-etikett + - + can edit - kan endre + - + can share - kan dele + - + ... - ... + - + create - opprette + - + change - endre + - + delete - slett + OCC::ShibbolethCredentials - + Login Error Innloggingsfeil - + You must sign in as user %1 Du må logge inn som bruker %1 @@ -2678,22 +2883,22 @@ Det er ikke tilrådelig å bruke den. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autentiser - + SSL Chipher Debug View SSL Chipher Debug View - + Reauthentication required Ny autentisering kreves - + Your session has expired. You need to re-login to continue to use the client. Økten din har utløpt. Du må logge inn på nytt for å fortsette å bruke klienten. @@ -2701,26 +2906,46 @@ Det er ikke tilrådelig å bruke den. OCC::SocketApi - + Share with %1 parameter is ownCloud Del med %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifikatdetaljer</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Subject Alternative Names: @@ -2805,7 +3030,7 @@ Det er ikke tilrådelig å bruke den. %1 - + This connection is encrypted using %1 bit %2. Denne forbindelsen er kryptert med %1 bit %2. @@ -2822,7 +3047,7 @@ Det er ikke tilrådelig å bruke den. Sertifikatinformasjon: - + This connection is NOT secure as it is not encrypted. Denne forbindelsen er IKKE sikker da den ikke er kryptert. @@ -2842,67 +3067,67 @@ Det er ikke tilrådelig å bruke den. Stol på dette sertifikatet likevel - + Untrusted Certificate Ikke-klarert sertifikat - + Cannot connect securely to <i>%1</i>: Kan ikke koble sikkert til <i>%1</i>: - + with Certificate %1 med sertifikat %1 - + &lt;not specified&gt; &lt;ikke spesifisert&gt; - - + + Organization: %1 Organisasjon: %1 - - + + Unit: %1 Enhet: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingeravtrykk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingeravtrykk (SHA1): <tt>%1</tt> - + Effective Date: %1 Gyldig fra dato: %1 - + Expiration Date: %1 Utløpsdato: %1 - + Issuer: %1 Utsteder: %1 @@ -2910,285 +3135,300 @@ Det er ikke tilrådelig å bruke den. OCC::SyncEngine - + Success. Suksess. - + CSync failed to load the journal file. The journal file is corrupted. CSync kunne ikke laste inn journalfilen. Journalfilen er ødelagt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Klarte ikke å laste utvidelse %1 for csync.<br/>Verifiser installasjonen!</p> - + CSync got an error while processing internal trees. CSync fikk en feil under behandling av intern trestruktur. - - CSync failed to reserve memory. - CSync klarte ikke å reservere minne. - - - + CSync fatal parameter error. CSync fatal parmeterfeil. - + CSync processing step update failed. CSync-behandlingssteg oppdatering feilet. - + CSync processing step reconcile failed. CSync-behandlingssteg overensstemming feilet. - + CSync could not authenticate at the proxy. CSync klarte ikke å autentisere mot proxy. - + CSync failed to lookup proxy or server. CSync klarte ikke å slå opp proxy eller server. - + CSync failed to authenticate at the %1 server. CSync karte ikke å autentisere på serveren %1. - + CSync failed to connect to the network. CSync klarte ikke å koble seg til nettverket. - + A network connection timeout happened. Det oppstod et tidsavbrudd for en nettverksforbindelse. - + A HTTP transmission error happened. En HTTP-overføringsfeil oppstod. - + The mounted folder is temporarily not available on the server Den oppkoblede mappen er for tiden ikke tilgjengelig på serveren - + An error occurred while opening a folder Det oppstod en feil ved åpning av en mappe - + Error while reading folder. Feil ved lesing av mappe. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Filen/mappen ignoreres fordi den er skjult. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Ikke ledig plass tilgjengelig på server %1. - + CSync unspecified error. CSync uspesifisert feil. - + Aborted by the user Avbrutt av brukeren - + CSync failed to access CSync klarte ikke å aksessere - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync klarte ikke å laste eller opprette journalfilen. Sjekk at du har lese- og skrivetilgang i den lokale synkroniseringsmappen. - + CSync failed due to unhandled permission denied. CSync feilet fordi nektet tilgang ikke ble håndtert. - + CSync tried to create a folder that already exists. CSync prøvde å opprette en mappe som finnes allerede. - + The service is temporarily unavailable Tjenesten er midlertidig utilgjengelig - + Access is forbidden Tilgang er nektet - + An internal error number %1 occurred. En intern feil nummer %1 oppstod. - - The item is not synced because of previous errors: %1 - Elementet er ikke synkronisert på grunn av tidligere feil: %1 - - - + Symbolic links are not supported in syncing. Symbolske lenker støttes ikke i synkronisering. - + File is listed on the ignore list. Filen ligger på ignoreringslisten. - + File names ending with a period are not supported on this file system. Filnavn som slutter med punktum er ikke tillatt på dette filsystemet - + File names containing the character '%1' are not supported on this file system. Filnavn som inneholder '%1' er ikke tillatt på dette filsystemet - + The file name is a reserved name on this file system. Filnavnet er et reservert navn på dette filsystemet. - + Filename contains trailing spaces. Filnavn inneholder blanke på slutten. - + Filename is too long. Filnavn er for langt. - + Stat failed. Stat feilet. - + Filename encoding is not valid Filnavn-koding er ikke gyldig - + Invalid characters, please rename "%1" Ugyldige tegn, gi et annet navn til "%1" - - Unable to initialize a sync journal. - Kan ikke initialisere en synkroniseringsjournal. - - - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden @@ -3204,7 +3444,7 @@ Det er ikke tilrådelig å bruke den. OCC::Systray - + %1: %2 %1: %2 @@ -3212,17 +3452,17 @@ Det er ikke tilrådelig å bruke den. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versjon %1. For mer informasjon gå til <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuert av %1 og lisensiert under GNU General Public License (GPL) Version 2.0.<br/>%2 og %2-logoet er registrerte varemerker for %1 i USA, i andre land eller begge deler.</p> @@ -3230,17 +3470,17 @@ Det er ikke tilrådelig å bruke den. OCC::ValidateChecksumHeader - + The checksum header is malformed. Sjekksum-headeren har feil format. - + The checksum header contained an unknown checksum type '%1' Sjekksum-header inneholdt ukjent sjekksum-type '%1' - + The downloaded file does not match the checksum, it will be resumed. Den nedlastede filen passer ikke med sjekksummen, den vil bli gjenopptatt. @@ -3248,207 +3488,207 @@ Det er ikke tilrådelig å bruke den. OCC::ownCloudGui - + Please sign in Vennligst logg inn - + Folder %1: %2 Mappe %1: %2 - + No sync folders configured. Ingen synkronisering-mapper konfigurert. - + There are no sync folders configured. Ingen synkroniseringsmapper er konfigurert. - + Open in browser Åpne i nettleser - - - + + + Log in... Logg inn.. - - - + + + Log out Logg ut - + Recent Changes Siste endringer - + Checking for changes in '%1' Ser etter endringer i '%1' - + Managed Folders: Administrerte mapper: - + Open folder '%1' Åpne mappe '%1' - + Open %1 in browser Åpne %1 i nettleser - + Unknown status Ukjent status - + Settings... Innstillinger... - + Details... Detaljer... - + Help Hjelp - + Quit %1 Avslutt %1 - + Disconnected from %1 Koble fra %1 - + Unsupported Server Version Server-versjonen støttes ikke - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Serveren på konto %1 kjører en gammel %2 som ikke støttes. Bruk av denne klienten med ikke-støttede server-versjoner er ikke testet og kan være farlig. Fortsett på egen risiko. - + Disconnected from accounts: Koblet fra kontoer: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Kontosynkronisering er deaktivert - + Unpause all folders Fortsett alle mapper - + Pause all folders Sett alle mapper på pause - + Unpause all synchronization Fortsett all synkronisering - + Unpause synchronization Fortsett synkronisering - + Pause all synchronization Sett all synkronisering på pause - + Pause synchronization Sett synkronisering på pause - + Log out of all accounts Logg ut av alle kontoer - + Log in to all accounts... Logg inn på alle kontoer... - + New account... Ny konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krasj nå - + No items synced recently Ingenting synkronisert nylig - + Syncing %1 of %2 (%3 left) Synkroniserer %1 av %2 (%3 gjenstår) - + Syncing %1 of %2 Synkroniserer %1 av %2 - + Syncing %1 (%2 left) Synkroniserer %1 (%2 gjenstår) - + Syncing %1 Synkroniserer %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Oppdatert @@ -3456,7 +3696,7 @@ Det er ikke tilrådelig å bruke den. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Versjon %2. For mer informasjon gå til <a href="%3">https://%4</a></p><p>For kjente problemer og hjelp, gå til: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>Av Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt med flere.</small></p><p>Copyright ownCloud GmbH</p><p>Lisensiert under GNU General Public License (GPL) Version 2.0<br/>ownCloud og ownCloud-logo er registrerte varemerker for ownCloud GmbH i USA, andre land eller begge deler.</p> @@ -3559,78 +3799,42 @@ Det er ikke tilrådelig å bruke den. &Passord + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Skjema - - Server &address: - Server-&adresse: - - - - - TextLabel Tekst-etikett - - - Use &secure connection - Bruk &sikker forbindelse - - - - CheckBox - CheckBox - - - - &Username: - &Brukernavn: - - - - Enter the ownCloud username. - Skriv inn ownCloud brukernavn - - - - &Password: - &Passord - - - - Enter the ownCloud password. - Skriv inn ownCloud-passordet. - - - - Do not allow the local storage of the password. - Ikke tillat lokal lagring av passordet. - - - - &Do not store password on local machine - &Ikke lagre passord på lokal maskin - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Legg inn url til ownCloud-installasjonen du vil koble deg til (uten http eller https). - Ser&ver Address @@ -3674,7 +3878,7 @@ Det er ikke tilrådelig å bruke den. QApplication - + QT_LAYOUT_DIRECTION LTR @@ -3682,42 +3886,42 @@ Det er ikke tilrådelig å bruke den. QObject - + in the future fram i tid - + %n day(s) ago i gårfor %n dager siden - + %n hour(s) ago for %n time sidenfor %n timer siden - + now - + Less than a minute ago For mindre enn et minutt siden - + %n minute(s) ago for %n minutt sidenfor %n minutter siden - + Some time ago For en stund siden - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3726,57 +3930,57 @@ Det er ikke tilrådelig å bruke den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n måned%n måneder - + %n day(s) %n dag%n dager - + %n hour(s) %n time%n timer - + %n minute(s) %n minutt%n minutter - + %n second(s) %n sekund%n sekunder - + %1 %2 %1 %2 @@ -3797,102 +4001,97 @@ Det er ikke tilrådelig å bruke den. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Bygget fra Git-revisjon <a href="%1">%2</a> %3, %4 med Qt %5, %6</small></p> - - - built with %1 - bygget med %1 - progress - + Downloaded Nedlastet - + Uploaded Opplastet - + Server version downloaded, copied changed local file into conflict file Server-versjon lastet ned, kopierte endret lokal fil til konfliktfil - + Deleted Slettet - + Moved to %1 Flyttet til %1 - + Ignored Ignorert - + Filesystem access error Feil med tilgang til filsystemet - + Error Feil - + Updated local metadata Oppdaterte lokale metadata - - + + Unknown Ukjent - + downloading laster ned - + uploading laster opp - + deleting sletter - + moving flytter - + ignoring ignorerer + - error feil - + updating local metadata oppdaterer lokale metadata @@ -3900,54 +4099,77 @@ Det er ikke tilrådelig å bruke den. theme - + Status undefined Status udefinert - + Waiting to start sync Venter på å starte synkronisering - + Sync is running Synkronisering pågår - + Sync Success Synkronisering vellykket - + Sync Success, some files were ignored. Vellykket synkronisering. Noen filer ble ignorert. - + Sync Error Synkroniseringsfeil - + Setup Error Feil i oppsett - + Preparing to sync Forbereder synkronisering - + Aborting... Avbryter... - + Sync is paused Synkronisering er satt på pause + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 644c5f9b0..37a5d6ee6 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Het doelbestand heeft een onverwachte omvang of tijdstempel @@ -81,6 +81,24 @@ Tekstlabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Annuleren @@ -136,188 +154,204 @@ Verbonden met <server> als <user> - + No account configured. Geen account ingesteld. - + Add new Toevoegen nieuw - + Remove Verwijder - + Account Account - + Choose what to sync Selectieve synchronisatie - + Force sync now Forceer sync nu - + Restart sync Herstarten sync - + Remove folder sync connection Verwijderen map sync verbinding - + Folder creation failed Maken map mislukt - + <p>Could not create local folder <i>%1</i>. <p>Kon lokale map <i>%1</i> niet maken. - + Confirm Folder Sync Connection Removal Bevestig verwijderen Map Sync verbinding - + Remove Folder Sync Connection Verwijderen Map Sync verbinding - + Sync Running Bezig met synchroniseren - + The syncing operation is running.<br/>Do you want to terminate it? Bezig met synchroniseren.<br/>Wilt u stoppen met synchroniseren? - + %1 in use %1 in gebruik - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. De serverversie %1 is oud en wordt niet meer ondersteund. Verdergaan is op eigen risico. - + Connected to %1. Verbonden met %1. - + Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Uitgelogd van %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Geen verbinding met %1 op %2. - + Log in Meld u aan - + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn: - + There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze op externe opslag staan: - + There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn of op externe opslag staan: - + Confirm Account Removal Bevestig verwijderen account - + <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> <p>Wilt u echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijdert u <b>geen</b> bestanden.</p> - + Remove connection Verwijderen verbinding - + + Open folder Openen map - - + + Log out Afmelden - + Resume sync Hervatten sync - + Pause sync Pauzeren sync - + <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> <p>Weet u zeker dat u de synchronisatie van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. - + %1 of %2 in use %1 van %2 in gebruik - + Currently there is no storage usage information available. Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. - + No %1 connection configured. Geen %1 connectie geconfigureerd. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Afgemeld - + Disconnected Niet verbonden - + Connected Verbonden - + Service unavailable Dienst niet beschikbaar - + + Maintenance mode + + + + Network error Netwerkfout - + Configuration error Configuratiefout - + + Asking Credentials + + + + Unknown account state Onbekende account-status @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveractiviteit - + Sync Protocol Synchronisatiegeschiedenis - - List of ignored or erroneous files - Lijst van genegeerde of foutieve bestanden - - - - Copy - Kopiëren - - - - Copy the activity list to the clipboard. - Kopieer de activiteitenlijst naar het klembord. - - - + Not Synced Niet gesynchroniseerd - + Not Synced (%1) %1 is the number of not synced files. Niet gesynchroniseerd (%1) - + The server activity list has been copied to the clipboard. De server activiteitenlijst is gekopieerd naar het klembord. - + The sync activity list has been copied to the clipboard. De sync activiteitenlijst is gekopieerd naar het klembord. - + The list of unsynced items has been copied to the clipboard. De lijst met niet gesyncte objecten is gekopieerd naar het klembord. - + Copied to clipboard Gekopieerd naar het klembord @@ -448,47 +477,47 @@ Tekstlabel - + Server Activities Serveractiviteiten - + Copy Kopiëren - + Copy the activity list to the clipboard. Kopieer de activiteitenlijst naar het klembord. - + Action Required: Notifications Actie verwacht: Berichten - + <br/>Account %1 does not have activities enabled. <br/>Account %1 heeft geen activiteiten ingeschakeld. - + You received %n new notification(s) from %2. U ontving %n nieuw bericht van %2.U ontving %n nieuwe berichten van %2. - + You received %n new notification(s) from %1 and %2. U ontving %n nieuwe melding(en) van %1 en %2.U ontving %n nieuwe melding(en) van %1 en %2. - + You received new notifications from %1, %2 and other accounts. Je hebt nieuwe berichten ontvangen van %1, %2 en andere acounts - + %1 Notifications - Action Required %1 Berichten - Actie verwacht @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Fout bij benaderen configuratiebestand - + There was an error while accessing the configuration file at %1. Er trad een fout op bij het benaderen configuratiebestand op %1 - + Quit ownCloud Verlaten ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Geen ownCloud-account geconfigureerd - + The configured server for this client is too old De voor dit programma ingestelde server is te oud - + Please update to the latest server and restart the client. Werk de server bij naar de nieuwste versie en herstart het programma. - + Authentication error: Either username or password are wrong. Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - + timeout time-out - + The provided credentials are not correct De verstrekte inloggegevens zijn niet juist - - OCC::DeleteJob - - - Connection timed out - Time-out verbinding - - OCC::DiscoveryMainThread - + Aborted by the user Afgebroken door de gebruiker @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. Lokale map %1 bestaat niet. - + %1 should be a folder but is not. %1 zou een map moeten zijn, maar is dat niet. - + %1 is not readable. %1 is niet leesbaar. - + %1 has been removed. %1 names a file. %1 is verwijderd. - + %1 has been downloaded. %1 names a file. %1 is gedownload. - + %1 has been updated. %1 names a file. %1 is bijgewerkt. - + %1 has been renamed to %2. %1 and %2 name files. %1 is hernoemd naar %2. - + %1 has been moved to %2. %1 is verplaatst naar %2. - + %1 and %n other file(s) have been removed. %1 en %n ander bestand(en) zijn verwijderd.%1 en %n andere bestand(en) zijn verwijderd. - + %1 and %n other file(s) have been downloaded. %1 en %n ander bestand(en) zijn gedownload.%1 en %n andere bestand(en) zijn gedownload. - + %1 and %n other file(s) have been updated. %1 en %n ander bestand(en) zijn bijgewerkt.%1 en %n andere bestand(en) zijn bijgewerkt. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 is hernoemd naar %2 en %n ander bestand(en) is hernoemd.%1 is hernoemd naar %2 en %n andere bestand(en) zijn hernoemd. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 is verplaatst naar %2 en %n ander bestand(en) is verplaatst.%1 is verplaatst naar %2 en %n andere bestand(en) zijn verplaatst. - + %1 has and %n other file(s) have sync conflicts. %1 en %n ander bestand(en) hebben een sync conflict.%1 en %n andere bestand(en) hebben sync conflicten. - + %1 has a sync conflict. Please check the conflict file! %1 heeft een sync conflict. Controleer het conflict bestand! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 en %n ander bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details.%1 en %n andere bestand(en) konden niet worden gesynchroniseerd wegens fouten. Bekijk het log voor details. - + %1 could not be synced due to an error. See the log for details. %1 kon niet worden gesynchroniseerd door een fout. Bekijk het log voor details. - + Sync Activity Synchronisatie-activiteit - + Could not read system exclude file Kon het systeem-uitsluitingsbestand niet lezen - + A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. - + Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ Als u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de serv Als u de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij u de eigenaar bent. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -769,22 +790,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Als dit een ongelukje was en u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - + Remove All Files? Verwijder alle bestanden? - + Remove all files Verwijder alle bestanden - + Keep files Bewaar bestanden - + This sync would reset the files to an earlier 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? @@ -793,17 +814,17 @@ Dit kan komen doordat een backup is hersteld op de server. Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere versie. Wilt u uw lokale meer recente bestanden behouden als conflict bestanden? - + Backup detected Backup gedetecteerd - + Normal Synchronisation Normale synchronisatie - + Keep Local Files as Conflict Behoud lokale bestanden als conflict @@ -811,112 +832,112 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderMan - + Could not reset folder state Kan de beginstaat van de map niet terugzetten - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Een oud synchronisatieverslag '%1' is gevonden maar kan niet worden verwijderd. Zorg ervoor dat geen applicatie dit bestand gebruikt. - + (backup) (backup) - + (backup %1) (backup %1) - + Undefined State. Ongedefiniëerde staat - + Waiting to start syncing. In afwachting van synchronisatie. - + Preparing for sync. Synchronisatie wordt voorbereid - + Sync is running. Bezig met synchroniseren. - + Last Sync was successful. Laatste synchronisatie was geslaagd. - + Last Sync was successful, but with warnings on individual files. Laatste synchronisatie geslaagd, maar met waarschuwingen over individuele bestanden. - + Setup Error. Installatiefout. - + User Abort. Afgebroken door gebruiker. - + Sync is paused. Synchronisatie gepauzeerd. - + %1 (Sync is paused) %1 (Synchronisatie onderbroken) - + No valid folder selected! Geen geldige map geselecteerd! - + The selected path is not a folder! Het geselecteerde pad is geen map! - + You have no permission to write to the selected folder! U heeft geen permissie om te schrijven naar de geselecteerde map! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Lokale map %1 bevat een symbolische link. De doellink bevat een map die al is gesynchroniseerd. Kies een andere! - + There is already a sync from the server to this local folder. Please pick another local folder! Er wordt vanaf de server al naar deze lokale map gesynchroniseerd. Kies een andere lokale map! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Lokale map %1 bevat al een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Lokale map %1 zit al in een map die wordt gebruikt voor een mapsync verbinding. Kies een andere! - + 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! Lokale map %1 is een symbolische link. De doellink zit al in een map die in een mapsync verbinding wordt gebruikt. Kies een andere! @@ -924,17 +945,17 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderStatusDelegate - + Add Folder Sync Connection Toevoegen mapsync verbinding - + Synchronizing with local folder Synchroniseren met lokale map - + File Bestand @@ -942,135 +963,145 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderStatusModel - + You need to be connected to add a folder U moet verbonden zijn om een map toe te voegen - + Click this button to add a folder to synchronize. Klik op deze knop om een te synchroniseren map toe te voegen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fout bij ophalen mappenlijst van de server. - + Signed out Afgemeld - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Het toevoegen van een map is uitgeschakeld, omdat u reeds al uw bestanden synchroniseert. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde hoofdmap verwijderen. - + Fetching folder list from server... Mappenlijst ophalen van de server... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchroniseren %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 van %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 over, %1 van %2, bestand %3 van %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 van %2, bestand %3 van %4 - + file %1 of %2 bestand %1 van %2 - + Waiting... Aan het wachten... - + Waiting for %n other folder(s)... Wacht op %n andere map...Wacht op %n andere mappen... - + Preparing to sync... Voorbereiden op sync... @@ -1078,12 +1109,12 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderWizard - + Add Folder Sync Connection Toevoegen mapsync verbinding - + Add Sync Connection Toevoegen Sync verbinding @@ -1096,7 +1127,7 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v Klikken om een lokale map te selecteren voor synchronisatie - + Enter the path to the local folder. Geef het pad op naar de lokale map. @@ -1119,42 +1150,42 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v Voer de naam van de hieronder te maken nieuwe map in '%1': - + Folder was successfully created on %1. Map is succesvol aangemaakt op %1. - + Authentication failed accessing %1 Authenticatie mislukt bij benaderen %1 - + Failed to create the folder on %1. Please check manually. Aanmaken van de map op %1 mislukt. Controleer handmatig. - + Failed to list a folder. Error: %1 Tonen mappenlijst mislukt. Fout: %1 - + Choose this to sync the entire account Kies dit om uw volledige account te synchroniseren - + This folder is already being synced. Deze map is al gesynchroniseerd. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. U synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. U bent al uw bestanden al aan het synchroniseren. Het synchroniseren van een andere map wordt <b>niet</b> ondersteund. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde synchronisatie hoofdmap verwijderen. @@ -1175,22 +1206,22 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Geen E-Tag ontvangen van de server, controleer Proxy/Gateway - + We received a different E-Tag for resuming. Retrying next time. We ontvingen een afwijkende E-Tag om door te gaan. We proberen het later opnieuw. - + Server returned wrong content-range Server retourneerde verkeerde content-bandbreedte - + Connection Timeout Verbindingstime-out @@ -1213,23 +1244,23 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v Voor systeemvak - + Advanced Geavanceerd - + Ask for confirmation before synchronizing folders larger than Vraag bevestiging voordat mappen worden gedownload groter dan - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Vraag bevestiging voor synchronisatie van mappen op externe opslag @@ -1249,28 +1280,28 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v Gebruik &monochrome pictogrammen - + Edit &Ignored Files Bewerken &genegeerde bestanden - + S&how crash reporter T&onen crash reporter - - + + About Over - + Updates Updates - + &Restart && Update &Herstarten en &Bijwerken @@ -1278,7 +1309,7 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Voer %1 wachtwoord in: @@ -1287,17 +1318,17 @@ Account: %3 - + Reading from keychain failed with error: '%1' Het lezen van de sleutelketen is mislukt met fout: '%1' - + Enter Password Vul het wachtwoord in - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. @@ -1379,55 +1410,125 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Deze entry is door het systeem geleverd op '%1' en kan niet worden aangepast in deze sessie. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Log Output - + &Search: &Zoeken: - + &Find &Vind - + + &Capture debug messages + + + + Clear Opschonen - + Clear the log display. Schoon de logweergave op. - + S&ave Opslaan - + Save the log file to a file on disk for debugging. Sla het logbestand op om te debuggen. - + Save log file Opslaan logbestand - + Error Fout - + Could not write to log file %1 Kon niet schrijven naar logbestand %1 @@ -1435,24 +1536,16 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::Logger - + Error Fout - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Bestand '%1'<br/>kan niet worden geopend voor schrijven.<br/><br/>De logging output kan <b>niet</b> worden weggeschreven!</nobr> - - OCC::MoveJob - - - Connection timed out - Verbinding time-out - - OCC::NSISUpdater @@ -1564,27 +1657,27 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Beperk automatisch - + Hostname of proxy server Hostnaam van proxy server - + Username for proxy server Gebruikersnaam voor proxy server - + Password for proxy server Wachtwoord voor proxy server - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1597,79 +1690,112 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::NotificationWidget - + Created at %1 Aangemaakt op %1 - + Closing in a few seconds... Wordt afgesloten binnen enkele seconden... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 aanvraag mislukt om %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' geselecteerd om %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nieuwe %1 update is klaar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Er wordt een nieuwe update voor %1 geïnstalleerd. De updater kan vragen om extra autorisaties tijdens installatie. - + Downloading version %1. Please wait... Downloaden versie %1. Even geduld... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Kon de download niet bijwerken. Klik <a href='%1'>hier</a> om de download handmatig bij te werken. - + Could not check for new updates. Kon niet controleren op updates. - + %1 version %2 available. Restart application to start the update. %1 versie %2 beschikbaar. Herstart de applicatie om de update te starten. - + New %1 version %2 available. Please use the system's update tool to install it. Nieuwe %1 versie %2 beschikbaar. Gebruik de systeemupdate tool om te installeren. - + Checking update server... Controleren updateserver... - + Update status is unknown: Did not check for new updates. Update status is onbekend: niet gecontroleerd op nieuwe updates. - + No updates available. Your installation is at the latest version. Geen updates beschikbaar. Uw installatie is al de laatste versie. @@ -1682,43 +1808,43 @@ vragen om extra autorisaties tijdens installatie. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Verbinden met %1 - + Setup local folder options Bepaal de instellingen voor de lokale map - + Connect... Verbinden... - + %1 folder '%2' is synced to local folder '%3' %1 map '%2' is gesynchroniseerd naar de lokale map '%3' - + Sync the folder '%1' Sync map '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Waarschuwing:</strong> De lokale map is niet leeg. Maak een keuze!</small></p> - + Local Sync Folder Lokale synchronisatiemap - - + + (%1) (%1) @@ -1751,7 +1877,7 @@ vragen om extra autorisaties tijdens installatie. Configureer het client-side TLS-certificaat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kon niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> @@ -1759,47 +1885,60 @@ vragen om extra autorisaties tijdens installatie. OCC::OwncloudHttpCredsPage - + &Email &E-mail - + Connect to %1 Verbinden met %1 - + Enter user credentials Vul uw inloggegevens in + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Verbinden met %1 - + Setup %1 server Instellen %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Deze url is NIET veilig omdat versleuteling ontbreekt. We adviseren deze site niet te gebruiken. - + This url is secure. You can use it. Deze url is veilig te gebruiken. - + &Next > &Volgende > @@ -1807,22 +1946,22 @@ We adviseren deze site niet te gebruiken. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Kon geen verbinding maken met %1 op %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Time-out bij verbinden met %1 om %2. - + Trying to connect to %1 at %2... Probeer te verbinden met %1 om %2... @@ -1842,109 +1981,109 @@ We adviseren deze site niet te gebruiken. Toegang door server verboden. Om te verifiëren dat u toegang mag hebben, <a href="%1">klik hier</a> om met uw browser toegang tot de service te krijgen. - + Invalid URL Ongeldige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokale synch map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> - + Creating local sync folder %1... Creëren lokale sync map %1... - + ok ok - + failed. mislukt. - + Could not create local folder %1 Kon lokale map %1 niet aanmaken - + No remote folder specified! Geen externe map opgegeven! - + Error: %1 Fout: %1 - + creating folder on ownCloud: %1 aanmaken map op ownCloud: %1 - + Remote folder %1 created successfully. Externe map %1 succesvol gecreërd. - + The remote folder %1 already exists. Connecting it for syncing. De remote map %1 bestaat al. Verbinden voor synchroniseren. - + The folder creation resulted in HTTP error code %1 Het aanmaken van de map resulteerde in HTTP foutcode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.<br/>Ga terug en controleer uw inloggegevens.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.</font><br/>ga terug en controleer uw inloggevens.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Aanmaken van remote map %1 mislukt met fout <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Er is een sync verbinding van %1 naar remote directory %2 opgezet. - + Successfully connected to %1! Succesvol verbonden met %1! - + Connection to %1 could not be established. Please check again. Verbinding met %1 niet geslaagd. Probeer het nog eens. - + Folder rename failed Hernoemen map mislukt - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan de map niet verwijderen en backuppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> @@ -1952,12 +2091,12 @@ We adviseren deze site niet te gebruiken. OCC::OwncloudWizard - + %1 Connection Wizard %1 Verbindingswizard - + Skip folders configuration Sla configuratie van mappen over @@ -1965,33 +2104,25 @@ We adviseren deze site niet te gebruiken. OCC::OwncloudWizardResultPage - + Everything set up! Alles is geïnstalleerd! - + Open Local Folder Open lokale map - + Open %1 in Browser Open %1 in browser - - OCC::PUTFileJob - - - Connection Timeout - Verbindingstime-out - - OCC::PollJob - + Invalid JSON reply from the poll URL Ongeldig JSON antwoord van de opgegeven URL @@ -1999,7 +2130,7 @@ We adviseren deze site niet te gebruiken. OCC::PropagateDirectory - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2007,47 +2138,47 @@ We adviseren deze site niet te gebruiken. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Bestand %1 kan niet worden gedownload, omdat de naam conflicteert met een lokaal bestand - - The download would reduce free disk space below %1 - De download zou de vrije schijfruimte beperken tot onder %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Vrije schijfruimte is minder dan %1 - + File was deleted from server Bestand was verwijderd van de server - + The file could not be downloaded completely. Het bestand kon niet volledig worden gedownload. - + The downloaded file is empty despite the server announced it should have been %1. Het gedownloade bestand is leeg, hoewel de server meldde dat het %1 zou moeten zijn. - + File %1 cannot be saved because of a local file name clash! Bestand %1 kan niet worden opgeslagen wegens een lokaal bestandsnaam conflict! - + File has changed since discovery Het bestand is gewijzigd sinds het is gevonden - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2055,17 +2186,12 @@ We adviseren deze site niet te gebruiken. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Herstel mislukte: %1 - - Continue blacklisting: - Doorgaan met zwarte lijst: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Er is een bestand of map verwijderd van een alleen-lezen share, maar herstellen is mislukt: %1 @@ -2073,22 +2199,22 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 kon bestand file %1 niet verwijderen, fout: %2 - + Attention, possible case sensitivity clash with %1 Let op, mogelijk conflict hoofdlettergevoeligheid met 1% - + could not create folder %1 kon map %1 niet maken - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2096,17 +2222,17 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fout bij verwijderen '%1": %2; - + Could not remove folder '%1' Kon map '%1' niet verwijderen - + Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand @@ -2114,13 +2240,13 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Bestand %1 kan niet worden hernoemd naar %2, omdat de naam conflicteert met een lokaal bestand - - + + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2128,12 +2254,12 @@ We adviseren deze site niet te gebruiken. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Het bestand is verwijderd van een alleen-lezen share. Het is teruggezet. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 204, maar ontvangen "%1 %2". @@ -2141,12 +2267,12 @@ We adviseren deze site niet te gebruiken. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht was 201, maar ontvangen "%1 %2". - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2154,28 +2280,28 @@ We adviseren deze site niet te gebruiken. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Deze map mag niet worden hernoemd. De naam van de map is teruggezet naar de originele naam. - + This folder must not be renamed. Please name it back to Shared. Deze map mag niet worden hernoemd. Verander de naam terug in Gedeeld. - + The file was renamed but is part of a read only share. The original file was restored. Het bestand is hernoemd, maar hoort bij een alleen-lezen share. Het originele bestand is teruggezet. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Foutieve HTTP code ontvangen van de server. Verwacht werd 201, maar ontvangen "%1 %2". - - + + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2183,27 +2309,32 @@ We adviseren deze site niet te gebruiken. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaan, al verschillen hoofd/kleine letters - + File Removed Bestand verwijderd - + Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd bij sync. Wordt opnieuw meengenomen. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2211,32 +2342,32 @@ We adviseren deze site niet te gebruiken. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forceren job-beëindiging op HTTP verbindingsreset met Qt < 5.4.2. - + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + Unexpected return code from server (%1) Onverwachte reactie van server (%1) - + Missing File ID from server Ontbrekende File ID van de server - + Missing ETag from server Ontbrekende ETag van de server @@ -2244,32 +2375,32 @@ We adviseren deze site niet te gebruiken. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forceren job-beëindiging op HTTP verbindingsreset met Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Het bestand is lokaal bewerkt, maar hoort bij een alleen-lezen share. Het originele bestand is teruggezet en uw bewerking staat in het conflicten bestand. - + Poll URL missing URL opvraag ontbreekt - + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + The server did not acknowledge the last chunk. (No e-tag was present) De server heeft het laatste deel niet bevestigd (er was geen e-tag aanwezig) @@ -2287,42 +2418,42 @@ We adviseren deze site niet te gebruiken. Tekstlabel - + Time Tijd - + File Bestand - + Folder Map - + Action Handeling - + Size Grootte - + Local sync protocol Lokaal sync protocol - + Copy Kopiëren - + Copy the activity list to the clipboard. Kopieer de activiteitenlijst naar het klembord. @@ -2363,7 +2494,7 @@ We adviseren deze site niet te gebruiken. OCC::SelectiveSyncDialog - + Choose What to Sync Kies wat te synchroniseren @@ -2371,33 +2502,33 @@ We adviseren deze site niet te gebruiken. OCC::SelectiveSyncWidget - + Loading ... Laden ... - + Deselect remote folders you do not wish to synchronize. Deselecteer de externe mappen die u niet wenst te synchroniseren. - + Name Naam - + Size Grootte - - + + No subfolders currently on the server. Momenteel geen submappen op de server. - + An error occurred while loading the list of sub folders. Er trad een fout op bij het laden van de lijst met submappen. @@ -2410,22 +2541,22 @@ We adviseren deze site niet te gebruiken. Instellingen - + Activity Activiteit - + General Algemeen - + Network Netwerk - + Account Account @@ -2433,27 +2564,27 @@ We adviseren deze site niet te gebruiken. OCC::SettingsDialogMac - + %1 %1 - + Activity Activiteit - + General Algemeen - + Network Netwerk - + Account Account @@ -2481,35 +2612,45 @@ We adviseren deze site niet te gebruiken. OwnCloud Pad: - + %1 Sharing %1 Delen - + %1 %1 - + Folder: %2 Map: %2 - + The server does not allow sharing De server staat delen niet toe - + Retrieving maximum possible sharing permissions from server... Maximum aantal mogelijke permissies van de server ophalen... - + The file can not be shared because it was shared without sharing permission. Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen toestemming. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2519,92 +2660,126 @@ We adviseren deze site niet te gebruiken. Delen NewDocument.odt - - Share link - Deel link - - - + TextLabel Tekstlabel - + Set &password Instellen &wachtwoord - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Stel &vervaldatum in - + Set password Instellen wachtwoord - - &Mail link - &Mailen link + + Link properties: + - Copy &link - Kopiëren &link + Show file listing + - + Allow editing Toestaan bewerken - + Anyone with the link has access to the file/folder Iedereen met de link heeft toegang tot het bestand of de map - + + P&assword protect &Wachtwoord beveiligd - + Password Protected Wachtwoord beveiligd - + The file can not be shared because it was shared without sharing permission. Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen toestemming. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Openbaar de&len vereist een wachtwoord - + Please Set Password Stel uw wachtwoord in - - - Could not open email client - Kon e-mailclient niet openen - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? - - - - - &Share link - &Deel link - OCC::ShareUserGroupWidget @@ -2614,68 +2789,98 @@ We adviseren deze site niet te gebruiken. Delen NewDocument.odt - + Share with users or groups ... Delen met gebruikers of groepen ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Geen resultaten voor '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulier + - + TextLabel - Tekstlabel + - + can edit - kan wijzigen + - + can share - kan delen + - + ... - ... + - + create - creëer + - + change - wijzig + - + delete - verwijderen + OCC::ShibbolethCredentials - + Login Error Inlogfout - + You must sign in as user %1 U moet inloggen als gebruiker %1 @@ -2683,22 +2888,22 @@ We adviseren deze site niet te gebruiken. OCC::ShibbolethWebView - + %1 - Authenticate %1 - authenticeren - + SSL Chipher Debug View SSL Cipher Debug View - + Reauthentication required Hernieuwde authenticatie nodig - + Your session has expired. You need to re-login to continue to use the client. Uw sessie is verstreken. U moet opnieuw inloggen om de client-applicatie te gebruiken. @@ -2706,26 +2911,46 @@ We adviseren deze site niet te gebruiken. OCC::SocketApi - + Share with %1 parameter is ownCloud Delen met %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Certificaat details</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Alternatieve subject namen: @@ -2810,7 +3035,7 @@ We adviseren deze site niet te gebruiken. %1 - + This connection is encrypted using %1 bit %2. Deze verbinding is versleuteld via %1 bit %2. @@ -2827,7 +3052,7 @@ We adviseren deze site niet te gebruiken. Certificaat informatie: - + This connection is NOT secure as it is not encrypted. Deze verbinding is NIET veilig, omdat deze niet versleuteld is. @@ -2847,67 +3072,67 @@ We adviseren deze site niet te gebruiken. Vertrouw dit certificaat alsnog - + Untrusted Certificate Niet vertrouwd certificaat - + Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: - + with Certificate %1 met certificaat %1 - + &lt;not specified&gt; &lt;niet gespecificeerd&gt; - - + + Organization: %1 Organisatie: %1 - - + + Unit: %1 Unit: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 Ingangsdatum: %1 - + Expiration Date: %1 Vervaldatum: %1 - + Issuer: %1 Uitgever: %1 @@ -2915,285 +3140,300 @@ We adviseren deze site niet te gebruiken. OCC::SyncEngine - + Success. Succes. - + CSync failed to load the journal file. The journal file is corrupted. CSync kon het journal bestand niet inladen. Het journal bestand is kapot. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>De %1 plugin voor csync kon niet worden geladen.<br/>Verifieer de installatie!</p> - + CSync got an error while processing internal trees. CSync kreeg een fout tijdens het verwerken van de interne mappenstructuur. - - CSync failed to reserve memory. - CSync kon geen geheugen reserveren. - - - + CSync fatal parameter error. CSync fatale parameter fout. - + CSync processing step update failed. CSync verwerkingsstap bijwerken mislukt. - + CSync processing step reconcile failed. CSync verwerkingsstap verzamelen mislukt. - + CSync could not authenticate at the proxy. CSync kon niet authenticeren bij de proxy. - + CSync failed to lookup proxy or server. CSync kon geen proxy of server vinden. - + CSync failed to authenticate at the %1 server. CSync kon niet authenticeren bij de %1 server. - + CSync failed to connect to the network. CSync kon niet verbinden met het netwerk. - + A network connection timeout happened. Er trad een netwerk time-out op. - + A HTTP transmission error happened. Er trad een HTTP transmissiefout plaats. - + The mounted folder is temporarily not available on the server De gemounte map is tijdelijk niet beschikbaar op de server - + An error occurred while opening a folder Er trad een fout op bij het openen van een map - + Error while reading folder. Fout tijdens lezen map. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Geen ruimte op %1 server beschikbaar. - + CSync unspecified error. CSync ongedefinieerde fout. - + Aborted by the user Afgebroken door de gebruiker - + CSync failed to access CSync kreeg geen toegang - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync kon het journal bestand niet maken of lezen. Controleer of u de juiste lees- en schrijfrechten in de lokale syncmap hebt. - + CSync failed due to unhandled permission denied. CSync mislukt omdat de benodigde toegang werd geweigerd. - + CSync tried to create a folder that already exists. CSync probeerde een al bestaande map aan te maken. - + The service is temporarily unavailable De dienst is tijdelijk niet beschikbaar - + Access is forbidden Toegang verboden - + An internal error number %1 occurred. Een interne fout met nummer %1 is opgetreden. - - The item is not synced because of previous errors: %1 - Dit onderwerp is niet gesynchroniseerd door eerdere fouten: %1 - - - + Symbolic links are not supported in syncing. Symbolische links worden niet ondersteund bij het synchroniseren. - + File is listed on the ignore list. Het bestand is opgenomen op de negeerlijst. - + File names ending with a period are not supported on this file system. Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - + File names containing the character '%1' are not supported on this file system. Bestandsnamen met een '%1' symbool worden niet ondersteund door het bestandssysteem. - + The file name is a reserved name on this file system. De bestandsnaam is een gereserveerde naam op dit bestandssysteem. - + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - + Filename is too long. De bestandsnaam is te lang. - + Stat failed. Stat mislukt. - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + Invalid characters, please rename "%1" Ongeldige tekens, hernoem "%1" - - Unable to initialize a sync journal. - Niet in staat om een synchronisatie transactielog te starten. - - - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron @@ -3209,7 +3449,7 @@ We adviseren deze site niet te gebruiken. OCC::Systray - + %1: %2 %1: %2 @@ -3217,17 +3457,17 @@ We adviseren deze site niet te gebruiken. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versie %1. Voor meer informatie bezoek <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Gedistribueerd door %1 en gelicenseerd onder de GNU General Public License (GPL) Versie 2.0.<br/>%2 en het %2 logo zijn geregistreerde handelsmerken van %1 in de Verenigde Staten, in andere landen of beide.</p> @@ -3235,17 +3475,17 @@ We adviseren deze site niet te gebruiken. OCC::ValidateChecksumHeader - + The checksum header is malformed. De header van het controlegetal is misvormd. - + The checksum header contained an unknown checksum type '%1' Het header controlegetal bevat een onbekend controlegetal type '%1' - + The downloaded file does not match the checksum, it will be resumed. Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. @@ -3253,207 +3493,207 @@ We adviseren deze site niet te gebruiken. OCC::ownCloudGui - + Please sign in Log alstublieft in - + Folder %1: %2 Map %1: %2 - + No sync folders configured. Geen synchronisatie-mappen geconfigureerd. - + There are no sync folders configured. Er zijn geen synchronisatie-mappen geconfigureerd. - + Open in browser Open in browser - - - + + + Log in... Inloggen... - - - + + + Log out Afmelden - + Recent Changes Recente wijzigingen - + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + Managed Folders: Beheerde mappen: - + Open folder '%1' Open map '%1' - + Open %1 in browser Open %1 in browser - + Unknown status Onbekende status - + Settings... Instellingen... - + Details... Details ... - + Help Help - + Quit %1 %1 afsluiten - + Disconnected from %1 Losgekoppeld van %1 - + Unsupported Server Version Niet-ondersteunde server versie - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. De server van account %1 gebruikt een oude versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is voor uw eigen risico. - + Disconnected from accounts: Losgekoppeld van account: - + Account %1: %2 Account %1: %2 - + Account synchronization is disabled Account synchronisatie is uitgeschakeld - + Unpause all folders Hervat alle mappen - + Pause all folders Pauzeer alle mappen - + Unpause all synchronization Hervat alle synchronisatie - + Unpause synchronization Hervat synchronisatie - + Pause all synchronization Pauzeer alle synchronisatie - + Pause synchronization Pauzeer synchronisatie - + Log out of all accounts Uitloggen van alle accounts... - + Log in to all accounts... Inloggen op alle accounts... - + New account... Nieuw account... - + Crash now Only shows in debug mode to allow testing the crash handler Crash nu - + No items synced recently Recent niets gesynchroniseerd - + Syncing %1 of %2 (%3 left) Sync %1 van %2 (%3 over) - + Syncing %1 of %2 Synchroniseren %1 van %2 - + Syncing %1 (%2 left) Sync %1 (%2 over) - + Syncing %1 Synchroniseren %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Bijgewerkt @@ -3461,9 +3701,9 @@ We adviseren deze site niet te gebruiken. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> - + <p>Versie %2. Voor meer informatie bezoek <a href="%3">https://%4</a></p><p>Voor bekende problemen en hulp, bezoek: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a>.</p><p><small>Door Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt en anderen.</small></p><p>Copyright ownCloud, GmbH</p><p>Gelicenseerd onder de GNU General Public License (GPL) Versie 2.0<br/>ownCloud en het ownCloud logo zijn geregistreerde handelsmerken van ownCloud GmbH in de Verenigde Staten, andere landen, of beide.</p> @@ -3564,78 +3804,42 @@ We adviseren deze site niet te gebruiken. &Wachtwoord + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulier - - Server &address: - Server &adres: - - - - - TextLabel Tekstlabel - - - Use &secure connection - Gebruik beveiligde verbinding - - - - CheckBox - Checkbox - - - - &Username: - &Gebruikersnaam - - - - Enter the ownCloud username. - Voer de ownCloud gebruikersnaam in. - - - - &Password: - &Wachtwoord - - - - Enter the ownCloud password. - Voer het ownCloud wachtwoord in. - - - - Do not allow the local storage of the password. - Sta lokale opslag van het wachtwoord niet toe. - - - - &Do not store password on local machine - &Sla geen wachtwoorden op op de lokale machine. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Voer de URL in van de server waarmee u wilt verbinden (zonder http of https). - Ser&ver Address @@ -3679,7 +3883,7 @@ We adviseren deze site niet te gebruiken. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3687,42 +3891,42 @@ We adviseren deze site niet te gebruiken. QObject - + in the future in de toekomst - + %n day(s) ago %n dag geleden%n dagen geleden - + %n hour(s) ago %n uur geleden%n uur geleden - + now nu - + Less than a minute ago Minder dan een minuut geleden - + %n minute(s) ago %n minuut geleden%n minuten geleden - + Some time ago Even geleden - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3731,57 +3935,57 @@ We adviseren deze site niet te gebruiken. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n jaar%n jaar - + %n month(s) %n maand%n maanden - + %n day(s) %n dag%n dagen - + %n hour(s) %n uur%n uur - + %n minute(s) %n minuut%n minuten - + %n second(s) %n seconde%n seconde(n) - + %1 %2 %1 %2 @@ -3802,102 +4006,97 @@ We adviseren deze site niet te gebruiken. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebouwd vanuit Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> - - - built with %1 - gebouwd met %1 - progress - + Downloaded Gedownload - + Uploaded Geüpload - + Server version downloaded, copied changed local file into conflict file Serverversie gedownload, gewijzigde lokale bestand gekopieerd in conflictbestand - + Deleted Verwijderd - + Moved to %1 Verplaatst naar %1 - + Ignored Genegeerd - + Filesystem access error Toegangsfout van het bestandssysteem - + Error Fout - + Updated local metadata Lokale metadata ge-uploaded - - + + Unknown Onbekend - + downloading downloaden - + uploading uploaden - + deleting verwijderen - + moving verplaatsen - + ignoring negerend + - error fout - + updating local metadata Bijwerken lokale metadata @@ -3905,54 +4104,77 @@ We adviseren deze site niet te gebruiken. theme - + Status undefined Ongedefinieerde status - + Waiting to start sync In afwachting van synchronisatie - + Sync is running Bezig met synchroniseren - + Sync Success Synchronisatie geslaagd - + Sync Success, some files were ignored. Synchronisatie geslaagd, sommige bestanden werden genegeerd. - + Sync Error Synchronisatiefout - + Setup Error Installatiefout - + Preparing to sync Voorbereiden synchronisatie - + Aborting... Aan het afbreken... - + Sync is paused Synchronisatie is gepauzeerd + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 5f4415b37..5a29fe3eb 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Plik docelowy ma nieznaną wielkość lub datę modyfikacji @@ -81,6 +81,24 @@ Etykieta + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Anuluj @@ -136,188 +154,204 @@ Połączony z <server> jako <user> - + No account configured. Brak skonfigurowanych kont. - + Add new Dodaj nowe - + Remove Usuń - + Account Konto - + Choose what to sync Wybierz co synchronizować - + Force sync now Zsynchronizuj teraz - + Restart sync Uruchom ponownie synchronizację - + Remove folder sync connection Usuń folder połączenia synchronizacji - + Folder creation failed Nie udało się stworzyć katalogu - + <p>Could not create local folder <i>%1</i>. <p>Nie można stworzyć lokalnego katalogu <i>%1</i>. - + Confirm Folder Sync Connection Removal Usuń folder połączenia synchronizacji - + Remove Folder Sync Connection Usuń folder połączenia synchronizacji - + Sync Running Synchronizacja uruchomiona - + The syncing operation is running.<br/>Do you want to terminate it? Operacja synchronizacji jest uruchomiona.<br>Czy chcesz ją zakończyć? - + %1 in use %1 w użyciu - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Wersja serwera %1 jest przestarzała i nie jest już wspierana. Kontynuujesz na własne ryzyko. - + Connected to %1. Podłączony do %1. - + Server %1 is temporarily unavailable. Serwer %1 jest tymczasowo niedostępny. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Wylogowano z %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Brak połączenia do %1 z %2. - + Log in Zaloguj - + There are folders that were not synchronized because they are too big: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duze: - + There are folders that were not synchronized because they are external storages: Te foldery nie zostały zsynchronizowane ponieważ znajdują się w pamięci zewnętrznej: - + There are folders that were not synchronized because they are too big or external storages: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duże lub znajdują się w pamięci zewnętrznej: - + Confirm Account Removal Potwierdź usunięcie konta - + <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> <p>Czy na pewno chcesz usunąć połączenie z kontem <i>%1</i>?</p><p><b>Uwaga:</b> ta operacja <b>nie</b> usunie plików klienta.</p> - + Remove connection Usuwanie połączenia - + + Open folder Otwórz katalog - - + + Log out Wyloguj - + Resume sync Przywróć synchronizację - + Pause sync Zatrzymaj synchronizację - + <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> <p>Czy na pewno chcesz zatrzymać synchronizację folderu <i>%1</i>?</p><p><b>Uwaga:</b> ta operacja <b>nie</b> usunie plików z klienta.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) z %2 w użyciu. Niektóre foldery, w tym zamontowane lub udostępnione foldery w sieci, mogą mieć różne limity. - + %1 of %2 in use %1 z %2 w użyciu - + Currently there is no storage usage information available. Obecnie nie ma dostępnych informacji o wykorzystaniu pamięci masowej. - + No %1 connection configured. Połączenie %1 nie skonfigurowane. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Odłączony - + Disconnected Rozłączony - + Connected Połączony - + Service unavailable Usługa niedostępna - + + Maintenance mode + + + + Network error Błąd sieci - + Configuration error Błąd konfiguracji - + + Asking Credentials + + + + Unknown account state Status konta nieznany @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktywność serwera - + Sync Protocol Protokół synchronizacji - - List of ignored or erroneous files - Lista pominiętych lub błędnych plików - - - - Copy - Kopiuj - - - - Copy the activity list to the clipboard. - Kopiuj listę aktywności do schowka. - - - + Not Synced Niezsynchronizowany - + Not Synced (%1) %1 is the number of not synced files. Niezsynchronizowany (%1) - + The server activity list has been copied to the clipboard. Log aktywności serwera został skopiowany do schowka. - + The sync activity list has been copied to the clipboard. Przebieg synchronizacji został skopiowany do schowka. - + The list of unsynced items has been copied to the clipboard. Lista niezsynchronizowanych elementów została skopiowana do schowka - + Copied to clipboard Skopiuj do schowka @@ -448,47 +477,47 @@ Etykieta - + Server Activities Działania serwera - + Copy Kopiuj - + Copy the activity list to the clipboard. Kopiuj listę aktywności do schowka. - + Action Required: Notifications Wymagana akcja: Powiadomienia - + <br/>Account %1 does not have activities enabled. <br/>Użytkownik %1 nie ma włączonej historii aktywności. - + You received %n new notification(s) from %2. Otrzymano %n nowe powiadomienie od %2.Otrzymano %n nowe powiadomienia od %2.Otrzymano %n nowych powiadomień od %2.Otrzymano %n nowych powiadomień od %2. - + You received %n new notification(s) from %1 and %2. Otrzymano %n nowe powiadomienie od %1 i %2.Otrzymano %n nowe powiadomienia od %1 i %2.Otrzymano %n nowych powiadomień %1 i %2.Otrzymano %n nowych powiadomień %1 i %2. - + You received new notifications from %1, %2 and other accounts. Otrzymałeś nowe powiadomienia z %1, %2 i innych kont. - + %1 Notifications - Action Required %1 Powiadomień - Wymagana akcja @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Błąd przy dostępie do pliku konfiguracji - + There was an error while accessing the configuration file at %1. Wystąpił błąd podczas próby dostępu do pliku konfiguracyjnego %1. - + Quit ownCloud Wyłącz ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Nie skonfigurowano konta ownCloud - + The configured server for this client is too old Konfigurowany serwer dla tego klienta jest za stary - + Please update to the latest server and restart the client. Proszę zaaktualizować serwer do najnowszej wersji i zrestartować klienta. - + Authentication error: Either username or password are wrong. Błąd autentykacji: nazwa użytkownika lub hasło są nieprawidłowe. - + timeout wygaśnięcie - + The provided credentials are not correct Podane dane logowania są nieprawidłowe - - OCC::DeleteJob - - - Connection timed out - Przekroczono czas odpowiedzi - - OCC::DiscoveryMainThread - + Aborted by the user Anulowane przez użytkownika @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. Folder lokalny %1 nie istnieje. - + %1 should be a folder but is not. %1 powinien być katalogiem, ale nie jest. - + %1 is not readable. %1 jest nie do odczytu. - + %1 has been removed. %1 names a file. %1 został usunięty. - + %1 has been downloaded. %1 names a file. %1 został ściągnięty. - + %1 has been updated. %1 names a file. %1 został uaktualniony. - + %1 has been renamed to %2. %1 and %2 name files. %1 zmienił nazwę na %2. - + %1 has been moved to %2. %1 został przeniesiony do %2. - + %1 and %n other file(s) have been removed. %1 i %n inny plik został usunięty.%1 i %n inne pliki zostały usunięte.%1 i %n innych plików zostało usuniętych.%1 i %n innych plików zostało usuniętych. - + %1 and %n other file(s) have been downloaded. %1 i %n inny plik został pobrany.%1 i %n inne pliki zostały pobrane.%1 i %n innych plików zostało pobranych.%1 i %n innych plików zostało pobranych. - + %1 and %n other file(s) have been updated. %1 i %n inny plik został zaktualizowany.%1 i %n inne pliki zostały zaktualizowane.%1 i %n innych plików zostało zaktualizowanych.%1 i %n innych plików zostało zaktualizowanych. - + %1 has been renamed to %2 and %n other file(s) have been renamed. Zmieniono nazwę %1 na %2 oraz %n innemu plikowi została zmieniona nazwa.Zmieniono nazwę %1 na %2 oraz %n innym plikom została zmieniona nazwa.%1 has been renamed to %2 and %n other file(s) have been renamed.%1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. Przeniesiono %1 do %2 oraz przeniesiono %n inny plik.Przeniesiono %1 do %2 oraz przeniesiono %n inne pliki.Przeniesiono %1 do %2 oraz przeniesiono %n innych plików.Przeniesiono %1 do %2 oraz przeniesiono %n innych plików. - + %1 has and %n other file(s) have sync conflicts. %1 plik ma błąd synchronizacji%1 i %n innych plików mają konflikt synchronizacji.%1 i %n innych plików mają konflikt synchronizacji.%1 i %n innych plików mają konflikt synchronizacji. - + %1 has a sync conflict. Please check the conflict file! %1 ma konflikt synchronizacji. Sprawdź konfliktujący plik! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. Plik %1 nie może zostać zsynchronizowany z powodu błędów. Sprawdź szczegóły w logu..%1 i %n innych plików nie mogą zostać zsynchronizowane z powodu błędów. Sprawdź szczegóły w logu..%1 i %n innych plików nie mogą zostać zsynchronizowane z powodu błędów. Sprawdź szczegóły w logu..%1 i %n innych plików nie mogą zostać zsynchronizowane z powodu błędów. Sprawdź szczegóły w logu.. - + %1 could not be synced due to an error. See the log for details. %1 nie może zostać zsynchronizowany z powodu błędu. Zobacz szczegóły w logu. - + Sync Activity Aktywności synchronizacji - + Could not read system exclude file Nie można przeczytać pliku wyłączeń - + A new folder larger than %1 MB has been added: %2. Nowy folder większy niż %1MB został dodany: %2 - + A folder from an external storage has been added. Folder z pamięci zewnętrznej został dodany . - + Please go in the settings to select it if you wish to download it. Przejdź do ustawień żeby go zaznaczyć i pobrać. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -758,46 +779,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Usunąć wszystkie pliki? - + Remove all files Usuń wszystkie pliki - + Keep files Pozostaw pliki - + This sync would reset the files to an earlier 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? - + Backup detected Wykryto kopię zapasową. - + Normal Synchronisation Normalna synchronizacja. - + Keep Local Files as Conflict Zatrzymaj pliki lokalne i ustaw status konfliktu. @@ -805,112 +826,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Nie udało się zresetować stanu folderu - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Stary sync journal '%1' został znaleziony, lecz nie mógł być usunięty. Proszę się upewnić, że żaden program go obecnie nie używa. - + (backup) (kopia zapasowa) - + (backup %1) (kopia zapasowa %1) - + Undefined State. Niezdefiniowany stan - + Waiting to start syncing. Poczekaj na rozpoczęcie synchronizacji. - + Preparing for sync. Przygotowuję do synchronizacji - + Sync is running. Synchronizacja w toku - + Last Sync was successful. Ostatnia synchronizacja zakończona powodzeniem. - + Last Sync was successful, but with warnings on individual files. Ostatnia synchronizacja udana, ale istnieją ostrzeżenia z pojedynczymi plikami. - + Setup Error. Błąd ustawień. - + User Abort. Użytkownik anulował. - + Sync is paused. Synchronizacja wstrzymana - + %1 (Sync is paused) %1 (Synchronizacja jest zatrzymana) - + No valid folder selected! Nie wybrano poprawnego folderu. - + The selected path is not a folder! Wybrana ścieżka nie jest katalogiem! - + You have no permission to write to the selected folder! Nie masz uprawnień, aby zapisywać w tym katalogu! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Lokalny folder %1 już zawiera folder użyty na potrzeby synchronizacji. Proszę wybrać inny folder lokalny. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Lokalny folder %1 już zawiera folder użyty na potrzeby synchronizacji. Proszę wybrać inny folder lokalny. - + 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! @@ -918,17 +939,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Dodaj folder połączenia synchronizacji - + Synchronizing with local folder Synchronizacja z folderem lokalnym. - + File Plik @@ -936,134 +957,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Musisz być podłączony, by dodać folder. - + Click this button to add a folder to synchronize. Kliknij ten przycisk, by dodać folder do synchronizacji. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Wystąpił błąd podczas pobierania listy folderów z serwera. - + Signed out Odłączony - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Dodawanie folderu jest zablokowane, ponieważ już synchronizujesz wszystkie swoje pliki. Jeśli chcesz zsynchronizować wiele folderów, usuń folder aktualnie skonfigurowany. - + Fetching folder list from server... Pobieranie listy folderów z serwera. - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizowanie %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) pobieranie %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) wysyłanie %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 z %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Plik %3 z %4, pozostało czasu %5 (%1 z %2) - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, plik %3 z %4 - + file %1 of %2 plik %1 z %2 - + Waiting... Czekaj... - + Waiting for %n other folder(s)... Oczekiwanie na %n inny folder...Oczekiwanie na %n inne foldery...Oczekiwanie na %n innych folderów...Oczekiwanie na %n innych folderów... - + Preparing to sync... Przygotowanie do synchronizacji ... @@ -1071,12 +1102,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Dodaj folder połączenia synchronizacji - + Add Sync Connection Dodaj połączenie synchronizacji @@ -1089,7 +1120,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Kliknij, aby wybrać folder lokalny do synchronizacji. - + Enter the path to the local folder. Wpisz ścieżkę do folderu lokalnego. @@ -1112,42 +1143,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Wpisz nazwę dla nowego katalogu, utworzonego poniżej '%1': - + Folder was successfully created on %1. Folder został utworzony pomyślnie na %1 - + Authentication failed accessing %1 Błąd autentykacji w dostępie do %1 - + Failed to create the folder on %1. Please check manually. Nie udało się utworzyć folderu na %1. Proszę sprawdzić ręcznie. - + Failed to list a folder. Error: %1 Nie udało się wyświetlić folderu. Błąd: %1 - + Choose this to sync the entire account Wybierz to, aby zsynchronizować całe konto - + This folder is already being synced. Ten katalog jest już synchronizowany. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synchronizujesz już <i>%1</i>, który jest folderem nadrzędnym <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Już aktualizujesz wszystkie pliku. Synchronizacja innego folderu <b>nie</b> jest wspierana. Jeśli chcesz synchronizować wiele folderów, proszę usuń aktualnie skonfigurowaną synchronizację folderu głównego. @@ -1168,22 +1199,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nie otrzymano E-Tag z serwera, sprawdź Proxy/Bramę - + We received a different E-Tag for resuming. Retrying next time. Otrzymaliśmy inny E-Tag wznowienia. Spróbuje ponownie następnym razem. - + Server returned wrong content-range Serwer zwrócił błędną zakres zawartości - + Connection Timeout Limit czasu połączenia @@ -1206,23 +1237,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an W zasobniku systemowym - + Advanced Zaawansowane - + Ask for confirmation before synchronizing folders larger than Zapytaj o potwierdzenie przed synchronizacją folderów większych niż - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Zapytaj o potwierdzenie przed synchronizacją zewnętrznych skladowisk plikow @@ -1242,28 +1273,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Używaj &monochromatycznych ikon - + Edit &Ignored Files Edytuj pliki &ignorowane (pomijane) - + S&how crash reporter Pokaż &raport awarii - - + + About O aplikacji - + Updates Aktualizacje - + &Restart && Update &Zrestartuj && Aktualizuj @@ -1271,22 +1302,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Wprowadź %1 hasło:<br><br>Użytkownik:%2<br>Konto:%3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Wprowadź hasło - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1368,55 +1399,125 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Ten wpis jest podawany przez system w '%1' i nie może być zmieniony w tym widoku. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Treść dziennika - + &Search: &Szukaj: - + &Find &Znajdź - + + &Capture debug messages + + + + Clear Wyczyść - + Clear the log display. Wyczyść wyświetlane dzienniki. - + S&ave Z&apisz - + Save the log file to a file on disk for debugging. Zapisz plik dziennika do pliku na dysku w celu debugowania. - + Save log file Zapisz plik dziennika - + Error Błąd - + Could not write to log file %1 Błąd zapisu pliku logu %1 @@ -1424,24 +1525,16 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::Logger - + Error Błąd - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Plik '%1'<br>nie może zostać otwarty do zapisu.<br/><br/>Dane wyjściowe dziennika <b>nie</b> mogą być zapisane!</nobr> - - OCC::MoveJob - - - Connection timed out - Przekroczono czas odpowiedzi - - OCC::NSISUpdater @@ -1553,27 +1646,27 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Limit automatyczniy - + Hostname of proxy server Nazwa hosta serwera proxy - + Username for proxy server Nazwa użytkownika serwera proxy - + Password for proxy server Hasło użytkownika serwera proxy - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1586,79 +1679,112 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::NotificationWidget - + Created at %1 Utworzono o %1 - + Closing in a few seconds... Za kilka sekund nastąpi zamknięcie... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nowe %1 uaktualnienie jest gotowe - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nowe ualtualnienie dla %1 jest gotowe do instalacji. Aktualizator może zapytać o dodatkowe uprawnienia podczas procesu aktualizacji. - + Downloading version %1. Please wait... Pobieranie wersji %1. Proszę czekać... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nie można pobrać aktualizacji. Proszę kliknąć <a href='%1'>tutaj</a>, aby ściągnąć aktualizację ręcznie - + Could not check for new updates. Nie można sprawdzić dostępności nowych aktualizacji. - + %1 version %2 available. Restart application to start the update. %1 wersja %2 jest dostępna. Zrestartuj aplikację aby rozpocząć aktualizację. - + New %1 version %2 available. Please use the system's update tool to install it. Nowa %1 wersja %2 jest dostępna.Użyj systemowego narzędzia aby ją zainstalować. - + Checking update server... Sprawdzanie aktualizacji serwera... - + Update status is unknown: Did not check for new updates. Status aktualizacji nieznany. Nie sprawdzono nowych aktualizacji. - + No updates available. Your installation is at the latest version. Brak dostępnych aktualizacji. Twoja instalacja jest w najnowszej wersji. @@ -1671,43 +1797,43 @@ o dodatkowe uprawnienia podczas procesu aktualizacji. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Podłącz do %1 - + Setup local folder options Ustawienia opcji lokalnych katalogów - + Connect... Połącz... - + %1 folder '%2' is synced to local folder '%3' %1 katalog '%2' jest zsynchronizowany do katalogu lokalnego '%3' - + Sync the folder '%1' Synchronizuj folder '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Uwaga:</strong> katalog lokalny nie jest pusty. Bądź ostrożny !</small></p> - + Local Sync Folder Folder lokalnej synchronizacji - - + + (%1) (%1) @@ -1740,7 +1866,7 @@ o dodatkowe uprawnienia podczas procesu aktualizacji. Konfiguruj certyfikat TLS po stronie klienta - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nie można połączyć się z bezpiecznym adresem serwera <em>%1</em>. Co chcesz zrobić ?</p></body></html> @@ -1748,47 +1874,60 @@ o dodatkowe uprawnienia podczas procesu aktualizacji. OCC::OwncloudHttpCredsPage - + &Email &E-mail - + Connect to %1 Podłącz do %1 - + Enter user credentials Wprowadź poświadczenia użytkownika + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Podłącz do %1 - + Setup %1 server Ustaw serwer %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Ten adres url NIE jest bezpieczny, ponieważ jest nieszyfrowany. Niezalecane jest jego użycie. - + This url is secure. You can use it. Ten adres url jest bezpieczny. Można go użyć. - + &Next > Następny @@ -1796,22 +1935,22 @@ Niezalecane jest jego użycie. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Udane połączenie z %1: %2 wersja %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Nie udało się połączyć do %1 w %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Upłynął czas podczas próby połączenia do %1 na %2. - + Trying to connect to %1 at %2... Próba połączenia z %1 w %2... @@ -1831,109 +1970,109 @@ Niezalecane jest jego użycie. Dostęp zabroniony przez serwer. Aby sprawdzić, czy masz odpowiednie uprawnienia, kliknij <a href="%1">tutaj</a>, aby połączyć się z usługą poprzez przeglądarkę. - + Invalid URL Błędny adres url. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokalny folder synchronizacji %1 już istnieje. Ustawiam go do synchronizacji.<br/><br/> - + Creating local sync folder %1... Tworzenie lokalnego folderu synchronizacji %1... - + ok OK - + failed. Błąd. - + Could not create local folder %1 Nie udało się utworzyć lokalnego folderu %1 - + No remote folder specified! Nie określono folderu zdalnego! - + Error: %1 Błąd: %1 - + creating folder on ownCloud: %1 tworzę folder na ownCloud: %1 - + Remote folder %1 created successfully. Zdalny folder %1 został utworzony pomyślnie. - + The remote folder %1 already exists. Connecting it for syncing. Zdalny folder %1 już istnieje. Podłączam go do synchronizowania. - + The folder creation resulted in HTTP error code %1 Tworzenie folderu spowodowało kod błędu HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Nie udało się utworzyć zdalnego folderu ponieważ podane dane dostępowe są nieprawidłowe!<br/>Wróć i sprawdź podane dane dostępowe.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Tworzenie folderu zdalnego nie powiodło się. Prawdopodobnie dostarczone poświadczenia są błędne.</font><br/>Wróć i sprawdź poświadczenia.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Tworzenie folderu zdalnego %1 nie powiodło się z powodu błędu <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Połączenie synchronizacji z %1 do katalogu zdalnego %2 zostało utworzone. - + Successfully connected to %1! Udane połączenie z %1! - + Connection to %1 could not be established. Please check again. Połączenie z %1 nie może być nawiązane. Sprawdź ponownie. - + Folder rename failed Zmiana nazwy folderu nie powiodła się - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nie można usunąć i zarchiwizować folderu ponieważ znajdujący się w nim plik lub folder jest otwarty przez inny program. Proszę zamknąć folder lub plik albo kliknąć ponów lub anuluj setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Utworzenie lokalnego folderu synchronizowanego %1 zakończone pomyślnie!</b></font> @@ -1941,12 +2080,12 @@ Niezalecane jest jego użycie. OCC::OwncloudWizard - + %1 Connection Wizard %1 Kreator połączeń - + Skip folders configuration Pomiń konfigurację folderów @@ -1954,33 +2093,25 @@ Niezalecane jest jego użycie. OCC::OwncloudWizardResultPage - + Everything set up! Wszystko skonfigurowane! - + Open Local Folder Otwórz lokalny folder - + Open %1 in Browser Otwórz %1 w przeglądarce - - OCC::PUTFileJob - - - Connection Timeout - Limit czasu połączenia - - OCC::PollJob - + Invalid JSON reply from the poll URL @@ -1988,7 +2119,7 @@ Niezalecane jest jego użycie. OCC::PropagateDirectory - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -1996,47 +2127,47 @@ Niezalecane jest jego użycie. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Nie można pobrać pliku %1 ze względu na konflikt nazwy pliku lokalnego! - - The download would reduce free disk space below %1 - Pobranie zmniejszy ilość wolnego miejsca poniżej %1. + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Wolne miejsce na dysku jest mniejsze niż %1 - + File was deleted from server Plik został usunięty z serwera - + The file could not be downloaded completely. Ten plik nie mógł być całkowicie pobrany. - + The downloaded file is empty despite the server announced it should have been %1. Pobrany plik jest pusty pomimo tego, że według zapowiedzi serwera powinien mieć %1. - + File %1 cannot be saved because of a local file name clash! - + File has changed since discovery - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2044,17 +2175,12 @@ Niezalecane jest jego użycie. OCC::PropagateItemJob - + ; Restoration Failed: %1 - - Continue blacklisting: - - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2062,22 +2188,22 @@ Niezalecane jest jego użycie. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 nie można skasować pliku %1, błąd: %2 - + Attention, possible case sensitivity clash with %1 Uwaga, możliwa niezgodność związana z wielością liter w %1 - + could not create folder %1 nie można utworzyć folderu %1 - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2085,17 +2211,17 @@ Niezalecane jest jego użycie. OCC::PropagateLocalRemove - + Error removing '%1': %2; Błąd usuwania '%1': %2; - + Could not remove folder '%1' Nie można usunąć folderu '%1' - + Could not remove %1 because of a local file name clash Nie można usunąć %1 z powodu kolizji z lokalną nazwą pliku @@ -2103,13 +2229,13 @@ Niezalecane jest jego użycie. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Plik %1 nie może być nazwany %2 z powodu kolizji z lokalną nazwą pliku - - + + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2117,12 +2243,12 @@ Niezalecane jest jego użycie. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Plik został usunięty z zasobu z prawem tylko do odczytu. Został przywrócony. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". @@ -2130,12 +2256,12 @@ Niezalecane jest jego użycie. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2143,28 +2269,28 @@ Niezalecane jest jego użycie. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Folder ten nie może być zmieniony. Został zmieniony z powrotem do pierwotnej nazwy. - + This folder must not be renamed. Please name it back to Shared. Nie wolno zmieniać nazwy tego folderu. Proszę zmień nazwę z powrotem na Shared. - + The file was renamed but is part of a read only share. The original file was restored. Plik był edytowany lokalnie ale jest częścią udziału z prawem tylko do odczytu. Przywrócono oryginalny plik - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". - - + + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2172,27 +2298,32 @@ Niezalecane jest jego użycie. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Usunięto plik - + Local file changed during syncing. It will be resumed. Lokalny plik uległ zmianie w trakcie synchronizacji. Zostanie wznowiony. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2200,32 +2331,32 @@ Niezalecane jest jego użycie. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2233,32 +2364,32 @@ Niezalecane jest jego użycie. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Plik był edytowany lokalnie ale jest częścią udziału z prawem tylko do odczytu. Został przywrócony i Twoja edycja jest w pliku konfliktu - + Poll URL missing - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2276,42 +2407,42 @@ Niezalecane jest jego użycie. Etykieta - + Time Czas - + File Plik - + Folder Folder - + Action Akcja - + Size Rozmiar - + Local sync protocol Lokalny protokół synchronizacji - + Copy Kopiuj - + Copy the activity list to the clipboard. Kopiuj listę aktywności do schowka. @@ -2352,7 +2483,7 @@ Niezalecane jest jego użycie. OCC::SelectiveSyncDialog - + Choose What to Sync Wybierz co synchronizować @@ -2360,33 +2491,33 @@ Niezalecane jest jego użycie. OCC::SelectiveSyncWidget - + Loading ... Wczytuję ... - + Deselect remote folders you do not wish to synchronize. Odznacz foldery zdalne, których nie chcesz synchronizować. - + Name Nazwa - + Size Rozmiar - - + + No subfolders currently on the server. Na serwerze nie ma w tej chwili żadnych podkatalogów. - + An error occurred while loading the list of sub folders. Wystąpił błąd podczas wczytywania listy podfolderów @@ -2399,22 +2530,22 @@ Niezalecane jest jego użycie. Ustawienia - + Activity Aktywność - + General Ogólne - + Network Sieć - + Account Konto @@ -2422,27 +2553,27 @@ Niezalecane jest jego użycie. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktywność - + General Ogólne - + Network Sieć - + Account Konto @@ -2470,35 +2601,45 @@ Niezalecane jest jego użycie. Ścieżka ownCloud: - + %1 Sharing %1 udostępnione - + %1 %1 - + Folder: %2 Folder: %2 - + The server does not allow sharing Serwer nie zezwala na współdzielenie - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2508,92 +2649,126 @@ Niezalecane jest jego użycie. Udostępnij NewDocument.odt - - Share link - Udostępnij link - - - + TextLabel Etykieta - + Set &password Ustaw &hasło - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Ustaw &datę wygaśnięcia - + Set password Ustaw hasło - - &Mail link + + Link properties: - Copy &link - Kopiuj &link + Show file listing + - + Allow editing Pozwól na edycję - + Anyone with the link has access to the file/folder Każdy posiadający link ma dostęp do pliku/katalogu. - + + P&assword protect - + Password Protected Zabezpieczone hasłem - + The file can not be shared because it was shared without sharing permission. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password - + Please Set Password Proszę podać hasło - - - Could not open email client - Nie można uruchomić klienta email - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - - OCC::ShareUserGroupWidget @@ -2603,68 +2778,98 @@ Niezalecane jest jego użycie. Udostępnij NewDocument.odt - + Share with users or groups ... Współdziel z użytkownikami lub grupami - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Brak wyników dla '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formularz + - + TextLabel - Etykieta + - + can edit - może edytować + - + can share - może współdzielić + - + ... - ... + - + create - utwórz + - + change - zmiany + - + delete - skasuj + OCC::ShibbolethCredentials - + Login Error Błąd logowania - + You must sign in as user %1 Musisz zalogować się jako użytkownik %1 @@ -2672,22 +2877,22 @@ Niezalecane jest jego użycie. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Uwierzytelnienia - + SSL Chipher Debug View - + Reauthentication required Wymagana powtórna autoryzacja - + Your session has expired. You need to re-login to continue to use the client. Twoja sesja wygasła. Musisz ponownie się zalogować, aby nadal używać klienta @@ -2695,26 +2900,46 @@ Niezalecane jest jego użycie. OCC::SocketApi - + Share with %1 parameter is ownCloud Współdzielone z %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Szczegóły certyfikatu</h3> - + Common Name (CN): Nazwa (CN): - + Subject Alternative Names: Alternatywna nazwa tematu: @@ -2799,7 +3024,7 @@ Niezalecane jest jego użycie. %1 - + This connection is encrypted using %1 bit %2. o połączenie jest szyfrowane przy użyciu %1 bit %2. @@ -2816,7 +3041,7 @@ Niezalecane jest jego użycie. Informacje Certyfikatu: - + This connection is NOT secure as it is not encrypted. To połączenie NIE jest bezpieczne, ponieważ jest nieszyfrowane. @@ -2836,67 +3061,67 @@ Niezalecane jest jego użycie. Zaufaj temu zaświadczeniu mimo wszystko. - + Untrusted Certificate Certyfikat niezaufany - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 z certyfikatem %1 - + &lt;not specified&gt; &lt;nie określono&gt; - - + + Organization: %1 Organizacja: %1 - - + + Unit: %1 Jednostka: %1 - - + + Country: %1 Kraj: %1 - + Fingerprint (MD5): <tt>%1</tt> Odcisk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Odcisk (SHA1): <tt>%1</tt> - + Effective Date: %1 Data wejścia w życie: %1 - + Expiration Date: %1 Data wygaśnięcia: %1 - + Issuer: %1 Wystawca: %1 @@ -2904,285 +3129,300 @@ Niezalecane jest jego użycie. OCC::SyncEngine - + Success. Sukces. - + CSync failed to load the journal file. The journal file is corrupted. CSync nie udało się wczytać pliku dziennika. Plik dziennika jest uszkodzony. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Wtyczka %1 do csync nie może być załadowana.<br/>Sprawdź poprawność instalacji!</p> - + CSync got an error while processing internal trees. CSync napotkał błąd podczas przetwarzania wewnętrznych drzew. - - CSync failed to reserve memory. - CSync nie mógł zarezerwować pamięci. - - - + CSync fatal parameter error. Krytyczny błąd parametru CSync. - + CSync processing step update failed. Aktualizacja procesu przetwarzania CSync nie powiodła się. - + CSync processing step reconcile failed. Scalenie w procesie przetwarzania CSync nie powiodło się. - + CSync could not authenticate at the proxy. CSync nie mógł się uwierzytelnić przez proxy. - + CSync failed to lookup proxy or server. CSync nie mógł odnaleźć serwera proxy. - + CSync failed to authenticate at the %1 server. CSync nie mógł uwierzytelnić się na serwerze %1. - + CSync failed to connect to the network. CSync nie mógł połączyć się z siecią. - + A network connection timeout happened. Upłynął limit czasu połączenia. - + A HTTP transmission error happened. Wystąpił błąd transmisji HTTP. - + The mounted folder is temporarily not available on the server Chwilowy brak dostępu do serwera, z którego montowany jest folder. - + An error occurred while opening a folder Wystąpił błąd podczas otwierania katalogu - + Error while reading folder. Błąd podczas odczytu katalogu. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Plik / katalog zostanie zignorowany, ponieważ jest ukryty. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Brak dostępnego miejsca na serwerze %1. - + CSync unspecified error. Nieokreślony błąd CSync. - + Aborted by the user Anulowane przez użytkownika - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Usługa jest czasowo niedostępna - + Access is forbidden Dostęp zabroniony - + An internal error number %1 occurred. Wystąpił błąd wewnętrzny %1 - - The item is not synced because of previous errors: %1 - Ten element nie jest zsynchronizowane z powodu poprzednich błędów: %1 - - - + Symbolic links are not supported in syncing. Linki symboliczne nie są wspierane przy synchronizacji. - + File is listed on the ignore list. Plik jest na liście plików ignorowanych. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. Nazwy plików zawierające znaki '%1' nie są wspierane - + The file name is a reserved name on this file system. Nazwa pliku jest zarezerwowana dla plików systemowych - + Filename contains trailing spaces. Nazwa pliku zawiera spacje - + Filename is too long. Nazwa pliku zbyt długa - + Stat failed. Błąd statystyk. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Nie można zainicjować synchronizacji dziennika. - - - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło @@ -3198,7 +3438,7 @@ Niezalecane jest jego użycie. OCC::Systray - + %1: %2 %1: %2 @@ -3206,17 +3446,17 @@ Niezalecane jest jego użycie. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Wersja %1. Aby uzyskać więcej informacji prosimy odwiedzić <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3224,17 +3464,17 @@ Niezalecane jest jego użycie. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. @@ -3242,207 +3482,207 @@ Niezalecane jest jego użycie. OCC::ownCloudGui - + Please sign in Proszę się zalogować - + Folder %1: %2 Folder %1: %2 - + No sync folders configured. Nie skonfigurowano synchronizowanych folderów. - + There are no sync folders configured. Nie skonfigurowano żadnych folderów synchronizacji. - + Open in browser Otwórz w przeglądarce - - - + + + Log in... Zaloguj... - - - + + + Log out Wyloguj - + Recent Changes Ostatnie zmiany - + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + Managed Folders: Zarządzane foldery: - + Open folder '%1' Otwórz katalog '%1' - + Open %1 in browser Otwórz %1 w przeglądarce - + Unknown status Nieznany status - + Settings... Ustawienia... - + Details... Szczegóły... - + Help Pomoc - + Quit %1 Wyjdź %1 - + Disconnected from %1 Rozłączony z %1 - + Unsupported Server Version Nie wspierana wersja serwera - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Serwer dla konta %1 uruchomiony jest na starej i niewspieranej wersji %2. Używanie klienta z niewspieranym serwerem nie zostało przetestowane i jest potencjalnie niebezpieczne. Kontynuujesz na własne ryzyko. - + Disconnected from accounts: Rozłączony z kontami: - + Account %1: %2 Dostęp %1: %2 - + Account synchronization is disabled Konto synchronizacji jest wyłączone - + Unpause all folders Wznów wszystkie katalogi - + Pause all folders Wstrzymaj wszystkie katalogi - + Unpause all synchronization Wznów wszystkie synchronizacje - + Unpause synchronization Wznów synchronizację - + Pause all synchronization Wstrzymaj wszystkie synchronizacje - + Pause synchronization Wstrzymaj synchronizację - + Log out of all accounts Wyloguj się się ze wszystkich kont - + Log in to all accounts... Zaloguj się do wszystkich kont - + New account... Nowe konto... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Brak ostatnich synchronizacji - + Syncing %1 of %2 (%3 left) Synchronizacja %1 z %2 (%3 pozostało) - + Syncing %1 of %2 Synchronizowanie %1 of %2 - + Syncing %1 (%2 left) Synchronizuję %1 (%2 pozostało) - + Syncing %1 Synchronizowanie %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktualne @@ -3450,7 +3690,7 @@ Niezalecane jest jego użycie. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3553,78 +3793,42 @@ Niezalecane jest jego użycie. &Hasło + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formularz - - Server &address: - Adres &serwera: - - - - - TextLabel Etykieta tekstowa - - - Use &secure connection - Użyj &szyfrowanego połączenia - - - - CheckBox - Pole wyboru - - - - &Username: - &Nazwa użytkownika: - - - - Enter the ownCloud username. - Podaj nazwę użytkownika ownCloud. - - - - &Password: - &Hasło - - - - Enter the ownCloud password. - Podaj hasło ownCloud. - - - - Do not allow the local storage of the password. - Nie zezwalaj na lokalne przechowywanie hasła. - - - - &Do not store password on local machine - &Nie przechowuj hasła na tej maszynie lokalnej - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Wprowadź adres ownCloud, z którym chcesz się połączyć (bez http lub https). - Ser&ver Address @@ -3669,7 +3873,7 @@ Kliknij QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3677,42 +3881,42 @@ Kliknij QObject - + in the future w przyszłości - + %n day(s) ago %n dzień temu%n dni temu%n dni temu%n dni temu - + %n hour(s) ago %n godzinę temu%n godziny temu%n godzin temu%n godzin temu - + now teraz - + Less than a minute ago Mniej niż minutę temu - + %n minute(s) ago %n minutę temu%n minuty temu%n minut temu%n minut temu - + Some time ago Jakiś czas temu - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3721,57 +3925,57 @@ Kliknij Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n lata%n lat%n lat - + %n month(s) %n miesiąc%n miesiące%n miesięcy%n miesięcy - + %n day(s) %n dzień%n dni%n dni%n dni - + %n hour(s) %n godzina%n godziny%n godzin%n godzin - + %n minute(s) %n minuta%n minuty%n minut%n minut - + %n second(s) %n sekunda%n sekundy%n sekund%n sekund - + %1 %2 %1 %2 @@ -3792,102 +3996,97 @@ Kliknij ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Pobrane - + Uploaded Wysłane - + Server version downloaded, copied changed local file into conflict file Pobrano wersję z serwera, zmienona wersja lokalna została skopiowana do pliku konfliktu - + Deleted Usunięte - + Moved to %1 Przeniesione do %1 - + Ignored Ignorowany - + Filesystem access error Błąd dostępu do systemu plików - + Error Błąd - + Updated local metadata Zaktualizowano lokalne metadane - - + + Unknown Nieznany - + downloading pobieram - + uploading przesyłanie - + deleting usuwam - + moving przenoszę - + ignoring ignorowane + - error błąd - + updating local metadata aktualizacja lokalnych metadanych @@ -3895,54 +4094,77 @@ Kliknij theme - + Status undefined Stan niezdefiniowany - + Waiting to start sync Trwa oczekiwanie na uruchomienie synchronizacji - + Sync is running Synchronizacja uruchomiona - + Sync Success Udana synchronizacja - + Sync Success, some files were ignored. Synchronizacja ukończona, niektóre pliki zostały zignorowane. - + Sync Error Błąd synchronizacji - + Setup Error Błąd ustawień - + Preparing to sync Przygotowuję do synchronizacji - + Aborting... Anuluję... - + Sync is paused Synchronizacja wstrzymana + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_pt.ts b/translations/client_pt.ts index d5f5bb643..243e3f303 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O ficheiro de destino tem um tamanho inesperado ou a hora foi modificada @@ -81,6 +81,24 @@ EtiquetaTexto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancelar @@ -136,188 +154,204 @@ Ligado ao <server> como <user> - + No account configured. Nenhuma conta configurada. - + Add new Adicionar nova - + Remove Remover - + Account Conta - + Choose what to sync Escolher o que sincronizar - + Force sync now Forçar a sincronização - + Restart sync Retomar sincronização - + Remove folder sync connection Remover ligação de sincronização de pasta - + Folder creation failed Não foi possível criar a pasta - + <p>Could not create local folder <i>%1</i>. <p>Não foi possível criar a pasta local<i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmar Remoção da Ligação de Sincronização de Pasta - + Remove Folder Sync Connection Remover Ligação da Sincronização de Pasta - + Sync Running Sincronização em Execução - + The syncing operation is running.<br/>Do you want to terminate it? A operação de sincronização está em execução.<br/>Deseja terminá-la? - + %1 in use %1 em utilização - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão %1 do servidor é antiga e não é suportada! Prossiga por sua conta e risco. - + Connected to %1. Ligado a %1. - + Server %1 is temporarily unavailable. O servidor %1 está temporariamente indisponível. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Terminou a sessão de %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Sem ligação para %1 em %2. - + Log in Iniciar Sessão - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas por serem demasiado grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas por serem armazenamento externo: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas por serem demasiado grandes ou armazenamento externo: - + Confirm Account Removal Confirmar Remoção da Conta - + <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> <p>Deseja mesmo remover a ligação da conta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar quaisquer ficheiros.</p> - + Remove connection Remover ligação - + + Open folder Abrir pasta - - + + Log out Terminar sessão - + Resume sync Retomar sincronização - + Pause sync Pausar sincronização - + <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> <p>Deseja mesmo parar a sincronização da pasta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar qualquer ficheiro.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 em utilização. Algumas pastas, incluindo a rede montada ou as pastas partilhadas, podem ter limites diferentes. - + %1 of %2 in use %1 de %2 em utilização - + Currently there is no storage usage information available. Atualmente não está disponível nenhuma informação da utilização do armazenamento. - + No %1 connection configured. %1 sem ligação configurada. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Sessão terminada - + Disconnected Desligado - + Connected Ligado - + Service unavailable Serviço indisponível - + + Maintenance mode + + + + Network error Erro de rede - + Configuration error Erro de configuração - + + Asking Credentials + + + + Unknown account state Estado de conta desconhecido @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - - List of ignored or erroneous files - Lista de ficheiros ignorados ou com erros - - - - Copy - Copiar - - - - Copy the activity list to the clipboard. - Copiar a lista de atividades para a área de transferência. - - - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não Sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The sync activity list has been copied to the clipboard. A lista de atividades de sincronização foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para a área de transferência @@ -448,47 +477,47 @@ EtiquetaTexto - + Server Activities Atividades do Servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de actividades para a área de transferência. - + Action Required: Notifications Ação necessária: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Recebeu %n nova notificação de %2.Recebeu %n novas notificações de %2. - + You received %n new notification(s) from %1 and %2. Recebeu %n nova notificação de %1 e %2.Recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Necessária @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erro a aceder ao ficheiro de configuração - + There was an error while accessing the configuration file at %1. Ocorreu um erro enquanto se acedia ao ficheiro de configuração em %1. - + Quit ownCloud Sair do ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Não foi configurada nenhuma conta ownCloud - + The configured server for this client is too old O servidor configurado para este cliente é muito antigo - + Please update to the latest server and restart the client. Por favor, atualize para a ultima versão do servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Erro de autenticação: o nome de utilizador ou a palavra-passe estão errados. - + timeout tempo expirado - + The provided credentials are not correct As credenciais fornecidas não estão corretas - - OCC::DeleteJob - - - Connection timed out - A ligação expirou - - OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo utilizador @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. A pasta local %1 não existe. - + %1 should be a folder but is not. %1 deveria ser uma pasta, mas não é. - + %1 is not readable. %1 não é legível. - + %1 has been removed. %1 names a file. %1 foi removido. - + %1 has been downloaded. %1 names a file. %1 foi transferido. - + %1 has been updated. %1 names a file. %1 foi atualizado. - + %1 has been renamed to %2. %1 and %2 name files. %1 foi renomeado para %2 - + %1 has been moved to %2. %1 foi movido para %2 - + %1 and %n other file(s) have been removed. '%1' e %n outro(s) ficheiro(s) foram removidos'%1' e %n outros ficheiros foram removidos. - + %1 and %n other file(s) have been downloaded. %1 e %n outro ficheiro foram transferidos.%1 e %n outros ficheiros foram transferidos. - + %1 and %n other file(s) have been updated. %1 e %n outro ficheiro foram actualizados.%1 e %n outros ficheiros foram actualizados. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 foi renomeado para %2 e %n outro ficheiro foi renomeado.%1 foi renomeado para %2 e %n outros ficheiros foram renomeados. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 foi movido para %2 e %n outro ficheiro foi movido.%1 foi movido para %2 e %n outros ficheiros foram movidos. - + %1 has and %n other file(s) have sync conflicts. %1 tem e %n outro ficheiro têm problemas de sincronização.%1 tem e %n outros ficheiros têm problemas de sincronização. - + %1 has a sync conflict. Please check the conflict file! %1 tem um problema de sincronização. Por favor, verifique o ficheiro com conflito! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 e %n outro ficheiro não podem ser sincronizados devido a erros. Consulte o registo de eventos para mais detalhes.%1 e %n outros ficheiros não podem ser sincronizados devido a erros. Consulte o registo de eventos para mais detalhes. - + %1 could not be synced due to an error. See the log for details. Não foi possível sincronizar %1 devido a um erro. Consulte o registo para detalhes. - + Sync Activity Atividade de Sincronização - + Could not read system exclude file Não foi possível ler o ficheiro excluir do sistema - + A new folder larger than %1 MB has been added: %2. Foi adicionada uma nova pasta maior que %1 MB: %2. - + A folder from an external storage has been added. Foi adicionada uma pasta vinda de armazenamento externo. - + Please go in the settings to select it if you wish to download it. Por favor, vá às configurações para a selecionar se a desejar transferir. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ Se decidir manter os ficheiros, eles serão sincronizados novamento para o servi Se decidir apagar os ficheiros, eles ficaram indisponíveis para si, a não ser que seja o seu proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,22 +791,22 @@ Tem a certeza que deseja sincronizar essas ações com o servidor? Se foi acidental e decidir manter os seus ficheiros, eles serão sincronizados novamente apartir do servidor. - + Remove All Files? Remover todos os ficheiros? - + Remove all files Remover todos os ficheiros - + Keep files Manter ficheiros - + This sync would reset the files to an earlier 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? @@ -794,17 +815,17 @@ Isto pode ser porque um backup foi restaurado no servidor. Continuando a sincronização fará com que todos os seus ficheiros sejam substituídos por um ficheiro mais velho num estado anterior. Deseja manter os seus ficheiros locais mais recentes como ficheiros de conflito? - + Backup detected Detetada cópia de segurança - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Ficheiros Locais como Conflito @@ -812,112 +833,112 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderMan - + Could not reset folder state Não foi possível reiniciar o estado da pasta - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Foi encontrado um 'journal' de sincronização, mas não foi possível removê-lo. Por favor, certifique-se que nenhuma aplicação o está a utilizar. - + (backup) (cópia de segurança) - + (backup %1) (cópia de segurança %1) - + Undefined State. Estado indefinido. - + Waiting to start syncing. A aguardar para iniciar a sincronização. - + Preparing for sync. A preparar para sincronizar. - + Sync is running. A sincronização está em execução. - + Last Sync was successful. A última sincronização foi bem sucedida. - + Last Sync was successful, but with warnings on individual files. A última sincronização foi bem sucedida, mas com avisos nos ficheiros individuais. - + Setup Error. Erro de instalação. - + User Abort. Abortado pelo utilizador. - + Sync is paused. A sincronização está pausada. - + %1 (Sync is paused) %1 (A sincronização está pausada) - + No valid folder selected! Não foi selecionada nenhuma pasta válida! - + The selected path is not a folder! O caminho selecionado não é uma pasta! - + You have no permission to write to the selected folder! Não tem permissão para gravar para a pasta selecionada! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! A pasta local %1 contém hiperligação simbólica. O destino da hiperligação já contém uma pasta sincronizada. Por favor, escolha outra! - + There is already a sync from the server to this local folder. Please pick another local folder! Já existe uma sincronização do servidor para esta pasta local. Por favor escolha outra pasta local! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! A pasta local %1 já contém uma pasta usada numa ligação de sincronização de pasta. Por favor, escolha outra! - + 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! A pasta local %1 é uma hiperligação simbólica. A hiperligação de destino já contém uma pasta usada numa ligação de sincronização de pasta. Por favor, escolha outra! @@ -925,17 +946,17 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderStatusDelegate - + Add Folder Sync Connection Adicionar Ligação de Sincronização de Pasta - + Synchronizing with local folder A sincronizar com a pasta local - + File Ficheiro @@ -943,134 +964,144 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderStatusModel - + You need to be connected to add a folder Precisa de estar ligado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique neste botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro durante o carregamento da lista de pastas a partir do servidor. - + Signed out Sessão terminada - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Adicionar pasta está desativada porque já está a sincronizar todos os seus ficheiros. Se deseja sincronizar múltiplas pastas, por favor, remova a pasta raiz atualmente configurada. - + Fetching folder list from server... A obter a lista de pastas do servidor... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' A procurar por alterações em '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" A sincronizar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) transferir %s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restante, %1 de %2, ficheiro %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... A aguardar... - + Waiting for %n other folder(s)... A aguardar por %n outra pasta...A aguardar por %n outra(s) pasta(s)... - + Preparing to sync... A preparar para sincronizar... @@ -1078,12 +1109,12 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderWizard - + Add Folder Sync Connection Adicionar Ligação de Sincronização de Pasta - + Add Sync Connection Adicionar Ligação de Sincronização @@ -1096,7 +1127,7 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Clique para selecionar a pasta local para sincronizar. - + Enter the path to the local folder. Insira o caminho para a pasta local. @@ -1119,42 +1150,42 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Insira o nome da nova pasta para ser criada em baixo '%1': - + Folder was successfully created on %1. A pasta foi criada com sucesso em %1. - + Authentication failed accessing %1 A autenticação falhou ao aceder %1 - + Failed to create the folder on %1. Please check manually. Não foi possível criar a pasta em %1. Por favor, verifique manualmente. - + Failed to list a folder. Error: %1 Não foi possível listar uma pasta. Erro: %1 - + Choose this to sync the entire account Escolha isto para sincronizar a conta completa - + This folder is already being synced. Esta pasta já foi sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Já está a sincronizar <i>%1</i>, que é uma pasta de origem de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Já está a sincronizar todos os seus ficheiros. Sincronizar outra pasta<b>não</b> é suportado. Se desejar sincronizar múltiplas pastas, por favor, remova a sincronização da pasta raiz atualmente configurada. @@ -1175,22 +1206,22 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nenhum E-Tag recebida do servidor, verifique Proxy / Acesso - + We received a different E-Tag for resuming. Retrying next time. Nós recebemos uma E-Tag diferente para retomar. Tentar da próxima vez. - + Server returned wrong content-range O servidor devolveu o alcance-conteúdo errado - + Connection Timeout O tempo de ligação expirou @@ -1213,23 +1244,23 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Para a Bandeja do Sistema - + Advanced Avançada - + Ask for confirmation before synchronizing folders larger than Pedir confirmação antes de sincronizar pastas maiores que - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Pedir confirmação antes de sincronizar armazenamentos externos @@ -1249,28 +1280,28 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Utilizar Ícones &Monocromáticos - + Edit &Ignored Files Editar Ficheiros &Ignorados - + S&how crash reporter M&ostrar relatório de crache - - + + About Sobre - + Updates Atualizações - + &Restart && Update &Reiniciar e Atualizar @@ -1278,22 +1309,22 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor, insira a palavra-passe %1:<br><br>Utilizador: %2<br>Conta: %3<br> - + Reading from keychain failed with error: '%1' A leitura da cadeia de dados falhou com um erro: '%1' - + Enter Password Insira a Palavra-passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma palavra-passe da aplicação a partir da interface da Web. @@ -1375,55 +1406,125 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Esta entrada é fornecida pelo sistema em '%1' e não pode ser modificada nesta visualização. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Registo de Saída - + &Search: &Procurar - + &Find &Encontrar - + + &Capture debug messages + + + + Clear Limpar - + Clear the log display. Limpar a exibição de registo. - + S&ave &Guardar - + Save the log file to a file on disk for debugging. Guarde o ficheiro de registo no disco para depuração. - + Save log file Guardar ficheiro de registo - + Error Erro - + Could not write to log file %1 Não foi possível gravar no ficheiro de registo %1 @@ -1431,24 +1532,16 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>O ficheiro '%1'<br/>não pode ser aberto para gravação.<br/><br/>O ficheiro de registo de saída <b>não</b> pode ser guardado!</nobr> - - OCC::MoveJob - - - Connection timed out - A ligação expirou - - OCC::NSISUpdater @@ -1560,27 +1653,27 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Limitar automaticamente - + Hostname of proxy server Nome de anfitrião do servidor proxy - + Username for proxy server Nome de utilizador para o servidor proxy - + Password for proxy server Palavra-passe para o servidor proxy. - + HTTP(S) proxy Proxy de HTTP(S) - + SOCKS5 proxy Proxy de SOCKS5 @@ -1593,79 +1686,112 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::NotificationWidget - + Created at %1 Criado às %1 - + Closing in a few seconds... A fechar dentro de alguns segundos... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 pedido falhou a %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' selecionado a %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nova Atualização %1 Pronta - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Está prestes a ser instalada uma nova atualização para %1. O atualizador poderá pedir por privilégios adicionais durante o processo. - + Downloading version %1. Please wait... Por favor, aguarde - a transferir a versão %1... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Não foi possível transferir a atualização. Por favor, clique <a href='%1'>aqui</a> para a transferir manualmente. - + Could not check for new updates. Não foi possível procurar por novas atualizações. - + %1 version %2 available. Restart application to start the update. Disponível %1 versão %2. Reinicie a aplicação para iniciar a atualização. - + New %1 version %2 available. Please use the system's update tool to install it. Disponível nova %1 versão %2. Por favor, utilize a ferramenta de atualização do sistema para a instalar. - + Checking update server... A procurar por atualizações no servidor... - + Update status is unknown: Did not check for new updates. O estado de atualização é desconhecido: não foi possível procurar por novas atualizações. - + No updates available. Your installation is at the latest version. Não estão disponíveis atualizações. A sua instalação já está com a última versão. @@ -1678,43 +1804,43 @@ poderá pedir por privilégios adicionais durante o processo. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Ligar a %1 - + Setup local folder options Configurar as opções de pasta local - + Connect... Ligar... - + %1 folder '%2' is synced to local folder '%3' %1 pasta '%2' é sincronizada para pasta local '%3' - + Sync the folder '%1' Sincronizar a pasta '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Aviso:</strong> a pasta local não está vazia. Escolha uma resolução!</small></p> - + Local Sync Folder Pasta de Sincronização Local - - + + (%1) (%1) @@ -1747,7 +1873,7 @@ poderá pedir por privilégios adicionais durante o processo. Configurar certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Não foi possível ligar ao endereço do servidor seguro <em>%1</em>. Como deseja proceder?</p></body></html> @@ -1755,47 +1881,60 @@ poderá pedir por privilégios adicionais durante o processo. OCC::OwncloudHttpCredsPage - + &Email &Correio Eletrónico - + Connect to %1 Ligar a %1 - + Enter user credentials Insira as credenciais do utilizador + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Ligar a %1 - + Setup %1 server Configurar servidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Este url NÃO é seguro, porque este não está encriptado. Não é aconselhada a sua utilização. - + This url is secure. You can use it. Este url é seguro. Pode utilizá-lo. - + &Next > &Seguinte > @@ -1803,22 +1942,22 @@ Não é aconselhada a sua utilização. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Ligado com sucesso a %1: %2 - versão: %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Não foi possível ligar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo expirou enquanto tentava ligar a %1 em %2. - + Trying to connect to %1 at %2... A tentar ligar a %1 em %2... @@ -1838,109 +1977,109 @@ Não é aconselhada a sua utilização. Acesso proibido pelo servidor. Para verificar que tem o acesso adequado, <a href="%1">clique aqui</a> para aceder ao serviço com o seu navegador. - + Invalid URL URL inválido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A pasta de sincronização local %1 já existe, a configurar para sincronizar.<br/><br/> - + Creating local sync folder %1... A criar a pasta de sincronização local %1... - + ok ok - + failed. Falhou. - + Could not create local folder %1 Não foi possível criar a pasta local %1 - + No remote folder specified! Não foi indicada a pasta remota! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 a criar a pasta na ownCloud: %1 - + Remote folder %1 created successfully. Criação da pasta remota %1 com sucesso! - + The remote folder %1 already exists. Connecting it for syncing. A pasta remota %1 já existe. Ligue-a para sincronizar. - + The folder creation resulted in HTTP error code %1 A criação da pasta resultou num erro HTTP com o código %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.<br/>Por favor, verifique as suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.</font><br/>Por favor, verifique as suas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A criação da pasta remota %1 falhou com o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A sincronização de %1 com a pasta remota %2 foi criada com sucesso. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Não foi possível ligar a %1 . Por Favor verifique novamente. - + Folder rename failed Erro ao renomear a pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup à pasta porque a pasta ou um ficheiro nesta está aberto em outro programa. Por favor, feche a pasta ou o ficheiro e clique novamente ou cancele a configuração. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -1948,12 +2087,12 @@ Não é aconselhada a sua utilização. OCC::OwncloudWizard - + %1 Connection Wizard Assistente de ligação %1 - + Skip folders configuration Saltar a configuração das pastas @@ -1961,33 +2100,25 @@ Não é aconselhada a sua utilização. OCC::OwncloudWizardResultPage - + Everything set up! Configuração concluida! - + Open Local Folder Abrir a pasta local - + Open %1 in Browser Abrir %1 no Navegador - - OCC::PUTFileJob - - - Connection Timeout - O tempo de ligação expirou - - OCC::PollJob - + Invalid JSON reply from the poll URL Resposta JSON inválida do URL poll @@ -1995,7 +2126,7 @@ Não é aconselhada a sua utilização. OCC::PropagateDirectory - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2003,47 +2134,47 @@ Não é aconselhada a sua utilização. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Não foi possível transferir o ficheiro %1 devido a um conflito com o nome de ficheiro local! - - The download would reduce free disk space below %1 - A transferência poderá reduzir o espaço livre em disco para menos de %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 O Espaço livre no disco é inferior a %1 - + File was deleted from server O ficheiro foi eliminado do servidor - + The file could not be downloaded completely. Não foi possível transferir o ficheiro na totalidade. - + The downloaded file is empty despite the server announced it should have been %1. O ficheiro transferido está vazio, apesar do servidor indicar que este deveria ter %1. - + File %1 cannot be saved because of a local file name clash! Ficheiro %1 não pode ser guardado devido à existência de um ficheiro local com o mesmo nome. - + File has changed since discovery O ficheiro alterou-se desde a sua descoberta - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -2051,17 +2182,12 @@ Não é aconselhada a sua utilização. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Restauro Falhou: %1 - - Continue blacklisting: - Continue a enviar para lista negra: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Um ficheiro ou pasta foi removido de uma partilha só de leitura, mas o restauro falhou: %1 @@ -2069,22 +2195,22 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Não foi possivel eliminar o ficheiro %1, erro: %2 - + Attention, possible case sensitivity clash with %1 Atenção, possível sensibilidade a maiúsculas em conflito com %1 - + could not create folder %1 Não foi possivel criar a pasta %1 - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2092,17 +2218,17 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erro ao remover '%1': %2; - + Could not remove folder '%1' Não foi possível remover a pasta '%1' - + Could not remove %1 because of a local file name clash Nao foi possivel remover %1 devido a conflito local com nome de ficheiro @@ -2110,13 +2236,13 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash O ficheiro %1 nao pode ser renomeado para %2 devido a conflito com nome de ficheiro local - - + + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2124,12 +2250,12 @@ Não é aconselhada a sua utilização. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. O ficheiro havia sido removido de uma partilha apenas de leitura. Ficheiro restaurado. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Código HTTP errado devolvido pelo servidor. Esperado 204, mas foi recebido "%1 %2". @@ -2137,12 +2263,12 @@ Não é aconselhada a sua utilização. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código HTTP errado devolvido pelo servidor. Esperado 201, mas foi recebido "%1 %2". - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2150,28 +2276,28 @@ Não é aconselhada a sua utilização. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Esta pasta não pode ser renomeada. A alterar para nome original. - + This folder must not be renamed. Please name it back to Shared. Esta pasta não pode ser renomeada. Por favor renomeie para o seu nome original: Shared. - + The file was renamed but is part of a read only share. The original file was restored. O ficheiro foi renomeado mas faz parte de uma partilha só de leitura. O ficheiro original foi restaurado. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código HTTP errado devolvido pelo servidor. Esperado 201, mas foi recebido "%1 %2". - - + + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2179,27 +2305,32 @@ Não é aconselhada a sua utilização. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Não foi possível transferir o ficheiro %1 devido a existir um ficheiro com o mesmo nome, diferenciando apenas as maiúsculas ou minúsculas. - + File Removed Ficheiro Eliminado - + Local file changed during syncing. It will be resumed. O ficheiro local foi alterado durante a sincronização. Vai ser finalizado. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -2207,32 +2338,32 @@ Não é aconselhada a sua utilização. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. A forçar aborto no trabalho de redefinição de conexão HTTP com Qt < 5.4.3 - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + Unexpected return code from server (%1) Código de resposta inesperado do servidor (%1) - + Missing File ID from server ID do ficheiro no servidor em falta - + Missing ETag from server ETag do servidor em falta @@ -2240,32 +2371,32 @@ Não é aconselhada a sua utilização. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. A forçar aborto no trabalho de redefinição de conexão HTTP com Qt < 5.4.3 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O ficheiro foi editado localmente mas faz parte de uma prtilha só de leitura. Foi restaurado mas a edição está no ficheiro de conflito. - + Poll URL missing URL poll em falta - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + The server did not acknowledge the last chunk. (No e-tag was present) O servidor não reconheceu a última parte. (Nenhuma e-tag estava presente) @@ -2283,42 +2414,42 @@ Não é aconselhada a sua utilização. TextLabel - + Time Tempo - + File Ficheiro - + Folder Pasta - + Action Ação - + Size Tamanho - + Local sync protocol Protocolo de sincronização local - + Copy Copiar - + Copy the activity list to the clipboard. Copiar lista de actividades para a área de transferência. @@ -2359,7 +2490,7 @@ Não é aconselhada a sua utilização. OCC::SelectiveSyncDialog - + Choose What to Sync Escolher o Que Sincronizar @@ -2367,33 +2498,33 @@ Não é aconselhada a sua utilização. OCC::SelectiveSyncWidget - + Loading ... A carregar... - + Deselect remote folders you do not wish to synchronize. Desmarcar pastas remotas que não deseja sincronizar. - + Name Nome - + Size Tamanho - - + + No subfolders currently on the server. Atualmente não há sub-pastas no servidor. - + An error occurred while loading the list of sub folders. Ocorreu um erro ao carregar a lista das sub pastas. @@ -2406,22 +2537,22 @@ Não é aconselhada a sua utilização. Definições - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2429,27 +2560,27 @@ Não é aconselhada a sua utilização. OCC::SettingsDialogMac - + %1 %1 - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2477,35 +2608,45 @@ Não é aconselhada a sua utilização. Caminho OwnCloud: - + %1 Sharing %1 Partilhando - + %1 %1 - + Folder: %2 Pasta: %2 - + The server does not allow sharing O servidor não permite partilhas - + Retrieving maximum possible sharing permissions from server... A obter do servidor as permissões máximas de partilha... - + The file can not be shared because it was shared without sharing permission. O ficheiro não pode ser partilhado porque foi partilhado sem permissão de partilha. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2515,92 +2656,126 @@ Não é aconselhada a sua utilização. Partilhar NovoDocumento.odt - - Share link - Compartilhar hiperligação - - - + TextLabel TextLabel - + Set &password Defina a &senha - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Defina a data de &expiração - + Set password Defina a senha - - &Mail link - Hiperligação $Mail + + Link properties: + - Copy &link - Copie a &hiperligação + Show file listing + - + Allow editing Permitir edição - + Anyone with the link has access to the file/folder Qualquer pessoa com a hiperligação terá acesso ao ficheiro/pasta - + + P&assword protect Protegida por senha - + Password Protected Protegido com Senha - + The file can not be shared because it was shared without sharing permission. O ficheiro não pode ser partilhado porque foi partilhado sem permissão de partilha. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password A pa&rtilha pública requer uma palavra-passe: - + Please Set Password Por favor, Definir Senha - - - Could not open email client - Não foi possivel abrir o cliente de email - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Ocorreu um erro ao lançar o cliente de email para criar uma nova mensagem. Talvez nenhum cliente de email esteja configurado? - - - - - &Share link - &Compartilhe a hiperligação - OCC::ShareUserGroupWidget @@ -2610,68 +2785,98 @@ Não é aconselhada a sua utilização. Partilhar NovoDocumento.odt - + Share with users or groups ... Partilhar com utilizadores ou grupos... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Sem resultados para '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulário + - + TextLabel - TextLabel + - + can edit - pode editar + - + can share - pode partilhar + - + ... - ... + - + create - criar + - + change - alterar + - + delete - eliminar + OCC::ShibbolethCredentials - + Login Error Erro de login - + You must sign in as user %1 Deve fazer o login como utilizador %1. @@ -2679,22 +2884,22 @@ Não é aconselhada a sua utilização. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticação - + SSL Chipher Debug View Vista de depuramento SSL Cipher - + Reauthentication required Requerido reautenticação - + Your session has expired. You need to re-login to continue to use the client. A sessão expirou. Precisa reiniciar a sessão para poder continuar usando o cliente. @@ -2702,26 +2907,46 @@ Não é aconselhada a sua utilização. OCC::SocketApi - + Share with %1 parameter is ownCloud Partilhar com %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalhes do Certificado</h3> - + Common Name (CN): Nome Comum (NC): - + Subject Alternative Names: Nomes alternativos @@ -2806,7 +3031,7 @@ Não é aconselhada a sua utilização. %1 - + This connection is encrypted using %1 bit %2. Esta ligação é encriptada a %1 bit %2. @@ -2823,7 +3048,7 @@ Não é aconselhada a sua utilização. Informação do certificado: - + This connection is NOT secure as it is not encrypted. Esta ligação NÃO é segura uma vez que não está encriptada. @@ -2843,67 +3068,67 @@ Não é aconselhada a sua utilização. Confiar na mesma neste certificado. - + Untrusted Certificate Certificado Não Confiável - + Cannot connect securely to <i>%1</i>: Não é possível ligar com segurança a <i>%1</i>: - + with Certificate %1 com o certificado %1 - + &lt;not specified&gt; &lt;não especificado&gt; - - + + Organization: %1 Organização: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Chave(MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Chave(SHA1): <tt>%1</tt> - + Effective Date: %1 Data efectiva: %1 - + Expiration Date: %1 Data de Expiração: %1 - + Issuer: %1 Emissor: %1 @@ -2911,285 +3136,300 @@ Não é aconselhada a sua utilização. OCC::SyncEngine - + Success. Sucesso - + CSync failed to load the journal file. The journal file is corrupted. CSync falhou a carregar o ficheiro do jornal. O ficheiro do jornal está corrupto. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>O plugin %1 para o CSync não foi carregado.<br/>Por favor verifique a instalação!</p> - + CSync got an error while processing internal trees. Csync obteve um erro enquanto processava as árvores internas. - - CSync failed to reserve memory. - O CSync falhou a reservar memória - - - + CSync fatal parameter error. Parametro errado, CSync falhou - + CSync processing step update failed. O passo de processamento do CSyn falhou - + CSync processing step reconcile failed. CSync: Processo de reconciliação falhou. - + CSync could not authenticate at the proxy. CSync: não foi possível autenticar no servidor proxy. - + CSync failed to lookup proxy or server. CSync: não conseguiu contactar o proxy ou o servidor. - + CSync failed to authenticate at the %1 server. CSync: Erro a autenticar no servidor %1 - + CSync failed to connect to the network. CSync: Erro na conecção à rede - + A network connection timeout happened. Houve um erro de timeout de rede. - + A HTTP transmission error happened. Ocorreu um erro de transmissão HTTP - + The mounted folder is temporarily not available on the server O pasta montada está temporariamente indisponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler o ficheiro. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. O ficheiro/pasta foi ignorado porque está oculto. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Não ha espaço disponível no servidor %1 - + CSync unspecified error. CSync: erro não especificado - + Aborted by the user Cancelado pelo utilizador - + CSync failed to access CSync falhou o acesso - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falhou no carregamento ou criação do ficheiro jornal. Certifique-se de que tem permissões de gravação e leitura na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão não tratada negada. - + CSync tried to create a folder that already exists. O CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden O acesso é proibido - + An internal error number %1 occurred. Ocorreu o erro interno número %1. - - The item is not synced because of previous errors: %1 - O item não está sincronizado devido a erros anteriores: %1 - - - + Symbolic links are not supported in syncing. Hiperligações simbólicas não são suportadas em sincronização. - + File is listed on the ignore list. O ficheiro está na lista de ficheiros a ignorar. - + File names ending with a period are not supported on this file system. Nomes de ficheiros acabados com um ponto final não são suportados neste sistema de ficheiros. - + File names containing the character '%1' are not supported on this file system. Nomes de ficheiros que contêm o caractér '%1' não são suportados neste sistema de ficheiros. - + The file name is a reserved name on this file system. O nome de ficheiro é um nome reservado neste sistema de ficheiros. - + Filename contains trailing spaces. Nome de ficheiro contém espaços em branco seguidos. - + Filename is too long. O nome do ficheiro é muito grande - + Stat failed. Estado falhou. - + Filename encoding is not valid Codificação de nome de ficheiro não é válida - + Invalid characters, please rename "%1" Carateres inválidos, por favor, renomeie "%1" - - Unable to initialize a sync journal. - Impossível inicializar sincronização 'journal'. - - - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem @@ -3205,7 +3445,7 @@ Não é aconselhada a sua utilização. OCC::Systray - + %1: %2 %1: %2 @@ -3213,17 +3453,17 @@ Não é aconselhada a sua utilização. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versão %1. Para mais informações visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Todos os direitos reservados ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado sob a GNU General Public License (GPL) Versão 2.0.<br/>%2 e o logótipo %2 são marcas registadas da %1 nos Estados Unidos, outros países, ou ambos </p> @@ -3231,17 +3471,17 @@ Não é aconselhada a sua utilização. OCC::ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho de "checksum" está com problemas. - + The checksum header contained an unknown checksum type '%1' O header checksum continha um tipo de checksum desconhecido '%1' - + The downloaded file does not match the checksum, it will be resumed. O ficheiro transferido não corresponde ao "checksum", Este irá ser retomado. @@ -3249,207 +3489,207 @@ Não é aconselhada a sua utilização. OCC::ownCloudGui - + Please sign in Por favor inicie a sessão - + Folder %1: %2 Pasta %1: %2 - + No sync folders configured. Nenhuma pasta de sincronização configurada. - + There are no sync folders configured. Não há pastas de sincronização configurado. - + Open in browser Abrir no navegador - - - + + + Log in... Iniciar sessão... - - - + + + Log out Terminar sessão - + Recent Changes Alterações recentes - + Checking for changes in '%1' Procurando por alterações em '%1' - + Managed Folders: Pastas Geridas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Estado desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair do %1 - + Disconnected from %1 Desconetado de %1 - + Unsupported Server Version Versão de servidor não suportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. O servidor na conta %1 está a correr uma versão %2 antiga e não suportada. O uso deste cliente com versões de servidor não suportadas não está testado e é potencialmente perigos. Prossiga por sua conta e risco. - + Disconnected from accounts: Desconetado das contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled A sincronização de contas está desactivada - + Unpause all folders Continuar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Continuar toda a sincronização - + Unpause synchronization Continuar sincronização - + Pause all synchronization Pausar toda a sincronização - + Pause synchronization Pausar sincronização - + Log out of all accounts Sair de todas as contas - + Log in to all accounts... Entrar em todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Crash agora - + No items synced recently Sem itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 A sincronizar %1 de %2 - + Syncing %1 (%2 left) A sincronizar %1 (%2 em falta) - + Syncing %1 A sincronizar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Atualizado @@ -3457,7 +3697,7 @@ Não é aconselhada a sua utilização. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Versão %2. Para mais informação visite <a href="%3">https://%4</a></p><p>Para problemas conhecidos e ajuda, por favor, visite: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>por Por Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, e outros.</small></p><p>Direitos de Autor - ownCloud GmbH</p><p>Licenciado sob a Licença Pública Geral GNU (GPL), versão 2.0<br/>ownCloud e o logótipo ownCloud são marcas registadas de ownCloud GmbH nos Estados Unidos, outros países, ou ambos.</p> @@ -3560,78 +3800,42 @@ Não é aconselhada a sua utilização. &Senha + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulário - - Server &address: - Endereço& do Servidor: - - - - - TextLabel TextLabel - - - Use &secure connection - Usar uma ligação& segura. - - - - CheckBox - Caixa de Confirmação - - - - &Username: - Nome de utilizador& - - - - Enter the ownCloud username. - Introduza o nome de utilizador do ownCloud - - - - &Password: - &Senha: - - - - Enter the ownCloud password. - Introduza a sua senha do ownCloud - - - - Do not allow the local storage of the password. - Não permitir que a senha seja guardada localmente. - - - - &Do not store password on local machine - &Não guardar a senha na máquina local - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Introduza o URL do ownCloud a que se deseja ligar. (Sem http ou https). - Ser&ver Address @@ -3675,7 +3879,7 @@ Não é aconselhada a sua utilização. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3683,42 +3887,42 @@ Não é aconselhada a sua utilização. QObject - + in the future no futuro - + %n day(s) ago %n dia atrás%n dias atrás - + %n hour(s) ago %n hora atrás%n horas atrás - + now agora - + Less than a minute ago Menos de um minuto atrás - + %n minute(s) ago %n minuto atrás%n minutos atrás - + Some time ago Algum tempo atrás - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3727,57 +3931,57 @@ Não é aconselhada a sua utilização. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n meses - + %n day(s) %n dia%n dias - + %n hour(s) %n hora%n horas - + %n minute(s) %n minuto%n minutos - + %n second(s) %n segundo%n segundos - + %1 %2 %1 %2 @@ -3798,102 +4002,97 @@ Não é aconselhada a sua utilização. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir da revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> - - - built with %1 - Criada com %1 - progress - + Downloaded Transferido - + Uploaded Enviado - + Server version downloaded, copied changed local file into conflict file A versão do servidor transferida, o ficheiro local alterado foi copiado para o ficheiro de conflito - + Deleted Apagado - + Moved to %1 Movido para %1 - + Ignored Ignorado. - + Filesystem access error Erro ao acesso do sistema de ficheiros - + Error Erro - + Updated local metadata Metadados locais atualizados - - + + Unknown Desconhecido - + downloading A transferir - + uploading a enviar - + deleting a apagar - + moving a mover - + ignoring ignorado + - error erro - + updating local metadata a atualizar metadados locais @@ -3901,54 +4100,77 @@ Não é aconselhada a sua utilização. theme - + Status undefined Estado indefinido - + Waiting to start sync A aguardar o início da sincronização. - + Sync is running A sincronização está a decorrer - + Sync Success A sincronização foi efectuada com sucesso - + Sync Success, some files were ignored. Sincronizado com suceso, alguns ficheiros foram ignorados. - + Sync Error Erro de sincronização - + Setup Error Erro na configuração - + Preparing to sync A preparar para sincronizar - + Aborting... A cancelar... - + Sync is paused Sincronização em pausa + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 4e51114e1..f2788a152 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O arquivo de destino tem um tamanho ou tempo de modificação inesperado @@ -81,6 +81,24 @@ RótuloTexto + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Cancelar @@ -136,188 +154,204 @@ Conectado com <server> como <user> - + No account configured. Nenhuma conta configurada. - + Add new Adicionar nova - + Remove Remover - + Account Conta - + Choose what to sync Escolha o que quer sincronizar - + Force sync now Forçar sincronização agora - + Restart sync Reiniciar a sincronização - + Remove folder sync connection Remover a conexão de sincronização de pastas - + Folder creation failed Falha na criação de pasta - + <p>Could not create local folder <i>%1</i>. <p>Não foi possível criar pasta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirme a Remoção de Sincronização de Pasta - + Remove Folder Sync Connection Remover a Conexão de Sincronização de pasta - + Sync Running Sincronização Acontecendo - + The syncing operation is running.<br/>Do you want to terminate it? A operação de sincronização está acontecendo.<br/>Você deseja finaliza-la? - + %1 in use %1 em uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão do servidor %1 é antiga e não suportada! Prossiga por conta própria. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O Servidor %1 está temporariamente indisponível. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Desconectado de %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Sem conexão para %1 em %2. - + Log in Entrar - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas porque são muito grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas porque são armazenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas porque são muito grandes ou armazenamentos externos: - + Confirm Account Removal Confirmar a Remoção da Conta - + <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> <p>Você realmente deseja remover a conexão desta conta<i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> irá deletar nenhum arquivo.</p> - + Remove connection Remover conexão - + + Open folder Abrir pasta - - + + Log out Sair - + Resume sync Resumir sincronização - + Pause sync Pausar sincronização - + <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> <p>Você realmente deseja para a sincronização desta pasta <i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> vai deletar qualquer arquivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de%2 em uso. Algumas pastas, incluindo montadas na rede ou pastas compartilhadas, podem ter limites diferenes. - + %1 of %2 in use %1 de %2 em uso - + Currently there is no storage usage information available. Atualmente, não há informações de uso de armazenamento disponível. - + No %1 connection configured. Nenhuma %1 conexão configurada. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Desconectado - + Disconnected Desconectado - + Connected Conectado - + Service unavailable Serviço indisponível - + + Maintenance mode + + + + Network error Erro de rede - + Configuration error Erro de configuração - + + Asking Credentials + + + + Unknown account state Estado da conta desconhecido @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - - List of ignored or erroneous files - Lista de arquivos ignorados ou errôneos - - - - Copy - Copiar - - - - Copy the activity list to the clipboard. - Copiar a lista de atividades para a área de transferência. - - - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não sincronizada (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor tem sido copiados para o clipboard. - + The sync activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para área de transferência @@ -448,47 +477,47 @@ RótuloTexto - + Server Activities Atividades do Servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de atividades para a área de transferência. - + Action Required: Notifications Ação Requerida: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Você recebeu %n nova notificação de %2.Você recebeu %n notificações de %2. - + You received %n new notification(s) from %1 and %2. Você recebeu %n nova notificação de %1 e %2.Você recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Você recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Requerida @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erro acessando o arquivo de configuração - + There was an error while accessing the configuration file at %1. Ocorreu um erro ao acessar o arquivo de configuração em %1. - + Quit ownCloud Sair do ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Nenhuma conta ownCloud configurada - + The configured server for this client is too old O servidor configurado para este cliente é muito antigo - + Please update to the latest server and restart the client. Por favor, atualize para o último servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Erro de autenticação. Ou nome de usuário ou senha está errada. - + timeout tempo limite - + The provided credentials are not correct As credenciais fornecidas não estão corretas - - OCC::DeleteJob - - - Connection timed out - Conexão expirou - - OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo usuário @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. A pasta local %1 não existe. - + %1 should be a folder but is not. %1 deve ser uma pasta, mas não é. - + %1 is not readable. %1 não pode ser lido. - + %1 has been removed. %1 names a file. %1 foi removido. - + %1 has been downloaded. %1 names a file. %1 foi baixado. - + %1 has been updated. %1 names a file. %1 foi atualizado. - + %1 has been renamed to %2. %1 and %2 name files. %1 foi renomeado para %2. - + %1 has been moved to %2. %1 foi movido para %2. - + %1 and %n other file(s) have been removed. %1 e %n outro arquivo foi removido.%1 e %n outros arquivos foram removidos. - + %1 and %n other file(s) have been downloaded. %1 e %n outro(s) arquivo(s) foi(foram) baixados.%1 e %n outro(s) arquivo(s) foi(foram) baixados. - + %1 and %n other file(s) have been updated. %1 e %n outro arquivo foi atualizado.%1 e %n outros arquivos foram atualizados. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 foi renomeado para %2 e %n outro arquivo foi renomeado.%1 foi renomeado para %2 e %n outros arquivos foram renomeados. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 foi movido para %2 e %n outro arquivo foi movido.%1 foi movido para %2 e %n outros arquivos foram movidos. - + %1 has and %n other file(s) have sync conflicts. %1 tem e %n outro arquivo tem conflito na sincronização.%1 tem e %n outros arquivos teem conflito na sincronização. - + %1 has a sync conflict. Please check the conflict file! %1 tem um conflito na sincronização. Por favor verifique o arquivo de conflito! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 e %n outro arquivo não pode ser sincronizado devido a erros. Veja o log para detalhes.%1 e %n outros arquivo(s) não puderam ser sincronizados devido a erros. Veja o log para detalhes. - + %1 could not be synced due to an error. See the log for details. %1 não pode ser sincronizado devido a um erro. Veja o log para obter detalhes. - + Sync Activity Atividade de Sincronização - + Could not read system exclude file Não foi possível ler o sistema de arquivo de exclusão - + A new folder larger than %1 MB has been added: %2. Uma nova pasta maior que %1 MB foi adicionada: %2 - + A folder from an external storage has been added. Uma pasta de um armazenamento externo foi adicionada. - + Please go in the settings to select it if you wish to download it. Por favor, vá nas configurações para selecioná-lo se você deseja baixá-lo. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,29 +782,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a Se você decidir excluir os arquivos, eles não estarão disponíveis para você, a menos que você seja o proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. Todos os arquivos na pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com o servidor, tornando tais arquivos indisponíveis, a menos que restaurados.Tem certeza de que deseja sincronizar essas ações com o servidor?Se isso foi um acidente e você decidir manter seus arquivos, eles serão re-sincronizados a partir do servidor. - + Remove All Files? Deseja Remover Todos os Arquivos? - + Remove all files Remover todos os arquivos - + Keep files Manter arquivos - + This sync would reset the files to an earlier 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? @@ -792,17 +813,17 @@ Isso pode ser porque um backup foi restaurado no servidor. Continuar a sincronização como normal fará com que todos os seus arquivos sejam substituídos por um arquivo antigo em um estado anterior. Deseja manter seus arquivos mais recentes locais como arquivos de conflito? - + Backup detected Backup detectado - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Arquivos Locais como Conflito @@ -810,112 +831,112 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderMan - + Could not reset folder state Não foi possível redefinir o estado da pasta - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Uma velha revista de sincronização '%1' foi encontrada, mas não pôde ser removida. Por favor, certifique-se de que nenhuma aplicação está a usá-la. - + (backup) (backup) - + (backup %1) (backup %1) - + Undefined State. Estado indefinido. - + Waiting to start syncing. À espera do início da sincronização. - + Preparing for sync. Preparando para sincronização. - + Sync is running. A sincronização está ocorrendo. - + Last Sync was successful. A última sincronização foi feita com sucesso. - + Last Sync was successful, but with warnings on individual files. A última sincronização foi executada com sucesso, mas com advertências em arquivos individuais. - + Setup Error. Erro de Configuração. - + User Abort. Usuário Abortou. - + Sync is paused. Sincronização pausada. - + %1 (Sync is paused) %1 (Pausa na Sincronização) - + No valid folder selected! Nenhuma pasta válida selecionada! - + The selected path is not a folder! O caminho selecionado não é uma pasta! - + You have no permission to write to the selected folder! Voce não tem permissão para escrita na pasta selecionada! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! A pasta local %1 contém um link simbólico. O destino do link contém uma pasta já sincronizados. Por favor, escolha uma outra! - + There is already a sync from the server to this local folder. Please pick another local folder! Já existe uma sincronização do servidor para esta pasta local. Por favor, escolha uma outra pasta local! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! A pasta local %1 já contém uma pasta utilizada numa ligação de sincronização de pasta. Por favor, escolha outra! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! A pasta local %1 já está contida em uma pasta usada em uma conexão de sincronização de pastas. Por favor, escolha outra! - + 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! A pasta local %1 é um link simbólico. O destino do link já está contido em uma pasta usada em uma conexão de sincronização de pastas. Por favor, escolha outra! @@ -923,17 +944,17 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderStatusDelegate - + Add Folder Sync Connection Adicionar Pasta a Sincronizar - + Synchronizing with local folder Sincronizando com a pasta local - + File Arquivo @@ -941,134 +962,144 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderStatusModel - + You need to be connected to add a folder Você precisa estar conectado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique nesse botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro enquanto carregava a lista de pastas do servidor. - + Signed out Desconectado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Adição de pasta está desativado porque você já está sincronizando todos os seus arquivos. Se você deseja sincronizar várias pastas, por favor, remova a pasta raiz configurada atualmente. - + Fetching folder list from server... Obtendo lista de pastas do servidor... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Verificando alterações em '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) baixar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restando, %1 de %2, arquivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de%2, arquivo %3 de %4 - + file %1 of %2 arquivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n outra pasta...Esperando por %n outras pastas... - + Preparing to sync... Preparando para sincronizar... @@ -1076,12 +1107,12 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderWizard - + Add Folder Sync Connection Adicionar Conexão de Sincronização de pasta - + Add Sync Connection Adicionar Conexão de Sincronização @@ -1094,7 +1125,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Clique para selecionar uma pasta local para sincronização. - + Enter the path to the local folder. Entre com o caminha para a pasta local. @@ -1117,42 +1148,42 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Entre com o nome da nova pasta a ser criada abaixo '%1': - + Folder was successfully created on %1. Pasta foi criada com sucesso em %1. - + Authentication failed accessing %1 Falha na autenticação acessando %1 - + Failed to create the folder on %1. Please check manually. Falha ao criar a pasta em %1. Por favor, verifique manualmente. - + Failed to list a folder. Error: %1 Falha ao listar uma pasta. Erro: %1 - + Choose this to sync the entire account Escolha esta opção para sincronizar a conta inteira - + This folder is already being synced. Esta pasta já está sendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Você já está sincronizando <i>%1</i>, que é uma pasta mãe de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Você já está sincronizando todos os seus arquivos. Sincronizar outra pasta <b>não</ b> é possível. Se você deseja sincronizar várias pastas, por favor, remova a sincronização configurada atualmente para a pasta raiz. @@ -1173,22 +1204,22 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Nenhuma E-Tag recebida do servidor, verifique Proxy / gateway - + We received a different E-Tag for resuming. Retrying next time. Recebemos um e-Tag diferente para resumir. Tente uma próxima vez. - + Server returned wrong content-range O servidor retornou erro numa série-de-conteúdo - + Connection Timeout Conexão Finalizada @@ -1211,23 +1242,23 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Para Bandeja do Sistema - + Advanced Avançado - + Ask for confirmation before synchronizing folders larger than Solicite confirmação antes de sincronizar pastas maiores que - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Pedir confirmação antes de sincronizar os armazenamentos externos @@ -1247,28 +1278,28 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Usar Icones &Monocromáticos - + Edit &Ignored Files Editar Arquivos &Ignorados - + S&how crash reporter M&ostrar relatório de acidente - - + + About Sobre - + Updates Atualizações - + &Restart && Update &Reiniciar && Atualização @@ -1277,22 +1308,22 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor entre uma senha %1:<br><br>Usuário: %2<br>Conta: %3<br> - + Reading from keychain failed with error: '%1' Leitura de chaveiro falhou com o erro: '%1' - + Enter Password Entrar Senha - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma senha de aplicativo na interface da web. @@ -1374,55 +1405,125 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um Esta entrada é fornecida pelo sistema em '%1' e não pode ser modificado aqui. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Saída de Log - + &Search: &Search: - + &Find &Localizar - + + &Capture debug messages + + + + Clear Limpar - + Clear the log display. Limpar exibição de log. - + S&ave &Salvar - + Save the log file to a file on disk for debugging. Salvar arquivo de log para um arquivo no disco para depuração. - + Save log file Salvar arquivo de log - + Error Erro - + Could not write to log file %1 Não foi possível escrever no arquivo de log %1 @@ -1430,24 +1531,16 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Arquivo '%1'<br/>não pode ser aberto para escrita.<br/><br/>A saída de log <b>não</b> pode ser salva!</nobr> - - OCC::MoveJob - - - Connection timed out - Conexão expirou - - OCC::NSISUpdater @@ -1559,27 +1652,27 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um Limite automático - + Hostname of proxy server Hostname do servidor proxy - + Username for proxy server Nome de usuário para servidor proxy - + Password for proxy server Senha para servidor proxy - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1592,78 +1685,111 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::NotificationWidget - + Created at %1 Criada em %1 - + Closing in a few seconds... Fechando em poucos segundos... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' requisição %1 falhou em %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' selecionada em %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Nova Atualização %1 Pronta - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Uma nova atualização para %1 está para ser instalada. O atualizador pode solicitar por privilégios adicionais durante o processo. - + Downloading version %1. Please wait... Baixando a versão %1. Por favor aguarde... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Não foi possível baixar atualização. Por favor, clique <a href='%1'>aqui</ a> para baixar a atualização manualmente. - + Could not check for new updates. Não foi possível verificar a existência de novas atualizações. - + %1 version %2 available. Restart application to start the update. %1 versão %2 disponível. Reinicie a aplicação para iniciar a atualização. - + New %1 version %2 available. Please use the system's update tool to install it. Nova %1 versão %2 disponível. Por favor, use a ferramenta de atualização do sistema para instalar. - + Checking update server... Verificando servidor de atualização... - + Update status is unknown: Did not check for new updates. Status de atualização é desconhecida: Não verifique para novas atualizações. - + No updates available. Your installation is at the latest version. Não há atualizações disponíveis. Sua instalação é a versão mais recente. @@ -1676,43 +1802,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Conectar a %1 - + Setup local folder options Configurar opções de pastas locais - + Connect... Conectar... - + %1 folder '%2' is synced to local folder '%3' %1 Pasta '%2' está sincronizada com pasta local '%3' - + Sync the folder '%1' Sincronizar a pasta '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Aviso:</strong> A pasta local não está vazia. Escolha uma resolução!</small></p> - + Local Sync Folder Sincronizar Pasta Local - - + + (%1) (%1) @@ -1745,7 +1871,7 @@ for additional privileges during the process. Configurar certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Falha na conexão com o endereço do servidor seguro <em>%1</em>. Como você deseja prosseguir?</p></body></html> @@ -1753,46 +1879,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &Email - + Connect to %1 Conectar a %1 - + Enter user credentials Entre com as credenciais do usuário + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Conectar a %1 - + Setup %1 server Configurar servidor %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Esta URL não é segura, pois não é criptografada. Não é aconselhável usá-lo. - + This url is secure. You can use it. Esta url é segura. Você pode usá-la. - + &Next > &Póximo > @@ -1800,22 +1939,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado com sucesso a %1: %2 versão %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falha ao conectar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. O tempo expirou ao tentar contactar %1 e %2. - + Trying to connect to %1 at %2... Tentando conectar a %1 em %2... @@ -1835,109 +1974,109 @@ It is not advisable to use it. Acesso proibido pelo servidor. Para verificar se você tem acesso adequado, <a href="%1">clique aqui</a> para acessar o serviço com o seu navegador. - + Invalid URL URL inválida - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Pasta local de sincronização %1 já existe, configurando para sincronização. <br/><br/> - + Creating local sync folder %1... Criação de pasta de sincronização local %1... - + ok ok - + failed. falhou. - + Could not create local folder %1 Não foi possível criar pasta local %1 - + No remote folder specified! Nenhuma pasta remota foi especificada! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 criar pasta no ownCloud: %1 - + Remote folder %1 created successfully. Pasta remota %1 criada com sucesso. - + The remote folder %1 already exists. Connecting it for syncing. Pasta remota %1 já existe. Conectando para sincronizar. - + The folder creation resulted in HTTP error code %1 A criação da pasta resultou em um erro do código HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou porque as credenciais fornecidas estão erradas!<br/>Por favor, volte e verifique suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação remota de pasta falhou provavelmente as causas da falha na criação da pasta remota são credenciais erradas</font><br/>Volte e verifique suas credenciais, por favor.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Falha na criação da pasta remota %1 com erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Uma conexão de sincronização de %1 para o diretório remoto %2 foi realizada. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Conexão à %1 não foi estabelecida. Por favor, verifique novamente. - + Folder rename failed Falha no nome da pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup da pasta porque a pasta ou um arquivo que está nesta pasta está aberto em outro programa. Por favor, feche a pasta ou arquivo e clique tentar novamente ou cancelar a operação. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -1945,12 +2084,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard Assistente de Conexões do %1 - + Skip folders configuration Pular etapa de configuração de pastas @@ -1958,33 +2097,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Tudo configurado! - + Open Local Folder Abrir Pasta Local - + Open %1 in Browser Abrir %1 no Navegador - - OCC::PUTFileJob - - - Connection Timeout - Conexão Finalizada - - OCC::PollJob - + Invalid JSON reply from the poll URL Resposta JSON inválida a partir do conjunto de URL @@ -1992,7 +2123,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2000,47 +2131,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! O arquivo %1 não pode ser baixado devido a um confronto local no nome do arquivo! - - The download would reduce free disk space below %1 - O download reduzirá o espaço livre em disco abaixo de %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 O espaço livre no disco é inferior a %1 - + File was deleted from server O arquivo foi eliminado do servidor - + The file could not be downloaded completely. O arquivo não pode ser baixado completamente. - + The downloaded file is empty despite the server announced it should have been %1. O arquivo baixado está vazio apesar do servidor anunciou que deveria ter %1. - + File %1 cannot be saved because of a local file name clash! O arquivo %1 não pode ser salvo devido a um confronto com um nome de arquivo local! - + File has changed since discovery Arquivo foi alterado desde a descoberta - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2048,17 +2179,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falha na Restauração: %1 - - Continue blacklisting: - Continuar na lista negra: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Um arquivo ou pasta foi removido de um compartilhamento de somente leitura, mas a restauração falhou: %1 @@ -2066,22 +2192,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 não foi possível apagar o arquivo %1, erro: %2 - + Attention, possible case sensitivity clash with %1 Atenção, possível caso de sensibilidade de minúscula/maiúscula, choque com %1 - + could not create folder %1 não foi possível criar a pasta %1 - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2089,17 +2215,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erro removendo '%1': %2; - + Could not remove folder '%1' Não foi possível remover a pasta '%1' - + Could not remove %1 because of a local file name clash Não foi possível remover %1 por causa de um choque de nomes de arquivos locais @@ -2107,13 +2233,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash O arquivo %1 não pode ser renomeado para %2 por causa de um choque com nome de arquivo local - - + + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2121,12 +2247,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. O arquivo foi removido de um compartilhamento somente de leitura. Ele foi restaurado. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Código HTTP retornado errado pelo servidor. 204 esperado, mas recebeu "%1 %2". @@ -2134,12 +2260,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código HTTP retornado errado pelo servidor. 201 esperado, mas recebeu "%1 %2". - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2147,28 +2273,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Esta pasta não pode ser renomeada. Ela será renomeado de volta ao seu nome original. - + This folder must not be renamed. Please name it back to Shared. Esta pasta não pode ser renomeada. Por favor, nomeie-a de volta para Compartilhada. - + The file was renamed but is part of a read only share. The original file was restored. O arquivo foi renomeado mas faz parte de compartilhamento só de leitura. O arquivo original foi restaurado. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Código HTTP retornado errado pelo servidor. 201 esperado, mas recebeu "%1 %2". - - + + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2176,27 +2302,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists O arquivo %1 não pode ser enviado porque um outro arquivo com o mesmo nome, diferenciando apenas letras maiúsculas e minúsculas, existe - + File Removed Arquivo Removido - + Local file changed during syncing. It will be resumed. Arquivo local alterado durante a sincronização. Ele será retomado. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2204,32 +2335,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forçando cancelamento do trabalho em redefinição de conexão HTTP com o Qt < 5.4.2. - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + Unexpected return code from server (%1) Código de retorno inesperado do servidor (%1) - + Missing File ID from server Falta ID do arquivo do servidor - + Missing ETag from server Falta ETag do servidor @@ -2237,32 +2368,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Forçando cancelamento do trabalho em redefinição de conexão HTTP com o Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O arquivo foi editado localmente mas faz parte de compartilhamento só de leitura. Ele foi restaurado mas sua edição está em conflito com o arquivo. - + Poll URL missing Faltando conjunto de URL - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + The server did not acknowledge the last chunk. (No e-tag was present) O servidor não reconheceu o último pedaço. (Nenhuma e-tag estava presente) @@ -2280,42 +2411,42 @@ It is not advisable to use it. RótuloTexto - + Time Tempo - + File Arquivo - + Folder Pasta - + Action Ação - + Size Tamanho - + Local sync protocol Protocolo de sincronização local - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de atividades para a área de transferência. @@ -2356,7 +2487,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Escolher o que Sincronizar @@ -2364,33 +2495,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Carregando... - + Deselect remote folders you do not wish to synchronize. Desmarque as pastas remotas que não deseja sincronizar. - + Name Nome - + Size Tamanho - - + + No subfolders currently on the server. Nenhuma sub-pasta atualmente no servidor. - + An error occurred while loading the list of sub folders. Ocorreu um erro enquanto carregava a lista de subpastas. @@ -2403,22 +2534,22 @@ It is not advisable to use it. Configurações - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2426,27 +2557,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2474,35 +2605,45 @@ It is not advisable to use it. Caminho ownCloud: - + %1 Sharing Compartilhamento %1 - + %1 %1 - + Folder: %2 Pasta: %2 - + The server does not allow sharing O servidor não permitir o compartilhamento - + Retrieving maximum possible sharing permissions from server... Recuperando máximo possível de permissões de compartilhamento do servidor... - + The file can not be shared because it was shared without sharing permission. O arquivo não pode ser partilhado, pois foi compartilhado sem permissão de compartilhamento. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2512,92 +2653,126 @@ It is not advisable to use it. Compartilhar NewDocument.odt - - Share link - Compartilhar link - - - + TextLabel RótuloTexto - + Set &password Configurar &senha - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Configurar data de &expiração - + Set password Configurar senha - - &Mail link - &Mail link + + Link properties: + - Copy &link - Copiar &link + Show file listing + - + Allow editing Permitir edição - + Anyone with the link has access to the file/folder Qualquer pessoa com o link tem acesso ao arquivo/pasta - + + P&assword protect S&enha de proteção - + Password Protected Protegido por Senha - + The file can not be shared because it was shared without sharing permission. O arquivo não pode ser partilhado, pois foi compartilhado sem permissão de compartilhamento. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Comp&artilhamento público requer uma senha - + Please Set Password Por favor, Definir senha - - - Could not open email client - Não foi possível abrir o cliente de e-mail - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Ocorreu um erro ao iniciar o cliente de e-mail para criar uma nova mensagem. Talvez nenhum cliente de e-mail padrão esteja configurado? - - - - - &Share link - Link de &Compartilhamento - OCC::ShareUserGroupWidget @@ -2607,68 +2782,98 @@ It is not advisable to use it. Compartilhar NewDocument.odt - + Share with users or groups ... Compartilhar com usuários ou grupos ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Sem resultados para '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulário + - + TextLabel - TextLabel + - + can edit - pode editar + - + can share - pode compartilhar + - + ... - ... + - + create - criar + - + change - mudança + - + delete - excluir + OCC::ShibbolethCredentials - + Login Error Erro de Login - + You must sign in as user %1 Você deve entrar como usuário %1 @@ -2676,22 +2881,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autenticar - + SSL Chipher Debug View Ver depuração da criptografia SSL - + Reauthentication required Reautenticação necessária - + Your session has expired. You need to re-login to continue to use the client. Sua sessão expirou. É preciso re-login para continuar a usar o cliente. @@ -2699,26 +2904,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartilhar com %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3> Detalhes do Certificado </h3> - + Common Name (CN): Nome Comum (CN): - + Subject Alternative Names: Assunto Nomes Alternativos: @@ -2803,7 +3028,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. Esta conexão é criptografada usando %1 bit %2. @@ -2820,7 +3045,7 @@ It is not advisable to use it. Informações do certificado: - + This connection is NOT secure as it is not encrypted. Esta conexão não é segura, uma vez que não é criptografada. @@ -2840,67 +3065,67 @@ It is not advisable to use it. Confiar neste certificado mesmo assim - + Untrusted Certificate Certificado Não Confiável - + Cannot connect securely to <i>%1</i>: Não é possível conectar com segurança a <i>%1</i>: - + with Certificate %1 com Certificado %1 - + &lt;not specified&gt; &lt;não especificado&gt; - - + + Organization: %1 Organização: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint/Identificação (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint/Identificação (SHA1): <tt>%1</tt> - + Effective Date: %1 Data efetiva: %1 - + Expiration Date: %1 Data de Vencimento: %1 - + Issuer: %1 Emissor: %1 @@ -2908,285 +3133,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Sucesso. - + CSync failed to load the journal file. The journal file is corrupted. CSync não conseguiu carregar o arquivo journal. O arquivo journal está corrompido. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>O plugin %1 para csync não foi carregado.<br/>Por favor verifique a instalação!</p> - + CSync got an error while processing internal trees. Erro do CSync enquanto processava árvores internas. - - CSync failed to reserve memory. - CSync falhou ao reservar memória. - - - + CSync fatal parameter error. Erro fatal de parametro do CSync. - + CSync processing step update failed. Processamento da atualização do CSync falhou. - + CSync processing step reconcile failed. Processamento da conciliação do CSync falhou. - + CSync could not authenticate at the proxy. Csync não conseguiu autenticação no proxy. - + CSync failed to lookup proxy or server. CSync falhou ao localizar o proxy ou servidor. - + CSync failed to authenticate at the %1 server. CSync falhou ao autenticar no servidor %1. - + CSync failed to connect to the network. CSync falhou ao conectar à rede. - + A network connection timeout happened. Ocorreu uma desconexão de rede. - + A HTTP transmission error happened. Houve um erro na transmissão HTTP. - + The mounted folder is temporarily not available on the server A pasta montada não está temporariamente disponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler pasta. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Arquivo/pasta ignorado porque porque está escondido. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Sem espaço disponível no servidor %1. - + CSync unspecified error. Erro não especificado no CSync. - + Aborted by the user Abortado pelo usuário - + CSync failed to access CSync não conseguiu o acesso - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falhou ao carregar ou criar o arquivo de diário. Certifique-se de ter permissão de ler e escrever na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão de não manipulação negada. - + CSync tried to create a folder that already exists. CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden Acesso proibido - + An internal error number %1 occurred. Um erro interno de número %1 ocorreu. - - The item is not synced because of previous errors: %1 - O item não está sincronizado devido a erros anteriores: %1 - - - + Symbolic links are not supported in syncing. Linques simbólicos não são suportados em sincronização. - + File is listed on the ignore list. O arquivo está listado na lista de ignorados. - + File names ending with a period are not supported on this file system. Os nomes de arquivos que terminam com um ponto não são suportados neste sistema de arquivos. - + File names containing the character '%1' are not supported on this file system. Os nomes de arquivos que contêm o caractere '%1' não são suportados neste sistema de arquivos. - + The file name is a reserved name on this file system. O nome do arquivo é um nome reservado neste sistema de arquivos. - + Filename contains trailing spaces. O nome do arquivo contém espaços deixados para trás. - + Filename is too long. O nome do arquivo é muito longo. - + Stat failed. Stat falhou. - + Filename encoding is not valid A codificação do nome do arquivo não é válida - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renomear "%1" - - Unable to initialize a sync journal. - Impossibilitado de iniciar a sincronização. - - - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte @@ -3202,7 +3442,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3210,17 +3450,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versão %1. Para mais informações por favor visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Direitos autorais ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado sobre a GNU General Public License (GPL) Versão 2.0.<br/>%2 e o %2 logo são marcas registradas de %1 nos Estados Unidos, outros países ou ambos.</p> @@ -3228,17 +3468,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho da soma de verificação está incorreto. - + The checksum header contained an unknown checksum type '%1' A cabeçalho da soma de verificação continha um tipo de soma de verificação desconhecido '%1' - + The downloaded file does not match the checksum, it will be resumed. O arquivo baixado não coincide com o checksum, ele será retomado. @@ -3246,207 +3486,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Favor conectar - + Folder %1: %2 Pasta %1: %2 - + No sync folders configured. Pastas de sincronização não configuradas. - + There are no sync folders configured. Não há pastas de sincronização configuradas. - + Open in browser Abrir no navegador - - - + + + Log in... Entrar... - - - + + + Log out Sair - + Recent Changes Alterações Recentes - + Checking for changes in '%1' Verificando por alterações em '%1' - + Managed Folders: Pastas Gerenciadas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Status desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version Versão do Servidor Não Suportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. O servidor da conta %1 está executando uma versão %2 antiga e não suportada. Usar esse cliente junto com versões não suportadas e não testadas é potencialmente perigoso. Prossiga por conta própria. - + Disconnected from accounts: Desconectado de contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled A sincronização de conta está desativada - + Unpause all folders Retomar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Retomar toda a sincronização - + Unpause synchronization Retomar sincronização - + Pause all synchronization Dar uma pausa em toda a sincronização - + Pause synchronization Dar uma pausa na sincronização - + Log out of all accounts Desconectar todas as contas - + Log in to all accounts... Conectar todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrar agora - + No items synced recently Não há itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (%2 faltando) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Até a data @@ -3454,7 +3694,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Versão %2. Para mais informações visite <a href="%3">https://%4</a></p><p>Para saber sobre problemas e ajuda, por favor visite: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>Por Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, e outros.</small></p><p>Direitos Autorais ownCloud GmbH</p><p>Licenciado sob a GNU General Public License (GPL) Versão 2.0<br/>ownCloud e o Logo ownCloud são marcas registradas da ownCloud GmbH nos United States, e outros países, ou ambos.</p> @@ -3557,78 +3797,42 @@ It is not advisable to use it. &Senha + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulário - - Server &address: - &Endereço do servidor: - - - - - TextLabel TextLabel - - - Use &secure connection - Usar conexão &segura - - - - CheckBox - Caixa de opção - - - - &Username: - Nome de &Usuário: - - - - Enter the ownCloud username. - Digite o usuário ownCloud. - - - - &Password: - &Senha: - - - - Enter the ownCloud password. - Digite a senha ownCloud. - - - - Do not allow the local storage of the password. - Não permitir o armazenamento local de senha. - - - - &Do not store password on local machine - &Não armazene senhas na máquina local - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Digite a URL do ownCloud que você deseja se conectar (sem http ou https). - Ser&ver Address @@ -3672,7 +3876,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3680,42 +3884,42 @@ It is not advisable to use it. QObject - + in the future no futuro - + %n day(s) ago %n dia(s) atrás%n dia(s) atrás - + %n hour(s) ago %n hora(s) atrás%n hora(s) atrás - + now agora - + Less than a minute ago A menos de um minuto atrás - + %n minute(s) ago %n minuto(s) atrás%n minuto(s) atrás - + Some time ago Algum tempo atrás - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3724,57 +3928,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n mês(es) - + %n day(s) %n day%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 @@ -3795,102 +3999,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir de revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> - - - built with %1 - Construído com %1 - progress - + Downloaded Baixado - + Uploaded Enviado - + Server version downloaded, copied changed local file into conflict file Versão do servidor baixada, copiada a modificação do local do arquivo dentro do arquivo de conflito - + Deleted Excluído - + Moved to %1 Movido para %1 - + Ignored Ignorado - + Filesystem access error Erro ao acesso do sistema de arquivos - + Error Erro - + Updated local metadata Metadado local enviado - - + + Unknown Desconhecido - + downloading baixando - + uploading enviando - + deleting eliminando - + moving movendo - + ignoring ignorando + - error erro - + updating local metadata Atualizando metadados locais @@ -3898,54 +4097,77 @@ It is not advisable to use it. theme - + Status undefined Status indefinido - + Waiting to start sync Aguardando para iniciar sincronização - + Sync is running Sincronização em andamento - + Sync Success Sucesso na Sincronização - + Sync Success, some files were ignored. Sincronizado com Sucesso, alguns arquivos foram ignorados. - + Sync Error Erro de sincronização - + Setup Error Erro na Configuração - + Preparing to sync Preparando para sincronização - + Aborting... Abortando... - + Sync is paused Sincronização em pausa + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_ru.ts b/translations/client_ru.ts index dff0342c9..4f8f4711a 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Конечный файл имеет некорректный размер или время изменения @@ -81,6 +81,24 @@ TextLabel + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Отмена @@ -136,188 +154,204 @@ Подключен к <server> как <user> - + No account configured. Учётная запись не настроена. - + Add new Добавить новую - + Remove Удалить - + Account Уч.запись - + Choose what to sync Выбрать объекты для синхронизации - + Force sync now Принудительно синхронизовать сейчас - + Restart sync Перезапустить синхронизацию - + Remove folder sync connection Удалить подключение синхронизации каталога - + Folder creation failed Ошибка создания каталога - + <p>Could not create local folder <i>%1</i>. <p>Не удалось создать локальный каталог <i>%1</i>. - + Confirm Folder Sync Connection Removal Подтвердите удаление подключения синхронизации каталога - + Remove Folder Sync Connection Удалить подключение синхронизации каталога - + Sync Running Синхронизация запущена - + The syncing operation is running.<br/>Do you want to terminate it? Выполняется синхронизация.<br/>Вы хотите её остановить? - + %1 in use %1 используется - + %1 as <i>%2</i> %1 как <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Сервер версии %1 устарел и не поддерживается! Продолжайте на свой страх и риск. - + Connected to %1. Соединен с %1. - + Server %1 is temporarily unavailable. Сервер %1 временно недоступен. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Успешно вышли из %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Нет соединения с %1 в %2. - + Log in Войти - + There are folders that were not synchronized because they are too big: Есть каталоги, которые не были синхронизированы, так как они слишком большие: - + There are folders that were not synchronized because they are external storages: Есть каталоги, которые не были синхронизированы, так как они являются внешними хранилищами: - + There are folders that were not synchronized because they are too big or external storages: Есть каталоги, которые не были синхронизированы, так как они слишком велики или являются внешними хранилищами: - + Confirm Account Removal Подтверждение удаления учетной записи - + <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> <p>Вы действительно желаете удалить подключение к учетной записи <i>%1</i>?</p><p><b>Примечание:</b> Это действие <b>НЕ</b> удалит ваши файлы.</p> - + Remove connection Удалить подключение - + + Open folder Открыть папку - - + + Log out Выйти - + Resume sync Возобновить синхронизацию - + Pause sync Приостановить синхронизацию - + <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> <p>Вы действительно желаете остановить синхронизацию папки <i>%1</i>?</p><p><b>Примечание:</b> Это действие <b>НЕ</b> удалит ваши файлы.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) из %2 используется. Некоторые папки, включая сетевые или общие, могут иметь свои собственные ограничения. - + %1 of %2 in use %1 из %2 используется - + Currently there is no storage usage information available. В данный момент информация о заполненности хранилища недоступна. - + No %1 connection configured. Нет настроенного подключения %1. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Вышли из аккаунта - + Disconnected Отключено - + Connected Подключено - + Service unavailable Сервис недоступен - + + Maintenance mode + + + + Network error Ошибка сети - + Configuration error Ошибка конфигурации - + + Asking Credentials + + + + Unknown account state Неизвестное состояние учетной записи @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Действия Сервера - + Sync Protocol Протокол синхронизации - - List of ignored or erroneous files - Список игнорируемых или ошибочных файлов - - - - Copy - Копировать - - - - Copy the activity list to the clipboard. - Скопировать журнал синхронизации в буфер обмена. - - - + Not Synced Не синхронизировано - + Not Synced (%1) %1 is the number of not synced files. Не синхронизировано (%1) - + The server activity list has been copied to the clipboard. Список активности сервера скопирован в буфер обмена. - + The sync activity list has been copied to the clipboard. Список активности синхронизации скопирован в буфер обмена. - + The list of unsynced items has been copied to the clipboard. Список несинхронизированных элементов скопирован в буфер обмена. - + Copied to clipboard Скопировано в буфер обмена @@ -448,47 +477,47 @@ TextLabel - + Server Activities Действия Сервера - + Copy Копировать - + Copy the activity list to the clipboard. Скопировать журнал синхронизации в буфер обмена. - + Action Required: Notifications Требуется действие: уведомления - + <br/>Account %1 does not have activities enabled. <br/>У учетной записи %1 не включены события. - + You received %n new notification(s) from %2. Вы получили %n новое уведомление от %2.Вы получили %n новых уведомления от %2.Вы получили %n новых уведомлений от %2.Вы получили %n новых уведомлений от %2. - + You received %n new notification(s) from %1 and %2. Вы получили %n новое уведомление от %1 и %2.Вы получили %n новых уведомления от %1 и %2.Вы получили %n новых уведомлений от %1 и %2.Вы получили %n новых уведомлений от %1 и %2. - + You received new notifications from %1, %2 and other accounts. Для Вас получено %n новых уведомлений из %1, %2 и других уч.записей. - + %1 Notifications - Action Required %1 уведомлений - требуются действия. @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Ошибка при доступе к файлу конфигурации - + There was an error while accessing the configuration file at %1. При обращении к файлу конфигурации %1 произошла ошибка. - + Quit ownCloud Выйти из ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Учётная запись OwnCloud не настроена - + The configured server for this client is too old Настроенный сервер слишком стар для этого клиента - + Please update to the latest server and restart the client. Обновите сервер до последней версии и перезапустите клиент. - + Authentication error: Either username or password are wrong. Ошибка авторизации: Имя пользователя или пароль не верны. - + timeout тайм-аут - + The provided credentials are not correct Введённые учётные данные не верны - - OCC::DeleteJob - - - Connection timed out - Время ожидания соединения превышено - - OCC::DiscoveryMainThread - + Aborted by the user Прервано пользов @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. Локальный каталог %1 не существует. - + %1 should be a folder but is not. %1 должен быть папкой, но ей не является. - + %1 is not readable. %1 не может быть прочитан. - + %1 has been removed. %1 names a file. '%1' был удалён. - + %1 has been downloaded. %1 names a file. %1 был загружен. - + %1 has been updated. %1 names a file. %1 был обновлён. - + %1 has been renamed to %2. %1 and %2 name files. %1 был переименован в %2. - + %1 has been moved to %2. %1 был перемещён в %2. - + %1 and %n other file(s) have been removed. %1 и ещё %n другой файл был удалён.%1 и ещё %n других файла было удалено.%1 и ещё %n других файлов были удалены.%1 и ещё %n других файлов были удалены. - + %1 and %n other file(s) have been downloaded. %1 и ещё %n другой файл были скачаны.%1 и ещё %n других файла были скачаны.%1 и ещё %n других файлов были скачаны.%1 и ещё %n других файлов были скачаны. - + %1 and %n other file(s) have been updated. %1 и ещё %n другой файл были обновлены.%1 и ещё %n других файла были обновлены.%1 и ещё %n других файлов были обновлены.%1 и ещё %n других файлов были обновлены. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 был переименован в %2, и ещё %n другой файл был переименован.%1 был переименован в %2, и ещё %n других файла были переименованы.%1 был переименован в %2, и ещё %n других файлов были переименованы.%1 был переименован в %2, и ещё %n других файлов были переименованы. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 был перемещён в %2, и ещё %n другой файл был перемещён.%1 был перемещён в %2, и ещё %n других файла были перемещены.%1 был перемещён в %2, и ещё %n других файла были перемещены.%1 был перемещён в %2, и ещё %n других файла были перемещены. - + %1 has and %n other file(s) have sync conflicts. У %1 и ещё у %n другого файла есть конфликты синхронизации.У %1 и ещё у %n других файлов есть конфликты синхронизации.У %1 и ещё у %n других файлов есть конфликты синхронизации.У %1 и ещё у %n других файлов есть конфликты синхронизации. - + %1 has a sync conflict. Please check the conflict file! У %1 есть конфликт синхронизации. Пожалуйста, проверьте конфликтный файл! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 и ещё %n другой файл не удалось синхронизировать из-за ошибок. Подробности смотрите в журнале.%1 и ещё %n других файла не удалось синхронизировать из-за ошибок. Подробности смотрите в журнале.%1 и ещё %n других файлов не удалось синхронизировать из-за ошибок. Подробности смотрите в журнале.%1 и ещё %n других файлов не удалось синхронизировать из-за ошибок. Подробности смотрите в журнале. - + %1 could not be synced due to an error. See the log for details. %1 не может быть синхронизирован из-за ошибки. Подробности смотрите в журнале. - + Sync Activity Журнал синхронизации - + Could not read system exclude file Невозможно прочесть системный файл исключений - + A new folder larger than %1 MB has been added: %2. Был добавлен новый каталог размером более %1 МБ: %2. - + A folder from an external storage has been added. Добавлен каталог из внешнего хранилища. - + Please go in the settings to select it if you wish to download it. Пожалуйста, перейдите в настройки, чтобы выбрать его, если вы хотите его скачать. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Если вы решили удалить файлы, они станут вам недоступны, крмое случая, когда вы сам владелец. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce Если это произошло случайно и вы решите сохранить файлы, они будут перезакачаны с сервера. - + Remove All Files? Удалить все файлы? - + Remove all files Удалить все файлы - + Keep files Сохранить файлы - + This sync would reset the files to an earlier 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? Эта синхронизация собирается сбросить файлы в катлоге '%1' в более ранее состояние. Такое может случиться, если на сервере восстановлена резервная копия. Если продолжать синхронизацию как обычно, то ваши файлы будут перетёрты более старыми версиями. Хотите сохранить ваши локальные свежие файлы в качестве конфликтных? - + Backup detected Обнаружена резервная копия - + Normal Synchronisation Обычная синхронизация - + Keep Local Files as Conflict Сохранить локальные файлы как конфликтующие @@ -810,112 +831,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Невозможно сбросить состояние каталога - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Найден старый журнал синхронизации '%1', и он не может быть удалён. Убедитесь что он не открыт в другом приложении. - + (backup) (резервная копия) - + (backup %1) (резервная копия %1) - + Undefined State. Неопределенное состояние. - + Waiting to start syncing. Ожидание запуска синхронизации. - + Preparing for sync. Подготовка к синхронизации. - + Sync is running. Идет синхронизация. - + Last Sync was successful. Последняя синхронизация прошла успешно. - + Last Sync was successful, but with warnings on individual files. Последняя синхронизация прошла успешно, но были предупреждения для некоторых файлов. - + Setup Error. Ошибка установки. - + User Abort. Отмена пользователем. - + Sync is paused. Синхронизация приостановлена. - + %1 (Sync is paused) %! (синхронизация приостановлена) - + No valid folder selected! Не выбран валидный каталог! - + The selected path is not a folder! Выбранный путь не является каталогом! - + You have no permission to write to the selected folder! У вас недостаточно прав для записи в выбранный каталог! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Локальный каталог %1 содержит символьную ссылку. Место, на которое указывает ссылка, уже содержит засинхронизированный каталог. Пожалуйста, выберите другой! - + There is already a sync from the server to this local folder. Please pick another local folder! Уже есть синхронизация с сервера в этот локальный каталог. Пожалуйста, выберите другой локальный каталог! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Локальная директория %1 уже содержит папку, которая используется для синхронизации. Пожалуйста выберите другую! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Локальная директория %1 уже содержит директорию, которая используется для синхронизации. Пожалуйста выберите другую! - + 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! Локальная директория %1 является символьной ссылкой. Эта ссылка указывает на путь, находящийся внутри директории, уже используемой для синхронизации. Пожалуйста укажите другую! @@ -923,17 +944,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Добавить папку для синхронизации - + Synchronizing with local folder Синхронизация с локальным каталогом - + File Файл @@ -941,134 +962,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Необходимо подключиться, чтобы добавить каталог - + Click this button to add a folder to synchronize. Нажмите на эту кнопку для добавления каталога к синхронизации. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ошибка загрузки списка папок с сервера. - + Signed out Вышли из аккаунта - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Добавление папки отключена, потому что вы уже синхронизированы все файлы. Если вы хотите синхронизировать несколько папок, пожалуйста, удалите текущую корневую папку. - + Fetching folder list from server... Извлечение списка папок с сервера... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Проверка изменений в '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизация %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) скачивание %1/с - + u2193 %1/s u2193 %1/сjavascript:; - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) загрузка %1/с - + u2191 %1/s u2191 %1/с - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 из %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Осталось %5, %1 из %2, файл %3 из %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 из %2, файл %3 из %4 - + file %1 of %2 файл %1 из %2 - + Waiting... Ожидание... - + Waiting for %n other folder(s)... Ожидание %n директории...Ожидание %n директорий...Ожидание %n директорий...Ожидание %n директорий... - + Preparing to sync... Подготовка к синхронизации... @@ -1076,12 +1107,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Добавить папку для синхронизации - + Add Sync Connection Добавить подключение для синхронизации @@ -1094,7 +1125,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Кликните, чтобы выбрать локальный каталог для синхронизации. - + Enter the path to the local folder. Укажите путь к локальному каталогу. @@ -1117,42 +1148,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Введите имя каталога, который должен быть создан под '%1': - + Folder was successfully created on %1. Каталог успешно создан на %1. - + Authentication failed accessing %1 Ошибка авторизации при доступе к %1 - + Failed to create the folder on %1. Please check manually. Невозможно создать каталог по пути %1. Попробуйте создать его вручную. - + Failed to list a folder. Error: %1 Ошибка просмотра папки. Ошибка: %1 - + Choose this to sync the entire account Нажмите здесь для синхронизации всей учётной записи - + This folder is already being synced. Этот каталог уже выбран для синхронизации. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Каталог <i>%1</i> уже настроен для синхронизации, и он является родительским для каталога <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. В данный момент включена синхронизация всех файлов. Синхронизация другого каталога в этом режиме <b>не</b> поддерживается. Удалите синхронизацию корневого каталога сервера для синхронизации нескольких локальных каталогов. @@ -1173,22 +1204,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway E-Tag от сервера не получен, проверьте настройки прокси/шлюза. - + We received a different E-Tag for resuming. Retrying next time. Мы получили другой E-Tag для возобновления. Повторите попытку позже. - + Server returned wrong content-range Сервер вернул неверный диапазон содержимого - + Connection Timeout Время ожидания подключения истекло @@ -1211,23 +1242,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Для системного Трея - + Advanced Дополнительно - + Ask for confirmation before synchronizing folders larger than Спрашивать подтверждение перед синхронизацией каталогов размером больше чем - + MB Trailing part of "Ask confirmation before syncing folder larger than" МБ - + Ask for confirmation before synchronizing external storages Спрашивать подтверждение перед синхронизацией внешних хранилищ @@ -1247,28 +1278,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Использовать черно-белые иконки - + Edit &Ignored Files Редактировать &Ignored файлы - + S&how crash reporter Показать отчёты об ошибках - - + + About О программе - + Updates Обновления - + &Restart && Update &Перезапуск и обновление @@ -1276,22 +1307,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Пожалуйста введите пароль для %1:<br><br>Пользователь: %2<br>Учётная запись: %3<br> - + Reading from keychain failed with error: '%1' Чтение из брелока завершилось с ошибкой: '%1' - + Enter Password Введите пароль - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Кликните здесь</a> чтобы запросить пароль приложения через веб-интерфейс. @@ -1372,55 +1403,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Эта запись сделана системой в '%1' и не может быть изменена в этом представлении. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Вывод журнала - + &Search: &Поиск: - + &Find &Найти - + + &Capture debug messages + + + + Clear Очистить - + Clear the log display. Очистить журнал. - + S&ave С&охранить - + Save the log file to a file on disk for debugging. Сохранить файл журнала на диск для отладки. - + Save log file Сохранить файл журнала - + Error Ошибка - + Could not write to log file %1 Файл журнала не может быть записан: %1 @@ -1428,24 +1529,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Ошибка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Файл '%1'<br/>не может быть открыт на запись.<br/><br/>Журнал <b>не может</b> быть сохранён!</nobr> - - OCC::MoveJob - - - Connection timed out - Время ожидания соединения превышено - - OCC::NSISUpdater @@ -1557,27 +1650,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Ограничивать автоматически - + Hostname of proxy server Адрес прокси сервера - + Username for proxy server Пользователь прокси-сервера - + Password for proxy server Пароль прокси-сервера - + HTTP(S) proxy HTTP(S)-прокси - + SOCKS5 proxy SOCKS5-прокси @@ -1590,79 +1683,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 Создано %1 - + Closing in a few seconds... Закроется через несколько секунд… - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1: запрос выполнен неудачно в %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' выбрано в %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Доступно обновление %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Новое обновление %1 в процессе установки. Установщик может запросить дополнительные разрешения во время обновления. - + Downloading version %1. Please wait... Загрузка версии %1. Пожалуйста, подождите... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Не удалось загрузить обновление. Для скачивания файлов вручную, нажмите <a href='%1'>здесь</a> - + Could not check for new updates. Не удалось проверить наличие новых обновлений. - + %1 version %2 available. Restart application to start the update. %1 версия %2 доступна. Перезагрузите приложение, чтобы запустить обновление. - + New %1 version %2 available. Please use the system's update tool to install it. Новая %1 версия %2 доступна. Пожалуйста используйте утилиту обновления системы для установки. - + Checking update server... Проверка наличия обновлений на сервере... - + Update status is unknown: Did not check for new updates. Статус обновления неизвестен: Не удалось проверить наличие обновлений. - + No updates available. Your installation is at the latest version. Обновлений в настоящий момент нет. У вас установлена самая последняя версия программы. @@ -1675,43 +1801,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Подключиться к %1 - + Setup local folder options Изменить настройки локальных каталогов - + Connect... Соединение... - + %1 folder '%2' is synced to local folder '%3' %1 каталог '%2' синхронизирован с локальным каталогом '%3' - + Sync the folder '%1' Синхронизация папки '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Внимание:</strong> Локальная папка не пуста. Выберите действие!</small></p> - + Local Sync Folder Локальный каталог синхронизации - - + + (%1) (%1) @@ -1744,7 +1870,7 @@ for additional privileges during the process. Настроить TLS сертификат клиента - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не удалось подключиться к безопасному серверу по адресу <em>%1</em>. Как Вы хотите продолжить?</p></body></html> @@ -1752,47 +1878,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &Почта - + Connect to %1 Подключиться к %1 - + Enter user credentials Ввести учётные данные + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Подключиться к %1 - + Setup %1 server Настроить сервер %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Эта ссылка НЕ безопасна, так как не зашифрована. Мы не рекомендуем её использовать. - + This url is secure. You can use it. Данная ссылка безопасна. Вы можете её использовать. - + &Next > &Далее > @@ -1800,22 +1939,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успешное подключение к %1: %2 версия %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не удалось подключиться к %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Превышено время ожидания соединения к %1 на %2. - + Trying to connect to %1 at %2... Попытка соединиться с %1 на %2... @@ -1835,109 +1974,109 @@ It is not advisable to use it. Доступ запрещён сервером. Чтобы доказать, что у Вас есть права доступа, <a href="%1">нажмите здесь</a> для входа через Ваш браузер. - + Invalid URL Неверная ссылка - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальный каталог синхронизации %1 уже существует, используем его для синхронизации.<br/><br/> - + Creating local sync folder %1... Создание локальной папки синхронизации %1... - + ok ок - + failed. не удалось. - + Could not create local folder %1 Не удалось создать локальный каталог синхронизации %1 - + No remote folder specified! Не указан удалённый каталог! - + Error: %1 Ошибка: %1 - + creating folder on ownCloud: %1 создание каталога на ownCloud: %1 - + Remote folder %1 created successfully. Удалённый каталог %1 успешно создан. - + The remote folder %1 already exists. Connecting it for syncing. Удалённый каталог %1 уже существует. Подключение к нему для синхронизации. - + The folder creation resulted in HTTP error code %1 Создание каталога завершилось с HTTP-ошибкой %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Не удалось создать удаленный каталог, так как представленные параметры доступа неверны!<br/>Пожалуйста, вернитесь назад и проверьте учетные данные.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Не удалось создать удаленный каталог, возможно, указанные учетные данные неверны.</font><br/>Вернитесь назад и проверьте учетные данные.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Удаленный каталог %1 не создан из-за ошибки <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Установлено соединение синхронизации %1 к удалённому каталогу %2. - + Successfully connected to %1! Соединение с %1 установлено успешно! - + Connection to %1 could not be established. Please check again. Не удалось соединиться с %1. Попробуйте снова. - + Folder rename failed Ошибка переименования каталога - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Невозможно удалить каталог и создать его резервную копию, каталог или файл в ней открыт в другой программе. Закройте каталог или файл и нажмите "Повторить попытку", либо прервите мастер настройки. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальный каталог синхронизации %1 успешно создан!</b></font> @@ -1945,12 +2084,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard Мастер подключения %1 - + Skip folders configuration Пропустить настройку каталогов @@ -1958,33 +2097,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Всё готово! - + Open Local Folder Открыть локальный каталог - + Open %1 in Browser Открыть %1 в Браузере - - OCC::PUTFileJob - - - Connection Timeout - Время ожидания подключения истекло - - OCC::PollJob - + Invalid JSON reply from the poll URL Не правильный JSON ответ на сформированный URL @@ -1992,7 +2123,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2000,47 +2131,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Файл %1 не может быть загружен из-за локального конфликта имен! - - The download would reduce free disk space below %1 - Эта загрузка уменьшит свободное дисковое пространство ниже %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Свободное место на диске меньше, чем %1 - + File was deleted from server Файл был удален с сервера - + The file could not be downloaded completely. Невозможно полностью загрузить файл. - + The downloaded file is empty despite the server announced it should have been %1. Скачанный файл пуст, хотя сервер заявил, что он должен быть %1. - + File %1 cannot be saved because of a local file name clash! Файл %1 не может быть сохранён из-за локального конфликта имен! - + File has changed since discovery После обнаружения файл был изменен - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2048,17 +2179,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Восстановление не удалось: %1 - - Continue blacklisting: - Продолжить занесение в чёрный список: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Файл или папка была удалена из доступа только для чтения, восстановление завершилось с ошибкой: %1 @@ -2066,22 +2192,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 не удалось удалить файл %1, ошибка: %2 - + Attention, possible case sensitivity clash with %1 Внимание, возможен конфликт чувствительности к регистру с %1 - + could not create folder %1 не удается создать папку %1 - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2089,17 +2215,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Ошибка при удалении '%1': %2; - + Could not remove folder '%1' Не удается удалить папку '%1' - + Could not remove %1 because of a local file name clash Не удается удалить %1 из-за локального конфликта имен @@ -2107,13 +2233,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Файл %1 не может быть переименован в %2 из-за локального конфликта имен - - + + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2121,12 +2247,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Файл удалён с удаленного общего ресурса только для чтения. Файл был восстановлен. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Сервер ответил не правильным HTTP кодом. Ожидался 204, но получен "%1 %2". @@ -2134,12 +2260,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер ответил не правильным HTTP кодом. Ожидался 201, но получен "%1 %2". - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2147,28 +2273,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Этот каталог не должен переименовываться. Ему будет присвоено изначальное имя. - + This folder must not be renamed. Please name it back to Shared. Этот каталог не должен переименовываться. Присвойте ему изначальное имя: Shared. - + The file was renamed but is part of a read only share. The original file was restored. Файл переименован на удаленном общем ресурсе только для чтения. Файл был восстановлен. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер ответил не правильным HTTP кодом. Ожидался 201, но получен "%1 %2". - - + + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2176,27 +2302,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Невозможно загрузить файл %1, так как уже есть другой файл с тем же именем, отличающимся только регистром символов - + File Removed Файл Перемещён - + Local file changed during syncing. It will be resumed. Локальный файл изменился в процессе синхронизации. Операция будет возобновлена. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2204,32 +2335,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Принудительная остановка задачи при сбросе HTTP подключения для Qt < 5.4.2. - + The local file was removed during sync. Локальный файл был удалён в процессе синхронизации. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + Unexpected return code from server (%1) Неожиданный код завершения от сервера (%1) - + Missing File ID from server Отсутствует код файла от сервера - + Missing ETag from server Отсутствует ETag с сервера @@ -2237,32 +2368,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Принудительная остановка задачи при сбросе HTTP подключения для Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Измененный файл принадлежит удаленному общему ресурсу только для чтения. Файл был восстановлен, ваши правки доступны в файле конфликтов. - + Poll URL missing Не хватает сформированного URL - + The local file was removed during sync. Локальный файл был удалён в процессе синхронизации. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + The server did not acknowledge the last chunk. (No e-tag was present) Сервер не смог подтвердить последнюю часть данных.(Отсутствовали теги e-tag) @@ -2280,42 +2411,42 @@ It is not advisable to use it. TextLabel - + Time Время - + File Файл - + Folder Каталог - + Action Действие - + Size Размер - + Local sync protocol Локальный протокол синхронизации - + Copy Копировать - + Copy the activity list to the clipboard. Скопировать журнал синхронизации в буфер обмена. @@ -2356,7 +2487,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Уточнить объекты @@ -2364,33 +2495,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Загрузка ... - + Deselect remote folders you do not wish to synchronize. Снимите выбор с удалённых папок, котрые вы не хотите синхронизировать. - + Name Название - + Size Размер - - + + No subfolders currently on the server. Нет подкаталогов на сервере на данный момент. - + An error occurred while loading the list of sub folders. Произошла ошибка во время загрузки списка подпапок. @@ -2403,22 +2534,22 @@ It is not advisable to use it. Настройки - + Activity События - + General Основные - + Network Сеть - + Account Уч.запись @@ -2426,27 +2557,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity События - + General Основные - + Network Сеть - + Account Уч.запись @@ -2474,35 +2605,45 @@ It is not advisable to use it. Путь к OwnCloud: - + %1 Sharing Вы поделились %1 - + %1 %1 - + Folder: %2 Папка: %2 - + The server does not allow sharing Сервер не разрешает обмен - + Retrieving maximum possible sharing permissions from server... Запрос максимально возможных прав для предоставления доступа с сервера… - + The file can not be shared because it was shared without sharing permission. Невозможно предоставить общий доступ к файлу: нет разрешения на предоставление общего доступа. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2512,92 +2653,126 @@ It is not advisable to use it. Поделиться NewDocument.odt - - Share link - Поделиться ссылкой - - - + TextLabel TextLabel - + Set &password Установить &пароль - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Установить срок &доступа - + Set password Установить пароль - - &Mail link - &Отправить почтой + + Link properties: + - Copy &link - Копировать &ссылку + Show file listing + - + Allow editing Разрешить редактирование - + Anyone with the link has access to the file/folder Каждый, у кого есть эта ссылка, имеет доступ к файлу/каталогу - + + P&assword protect Защитить паролем - + Password Protected Защищено Паролем - + The file can not be shared because it was shared without sharing permission. Невозможно предоставить общий доступ к файлу: нет разрешения на предоставление общего доступа. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Публичные ссылки требуют пароля - + Please Set Password Пожалуйста, установите пароль - - - Could not open email client - Не удалось открыть почтового клиента - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - При запуске почтового клиента для создания нового сообщения произошла ошибка. Возможно, почтовый клиент по умолчанию не настроен? - - - - - &Share link - Поделиться ссылкой - OCC::ShareUserGroupWidget @@ -2607,68 +2782,98 @@ It is not advisable to use it. Поделиться NewDocument.odt - + Share with users or groups ... Поделиться с пользователями или группами ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Нет результатов для '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Форма + - + TextLabel - TextLabel + - + can edit - можно редактировать + - + can share - можно поделиться + - + ... - ... + - + create - создать + - + change - изменить + - + delete - удалить + OCC::ShibbolethCredentials - + Login Error Ошибка входа - + You must sign in as user %1 Вы должны войти как пользователь %1 @@ -2676,22 +2881,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Авторизация - + SSL Chipher Debug View Отладочный просмотр шифра SSL - + Reauthentication required Требуется повторная аутентификация - + Your session has expired. You need to re-login to continue to use the client. Срок действия вашей сессии истек. Нужно перезайти, чтобы продолжить пользоваться приложением. @@ -2699,26 +2904,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Поделиться с %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Данные сертификата:</h3> - + Common Name (CN): Общее имя (CN): - + Subject Alternative Names: Альтернативное имя субъекта: @@ -2803,7 +3028,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. Это соединение зашифровано %1-битным %2. @@ -2820,7 +3045,7 @@ It is not advisable to use it. Информация о TLS-сертификатах: - + This connection is NOT secure as it is not encrypted. Это соединение НЕ безопасно, используется протокол без шифрования. @@ -2840,67 +3065,67 @@ It is not advisable to use it. Доверять этому сертификату в любом случае - + Untrusted Certificate Сертификат без доверия - + Cannot connect securely to <i>%1</i>: Не удалось осуществить безопасное подключение к <i>%1</i>: - + with Certificate %1 Сертификат %1 - + &lt;not specified&gt; &lt;не указано&gt; - - + + Organization: %1 Организация: %1 - - + + Unit: %1 Подразделение: %1 - - + + Country: %1 Страна: %1 - + Fingerprint (MD5): <tt>%1</tt> Отпечаток (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Отпечаток (SHA1): <tt>%1</tt> - + Effective Date: %1 Дата вступления в силу: %1 - + Expiration Date: %1 Дата окончания: %1 - + Issuer: %1 Издатель: %1 @@ -2908,285 +3133,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успешно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не удалось загрузить файл журнала. Файл журнала повреждён. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Не удается загрузить плагин 1% для csync.<br/>Проверьте установку!</p> - + CSync got an error while processing internal trees. CSync получил сообщение об ошибке при обработке внутренних деревьев. - - CSync failed to reserve memory. - CSync не удалось зарезервировать память. - - - + CSync fatal parameter error. Критическая ошибка параметра CSync. - + CSync processing step update failed. Процесс обновления CSync не удался. - + CSync processing step reconcile failed. Процесс согласования CSync не удался. - + CSync could not authenticate at the proxy. CSync не удалось авторизоваться на прокси сервере. - + CSync failed to lookup proxy or server. CSync не удалось найти прокси сервер. - + CSync failed to authenticate at the %1 server. CSync не удалось авторизоваться на сервере %1. - + CSync failed to connect to the network. CSync не удалось подключиться к сети. - + A network connection timeout happened. Вышло время ожидания подключения к сети. - + A HTTP transmission error happened. Произошла ошибка передачи HTTP. - + The mounted folder is temporarily not available on the server Смонтированная папка временно недоступна на сервере - + An error occurred while opening a folder Произошла ошибка во время открытия папки - + Error while reading folder. Произошла ошибка во время чтения папки. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Файл/папка проигнорированы, так как являются скрытыми. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Нет свободного пространства на сервере %1. - + CSync unspecified error. Неизвестная ошибка CSync. - + Aborted by the user Прервано пользователем - + CSync failed to access CSync отказано в доступе - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync не удалось загрузить файл журнала. Убедитесь в наличии прав на чтение и запись в локальную папку. - + CSync failed due to unhandled permission denied. CSync не выполнен из-за отказа в доступе для необработанного разрешения. - + CSync tried to create a folder that already exists. CSync попытался создать папку, которая уже существует. - + The service is temporarily unavailable Сервис временно недоступен - + Access is forbidden Доступ запрещен - + An internal error number %1 occurred. Произошла внутренняя ошибка номер %1. - - The item is not synced because of previous errors: %1 - Элемент не синхронизируется из-за произошедших ошибок: %1 - - - + Symbolic links are not supported in syncing. Синхронизация символических ссылок не поддерживается. - + File is listed on the ignore list. Файл присутствует в списке игнорируемых. - + File names ending with a period are not supported on this file system. Эта файловая система не поддерживает имена файлов, оканчивающиеся на точку. - + File names containing the character '%1' are not supported on this file system. Эта файловая система не поддерживает имена файлов, содержащие символ '%1'. - + The file name is a reserved name on this file system. Данное имя файла зарезервировано в данной файловой системе. - + Filename contains trailing spaces. Имя файла содержит пробелы на конце. - + Filename is too long. Имя файла слишком длинное. - + Stat failed. Не удалось загрузить статистику. - + Filename encoding is not valid Кодировка имени файла не верна - + Invalid characters, please rename "%1" Недопустимые символы, пожалуйста, переименуйте "%1" - - Unable to initialize a sync journal. - Невозможно инициализировать журнал синхронизации. - - - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник @@ -3202,7 +3442,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3210,17 +3450,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Версия %1. Для получения дополнительной информации посетите <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Все права принадлежат ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Распространяется %1 и лицензировано под GNU General Public License (GPL) Версии 2.0.<br/>Логотипы %2 и %2 являются зарегистрированной торговой маркой %1 в США и/или других странах.</p> @@ -3228,17 +3468,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Некорректная контрольная сумма заголовка - + The checksum header contained an unknown checksum type '%1' Заголовок контрольной суммы содержал неизвестный тип '%1' контрольной суммы - + The downloaded file does not match the checksum, it will be resumed. Загруженный файл не соответствует контрольной сумме, операция будет возобновлена. @@ -3246,207 +3486,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пожалуйста войдите в систему - + Folder %1: %2 Каталог %1: %2 - + No sync folders configured. Нет каталогов для синхронизации. - + There are no sync folders configured. Нет настроенных каталогов для синхронизации - + Open in browser Открыть в браузере - - - + + + Log in... Вход... - - - + + + Log out Выйти - + Recent Changes Недавние изменения - + Checking for changes in '%1' Проверка изменений в '%1' - + Managed Folders: Управляемые каталоги: - + Open folder '%1' Открыть каталог '%1' - + Open %1 in browser Открыть %1 в браузере - + Unknown status Неизвестный статус - + Settings... Настройки... - + Details... Детали... - + Help Помощь - + Quit %1 Закрыть %1 - + Disconnected from %1 Отключен от %1 - + Unsupported Server Version Версия сервера не поддерживается - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Сервер для учетной записи %1 использует старую не поддерживаемую версию %2. Использование этого клиента совместно с не поддерживаемым сервером не тестировалось и является потенциально небезопасным. Вы продолжаете на свой страх и риск. - + Disconnected from accounts: Отключен от учетных записей: - + Account %1: %2 Учетная запись %1: %2 - + Account synchronization is disabled Синхронизация учётной записи отключена - + Unpause all folders Снять с паузы все папки - + Pause all folders Поставить на паузу все папки - + Unpause all synchronization Возобновить все синхронизации - + Unpause synchronization Возобновить синхронизацию - + Pause all synchronization Приостановить все синхронизации - + Pause synchronization Приостановить синхронизацию - + Log out of all accounts Выйти из всех учетных записей - + Log in to all accounts... Войти во все учетные записи... - + New account... Новая учётная запись… - + Crash now Only shows in debug mode to allow testing the crash handler Критическая ошибка! - + No items synced recently Недавно ничего не синхронизировалось - + Syncing %1 of %2 (%3 left) Синхронизация %1 из %2 (осталось %3) - + Syncing %1 of %2 Синхронизирую %1 из %2 - + Syncing %1 (%2 left) Синхронизация %1 (осталось %2) - + Syncing %1 Синхронизация %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Актуальная версия @@ -3454,7 +3694,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>Версия %2. Для более подробной информации посетите <a href="%3">https://%4</a></p><p>По поводу известных проблем и помощи, пожалуйста посетите: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>Авторы: Клаас Фрейтаг, Дэниель Молкентен, Оливье Гоффар, Маркус Гётц, Жан-Кристоф Бошар, и другие.</small></p><p>Авторские права принадлежат ownCloud GmbH</p><p>Лицензировано под GNU General Public License (GPL) версии 2.0<br/>ownCloud и логотип ownCloud — зарегистрированные торговые марки ownCloud GmbH в Соединённых Штатах, и/или других странах.</p> @@ -3557,78 +3797,42 @@ It is not advisable to use it. &Пароль + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Форма - - Server &address: - Адрес сервера: - - - - - TextLabel TextLabel - - - Use &secure connection - Использовать защищённое соединение - - - - CheckBox - CheckBox - - - - &Username: - &Имя пользователя: - - - - Enter the ownCloud username. - Введите имя пользователя ownCloud. - - - - &Password: - &Пароль: - - - - Enter the ownCloud password. - Введите пароль ownCloud - - - - Do not allow the local storage of the password. - Не позволять локальное хранение пароля. - - - - &Do not store password on local machine - &Не хранить пароль на локальной машине - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Введите адрес ownCloud, к которому вы хотите подключиться (без http или https). - Ser&ver Address @@ -3672,7 +3876,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3680,42 +3884,42 @@ It is not advisable to use it. QObject - + in the future в будущем - + %n day(s) ago %n день назад%n дня назад%n дней назад%n дней назад - + %n hour(s) ago %n час назад%n часа назад%n часов назад%n часов назад - + now сейчас - + Less than a minute ago Меньше минуты назад - + %n minute(s) ago %n минута назад%n минуты назад%n минут назад%n минут назад - + Some time ago Некоторое время назад - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3724,57 +3928,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) %n год%n года%n лет%n лет - + %n month(s) %n месяц%n месяца%3 месяцев%n месяцев - + %n day(s) %n день%n дня%n дней%n дней - + %n hour(s) %n час%n часа%n часов%n часов - + %n minute(s) %n минута%n минуты%n минут%n минут - + %n second(s) %n секунда%n секунды%n секунд%n секунд - + %1 %2 %1 %2 @@ -3795,102 +3999,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Собрано исходников Git версии <a href="%1">%2</a> на %3, %4 используя Qt %5, %6</small></p> - - - built with %1 - собрано с %1 - progress - + Downloaded Скачано - + Uploaded Загружено - + Server version downloaded, copied changed local file into conflict file Серверная версия скачана, изменённый локальный файл скопирован в файл конфликта. - + Deleted Удалено - + Moved to %1 Перемещено в %1 - + Ignored Проигнорирован - + Filesystem access error Ошибка доступа к файловой системе - + Error Ошибка - + Updated local metadata Обновлены локальные метаданные - - + + Unknown Неизвестно - + downloading скачивание - + uploading загрузка - + deleting удаление - + moving перемещение - + ignoring игнорирование + - error ошибка - + updating local metadata обновление локальных метаданных @@ -3898,54 +4097,77 @@ It is not advisable to use it. theme - + Status undefined Статус не определён - + Waiting to start sync Ожидание начала синхронизации - + Sync is running Синхронизация запущена - + Sync Success Синхронизация прошла успешно - + Sync Success, some files were ignored. Синхронизация прошла успешно, некоторые файлы были проигнорированы. - + Sync Error Ошибка синхронизации - + Setup Error Ошибка установки - + Preparing to sync Подготовка к синхронизации - + Aborting... Прерывание... - + Sync is paused Синхронизация приостановлена + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_sk.ts b/translations/client_sk.ts index bd19c7aac..1e061b3d9 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Cieľový súbor má neočakávanú veľkosť alebo čas zmeny @@ -81,6 +81,24 @@ Štítok + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Zrušiť @@ -136,188 +154,204 @@ Spojené z <server> ako <user> - + No account configured. Žiadny účet nie je nastavený. - + Add new Pridať nový účet - + Remove Odobrať - + Account Účet - + Choose what to sync Vybrať čo synchronizovať - + Force sync now - + Restart sync - + Remove folder sync connection Odstrániť prepojenie priečinka - + Folder creation failed Vytvorenie priečinka zlyhalo - + <p>Could not create local folder <i>%1</i>. <p>Nemožno vytvoriť lokálny priečinok <i>%1</i>. - + Confirm Folder Sync Connection Removal Potvrdiť odstránenie prepojenia priečinka - + Remove Folder Sync Connection Odstrániť prepojenie priečinka - + Sync Running Prebiehajúca synchronizácia - + The syncing operation is running.<br/>Do you want to terminate it? Proces synchronizácie práve prebieha.<br/>Chcete ho ukončiť? - + %1 in use %1 sa používa - + %1 as <i>%2</i> %1 ako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Verzia servera %1 je stará a nepodporovaná. Pokračujte na vlastné nebezpečenstvo. - + Connected to %1. Pripojené k %1 - + Server %1 is temporarily unavailable. Server %1 je dočasne nedostupný. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Odhlásený z %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Žiadne pripojenie k %1 na %2. - + Log in Prihlásiť sa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Potvrďte ostránenie účtu - + <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> <p>Naozaj chcete odstrániť pripojenie k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Tým sa <b>nevymažú</b> žiadne súbory.</p> - + Remove connection Vymazať pripojenie - + + Open folder Otvoriť priečinok - - + + Log out Odhlásiť - + Resume sync Obnoviť synchronizáciu - + Pause sync Pozastaviť synchronizáciu - + <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> <p>Naozaj si prajete zastaviť synchronizácu priečinka <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>nevymaže</b> žiadne súbory.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) z %2 je využitých. Niektoré priečinky, vrátane sieťových a zdieľaných, môžu mať iné limity. - + %1 of %2 in use %1 z %2 je využitých - + Currently there is no storage usage information available. Teraz nie sú k dispozícii žiadne informácie o využití úložiska. - + No %1 connection configured. Žiadne nakonfigurované %1 spojenie @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Odhlásený - + Disconnected Odpojený - + Connected Pripojené - + Service unavailable Služba nedostupná - + + Maintenance mode + + + + Network error Chyba siete - + Configuration error Chyba nastavenia - + + Asking Credentials + + + + Unknown account state Neznámy stav účtu @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita servera - + Sync Protocol Záznam synchronizácie - - List of ignored or erroneous files - Zoznam ignorovaných alebo chybných súborov - - - - Copy - Kopírovať - - - - Copy the activity list to the clipboard. - Skopírovať zoznam aktivít do schránky. - - - + Not Synced Nezosynchronizované - + Not Synced (%1) %1 is the number of not synced files. Nezosynchronizované (%1) - + The server activity list has been copied to the clipboard. Zoznam aktivít servera bol skopírovaný do schránky. - + The sync activity list has been copied to the clipboard. Zoznam aktivít synchronizácie bol skopírovaný do schránky. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Skopírované do schránky @@ -448,47 +477,47 @@ Štítok - + Server Activities Aktivita servera - + Copy Kopírovať - + Copy the activity list to the clipboard. Skopírovať zoznam aktivít do schránky. - + Action Required: Notifications Požaduje sa činnosť: oznámenia - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Žiadny účet v ownCloude nie je nastavený - + The configured server for this client is too old Server nakonfigurovaný pre tohto klienta je príliš starý - + Please update to the latest server and restart the client. Prosím aktualizujte na najnovšiu verziu servera a reštartujte klienta. - + Authentication error: Either username or password are wrong. Chyba overenia: Používateľské meno alebo heslo nie je správne. - + timeout vypršal časový limit - + The provided credentials are not correct Poskytnuté poverenia nie sú správne - - OCC::DeleteJob - - - Connection timed out - Pripojenie expirovalo - - OCC::DiscoveryMainThread - + Aborted by the user Zrušené používateľom @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Lokálny priečinok %1 neexistuje. - + %1 should be a folder but is not. %1 by mal byť priečinok, avšak nie je. - + %1 is not readable. %1 nie je čitateľný. - + %1 has been removed. %1 names a file. %1 bol zmazaný. - + %1 has been downloaded. %1 names a file. %1 bol stiahnutý. - + %1 has been updated. %1 names a file. %1 bol aktualizovaný. - + %1 has been renamed to %2. %1 and %2 name files. %1 bol premenovaný na %2. - + %1 has been moved to %2. %1 bol presunutý do %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 nemôže byť synchronizovaný kvôli chybe. Pozrite sa do logu pre podrobnosti. - + Sync Activity Aktivita synchronizácie - + Could not read system exclude file Nemožno čítať systémový exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Odstrániť všetky súbory? - + Remove all files Odstrániť všetky súbory - + Keep files Ponechať súbory - + This sync would reset the files to an earlier 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? - + Backup detected Záloha je dostupná - + Normal Synchronisation Bežná synchronizácia - + Keep Local Files as Conflict Ponechať lokálne súbory ako konfliktné @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Nemožno resetovať stav priečinka - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Starý synchronizačný žurnál '%1' nájdený, avšak neodstrániteľný. Prosím uistite sa, že žiadna aplikácia ho práve nevyužíva. - + (backup) (záloha) - + (backup %1) (záloha %1) - + Undefined State. Nedefinovaný stav. - + Waiting to start syncing. Čaká sa na začiatok synchronizácie - + Preparing for sync. Príprava na synchronizáciu. - + Sync is running. Synchronizácia prebieha. - + Last Sync was successful. Posledná synchronizácia sa úspešne skončila. - + Last Sync was successful, but with warnings on individual files. Posledná synchronizácia bola úspešná, ale s varovaniami pre individuálne súbory. - + Setup Error. Chyba pri inštalácii. - + User Abort. Zrušené používateľom. - + Sync is paused. Synchronizácia je pozastavená. - + %1 (Sync is paused) %1 (Synchronizácia je pozastavená) - + No valid folder selected! Nebol zvolený platný priečinok. - + The selected path is not a folder! Zvolená cesta nie je priečinok. - + You have no permission to write to the selected folder! Nemáte oprávnenia pre zápis do daného priečinka! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder Synchronizujem lokálny priečinok - + File Súbor @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Na pridanie priečinku je nutné byť pripojený - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Odhlásený - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Načítavam zoznam priečinkov zo servera... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + + Reconciling changes + + + + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuje sa %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stiahnuť %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrať %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, súbor %3 z %4 - + file %1 of %2 súbor %1 z %2 - + Waiting... Čakajte... - + Waiting for %n other folder(s)... - + Preparing to sync... Príprava na synchronizáciu... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Kliknutím vyberte lokálny priečinok, ktorý chcete synchronizovať. - + Enter the path to the local folder. Zadajte cestu do lokálneho priečinka. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Zadajte názov nového priečinka, ktorý bude vytvorený v '%1': - + Folder was successfully created on %1. Priečinok bol úspešne vytvorený na %1. - + Authentication failed accessing %1 Zlyhalo overenie pri pripojení %1 - + Failed to create the folder on %1. Please check manually. Na %1 zlyhalo vytvorenie priečinka. Skontrolujte to, prosím, ručne. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Zvoľte pre synchronizáciu celého účtu - + This folder is already being synced. Tento priečinok sa už synchronizuje. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Priečinok <i>%1</i> už synchronizujete a je nadradený priečinku <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Už synchronizujete všetky vaše súbory. Synchronizácia dalšieho priečinka <b>nie je</b> podporovaná. Ak chcete synchronizovať viac priečinkov, odstránte, prosím, synchronizáciu aktuálneho kořenového priečinka. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Zo servera nebol prijatý E-Tag, skontrolujte proxy/bránu - + We received a different E-Tag for resuming. Retrying next time. Prijali sme iný E-Tag pre pokračovanie. Skúsim to neskôr znovu. - + Server returned wrong content-range Server vrátil nesprávnu hodnotu Content-range - + Connection Timeout Spojenie vypršalo @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced Rozšírené - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Edit &Ignored Files - + S&how crash reporter - - + + About O - + Updates Aktualizácie - + &Restart && Update &Restart && aktualizácia @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Vložte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Táto položka je poskytovaná systémom na '%1' a nesmie byť modifikovaná v tomto zobrazení. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Systémový záznam výstupu - + &Search: &Hľadať: - + &Find &Nájsť - + + &Capture debug messages + + + + Clear Vyčistiť - + Clear the log display. Vyčistiť zobrazenie záznamu (logu). - + S&ave &Uložiť - + Save the log file to a file on disk for debugging. Uložiť log súbor do súboru na disk pre proces debugovania. - + Save log file Uložiť súbor so záznamami (log) - + Error Chyba - + Could not write to log file %1 Nemožno zapísať do záznamového súboru - logu %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Chyba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Súbor '%1'<br/>nesmie byť otvorený pre proces úprav.</br/><br/>Systémový záznam (log) <b>nemôže</b> byť uložený!</nobr> - - OCC::MoveJob - - - Connection timed out - Pripojenie expirovalo - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Limitovať automaticky - + Hostname of proxy server Hostname (hostiteľské meno) proxy servera - + Username for proxy server Používateľské meno pre proxy server - + Password for proxy server Heslo pre proxy server - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1582,79 +1675,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 Vytvorený o %1 - + Closing in a few seconds... Ukončenie o pár sekúnd... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 požiadavka zlyhala o %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Pripravená je nová aktualizácia %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nainštaluje sa nová aktualizácia pre %1. V priebehu aktualizácie môžu byť vyžadované dodatočné oprávnenia. - + Downloading version %1. Please wait... Sťahujem verziu %1. Čakajte prosím... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nemôžem stiahnuť aktualizáciu. Kliknite, prosím, na <a href='%1'>tento odkaz</a> pre ručné stiahnutie aktualizácie. - + Could not check for new updates. Nemôžem skontrolovať dostupnosť aktualizácie. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Kontrolujem aktualizačný server... - + Update status is unknown: Did not check for new updates. Stav aktualizácie nie je známy: Neboli skontrolované nové aktualizácie. - + No updates available. Your installation is at the latest version. Žiadne aktualizácie nie sú k dispozícii. Používate aktuálnu verziu. @@ -1667,43 +1793,43 @@ môžu byť vyžadované dodatočné oprávnenia. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Pripojiť sa k %1 - + Setup local folder options Nastaviť možnosti lokálneho priečinka - + Connect... Pripojiť... - + %1 folder '%2' is synced to local folder '%3' %1 priečinok '%2' je zosynchronizovaný do lokálneho priečinka '%3' - + Sync the folder '%1' Sychronizovať priečinok '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Lokálny synchronizačný priečinok - - + + (%1) (%1) @@ -1736,7 +1862,7 @@ môžu byť vyžadované dodatočné oprávnenia. Nakonfigurovať klientský TLS certifikát - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nepodarilo sa pripojenie k zabezpečenému serveru <em>%1</em>. Ako chcete pokračovať?</p></body></html> @@ -1744,47 +1870,60 @@ môžu byť vyžadované dodatočné oprávnenia. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 Pripojiť sa k %1 - + Enter user credentials Vložte prihlasovacie údaje + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Pripojiť sa k %1 - + Setup %1 server Nastaviť server %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Táto adresa nie je bezpečná, pretože nie je šifrovaná. Nie je vhodné ju používať. - + This url is secure. You can use it. Táto URL je bezpečná. Môžete ju používať. - + &Next > &Ďalšia > @@ -1792,22 +1931,22 @@ Nie je vhodné ju používať. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Úspešne pripojené k %1: %2 verzie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Zlyhalo spojenie s %1 o %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Časový limit vypršal pri pokuse o pripojenie k %1 na %2. - + Trying to connect to %1 at %2... Pokúšam sa o pripojenie k %1 na %2... @@ -1827,109 +1966,109 @@ Nie je vhodné ju používať. Prístup zamietnutý serverom. Po overení správnych prístupových práv, <a href="%1">kliknite sem</a> a otvorte službu v svojom prezerači. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokálny synchronizačný priečinok %1 už existuje, prebieha jeho nastavovanie pre synchronizáciu.<br/><br/> - + Creating local sync folder %1... Vytváranie lokálneho synchronizačného priečinka %1 ... - + ok v poriadku - + failed. neúspešné. - + Could not create local folder %1 Nemožno vytvoriť lokálny priečinok %1 - + No remote folder specified! Vzdialený priečinok nie je nastavený! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytváram priečinok v ownCloude: %1 - + Remote folder %1 created successfully. Vzdialený priečinok %1 bol úspešne vytvorený. - + The remote folder %1 already exists. Connecting it for syncing. Vzdialený priečinok %1 už existuje. Prebieha jeho pripájanie pre synchronizáciu. - + The folder creation resulted in HTTP error code %1 Vytváranie priečinka skončilo s HTTP chybovým kódom %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Proces vytvárania vzdialeného priečinka zlyhal, lebo použité prihlasovacie údaje nie sú správne!<br/>Prosím skontrolujte si vaše údaje a skúste to znovu.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvorenie vzdialeného priečinka pravdepodobne zlyhalo kvôli nesprávnym prihlasovacím údajom.</font><br/>Prosím choďte späť a skontrolujte ich.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytvorenie vzdialeného priečinka %1 zlyhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Synchronizačné spojenie z %1 do vzdialeného priečinka %2 bolo práve nastavené. - + Successfully connected to %1! Úspešne pripojené s %1! - + Connection to %1 could not be established. Please check again. Pripojenie k %1 nemohlo byť iniciované. Prosím skontrolujte to znovu. - + Folder rename failed Premenovanie priečinka zlyhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nemožno odstrániť a zazálohovať priečinok, pretože priečinok alebo súbor je otvorený v inom programe. Prosím zatvorte priečinok nebo súbor a skúste to znovu alebo zrušte akciu. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokálny synchronizačný priečinok %1 bol úspešne vytvorený!</b></font> @@ -1937,12 +2076,12 @@ Nie je vhodné ju používať. OCC::OwncloudWizard - + %1 Connection Wizard %1 Asistent pripojenia - + Skip folders configuration Preskočiť konfiguráciu priečinkov @@ -1950,33 +2089,25 @@ Nie je vhodné ju používať. OCC::OwncloudWizardResultPage - + Everything set up! Všetko je nastavené! - + Open Local Folder Otvoriť lokálny priečinok - + Open %1 in Browser Otvoriť %1 v prehliadači - - OCC::PUTFileJob - - - Connection Timeout - Spojenie vypršalo - - OCC::PollJob - + Invalid JSON reply from the poll URL Neplatná JSON odpoveď z URL adresy @@ -1984,7 +2115,7 @@ Nie je vhodné ju používať. OCC::PropagateDirectory - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -1992,47 +2123,47 @@ Nie je vhodné ju používať. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Súbor %1 nie je možné stiahnuť, pretože súbor s rovnakým menom už existuje! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server Súbor bol vymazaný zo servera - + The file could not be downloaded completely. Súbor sa nedá stiahnuť úplne. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! Súbor %1 nie je možné uložiť, pretože jeho názov koliduje s názvom lokálneho súboru! - + File has changed since discovery Súbor sa medzitým zmenil - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2040,17 +2171,12 @@ Nie je vhodné ju používať. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovenie zlyhalo: %1 - - Continue blacklisting: - Pokračovať v blacklistingu: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2058,22 +2184,22 @@ Nie je vhodné ju používať. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Pozor, možná kolízia z dôvodu veľkosti písmen s %1 - + could not create folder %1 nemožno vytvoriť priečinok %1 - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2081,17 +2207,17 @@ Nie je vhodné ju používať. OCC::PropagateLocalRemove - + Error removing '%1': %2; Chyba pri odstraňovaní '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Nemožno odstrániť %1 z dôvodu kolízie názvu súboru s lokálnym súborom @@ -2099,13 +2225,13 @@ Nie je vhodné ju používať. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Súbor %1 nemôže byť premenovaný na %2 z dôvodu, že tento názov je už použitý - - + + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2113,12 +2239,12 @@ Nie je vhodné ju používať. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Súbor bol odobratý zo zdieľania len na čítanie. Súbor bol obnovený. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Server vrátil neplatný HTTP kód. Očakávaný bol 204, ale vrátený bol "%1 %2". @@ -2126,12 +2252,12 @@ Nie je vhodné ju používať. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server vrátil neplatný HTTP kód. Očakávaný bol 201, ale vrátený bol "%1 %2". - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2139,28 +2265,28 @@ Nie je vhodné ju používať. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Tento priečinok nemôže byť premenovaný. Prosím, vráťte mu pôvodné meno. - + This folder must not be renamed. Please name it back to Shared. Tento priečinok nemôže byť premenovaný. Prosím, vráťte mu meno Shared. - + The file was renamed but is part of a read only share. The original file was restored. Súbor bol premenovaný, ale je súčasťou zdieľania len na čítanie. Pôvodný súbor bol obnovený. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Server vrátil neplatný HTTP kód. Očakávaný bol 201, ale vrátený bol "%1 %2". - - + + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2168,27 +2294,32 @@ Nie je vhodné ju používať. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Súbor zmazaný - + Local file changed during syncing. It will be resumed. Lokálny súbor bol zmenený počas synchronizácie. Bude obnovený. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2196,32 +2327,32 @@ Nie je vhodné ju používať. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vynútené ukončenie procesu pri resete HTTP pripojení s Qt < 5.4.2. - + The local file was removed during sync. Lokálny súbor bol odstránený počas synchronizácie. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2229,32 +2360,32 @@ Nie je vhodné ju používať. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vynútené ukončenie procesu pri resete HTTP pripojení s Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Súbor bol zmenený, ale je súčasťou zdieľania len na čítanie. Pôvodný súbor bol obnovený a upravená verzia je uložená v konfliktnom súbore. - + Poll URL missing Chýba URL adresa - + The local file was removed during sync. Lokálny súbor bol odstránený počas synchronizácie. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2272,42 +2403,42 @@ Nie je vhodné ju používať. Štítok - + Time Čas - + File Súbor - + Folder Priečinok - + Action Akcia - + Size Veľkosť - + Local sync protocol Lokálny protokol synchronizácie - + Copy Kopírovať - + Copy the activity list to the clipboard. Skopírovať zoznam aktivít do schránky. @@ -2348,7 +2479,7 @@ Nie je vhodné ju používať. OCC::SelectiveSyncDialog - + Choose What to Sync Vybrať čo synchronizovať @@ -2356,33 +2487,33 @@ Nie je vhodné ju používať. OCC::SelectiveSyncWidget - + Loading ... Nahrávam... - + Deselect remote folders you do not wish to synchronize. - + Name Názov - + Size Veľkosť - - + + No subfolders currently on the server. Na serveri teraz nie sú žiadne podpriečinky. - + An error occurred while loading the list of sub folders. @@ -2395,22 +2526,22 @@ Nie je vhodné ju používať. Nastavenia - + Activity Aktivita - + General Všeobecné - + Network Sieť - + Account Účet @@ -2418,27 +2549,27 @@ Nie je vhodné ju používať. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivita - + General Všeobecné - + Network Sieť - + Account Účet @@ -2466,35 +2597,45 @@ Nie je vhodné ju používať. ownCloud cesta: - + %1 Sharing %1 zdieľanie - + %1 %1 - + Folder: %2 Priečinok: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. Tento súbor nemožno zdieľať, lebo bol vyzdieľaný bez možnosti ďalšieho zdieľania. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2504,92 +2645,126 @@ Nie je vhodné ju používať. Zdieľať NewDocument.odt - - Share link - Zdieľať linku - - - + TextLabel Štítok - + Set &password Nastaviť &heslo - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Nastaviť dátum &expirácie - + Set password Nastaviť heslo - - &Mail link + + Link properties: - Copy &link - Skopírovať &odkaz + Show file listing + - + Allow editing Povoliť úpravy - + Anyone with the link has access to the file/folder - + + P&assword protect Ch&rániť heslom - + Password Protected Chránené heslom - + The file can not be shared because it was shared without sharing permission. Tento súbor nemožno zdieľať, lebo bol vyzdieľaný bez možnosti ďalšieho zdieľania. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Verejné z&dieľanie vyžaduje heslo - + Please Set Password Prosím nastavte si heslo - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &Zdieľať odkaz - OCC::ShareUserGroupWidget @@ -2599,68 +2774,98 @@ Nie je vhodné ju používať. Zdieľať NewDocument.odt - + Share with users or groups ... Zdieľať s používateľmi alebo skupinami ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Formulár + - + TextLabel - Štítok + - + can edit - môže upraviť + - + can share - môže zdieľať + - + ... - ... + - + create - vytvoriť + - + change - zmeniť + - + delete - vymazať + OCC::ShibbolethCredentials - + Login Error Chybné prihlásenie - + You must sign in as user %1 Musíte sa prihlásiť ako používateľ %1 @@ -2668,22 +2873,22 @@ Nie je vhodné ju používať. OCC::ShibbolethWebView - + %1 - Authenticate %1 - overenie - + SSL Chipher Debug View - + Reauthentication required Vyžaduje sa opätovné overenie - + Your session has expired. You need to re-login to continue to use the client. Platnosť relácie uplynula. Musíte sa znovu prihlásiť, ak chcete pokračovať v používaní klienta. @@ -2691,26 +2896,46 @@ Nie je vhodné ju používať. OCC::SocketApi - + Share with %1 parameter is ownCloud Zdieľať s %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Podrobnosti certifikátu</h3> - + Common Name (CN): Bežné meno (CN): - + Subject Alternative Names: Alternatívne meno subjektu: @@ -2795,7 +3020,7 @@ Nie je vhodné ju používať. %1 - + This connection is encrypted using %1 bit %2. Toto spojenie je šifrované pomocou %1 bitovej šifry %2. @@ -2812,7 +3037,7 @@ Nie je vhodné ju používať. Informácie o certifikáte: - + This connection is NOT secure as it is not encrypted. Toto spojenie NIE JE bezpečné, pretože nie je šifrované. @@ -2832,67 +3057,67 @@ Nie je vhodné ju používať. Dôverovať danému certifikátu v každom prípade - + Untrusted Certificate Nedôveryhodný certifikát - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 s certifikátom %1 - + &lt;not specified&gt; &lt;nešpecifikované&gt; - - + + Organization: %1 Organizácia: %1 - - + + Unit: %1 Jednotka: %1 - - + + Country: %1 Krajina: %1 - + Fingerprint (MD5): <tt>%1</tt> Odtlačok (MD5 hash): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Odtlačok (SHA1 hash): <tt>%1</tt> - + Effective Date: %1 Dátum účinnosti: %1 - + Expiration Date: %1 Koniec platnosti: %1 - + Issuer: %1 Vydavateľ: %1 @@ -2900,285 +3125,300 @@ Nie je vhodné ju používať. OCC::SyncEngine - + Success. Úspech. - + CSync failed to load the journal file. The journal file is corrupted. Nepodarilo sa načítanie žurnálovacieho súboru CSync. Súbor je poškodený. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>%1 zásuvný modul pre "CSync" nebolo možné načítať.<br/>Prosím skontrolujte inštaláciu!</p> - + CSync got an error while processing internal trees. Spracovanie "vnútorných stromov" vrámci "CSync" zlyhalo. - - CSync failed to reserve memory. - CSync sa nepodarilo zarezervovať pamäť. - - - + CSync fatal parameter error. CSync kritická chyba parametrov. - + CSync processing step update failed. CSync sa nepodarilo spracovať krok aktualizácie. - + CSync processing step reconcile failed. CSync sa nepodarilo spracovať krok zladenia. - + CSync could not authenticate at the proxy. CSync sa nemohol prihlásiť k proxy. - + CSync failed to lookup proxy or server. CSync sa nepodarilo nájsť proxy alebo server. - + CSync failed to authenticate at the %1 server. CSync sa nepodarilo prihlásiť na server %1. - + CSync failed to connect to the network. CSync sa nepodarilo pripojiť k sieti. - + A network connection timeout happened. Skončil časový limit sieťového spojenia. - + A HTTP transmission error happened. Chyba HTTP prenosu. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Nastala chyba počas otvárania priečinka - + Error while reading folder. Chyba pri čítaní adresára - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Na serveri %1 nie je žiadne voľné miesto. - + CSync unspecified error. CSync nešpecifikovaná chyba. - + Aborted by the user Zrušené používateľom - + CSync failed to access Prístup pre CSync zlyhal - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Služba je dočasne nedostupná - + Access is forbidden Prístup odmietnutý - + An internal error number %1 occurred. Vyskytla sa interná chyba číslo %1. - - The item is not synced because of previous errors: %1 - Položka nebola synchronizovaná kvôli predchádzajúcej chybe: %1 - - - + Symbolic links are not supported in syncing. Symbolické odkazy nie sú podporované pri synchronizácii. - + File is listed on the ignore list. Súbor je zapísaný na zozname ignorovaných. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Meno súboru je veľmi dlhé. - + Stat failed. - + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, premenujte prosím "%1" - - Unable to initialize a sync journal. - Nemôžem inicializovať synchronizačný žurnál. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj @@ -3194,7 +3434,7 @@ Nie je vhodné ju používať. OCC::Systray - + %1: %2 %1: %2 @@ -3202,17 +3442,17 @@ Nie je vhodné ju používať. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Verzia %1. Pre viac informácií choďte na <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Šíri %1 pod licenciou GNU General Public License (GPL) Verzia 2.0.<br/>%2 a %2 logo sú registrované známky %1 v USA, ostatných krajinách, alebo oboje.</p> @@ -3220,17 +3460,17 @@ Nie je vhodné ju používať. OCC::ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolného súčtu je poškodená. - + The checksum header contained an unknown checksum type '%1' Hlavička kontrolného súčtu obsahovala neznámy typ kontrolného súčtu „%1“ - + The downloaded file does not match the checksum, it will be resumed. Stiahnutý súbor nemá správny kontrolný súčet, bude stiahnutý znovu. @@ -3238,207 +3478,207 @@ Nie je vhodné ju používať. OCC::ownCloudGui - + Please sign in Prihláste sa prosím - + Folder %1: %2 Priečinok %1: %2 - + No sync folders configured. Nie sú nastavené žiadne synchronizačné priečinky. - + There are no sync folders configured. Nie sú nastavené žiadne priečinky na synchronizáciu. - + Open in browser Otvoriť v prehliadači - - - + + + Log in... Prihlásiť sa... - - - + + + Log out Odhlásiť - + Recent Changes Nedávne zmeny - + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + Managed Folders: Spravované priečinky: - + Open folder '%1' Otvoriť priečinok '%1' - + Open %1 in browser Otvoriť %1 v prehliadači - + Unknown status Neznámy stav - + Settings... Nastavenia... - + Details... Podrobnosti... - + Help Pomoc - + Quit %1 Ukončiť %1 - + Disconnected from %1 Odpojený od %1 - + Unsupported Server Version Nepodporovaná verzia servera - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Odpojené od účtov: - + Account %1: %2 Účet %1: %2 - + Account synchronization is disabled Synchronizácia účtu je vypnutá - + Unpause all folders Zrušiť pozastavenie všetkých priečinkov - + Pause all folders Pozastaviť všetky priečinky - + Unpause all synchronization Zrušiť pozastavenie všetkej synchronizácie - + Unpause synchronization Zrušiť pozastavenie synchronizácie - + Pause all synchronization Pozastaviť všetku synchronizáciu - + Pause synchronization Pozastaviť synchronizáciu - + Log out of all accounts Odhlásiť sa zo všetkých účtov - + Log in to all accounts... Prihlásiť sa do všetkých účtov... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Zlyhanie - + No items synced recently Žiadne nedávno synchronizované položky - + Syncing %1 of %2 (%3 left) Synchronizuje sa %1 z %2 (zostáva %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Synchronizuje sa %1 (zostáva %2) - + Syncing %1 Synchronizuje sa %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Až do dnešného dňa @@ -3446,7 +3686,7 @@ Nie je vhodné ju používať. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3549,78 +3789,42 @@ Nie je vhodné ju používať. &Heslo + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulár - - Server &address: - &Adresa servera: - - - - - TextLabel Štítok - - - Use &secure connection - Použiť &bezpečné spojenie - - - - CheckBox - Zaškrtávacie pole - - - - &Username: - &Používateľské meno - - - - Enter the ownCloud username. - Vložte používateľské meno k ownCloudu. - - - - &Password: - &Heslo: - - - - Enter the ownCloud password. - Vložte heslo k prístupu do ownCloudu. - - - - Do not allow the local storage of the password. - Nepovoliť uloženie hesla na lokálne úložisko. - - - - &Do not store password on local machine - &Neukladať heslo na lokálnom počítači - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Vložte URL inštancie ownCloudu ku ktorej sa chcete pripojiť (bez http alebo https) - Ser&ver Address @@ -3664,7 +3868,7 @@ Nie je vhodné ju používať. QApplication - + QT_LAYOUT_DIRECTION @@ -3672,42 +3876,42 @@ Nie je vhodné ju používať. QObject - + in the future v budúcnosti - + %n day(s) ago pred %n dňompred %n dňamipred %n dňami - + %n hour(s) ago pred %n hodinoupred %n hodinamipred %n hodinami - + now teraz - + Less than a minute ago Menej ako pred minútou - + %n minute(s) ago pred %n minútoupred %n minútamipred %n minútami - + Some time ago Pred istým časom - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3716,57 +3920,57 @@ Nie je vhodné ju používať. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n rokov - + %n month(s) %n mesiac%n mesiace%n mesiacov - + %n day(s) %n deň%n dni%n dní - + %n hour(s) %n hodina%n hodiny%n hodín - + %n minute(s) %n minúta%n minúty%n minút - + %n second(s) %n sekunda%n sekundy%n sekúnd - + %1 %2 %1 %2 @@ -3787,102 +3991,97 @@ Nie je vhodné ju používať. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Zostavené z Git revízie <a href="%1">%2</a> na %3, %4 s použitím Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Stiahnuté - + Uploaded Odoslané - + Server version downloaded, copied changed local file into conflict file Verzia zo servera bola stiahnutá, kópia zmenila lokálny súbor na konfliktný súbor - + Deleted Zmazané - + Moved to %1 Presunuté do %1 - + Ignored Ignorované - + Filesystem access error Chyba prístupu k súborovému systému - + Error Chyba - + Updated local metadata - - + + Unknown Neznámy - + downloading sťahujem - + uploading nahrávam - + deleting vymazávanie - + moving presúvanie - + ignoring ignorujem + - error chyba - + updating local metadata @@ -3890,54 +4089,77 @@ Nie je vhodné ju používať. theme - + Status undefined Nedefinovaný status - + Waiting to start sync Čakanie na začiatok synchronizácie - + Sync is running Prebieha synchronizácia - + Sync Success Úspešná synchronizácia - + Sync Success, some files were ignored. Synchronizácia prebehla úspešne, niektoré súbory boli ignorované. - + Sync Error Chyba synchronizácie - + Setup Error Chyba inštalácie - + Preparing to sync Príprava na synchronizáciu - + Aborting... Ruším... - + Sync is paused Synchronizácia je pozastavená + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_sl.ts b/translations/client_sl.ts index ceac569ba..999827fb0 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Ciljna datoteka ima nepričakovano velikost oziroma čas zadnje spremembe. @@ -81,6 +81,24 @@ Besedilna oznaka + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Prekliči @@ -136,188 +154,204 @@ Vzpostavljena je povezava s strežnikom <server> kot <user> - + No account configured. Ni nastavljenega računa. - + Add new Dodaj novo - + Remove Odstrani - + Account Račun - + Choose what to sync Izbor predmetov za usklajevanje - + Force sync now Vsili takojšnje usklajevanje - + Restart sync Ponovno zaženi usklajevanje - + Remove folder sync connection Odstrani povezavo mape usklajevanja - + Folder creation failed Ustvarjanje mape je spodletelo - + <p>Could not create local folder <i>%1</i>. <p>Ni mogoče ustvariti krajevne mape <i>%1</i>. - + Confirm Folder Sync Connection Removal Potrdi odstranjevanje povezave usklajevanja mape - + Remove Folder Sync Connection Odstrani povezavo usklajevanja mape - + Sync Running Usklajevanje je v teku - + The syncing operation is running.<br/>Do you want to terminate it? Izvaja se usklajevanje.<br/>Ali želite opravilo prekiniti? - + %1 in use %1 v uporabi - + %1 as <i>%2</i> %1 kot <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Različica strežnika %1 je zastarela in ni več podprta! Nadaljujete na lastno odgovornost. - + Connected to %1. Povezano z %1. - + Server %1 is temporarily unavailable. Strežnik %1 trenutno ni dosegljiv. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Uspešno odjavljeno iz %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Ni povezave z %1 pri %2. - + Log in Prijava - + There are folders that were not synchronized because they are too big: Zaznane so mape, ki zaradi omejitve velikosti niso bile usklajene: - + There are folders that were not synchronized because they are external storages: Zaznane so mape, ki zaradi pripadnosti zunanji shrambi niso bile usklajene: - + There are folders that were not synchronized because they are too big or external storages: Zaznane so mape, ki zaradi omejitve velikosti ali pripadnosti zunanji shrambi niso bile usklajene: - + Confirm Account Removal Potrdi odstranitev računa - + <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> <p>Ali res želite odstraniti povezavo z računom <i>%1</i>?</p><p><b>Opomba:</b> S tem <b>ne bo</b> izbrisana nobena datoteka.</p> - + Remove connection Odstrani povezavo - + + Open folder Odpri mapo - - + + Log out Odjava - + Resume sync Nadaljuj z usklajevanjem - + Pause sync Premor usklajevanja - + <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> <p>Ali res želite zaustaviti usklajevanje mape <i>%1</i>?</p><p><b>Opomba:</b> s tem datoteke iz odjemalca <b>ne bodo</b> odstranjene.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) od %2 v uporabi. Nekatere mape, vključno s priklopljenimi mapami in mapami v souporabi, imajo morda različne omejitve. - + %1 of %2 in use %1 od %2 v uporabi - + Currently there is no storage usage information available. Trenutno ni na voljo nobenih podatkov o porabi prostora. - + No %1 connection configured. Ni nastavljene povezave %1. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Odjavljeno - + Disconnected Brez povezave - + Connected Povezano - + Service unavailable Storitev ni na voljo - + + Maintenance mode + + + + Network error Omrežna napaka - + Configuration error Napaka nastavitve - + + Asking Credentials + + + + Unknown account state Neznano stanje računa @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Dejavnost strežnika - + Sync Protocol Protokol usklajevanja - - List of ignored or erroneous files - Seznam prezrtih datotek ali datotek z napako - - - - Copy - Kopiraj - - - - Copy the activity list to the clipboard. - Kopiraj seznam opravil v odložišče. - - - + Not Synced Ni usklajeno - + Not Synced (%1) %1 is the number of not synced files. Ni usklajeno (%1) - + The server activity list has been copied to the clipboard. Seznam opravil strežnika je kopiran v odložišče. - + The sync activity list has been copied to the clipboard. Seznam opravil usklajevanja je kopiran v odložišče. - + The list of unsynced items has been copied to the clipboard. Seznam neusklajenih predmetov je kopiran v odložišče. - + Copied to clipboard Kopirano v odložišče @@ -448,47 +477,47 @@ Besedilna oznaka - + Server Activities Dejavnosti strežnika - + Copy Kopiraj - + Copy the activity list to the clipboard. Kopiraj seznam opravil v odložišče. - + Action Required: Notifications Zahtevano je dejanje: obvestila - + <br/>Account %1 does not have activities enabled. <br/>Za račun %1 možnosti opravil niso omogočene. - + You received %n new notification(s) from %2. Prejeli ste %n novo obvestilo od %2.Prejeli ste %n novi obvestili od %2.Prejeli ste %n nova obvestila od %2.Prejeli ste %n novih obvestil od %2. - + You received %n new notification(s) from %1 and %2. Prejeli ste %n novo obvestilo od %1 in %2.Prejeli ste %n novi obvestili od %1 in %2.Prejeli ste %n nova obvestila od %1 in %2.Prejeli ste %n novih obvestil od %1 in %2. - + You received new notifications from %1, %2 and other accounts. Prejeli ste nova obvestila prek %1, %2 in drugih računov. - + %1 Notifications - Action Required %1 obvestil ‒ zahtevajo odziv @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Napaka dostopa do nastavitvene datoteke - + There was an error while accessing the configuration file at %1. Med dostopom do nastavitvene datoteke na %1 je prišlo do napake. - + Quit ownCloud Končaj ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Ni nastavljenega računa v oblaku ownCloud - + The configured server for this client is too old Nastavljen strežnik tega odjemalca je prestar. - + Please update to the latest server and restart the client. Posodobite strežnik in ponovno zaženite odjemalca. - + Authentication error: Either username or password are wrong. Napaka overitve: uporabniško ime ali geslo je napačno. - + timeout časovni zamik - + The provided credentials are not correct Podana poverila niso pravilna. - - OCC::DeleteJob - - - Connection timed out - Povezava je časovno potekla - - OCC::DiscoveryMainThread - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. Krajevna mapa %1 ne obstaja. - + %1 should be a folder but is not. %1 bi morala biti mapa, pa ni. - + %1 is not readable. %1 ni mogoče brati. - + %1 has been removed. %1 names a file. Datoteka %1 je odstranjena. - + %1 has been downloaded. %1 names a file. Datoteka %1 je prejeta. - + %1 has been updated. %1 names a file. Datoteka %1 je posodobljena. - + %1 has been renamed to %2. %1 and %2 name files. Datoteka %1 je preimenovana v %2. - + %1 has been moved to %2. Datoteka %1 je premaknjena v %2. - + %1 and %n other file(s) have been removed. Datoteka %1 in še %n druga datoteka je bila izbrisana.Datoteka %1 in še %n drugi datoteki sta bili izbrisani.Datoteka %1 in še %n druge datoteke so bile izbrisane.Datoteka %1 in še %n drugih datotek je bilo izbrisanih. - + %1 and %n other file(s) have been downloaded. Datoteka %1 in še %n druga datoteka je bila shranjena na disk.Datoteka %1 in še %n drugi datoteki sta bili shranjeni na disk.Datoteka %1 in še %n druge datoteke so bile shranjene na disk.Datoteka %1 in še %n drugih datotek je bilo shranjenih na disk. - + %1 and %n other file(s) have been updated. Datoteka %1 in še %n druga datoteka je bila posodobljena.Datoteka %1 in še %n drugi datoteki sta bili posodobljeni.Datoteka %1 in še %n druge datoteke so bile posodobljene.Datoteka %1 in še %n drugih datotek je bilo posodobljenih. - + %1 has been renamed to %2 and %n other file(s) have been renamed. Datoteka %1 je bila preimenovana v %2 in še %n druga datoteka je bila preimenovana.Datoteka %1 je bila preimenovana v %2 in še %n drugi datoteki sta bili preimenovani.Datoteka %1 je bila preimenovana v %2 in še %n druge datoteke so bile preimenovane.Datoteka %1 je bila preimenovana v %2 in še %n drugih datotek je bilo preimenovanih. - + %1 has been moved to %2 and %n other file(s) have been moved. Datoteka %1 je bila premaknjena v %2 in še %n druga datoteka je bila premaknjena.Datoteka %1 je bila premaknjena v %2 in še %n drugi datoteki sta bili premaknjeni.Datoteka %1 je bila premaknjena v %2 in še %n druge datoteke so bile premaknjene.Datoteka %1 je bila premaknjena v %2 in še %n drugih datotek je bilo premaknjenih. - + %1 has and %n other file(s) have sync conflicts. Pri datoteki %1 in še %n drugi datoteki je zaznan spor usklajevanja.Pri datoteki %1 in še %n drugih datotekah je zaznan spor usklajevanja.Pri datoteki %1 in še %n drugih datotekah je zaznan spor usklajevanja.Pri datoteki %1 in še %n drugih datotekah je zaznan spor usklajevanja. - + %1 has a sync conflict. Please check the conflict file! Pri datoteki %1 je zaznan spor usklajevanja. Preverite datoteko! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. Datoteke %1 in še %n druge datoteke ni mogoče uskladiti zaradi napak. Podrobnosti so zapisane v dnevniški datoteki.Datoteke %1 in še %n drugih datotek ni mogoče uskladiti zaradi napak. Podrobnosti so zapisane v dnevniški datoteki.Datoteke %1 in še %n drugih datotek ni mogoče uskladiti zaradi napak. Podrobnosti so zapisane v dnevniški datoteki.Datoteke %1 in še %n drugih datotek ni mogoče uskladiti zaradi napak. Podrobnosti so zapisane v dnevniški datoteki. - + %1 could not be synced due to an error. See the log for details. Datoteke %1 zaradi napake ni mogoče uskladiti. Več podrobnosti je zabeleženih v dnevniški datoteki. - + Sync Activity Dejavnost usklajevanja - + Could not read system exclude file Ni mogoče prebrati sistemske izločitvene datoteke - + A new folder larger than %1 MB has been added: %2. Dodana je nova mapa, ki presega %1 MB: %2. - + A folder from an external storage has been added. Dodana je mapa iz zunanje shrambe. - + Please go in the settings to select it if you wish to download it. Med nastavitvami jo lahko izberete in označite za prejem. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več na voljo. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -770,22 +791,22 @@ Ali ste prepričani, da želite posodobiti spremembe s strežnikom? Če je prišlo do napake in se odločite datoteke ohraniti, bodo te ponovno usklajene s strežnika. - + Remove All Files? Ali naj bodo odstranjene vse datoteke? - + Remove all files Odstrani vse datoteke - + Keep files Ohrani datoteke - + This sync would reset the files to an earlier 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? @@ -794,17 +815,17 @@ To se lahko zgodi, če je na strežniku na primer obnovljena varnostna kopija. Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi različicami. Ali želite ohraniti trenutne krajevne datoteke kot preimenovane datoteke v usklajevalnem sporu? - + Backup detected Varnostna kopija je zaznana - + Normal Synchronisation Običajno usklajevanje - + Keep Local Files as Conflict Ohrani krajevne datoteke kot datoteke v sporu @@ -812,112 +833,112 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderMan - + Could not reset folder state Ni mogoče ponastaviti stanja mape - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Obstaja starejši dnevnik usklajevanja '%1', vendar ga ni mogoče odstraniti. Preverite, ali je datoteka v uporabi. - + (backup) (varnostna kopija) - + (backup %1) (varnostna kopija %1) - + Undefined State. Nedoločeno stanje. - + Waiting to start syncing. Čakanje začetek usklajevanja - + Preparing for sync. Poteka priprava za usklajevanje. - + Sync is running. Usklajevanje je v teku. - + Last Sync was successful. Zadnje usklajevanje je bilo uspešno končano. - + Last Sync was successful, but with warnings on individual files. Zadnje usklajevanje je bilo sicer uspešno, vendar z opozorili za posamezne datoteke. - + Setup Error. Napaka nastavitve. - + User Abort. Uporabniška prekinitev. - + Sync is paused. Usklajevanje je začasno v premoru. - + %1 (Sync is paused) %1 (usklajevanje je v premoru) - + No valid folder selected! Ni izbrane veljavne mape! - + The selected path is not a folder! Izbrana pot ni mapa! - + You have no permission to write to the selected folder! Ni ustreznih dovoljenj za pisanje v izbrano mapo! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! Krajevna mapa %1 vsebuje simbolno povezavo. Ciljno mesto povezave že vključuje mapo, ki se usklajuje. Izbrati je treba drugo. - + There is already a sync from the server to this local folder. Please pick another local folder! Za to krajevno pot je že ustvarjeno mesto za usklajevanje. Izbrati je treba drugo. - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Krajevna mapa %1 že vključuje mapo, ki je določena za usklajevanje. Izbrati je treba drugo. - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Krajevna mapa %1 je že v določena za usklajevanje. Izbrati je treba drugo. - + 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! Krajevna mapa %1 je simbolna povezava. Cilj povezave že vsebuje mapo, ki je uporabljena pri povezavi usklajevanja mape. Izberite drugo. @@ -925,17 +946,17 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderStatusDelegate - + Add Folder Sync Connection Dodaj povezavo za usklajevanje mape - + Synchronizing with local folder Poteka usklajevanje s krajevno mapo - + File Datoteka @@ -943,134 +964,144 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderStatusModel - + You need to be connected to add a folder Za dodajanje mape mora biti vzpostavljea povezava - + Click this button to add a folder to synchronize. Kliknite za dodajanje mape za usklajevanje. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Prišlo je do napake med nalaganjem datotek s strežnika. - + Signed out Odjavljeno - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Dodajanje mape je onemogočeno, ker se usklajojejo vse vaše datoteke. Če želite usklajevati več map, odstranite trenutno nastavljeno korensko mapo. - + Fetching folder list from server... Poteka pridobivanje seznama map s strežnika ... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Usklajevanje %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) prejemanje %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pošiljanje %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 od %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Preostalo še %5, %1 od %2, datoteka %3 od %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 od %2, datoteka %3 od %4 - + file %1 of %2 datoteka %1 od %2 - + Waiting... Čakanje na povezavo ... - + Waiting for %n other folder(s)... V pripravi je %n druga map ...V pripravi sta %n drugi mapi ...V pripravi so %n druge mape ...V pripravi je %n drugih map ... - + Preparing to sync... Priprava na usklajevanje ... @@ -1078,12 +1109,12 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderWizard - + Add Folder Sync Connection Dodaj povezavo za usklajevanje mape - + Add Sync Connection Dodaj povezavo za usklajevanje @@ -1096,7 +1127,7 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi Kliknite za izbor krajevne mape za usklajevanje. - + Enter the path to the local folder. Vpišite pot do krajevne mape. @@ -1119,42 +1150,42 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi Vnesite ime nove mape, ki bo ustvarjena kot podrejena '%1': - + Folder was successfully created on %1. Mapa je uspešno ustvarjena na %1. - + Authentication failed accessing %1 Overitev dostopa do %1 je spodletela. - + Failed to create the folder on %1. Please check manually. Ustvarjanje mape na %1 je spodletelo. Morda jo je mogoče ustvariti ročno. - + Failed to list a folder. Error: %1 Napaka izpisovanja datotek mape. Napaka: %1 - + Choose this to sync the entire account Izberite možnost za usklajevanje celotnega računa. - + This folder is already being synced. Ta mapa je že določena za usklajevanje. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Datoteke se že usklajujejo na ravni mape <i>%1</i>, ki je nadrejena mapi <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Trenutno so v usklajevanju vse datoteke korenske mape. Usklajevanje še ene mape <b>ni</b> podprto. Če želite uskladiti več map, je treba odstraniti trenutno nastavljeno korensko mapo in spremeniti nastavitve. @@ -1175,22 +1206,22 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ni prejete oznake s strežnika. Preveriti je treba podatke posredovalnega strežnika ali prehoda. - + We received a different E-Tag for resuming. Retrying next time. Prejeta je različna oznaka za nadaljevanje opravila. Ponovni poskus bo izveden kasneje. - + Server returned wrong content-range Odziv strežnika kaže na neveljaven obseg vsebine - + Connection Timeout Povezava je časovno potekla @@ -1213,23 +1244,23 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi V sistemsko vrstico - + Advanced Napredne možnosti - + Ask for confirmation before synchronizing folders larger than Vprašaj za potrditev pred usklajevanjem map, večjih kot - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages Vprašaj za potrditev pred usklajevanjem zunanjih shramb @@ -1249,28 +1280,28 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi Uporabi &črno-bele ikone - + Edit &Ignored Files Uredi &prezrte datoteke - + S&how crash reporter Pokaži &poročilo sesutja - - + + About O programu... - + Updates Posodobitve - + &Restart && Update &Ponovno zaženi && posodobi @@ -1278,22 +1309,22 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vnesite geslo %1:<br><br>Uporabnik: %2<br>Račun: %3<br> - + Reading from keychain failed with error: '%1' Branje iz ključa je spodletelo z napako: '%1' - + Enter Password Vnos gesla - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Kliknite tu</a> za dodelitev gesla za program prek spletnega vmesnika. @@ -1375,55 +1406,125 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Ta vnos je ponujen pri '%1' in ga v tem pogledu ni mogoče spreminjati. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Beleži odvod - + &Search: &Poišči: - + &Find &Najdi - + + &Capture debug messages + + + + Clear Počisti - + Clear the log display. Počisti izpis dnevnika. - + S&ave S&hrani - + Save the log file to a file on disk for debugging. Shrani dnevniško datoteko na disk za nadaljnje razhroščevanje. - + Save log file Shrani dnevniško datoteko - + Error Napaka - + Could not write to log file %1 Ni mogoče pisati v dnevniško datoteko %1 @@ -1431,24 +1532,16 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::Logger - + Error Napaka - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Datoteke '%1'<br/>ni mogoče odpreti za pisanje.<br/><br/>Dnevniškega zapisa <b>ni mogoče</b> shraniti!</nobr> - - OCC::MoveJob - - - Connection timed out - Povezava je potekla - - OCC::NSISUpdater @@ -1560,27 +1653,27 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Samodejno omeji - + Hostname of proxy server Ime gostitelja posredniškega strežnika - + Username for proxy server Uporabniško ime za posredniški strežnik - + Password for proxy server Geslo za posredniški strežnik - + HTTP(S) proxy Posredniški strežnik HTTP(S) - + SOCKS5 proxy Posredniški strežnik SOCKS5 @@ -1593,79 +1686,112 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::NotificationWidget - + Created at %1 Ustvarjeno ob %1$s - + Closing in a few seconds... V nekaj sekundah bo izvedeno zapiranje ... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 zahteva spodletela na %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' izbrano na %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Na voljo je posodobitev %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nameščena bo najnovejša posodobitev %1. Program lahko zahteva skrbniška dovoljenja za dokončanje opravila. - + Downloading version %1. Please wait... Poteka prejemanje različice %1 ... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Ni mogoče prejeti posodobitve. Kliknite <a href='%1'>here</a> za ročni prejem in namestitev. - + Could not check for new updates. Ni mogoče preveriti za nove posodobitve. - + %1 version %2 available. Restart application to start the update. Na voljo je %1 različice %2. Ponovno zaženite program za uveljavitev posodobitve. - + New %1 version %2 available. Please use the system's update tool to install it. Na voljo je %1 različice %2. Namestite jo prek sistemskega orodja za posodobljanje. - + Checking update server... Preverjanje strežnika za posodabljanje ... - + Update status is unknown: Did not check for new updates. Stanje posodobitve ni znano: ni mogoče preveriti za nove posodobitve. - + No updates available. Your installation is at the latest version. Na voljo ni novih posodobitev. Nameščena je najnovejša različica. @@ -1678,43 +1804,43 @@ zahteva skrbniška dovoljenja za dokončanje opravila. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Vzpostavi povezavo s strežnikom %1 - + Setup local folder options Nastavi možnosti krajevne mape - + Connect... Vzpostavi povezavo ... - + %1 folder '%2' is synced to local folder '%3' %1 mapa '%2' je usklajena s krajevno mapo '%3' - + Sync the folder '%1' Uskladi mapo '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Opozorilo:</strong> krajevna mapa ni prazna. Izberite možnost za razrešitev problema!</small></p> - + Local Sync Folder Krajevna mapa usklajevanja - - + + (%1) (%1) @@ -1747,7 +1873,7 @@ zahteva skrbniška dovoljenja za dokončanje opravila. Nastavitev odjemalčevega potrdila TLS - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Povezovanje z navedenim naslovom varnega strežnika <em>%1</em> je spodletelo. Kako želite nadaljevati?</p></body></html> @@ -1755,47 +1881,60 @@ zahteva skrbniška dovoljenja za dokončanje opravila. OCC::OwncloudHttpCredsPage - + &Email &Elektronski naslov - + Connect to %1 Vzpostavi povezavo s strežnikom %1 - + Enter user credentials Vpiši uporabniška poverila + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Vzpostavi povezavo s strežnikom %1 - + Setup %1 server Nastavi strežnik %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Na naslov URL ni varen, saj ni šifriran. Uporaba ni priporočljiva. - + This url is secure. You can use it. Ta naslov URL je varen za uporabo. - + &Next > &Naslednja > @@ -1803,22 +1942,22 @@ Uporaba ni priporočljiva. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Uspešno vzpostavljena povezava z %1: %2 različica %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Povezava z %1 pri %2 je spodletela:<br/>%3 - + Timeout while trying to connect to %1 at %2. Prekinitev med poskusom povezave na %1 pri %2. - + Trying to connect to %1 at %2... Poteka poskus povezave z %1 na %2 ... @@ -1838,109 +1977,109 @@ Uporaba ni priporočljiva. Strežnik ne dovoli dostopa. Če želite preveriti, ali imate ustrezen dostop, <a href="%1">kliknite tu</a> za dostop do te storitve z brskalnikom. - + Invalid URL Neveljaven naslov URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Krajevna mapa %1 že obstaja. Nastavljena bo za usklajevanje.<br/><br/> - + Creating local sync folder %1... Ustvarjanje mape za krajevno usklajevanje %1 ... - + ok je v redu - + failed. je spodletelo. - + Could not create local folder %1 Krajevne mape %1 ni mogoče ustvariti. - + No remote folder specified! Ni navedenega oddaljenega strežnika! - + Error: %1 Napaka: %1 - + creating folder on ownCloud: %1 ustvarjanje mape v oblaku ownCloud: %1 - + Remote folder %1 created successfully. Oddaljena mapa %1 je uspešno ustvarjena. - + The remote folder %1 already exists. Connecting it for syncing. Oddaljena mapa %1 že obstaja. Vzpostavljena bo povezava za usklajevanje. - + The folder creation resulted in HTTP error code %1 Ustvarjanje mape je povzročilo napako HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ustvarjanje mape na oddaljenem naslovu je spodletelo zaradi napačnih poveril. <br/>Vrnite se in preverite zahtevana gesla.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Ustvarjanje oddaljene mape je spodletelo. Najverjetneje je vzrok v neustreznih poverilih.</font><br/>Vrnite se na predhodno stran in jih preverite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Ustvarjanje oddaljene mape %1 je spodletelo z napako <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Povezava za usklajevanje med %1 in oddaljeno mapo %2 je vzpostavljena. - + Successfully connected to %1! Povezava z %1 je uspešno vzpostavljena! - + Connection to %1 could not be established. Please check again. Povezave z %1 ni mogoče vzpostaviti. Preveriti je treba nastavitve. - + Folder rename failed Preimenovanje mape je spodletelo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Mape ni mogoče odstraniti niti ni mogoče ustvariti varnostne kopije, saj je mapa oziroma dokument v njej odprt z drugim programom. Zaprite mapo/dokument ali prekinite namestitev. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Krajevno usklajena mapa %1 je uspešno ustvarjena!</b></font> @@ -1948,12 +2087,12 @@ Uporaba ni priporočljiva. OCC::OwncloudWizard - + %1 Connection Wizard Čarovnik za povezavo %1 - + Skip folders configuration Preskoči nastavitve map @@ -1961,33 +2100,25 @@ Uporaba ni priporočljiva. OCC::OwncloudWizardResultPage - + Everything set up! Vse je pripravljeno za uporabo! - + Open Local Folder Odpri krajevno mapo - + Open %1 in Browser Odpri %1 v brskalniku - - OCC::PUTFileJob - - - Connection Timeout - Povezava časovno pretekla - - OCC::PollJob - + Invalid JSON reply from the poll URL Neveljaven odziv JSON preverjanja naslova URL @@ -1995,7 +2126,7 @@ Uporaba ni priporočljiva. OCC::PropagateDirectory - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2003,47 +2134,47 @@ Uporaba ni priporočljiva. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Datoteke %1 ni mogoče prejeti zaradi neskladja z imenom krajevne datoteke! - - The download would reduce free disk space below %1 - Prejem bi zmanjšal prostor na disku pod %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Na disku je prostora manj kot %1 - + File was deleted from server Datoteka je izbrisana s strežnika - + The file could not be downloaded completely. Datoteke ni mogoče prejeti v celoti. - + The downloaded file is empty despite the server announced it should have been %1. Prejeta datoteka je prazna, čeprav je na strežniku velikosti %1. - + File %1 cannot be saved because of a local file name clash! Datoteke %1 ni mogoče shraniti zaradi neskladja z imenom obstoječe datoteke! - + File has changed since discovery Datoteka je bila spremenjena po usklajevanju seznama datotek - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2051,17 +2182,12 @@ Uporaba ni priporočljiva. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; obnovitev je spodletela: %1 - - Continue blacklisting: - Nadaljuj z blokiranjem prek črnega seznama: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Datoteka ali mapa je bila odstranjena iz mesta v souporabi, ki je nastavljeno le za branje, obnavljanje pa je spodletelo: %1 @@ -2069,22 +2195,22 @@ Uporaba ni priporočljiva. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ni mogoče izbrisati datoteke %1, napaka: %2 - + Attention, possible case sensitivity clash with %1 Pozor, mogoče je neskladje v velikosti črk imena %1 - + could not create folder %1 ni mogoče ustvariti mape %1 - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2092,17 +2218,17 @@ Uporaba ni priporočljiva. OCC::PropagateLocalRemove - + Error removing '%1': %2; Napaka odstranjevanja '%1': %2; - + Could not remove folder '%1' Ni mogoče odstraniti mape '%1' - + Could not remove %1 because of a local file name clash Ni mogoče odstraniti %1 zaradi neskladja s krajevnim imenom datoteke @@ -2110,13 +2236,13 @@ Uporaba ni priporočljiva. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Datoteke %1 ni mogoče preimenovati v %2 zaradi že obstoječe datoteke s tem imenom. - - + + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2124,12 +2250,12 @@ Uporaba ni priporočljiva. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Datoteka je bila odstranjena iz mesta v souporabi, vendar je uspešno obnovljena. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". S strežnika je vrnjen neveljaven odziv HTTP. Pričakovan je 204, prejet pa je bil "%1 %2". @@ -2137,12 +2263,12 @@ Uporaba ni priporočljiva. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". S strežnika je vrnjen neveljaven odziv HTTP. Pričakovan je 201, prejet pa je bil "%1 %2". - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2150,28 +2276,28 @@ Uporaba ni priporočljiva. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Te mape ni dovoljeno preimenovati, zato bo samodejno preimenovana v izvorno ime. - + This folder must not be renamed. Please name it back to Shared. Te mape ni dovoljeno preimenovati. Preimenujte jo nazaj na privzeto vrednost. - + The file was renamed but is part of a read only share. The original file was restored. Datoteka je preimenovana, vendar je označena za souporabo le za branje. Obnovljena je izvirna datoteka. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". S strežnika je vrnjen neveljaven odziv HTTP. Pričakovan je 201, prejet pa je bil "%1 %2". - - + + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2179,27 +2305,32 @@ Uporaba ni priporočljiva. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists Datoteke %1 ni mogoče naložiti, saj obstaja druga, istoimenska datoteka, ki se od nje razlikuje le po velikih črkah v imenu. - + File Removed Datoteka je odstranjena - + Local file changed during syncing. It will be resumed. Krajevna datoteka je bila med usklajevanjem spremenjena. Usklajena bo, ko bo shranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2207,32 +2338,32 @@ Uporaba ni priporočljiva. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vsiljevanje prekinitve posla na prekinitvi povezave HTTP s Qt < 5.4.2. - + The local file was removed during sync. Krajevna datoteka je bila med usklajevanjem odstranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + Unexpected return code from server (%1) Napaka: nepričakovan odziv s strežnika (%1). - + Missing File ID from server Na strežniku manjka ID datoteke - + Missing ETag from server Na strežniku manjka ETag datoteke @@ -2240,32 +2371,32 @@ Uporaba ni priporočljiva. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Vsiljevanje prekinitve posla na prekinitvi povezave HTTP s Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Datoteka je bila krajevno spremenjena, čeprav je označena le za branje. Izvorna datoteka je obnovljena, narejene spremembe pa so zabeležene v datoteki spora. - + Poll URL missing Preveri manjkajoči naslov URL - + The local file was removed during sync. Krajevna datoteka je bila med usklajevanjem odstranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + The server did not acknowledge the last chunk. (No e-tag was present) Strežnik ne sprejme zadnjega paketa (ni navedene e-oznake) @@ -2283,42 +2414,42 @@ Uporaba ni priporočljiva. Besedilna oznaka - + Time Čas - + File Datoteka - + Folder Mapa - + Action Dejanje - + Size Velikost - + Local sync protocol Krajevni protokol usklajevanja - + Copy Kopiraj - + Copy the activity list to the clipboard. Kopiraj seznam opravil v odložišče. @@ -2359,7 +2490,7 @@ Uporaba ni priporočljiva. OCC::SelectiveSyncDialog - + Choose What to Sync Izbor map za usklajevanje @@ -2367,33 +2498,33 @@ Uporaba ni priporočljiva. OCC::SelectiveSyncWidget - + Loading ... Poteka nalaganje ... - + Deselect remote folders you do not wish to synchronize. Odstranite izbor oddaljenih map, ki jih ne želite usklajevati. - + Name Ime - + Size Velikost - - + + No subfolders currently on the server. Na strežniku trenutno ni podrejenih map. - + An error occurred while loading the list of sub folders. Prišlo je do napake med nalaganjem seznama podrejenih map. @@ -2406,22 +2537,22 @@ Uporaba ni priporočljiva. Nastavitve - + Activity Dejavnosti - + General Splošno - + Network Omrežje - + Account Račun @@ -2429,27 +2560,27 @@ Uporaba ni priporočljiva. OCC::SettingsDialogMac - + %1 %1 - + Activity Dejavnosti - + General Splošno - + Network Omrežje - + Account Račun @@ -2477,35 +2608,45 @@ Uporaba ni priporočljiva. Pot do OwnCloud: - + %1 Sharing %1 souporaba datotek - + %1 %1 - + Folder: %2 Mapa: %2 - + The server does not allow sharing Strežnik ne podpira souporabe - + Retrieving maximum possible sharing permissions from server... Pridobivanje največjega mogočega števila dovoljenj za souporabo prek strežnika ... - + The file can not be shared because it was shared without sharing permission. Datoteke ni mogoče dodeliti v souporabo, ker ni navedenih ustreznih dovoljenj. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2515,92 +2656,126 @@ Uporaba ni priporočljiva. Souporaba datoteke NovDokument.odt - - Share link - Povezava za souporabo - - - + TextLabel Besedilna oznaka - + Set &password Nastavi &geslo - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Nastavi datum &preteka - + Set password Nastavi geslo - - &Mail link - &Pošlji povezavo prek elektronske pošte + + Link properties: + - Copy &link - &Kopiraj povezavo + Show file listing + - + Allow editing Dovoli urejanje - + Anyone with the link has access to the file/folder Vsak, ki ima povezavo ima dostop do datoteke ali mape - + + P&assword protect &Zaščiti z geslom - + Password Protected Zaščiteno z geslom - + The file can not be shared because it was shared without sharing permission. Datoteke ni mogoče dodeliti v souporabo, ker je ni navedenih ustreznih dovoljenj. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Javna omogočanje &souporabe zahteva geslo - + Please Set Password Določite geslo - - - Could not open email client - Ni mogoče odpreti odjemalca elektronske pošte - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Prišlo je do napake med zaganjanjem odjemalca elektronske pošte za ustvarjanje novega sporočila. Najverjetneje ni nastavljen privzet programski paket. - - - - - &Share link - Povezava za &souporabo - OCC::ShareUserGroupWidget @@ -2610,68 +2785,98 @@ Uporaba ni priporočljiva. Souporaba datoteke NovDokument.odt - + Share with users or groups ... Souporaba z uporabniki ali skupinami ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Ni zadetkov za '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Obrazec + - + TextLabel - Besedilna oznaka + - + can edit - lahko ureja + - + can share - lahko omogoči souporabo + - + ... - ... + - + create - ustvari + - + change - spremeni + - + delete - izbriši + OCC::ShibbolethCredentials - + Login Error Napaka prijave - + You must sign in as user %1 Prijaviti se je treba kot uporabnik %1 @@ -2679,22 +2884,22 @@ Uporaba ni priporočljiva. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Overitev - + SSL Chipher Debug View Pogled razhroščevalnika šifer SSL - + Reauthentication required Zahtevano je vnovično overjanje istovetnosti - + Your session has expired. You need to re-login to continue to use the client. Seja je potekla. Ponovno se je treba prijaviti in nadaljevati z uporabo odjemalca. @@ -2702,26 +2907,46 @@ Uporaba ni priporočljiva. OCC::SocketApi - + Share with %1 parameter is ownCloud Omogoči souporabo z %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Podrobnosti potrdila</h3> - + Common Name (CN): Splošno ime (CN): - + Subject Alternative Names: Druga imena: @@ -2806,7 +3031,7 @@ Uporaba ni priporočljiva. %1 - + This connection is encrypted using %1 bit %2. Ta povezava je šifrirana z %1 bitnim %2. @@ -2823,7 +3048,7 @@ Uporaba ni priporočljiva. Podrobnosti potrdila: - + This connection is NOT secure as it is not encrypted. Ta povezava NI varna, saj ni šifrirana. @@ -2843,67 +3068,67 @@ Uporaba ni priporočljiva. Vseeno zaupaj digitalnemu potrdilu - + Untrusted Certificate Potrdilo ni vredno zaupanja - + Cannot connect securely to <i>%1</i>: Ni mogoče vzpostaviti varne povezave z <i>%1</i>: - + with Certificate %1 s potrdilom %1 - + &lt;not specified&gt; &lt;ni podano&gt; - - + + Organization: %1 Ustanova: %1 - - + + Unit: %1 Enota: %1 - - + + Country: %1 Država: %1 - + Fingerprint (MD5): <tt>%1</tt> Prstni odtis (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Prstni odtis (SHA1): <tt>%1</tt> - + Effective Date: %1 Začetek veljavnosti: %1 - + Expiration Date: %1 Datum preteka: %1 - + Issuer: %1 Izdajatelj: %1 @@ -2911,285 +3136,300 @@ Uporaba ni priporočljiva. OCC::SyncEngine - + Success. Uspešno končano. - + CSync failed to load the journal file. The journal file is corrupted. Nalaganje dnevniške datoteke s CSync je spodletelo. Dnevniška datoteka je okvarjena. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Vstavka %1 za CSync ni mogoče naložiti.<br/>Preverite namestitev!</p> - + CSync got an error while processing internal trees. Pri obdelavi notranje drevesne strukture s CSync je prišlo do napake. - - CSync failed to reserve memory. - Vpisovanje prostora v pomnilniku za CSync je spodletelo. - - - + CSync fatal parameter error. Usodna napaka parametra CSync. - + CSync processing step update failed. Korak opravila posodobitve CSync je spodletel. - + CSync processing step reconcile failed. Korak opravila poravnave CSync je spodletel. - + CSync could not authenticate at the proxy. Overitev CSync na posredniškem strežniku je spodletela. - + CSync failed to lookup proxy or server. Poizvedba posredniškega strežnika s CSync je spodletela. - + CSync failed to authenticate at the %1 server. Overitev CSync pri strežniku %1 je spodletela. - + CSync failed to connect to the network. Povezava CSync v omrežje je spodletela. - + A network connection timeout happened. Omrežna povezava je časovno potekla. - + A HTTP transmission error happened. Prišlo je do napake med prenosom HTTP. - + The mounted folder is temporarily not available on the server Priklopljena mapa trenutno ni na voljo na strežniku - + An error occurred while opening a folder Med odpiranjem mape je prišlo do napake. - + Error while reading folder. Napaka med branjem mape - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Datoteka/Mapa je prezrta, ker je skrita. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. Odziv CSync: na strežniku %1 ni razpoložljivega prostora. - + CSync unspecified error. Nedoločena napaka CSync. - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika - + CSync failed to access Dostop s CSync je spodletel - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Nalaganje ali ustvarjanje dnevniške datoteke s CSync je spodletelo. Za to opravilo so zahtevana dovoljenja branja in zapisovanja krajevne mape za usklajevanje. - + CSync failed due to unhandled permission denied. Delovanje CSync je zaradi nerazrešenih dovoljenj spodletelo. - + CSync tried to create a folder that already exists. Ustvarjanje mape s CSync je spodletelo. Mapa že obstaja. - + The service is temporarily unavailable Storitev trenutno ni na voljo - + Access is forbidden Dostop je prepovedan. - + An internal error number %1 occurred. Prišlo je do notranje napake %1. - - The item is not synced because of previous errors: %1 - Predmet ni usklajen zaradi predhodne napake: %1 - - - + Symbolic links are not supported in syncing. Usklajevanje simbolnih povezav ni podprto. - + File is listed on the ignore list. Datoteka je na seznamu prezrtih datotek. - + File names ending with a period are not supported on this file system. Imena datotek, ki vsebujejo piko, na tem sistemu niso podprta. - + File names containing the character '%1' are not supported on this file system. Imena datotek, ki vsebujejo znak »%1«, na tem sistemu niso podprta. - + The file name is a reserved name on this file system. Ime datoteke je na tem sistemu zadržano za sistemsko datoteko. - + Filename contains trailing spaces. Datoteka vsebuje pripete presledne znake - + Filename is too long. Ime datoteke je predolgo. - + Stat failed. Določanje statističnih podatkov je spodletelo. - + Filename encoding is not valid Kodni zapis imena datoteke ni veljaven. - + Invalid characters, please rename "%1" Uporabljen je neveljaven znak; preimenujte "%1" - - Unable to initialize a sync journal. - Dnevnika usklajevanja ni mogoče začeti. - - - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir @@ -3205,7 +3445,7 @@ Uporaba ni priporočljiva. OCC::Systray - + %1: %2 %1: %2 @@ -3213,17 +3453,17 @@ Uporaba ni priporočljiva. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Različica %1. Za več podrobnosti si oglejte <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Avtorske pravice ownCloud, GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Programski paket objavlja %1 pod pogoji Splošnega javnega dovoljenja GNU (GNU General Public License - GPL), različice 2.0.<br>%2 in logotip %2 sta blagovni znamki %1 v Združenih državah, drugih državah ali oboje.</p> @@ -3231,17 +3471,17 @@ Uporaba ni priporočljiva. OCC::ValidateChecksumHeader - + The checksum header is malformed. Glava nadzorne vsote je napačno oblikovana. - + The checksum header contained an unknown checksum type '%1' Glava nadzorne vsote vsebuje neznano vrsto zapisa '%1' - + The downloaded file does not match the checksum, it will be resumed. Prejeta datoteka ni skladna z nadzorno vsoto te datoteke, zato bo prenos ponovljen. @@ -3249,207 +3489,207 @@ Uporaba ni priporočljiva. OCC::ownCloudGui - + Please sign in Pred nadaljevanjem je zahtevana prijava - + Folder %1: %2 Mapa %1: %2 - + No sync folders configured. Ni nastavljenih map za usklajevanje. - + There are no sync folders configured. Ni nastavljenih map za usklajevanje. - + Open in browser Odpri v brskalniku - - - + + + Log in... Prijava ... - - - + + + Log out Odjava - + Recent Changes Nedavne spremembe - + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + Managed Folders: Upravljane mape: - + Open folder '%1' Odpri mapo '%1' - + Open %1 in browser Odpri %1 v brskalniku - + Unknown status Neznano stanje - + Settings... Nastavitve ... - + Details... Podrobnosti ... - + Help Pomoč - + Quit %1 Končaj %1 - + Disconnected from %1 Prekinjena povezava z %1 - + Unsupported Server Version Nepodprta različica strežnika - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Na strežniku računua %1 teče starejša nepodprta različica %2. Z uporabo trenutno nameščenega odjemalca z nepodporo različico strežnika ni varno. Nadaljujete na lastno odgovornost. - + Disconnected from accounts: Prekinjena je povezava z računi: - + Account %1: %2 Račun %1: %2 - + Account synchronization is disabled Usklajevanje računa je onemogočeno - + Unpause all folders Nadaljuj usklajevanje vseh map - + Pause all folders Ustavi usklajevanje vseh map - + Unpause all synchronization Nadaljuj usklajevanje vsega - + Unpause synchronization Nadaljuj usklajevanje - + Pause all synchronization Ustavi vse usklajevanje - + Pause synchronization Ustavi usklajevanje - + Log out of all accounts Odjavi vse račune - + Log in to all accounts... Prijavi z vsemi računi ... - + New account... Nov račun ... - + Crash now Only shows in debug mode to allow testing the crash handler Sesuj zdaj - + No items synced recently Ni nedavno usklajenih predmetov - + Syncing %1 of %2 (%3 left) Poteka usklajevanje %1 od %2 (preostaja %3) - + Syncing %1 of %2 Poteka usklajevanje %1 od %2 - + Syncing %1 (%2 left) Usklajevanje %1 (%2 do konca) - + Syncing %1 Usklajevanje %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ni posodobitev @@ -3457,9 +3697,9 @@ Uporaba ni priporočljiva. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> - + <p>Različica %2. Več podrobnosti je mogoče najti na <a href="%3">https://%4</a></p><p>Znane težave in pomoč je na voljo na povezavi <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a>.</p><p><small>Avtorstvo: Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt in drugi.</small></p><p>Avtorske pravice ownCloud GmbH</p><p>Programski paket je objavljen z dovoljenjem GNU General Public License (GPL), različice 2.0.<br/>Znamka in logotip ownCloud sta blagovni znamki družbe ownCloud GmbH v Združenih državah, drugih državah ali obojih.</p> @@ -3560,78 +3800,42 @@ Uporaba ni priporočljiva. &Geslo + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Obrazec - - Server &address: - &Naslov strežnika: - - - - - TextLabel Besedilna oznaka - - - Use &secure connection - Uporabi &varno povezavo - - - - CheckBox - Potrditveno polje - - - - &Username: - &Uporabniško ime: - - - - Enter the ownCloud username. - Vnos uporabniškega imena za oblak ownCloud. - - - - &Password: - &Geslo: - - - - Enter the ownCloud password. - Vnos gesla za oblak ownCloud. - - - - Do not allow the local storage of the password. - Ne dovoli shranjevanja gesla na krajevnem računalniku. - - - - &Do not store password on local machine - &Ne shranjuj gesel na krajevnem računalniku. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Vnesite naslov URL oblaka ownCloud, s katerim želite vzpostaviti povezavo (brez http ali https). - Ser&ver Address @@ -3675,7 +3879,7 @@ Uporaba ni priporočljiva. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3683,42 +3887,42 @@ Uporaba ni priporočljiva. QObject - + in the future v prihodnje - + %n day(s) ago pred %n dnevompred %n dnevomapred %n dnevipred %n dnevi - + %n hour(s) ago pred %n uropred %n uramapred %n uramipred %n urami - + now zdaj - + Less than a minute ago Pred manj kot minuto - + %n minute(s) ago pred %n minutopred %n minutamapred %n minutamipred %n minutami - + Some time ago Pred nekaj časa - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3727,57 +3931,57 @@ Uporaba ni priporočljiva. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n leto%n leti%n leta%n let - + %n month(s) %n mesec%n meseca%n meseci%n mesecev - + %n day(s) %n dan%n dneva%n dnevi%n dni - + %n hour(s) %n ura%n uri%n ure%n ur - + %n minute(s) %n minuta%n minuti%n minute%n minut - + %n second(s) %n sekunda%n sekundi%n sekunde%n sekund - + %1 %2 %1 %2 @@ -3798,102 +4002,97 @@ Uporaba ni priporočljiva. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Izgrajeno na osnovi predelave Git <a href="%1">%2</a> na %3, %4 z uporabo Qt %5, %6</small></p> - - - built with %1 - izgrajeno s programom %1 - progress - + Downloaded Prejeto - + Uploaded Poslano - + Server version downloaded, copied changed local file into conflict file Strežniška različica je prejeta, kopirana v datoteko sporov pa je bila tudi spremenjena krajevna datoteka - + Deleted Izbrisano - + Moved to %1 Premaknjeno v %1 - + Ignored Prezrto - + Filesystem access error Napaka dostopa do datotečnega sistema - + Error Napaka - + Updated local metadata Posodobljeni krajevni metapodatki - - + + Unknown Neznano - + downloading prejemanje - + uploading pošiljanje - + deleting brisanje - + moving premikanje - + ignoring Prezrto + - error napaka - + updating local metadata posodabljanje krajevnih metapodatkov @@ -3901,54 +4100,77 @@ Uporaba ni priporočljiva. theme - + Status undefined Stanje je nedoločeno - + Waiting to start sync Čakanje začetek usklajevanja - + Sync is running Usklajevanje v teku - + Sync Success Usklajevanje je uspešno končano - + Sync Success, some files were ignored. Usklajevanje je končano, ostajajo pa nerešene težave s posameznimi datotekami. - + Sync Error Napaka usklajevanja - + Setup Error Napaka nastavitve - + Preparing to sync Priprava na usklajevanje - + Aborting... Poteka prekinjanje ... - + Sync is paused Usklajevanje je ustavljeno + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_sr.ts b/translations/client_sr.ts index d448d8238..29f8ec585 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Одредишни фајл има неочекивану величину или време измене @@ -81,6 +81,24 @@ Текст ознака + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Одустани @@ -136,188 +154,204 @@ Повезан са <server> као <user> - + No account configured. Није подешен налог. - + Add new Додај нови - + Remove Уклони - + Account Налог - + Choose what to sync Изаберите шта синхронизовати - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Прављење фасцикле није успело - + <p>Could not create local folder <i>%1</i>. <p>Не могу да направим локалну фасциклу <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Синхронизација у току - + The syncing operation is running.<br/>Do you want to terminate it? Синхронизација је у току.<br/>Желите ли да је прекинете? - + %1 in use %1 искоришћено - + %1 as <i>%2</i> %1 као <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Повезан са %1. - + Server %1 is temporarily unavailable. Сервер %1 је привремено недоступан. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Одјављен са %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. - + Log in Пријава - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Потврда уклањања налога - + <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> - + Remove connection Уклони везу - + + Open folder Отвори фасциклу - - + + Log out Одјава - + Resume sync Настави синхронизацију - + Pause sync Паузирај синхронизацију - + <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> <p>Желите ли заиста да престанете са синхронизацијом фасцикле <i>%1</i>?</p><p><b>Напомена:</b> Ово <b>неће</b> обрисати ниједан фајл.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) од %2 искоришћено. Неке фасцикле, укључујући мрежно монтиране или дељене фасцикле, могу имати друга ограничења. - + %1 of %2 in use %1% од %2 искоришћено - + Currently there is no storage usage information available. Тренутно нема доступних података о заузећу складишта. - + No %1 connection configured. Нема подешене %1 везе. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Одјављен - + Disconnected Неповезан - + Connected Повезан - + Service unavailable Услуга није доступна - + + Maintenance mode + + + + Network error Грешка мреже - + Configuration error Грешка подешавања - + + Asking Credentials + + + + Unknown account state Непознато стање налога @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Активност сервера - + Sync Protocol Протокол синхронизације - - List of ignored or erroneous files - Списак занемарених или фајлова са грешком - - - - Copy - Копирај - - - - Copy the activity list to the clipboard. - Копирај активност у клипборд. - - - + Not Synced Несинхронизовано - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Копирано у клипборд @@ -448,47 +477,47 @@ Текст ознака - + Server Activities Активности сервера - + Copy Копирај - + Copy the activity list to the clipboard. Копирај активност у клипборд. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>Налог %1 нема укључене активности. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Нема подешеног оунКлауд налога - + The configured server for this client is too old Подешени сервер је сувише стар за ову верзију клијента - + Please update to the latest server and restart the client. Ажурирајте сервер и поново покрените клијента. - + Authentication error: Either username or password are wrong. Грешка аутентификације: лозинка или корисничко име су погрешни. - + timeout истек времена - + The provided credentials are not correct Дати акредитиви нису исправни - - OCC::DeleteJob - - - Connection timed out - Време повезивања истекло - - OCC::DiscoveryMainThread - + Aborted by the user Прекинуо корисник @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Локална фасцикла %1 не постоји. - + %1 should be a folder but is not. %1 би требало да је фасцикла али није. - + %1 is not readable. %1 није читљив. - + %1 has been removed. %1 names a file. %1 је уклоњен. - + %1 has been downloaded. %1 names a file. %1 је преузет. - + %1 has been updated. %1 names a file. %1 је ажуриран. - + %1 has been renamed to %2. %1 and %2 name files. %1 је преименован у %2. - + %1 has been moved to %2. %1 је премештен у %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 није синхронизован због грешке. Погледајте записник за детаље. - + Sync Activity Активност синхронизације - + Could not read system exclude file Не могу да прочитам системски списак за игнорисање - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Уклонити све фајлове? - + Remove all files Уклони све фајлове - + Keep files Остави фајлове - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Не могу да ресетујем стање фасцикле - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Пронађен је стари журнал синхронизације „%1“ али се не може уклонити. Проверите да га нека апликација тренутно не користи. - + (backup) (резерва) - + (backup %1) (резерва %1) - + Undefined State. Неодређено стање. - + Waiting to start syncing. - + Preparing for sync. Припремам синхронизацију. - + Sync is running. Синхронизација у току. - + Last Sync was successful. Последња синхронизација је била успешна. - + Last Sync was successful, but with warnings on individual files. Последња синхронизација је била успешна али са упозорењима за поједине фајлове. - + Setup Error. Грешка подешавања. - + User Abort. Корисник прекинуо. - + Sync is paused. Синхронизација је паузирана. - + %1 (Sync is paused) %1 (синхронизација паузирана) - + No valid folder selected! - + The selected path is not a folder! - + You have no permission to write to the selected folder! Немате дозволе за упис у изабрану фасциклу! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Додај везу синхронизације фасцикле - + Synchronizing with local folder - + File Фајл @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Одјављен - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Добављам списак фасцикли са сервера... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Проверавам измене у „%1“ - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name „%1“ - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизујем %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) преузми %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) отпреми %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 од %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 фајл %1 од %2 - + Waiting... Чекам... - + Waiting for %n other folder(s)... - + Preparing to sync... Припремам синхронизацију... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Додај везу синхронизације фасцикле - + Add Sync Connection Додај везу синхронизације @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Клик за избор локалне фасцикле за синхронизацију. - + Enter the path to the local folder. Унесите путању до локалне фасцикле. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Унесите назив нове фасцикле која ће бити направљена у %1: - + Folder was successfully created on %1. Фасцикла је успешно направљена на %1 - + Authentication failed accessing %1 Неуспела аутентификација при приступу %1 - + Failed to create the folder on %1. Please check manually. Нисам успео да направим фасциклу на %1. Проверите ручно. - + Failed to list a folder. Error: %1 Неуспех излиставања фасцикле. Грешка: %1 - + Choose this to sync the entire account Ово изаберите да синхронизујете целокупан налог - + This folder is already being synced. Ова фасцикла се већ синхронизује. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Већ синхронизујете <i>%1</i>, која садржи фасциклу <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Већ синхронизујете све ваше фајлове. Синхронизација других фасцикли <b>није</b> подржана. Ако желите синхронизацију више фасцикли, уклоните тренутно подешену корену фасциклу. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Нема е-ознаке са сервера. Проверите прокси или мрежни излаз - + We received a different E-Tag for resuming. Retrying next time. Добијена је различита е-ознака за наставак преноса. Покушаћу поново следећи пут. - + Server returned wrong content-range Сервер је вратио погрешан опсег садржаја - + Connection Timeout Време за повезивање је истекло @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced Напредно - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Користи &једнобојне иконе - + Edit &Ignored Files Уреди &занемарене фајлове - + S&how crash reporter - - + + About О програму - + Updates Ажурирања - + &Restart && Update &Поново покрени и ажурирај @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Унесите лозинку - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Овај унос је системски из „%1“ и не може се овде изменити. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Бележи излаз - + &Search: &Тражи: - + &Find &Нађи - + + &Capture debug messages + + + + Clear Очисти - + Clear the log display. Очисти приказ записника. - + S&ave С&ачувај - + Save the log file to a file on disk for debugging. Сачувајте фајл записника на диску. - + Save log file Сачувај фајл записника - + Error Грешка - + Could not write to log file %1 Не могу да пишем у записник %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Грешка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Фајл „%1“<br/>није уписив.<br/><br/>Записник се <b>не може</b> сачувати!</nobr> - - OCC::MoveJob - - - Connection timed out - Време повезивања истекло - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from сам ограничи - + Hostname of proxy server назив прокси сервера - + Username for proxy server корисничко име за прокси - + Password for proxy server лозинка за прокси - + HTTP(S) proxy ХТТП(С) прокси - + SOCKS5 proxy СОКС-5 прокси @@ -1582,79 +1675,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Ново %1 ажурирање спремно - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Ново ажурирање за %1 ће се инсталирати. Можда ће бити потребне додатне дозволе током процеса. - + Downloading version %1. Please wait... Преузимам верзију %1. Сачекајте... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Не могу да преузмем ажурирање. Кликните <a href='%1'>овде</a> да бисте га преузели ручно. - + Could not check for new updates. Не могу да проверим нова ажурирања. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Проверавам сервер ажурирања... - + Update status is unknown: Did not check for new updates. Стање ажурирања је непознато. Нисам проверио нова ажурирања. - + No updates available. Your installation is at the latest version. Нема доступних ажурирања. Имате последњу верзију. @@ -1667,43 +1793,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Повежи се са %1 - + Setup local folder options Опције поставке локалне фасцикле - + Connect... Повежи се... - + %1 folder '%2' is synced to local folder '%3' %1 фасцикла „%2“ је сингронизована са локалном „%3“ - + Sync the folder '%1' Синхронизуј фасциклу „%1“ - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Синхронизација локалне фасцикле - - + + (%1) (%1) @@ -1736,7 +1862,7 @@ for additional privileges during the process. Подеси клијентски ТЛС сертификат - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не могу да се повежем на сигурну адресу сервера <em>%1</em>. Како желите да наставите?</p></body></html> @@ -1744,47 +1870,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 Повежи %1 - + Enter user credentials Унесите корисничке акредитиве + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Повежи %1 - + Setup %1 server Подеси %1 сервер - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Ова адреса НИЈЕ безбедна јер није шифрована. Не препоручује се њено коришћење. - + This url is secure. You can use it. Ова адреса је безбедна. Можете је користити. - + &Next > &Следеће > @@ -1792,22 +1931,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успешно повезан са %1: %2 верзија %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Неуспешно повезивање са %1 на %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Време је истекло у покушају повезивања са %1 на %2. - + Trying to connect to %1 at %2... Покушавам да се повежем са %1 на %2... @@ -1827,109 +1966,109 @@ It is not advisable to use it. Сервер није дозволио приступ. Да проверите имате ли исправан приступ, <a href="%1">кликните овде</a> да бисте приступили услузи из прегледача. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локална фасцикла %1 већ постоји. Одређујем је за синхронизацију.<br/><br/> - + Creating local sync folder %1... Правим локалну фасциклу синхронизације %1... - + ok у реду - + failed. неуспешно - + Could not create local folder %1 Не могу да направим локалну фасциклу %1 - + No remote folder specified! Није наведена удаљена фасцикла! - + Error: %1 Грешка: %1 - + creating folder on ownCloud: %1 правим фасциклу у облаку: % 1 - + Remote folder %1 created successfully. Удаљена фасцикла %1 је успешно направљена. - + The remote folder %1 already exists. Connecting it for syncing. Удаљена фасцикла %1 већ постоји. Повезујем се ради синхронизовања. - + The folder creation resulted in HTTP error code %1 Прављење фасцикле довело је до ХТТП грешке са кодом %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Прављење удаљене фасцикле није успело због погрешних акредитива!<br/>Идите назад и проверите ваше акредитиве.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Прављење удаљене фасцикле није успело због погрешних акредитива.</font><br/>Идите назад и проверите ваше акредитиве.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Прављење удаљене фасцикле %1 није успело због грешке <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Веза за синхронизацију %1 до удаљеног директоријума %2 је подешена. - + Successfully connected to %1! Успешно повезан са %1! - + Connection to %1 could not be established. Please check again. Не може се успоставити веза са %1. Проверите поново. - + Folder rename failed Преименовање није успело - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Не могу да уклоним и направим резервну копију фасцикле јер су фасцикла или фајл отворени у другом програму. Затворите фасциклу или фајл и покушајте поново или одустаните од подешавања. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локална фасцикла за синхронизовање %1 је успешно направљена!</b></font> @@ -1937,12 +2076,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 чаробњак повезивања - + Skip folders configuration Прескочи подешавање фасцикли @@ -1950,33 +2089,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Све је подешено! - + Open Local Folder Отвори локалну фасциклу - + Open %1 in Browser Отвори %1 у прегледачу - - OCC::PUTFileJob - - - Connection Timeout - Веза је истекла - - OCC::PollJob - + Invalid JSON reply from the poll URL Неисправан ЈСОН одговор са адресе упита @@ -1984,7 +2115,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1992,47 +2123,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Фајл %1 се не може преузети јер се судара са називом локалног фајла! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server Фајл је обрисан са сервера - + The file could not be downloaded completely. Фајл није могао бити преузет у потпуности. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! Фајл %1 се не може сачувати јер се судара са називом локалног фајла! - + File has changed since discovery Фајл је измењен у међувремену - + Error writing metadata to the database @@ -2040,17 +2171,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Враћање није успело: %1 - - Continue blacklisting: - Настави блокирање: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2058,22 +2184,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 не могу да обришем фајл %1, грешка: %2 - + Attention, possible case sensitivity clash with %1 Пажња! Могуће сударање због величине слова са %1 - + could not create folder %1 не могу да направим фасциклу %1 - + Error writing metadata to the database @@ -2081,17 +2207,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Грешка при уклањању %1: %2; - + Could not remove folder '%1' Не могу да уклоним фасциклу „%1“ - + Could not remove %1 because of a local file name clash Не могу да уклоним %1 због сударања са називом локалног фајла @@ -2099,13 +2225,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Фајл %1 се не може преименовати у %2 због сударања са називом локалног фајла - - + + Error writing metadata to the database @@ -2113,12 +2239,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Фајл је уклоњен из дељења које је само за читање. Зато је враћен. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Сервер је вратио лош ХТТП код. Очекивано је 204 али је примљено „%1 %2“. @@ -2126,12 +2252,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер је вратио лош ХТТП код. Очекивано је 201 али је примљено „%1 %2“. - + Error writing metadata to the database @@ -2139,28 +2265,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Ова фасцикла се не сме преименовати. Зато је враћен првобитни назив. - + This folder must not be renamed. Please name it back to Shared. Ова фасцикла се не сме преименовати. Молим вас вратите назив у „Shared“. - + The file was renamed but is part of a read only share. The original file was restored. Фајл је био преименован али је део дељења које је само за читање. Оригинални фајл је враћен. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер је вратио лош ХТТП код. Очекивано је 201 али је примљено „%1 %2“. - - + + Error writing metadata to the database @@ -2168,27 +2294,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Фајл уклоњен - + Local file changed during syncing. It will be resumed. Локални фајл је измењен током синхронизације. Биће настављена. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2196,32 +2327,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Присили прекид посла код прекида ХТТП везе са КуТ < 5.4.2 - + The local file was removed during sync. Локални фајл је уклоњен током синхронизације. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2229,32 +2360,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Присили прекид посла код прекида ХТТП везе са КуТ < 5.4.2 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Фајл је измењен локално али је у саставу дељења које је само за читање. Враћен је у претходно стање а измене су у фајлу сукоба. - + Poll URL missing Адреса упита недостаје - + The local file was removed during sync. Локални фајл је уклоњен током синхронизације. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2272,42 +2403,42 @@ It is not advisable to use it. Текст ознака - + Time време - + File фајл - + Folder фасцикла - + Action радња - + Size величина - + Local sync protocol Локални протокол синхронизације - + Copy Копирај - + Copy the activity list to the clipboard. Копирај активност у клипборд. @@ -2348,7 +2479,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Изаберите шта синхронизовати @@ -2356,33 +2487,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Учитавам ... - + Deselect remote folders you do not wish to synchronize. - + Name назив - + Size величина - - + + No subfolders currently on the server. На серверу тренутно нема потфасцикли. - + An error occurred while loading the list of sub folders. @@ -2395,22 +2526,22 @@ It is not advisable to use it. Поставке - + Activity Активност - + General Опште - + Network Мрежа - + Account Налог @@ -2418,27 +2549,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Активност - + General Опште - + Network Мрежа - + Account Налог @@ -2466,35 +2597,45 @@ It is not advisable to use it. оунКлауд путања: - + %1 Sharing %1 дељење - + %1 %1 - + Folder: %2 Фасцикла: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. Фајл се не може делити јер је подељен без дозволе за поновно дељење. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2504,92 +2645,126 @@ It is not advisable to use it. Подели NewDocument.odt - - Share link - Веза дељења - - - + TextLabel Текст ознака - + Set &password Постави &лозинку - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Датум &истека - + Set password Постави лозинку - - &Mail link + + Link properties: - Copy &link - Копирај &везу + Show file listing + - + Allow editing уређивање - + Anyone with the link has access to the file/folder - + + P&assword protect &Заштићено лозинком - + Password Protected Заштићено лозинком - + The file can not be shared because it was shared without sharing permission. Фајл се не може делити јер је подељен без дозволе за поновно дељење. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Јавно дељење з&хтева лозинку - + Please Set Password Поставите лозинку - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &Веза дељења - OCC::ShareUserGroupWidget @@ -2599,68 +2774,98 @@ It is not advisable to use it. Подели NewDocument.odt - + Share with users or groups ... Дели са корисницима или групама... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Образац + - + TextLabel - Текст ознака + - + can edit - може да мења + - + can share - може да дели + - + ... - ... + - + create - направи + - + change - измени + - + delete - обриши + OCC::ShibbolethCredentials - + Login Error Грешка пријављивања - + You must sign in as user %1 Морате се пријавити као %1 @@ -2668,22 +2873,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - аутентификација - + SSL Chipher Debug View - + Reauthentication required Неопходна поновна аутентификација - + Your session has expired. You need to re-login to continue to use the client. Ваша сесија је истекла. Поново се пријавите да бисте наставили да користите клијента. @@ -2691,26 +2896,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Подели са %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Детаљи сертификата</h3> - + Common Name (CN): Уобичајено име: - + Subject Alternative Names: Алтернативно име: @@ -2795,7 +3020,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. Ова веза је шифрована %1-битним %2. @@ -2812,7 +3037,7 @@ It is not advisable to use it. Подаци о сертификату: - + This connection is NOT secure as it is not encrypted. Ова веза НИЈЕ безбедна јер није шифрована. @@ -2832,67 +3057,67 @@ It is not advisable to use it. Ипак веруј сертификату - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 са сертификатом %1 - + &lt;not specified&gt; &lt;није наведено&gt; - - + + Organization: %1 Организација: %1 - - + + Unit: %1 Јединица: %1 - - + + Country: %1 Држава: %1 - + Fingerprint (MD5): <tt>%1</tt> Отисак (МД5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Отисак (СХА1): <tt>%1</tt> - + Effective Date: %1 Важи од: %1 - + Expiration Date: %1 Истиче : %1 - + Issuer: %1 Издавач: %1 @@ -2900,285 +3125,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успешно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не може да учита фајл дневника. Фајл дневника је оштећен. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Прикључак %1 за csync се не може учитати.<br/>Проверите инсталацију!</p> - + CSync got an error while processing internal trees. CSync има грешку при обради интерног стабла. - - CSync failed to reserve memory. - CSync не може да резервише меморију. - - - + CSync fatal parameter error. CSync фатална грешка параметара. - + CSync processing step update failed. CSync није успео да ажурира корак процесирања. - + CSync processing step reconcile failed. CSync није успео да усклади корак процесирања. - + CSync could not authenticate at the proxy. CSync не може да се аутентификује на проксију. - + CSync failed to lookup proxy or server. CSync не налази прокси или сервер. - + CSync failed to authenticate at the %1 server. CSync не може да се аутентификује на %1 серверу. - + CSync failed to connect to the network. CSync не може да приступи мрежи. - + A network connection timeout happened. Истекло је време за повезивање. - + A HTTP transmission error happened. Дошло је до грешке ХТТП преноса. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: нема простора на %1 серверу. - + CSync unspecified error. CSync недефинисана грешка. - + Aborted by the user Прекинуо корисник - + CSync failed to access CSync није приступио - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Услуга је привремено недоступна - + Access is forbidden Приступ је забрањен - + An internal error number %1 occurred. Десила се интерна грешка број %1. - - The item is not synced because of previous errors: %1 - Ставка није синхронизована због ранијих грешака: %1 - - - + Symbolic links are not supported in syncing. Симболичке везе нису подржане у синхронизацији. - + File is listed on the ignore list. Фајл се налази на листи за игнорисање. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Назив фајла је предугачак. - + Stat failed. - + Filename encoding is not valid Кодирање назива фајла није исправно - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Није могуће покренути у синхронизацију дневника. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор @@ -3194,7 +3434,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3202,17 +3442,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Верзија %1. За више информација посетите <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Дистрибуира %1 под ГНУ општом јавном лиценцом (ОЈЛ) верзија 2.0.<br/>%2 и %2 лого су регистроване марке %1 у САД, другим земљама или обоје</p> @@ -3220,17 +3460,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Заглавље контролне суме је лоше формирано. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. Преузети фајл се не поклапа с контролном сумом. Биће настављено. @@ -3238,207 +3478,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пријавите се - + Folder %1: %2 Фасцикла %1: %2 - + No sync folders configured. Нема подешених фасцикли за синхронизацију. - + There are no sync folders configured. Нема подешених фасцикли за синхронизацију. - + Open in browser Отвори у прегледачу - - - + + + Log in... Пријави се... - - - + + + Log out Одјава - + Recent Changes Недавне измене - + Checking for changes in '%1' Проверавам измене у „%1“ - + Managed Folders: Управљане фасцикле: - + Open folder '%1' Отвори фасциклу „%1“ - + Open %1 in browser Отвори %1 у прегледачу - + Unknown status Непознато стање - + Settings... Поставке... - + Details... Детаљи... - + Help Помоћ - + Quit %1 Напусти %1 - + Disconnected from %1 Одјављен са %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Одјављен са налога: - + Account %1: %2 Налог %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Одјави се са свих налога - + Log in to all accounts... Пријави се на све налоге... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Падни сада - + No items synced recently Ништа није недавно синхронизовано - + Syncing %1 of %2 (%3 left) Синхронизујем %1 од %2 (преостало %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронизујем %1 (преостало %2) - + Syncing %1 Синхронизујем %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ажурно @@ -3446,7 +3686,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3549,78 +3789,42 @@ It is not advisable to use it. &Лозинка + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Образац - - Server &address: - &Адреса сервера: - - - - - TextLabel Текст ознака - - - Use &secure connection - Користи &безбедну везу - - - - CheckBox - Кућица - - - - &Username: - &Корисничко име: - - - - Enter the ownCloud username. - Унесите оунКлауд корисничко име. - - - - &Password: - &Лозинка: - - - - Enter the ownCloud password. - Унесите оунКлауд лозинку. - - - - Do not allow the local storage of the password. - Не дозволи локално смештање лозинке. - - - - &Do not store password on local machine - &Не смештај лозинку на локалној машини - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Унесите адресу оунКлауд сервера са којим желите да се повежете (без http или https) - Ser&ver Address @@ -3664,7 +3868,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3672,42 +3876,42 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago пре мање од минут - + %n minute(s) ago - + Some time ago пре неког времена - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3716,57 +3920,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3787,102 +3991,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Направљено од ГИТ ревизије <a href="%1">%2</a> %3, %4 користећи КуТ %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Преузето - + Uploaded Отпремљено - + Server version downloaded, copied changed local file into conflict file - + Deleted Обрисано - + Moved to %1 Премештено у %1 - + Ignored Игнорисано - + Filesystem access error Грешка приступа фајл-систему - + Error Грешка - + Updated local metadata - - + + Unknown Непознато - + downloading преузимам - + uploading отпремам - + deleting бришем - + moving премештам - + ignoring игноришем + - error грешка - + updating local metadata @@ -3890,54 +4089,77 @@ It is not advisable to use it. theme - + Status undefined Неодређено стање - + Waiting to start sync Чекам почетак синхронизације - + Sync is running Синхронизација у току - + Sync Success Успешна синхронизација - + Sync Success, some files were ignored. Синхронизација успешна. Неки фајлови су игнорисани. - + Sync Error Грешка синхронизације - + Setup Error Грешка подешавања - + Preparing to sync Припремам синхронизацију - + Aborting... Прекидам... - + Sync is paused Синхронизација паузирана + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 570a5b8eb..b295891cc 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Destinationsfilen har en oväntad storlek eller modifieringstidpunkt @@ -81,6 +81,24 @@ Textetikett + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Avbryt @@ -136,188 +154,204 @@ Ansluten till <server> som <user> - + No account configured. Inget konto är konfigurerat. - + Add new Lägg till ny - + Remove Radera - + Account Konto - + Choose what to sync Välj vad som ska synkas - + Force sync now Tvinga synkning - + Restart sync Starta om synkning - + Remove folder sync connection Ta bort anslutning till mappsynkronisering - + Folder creation failed Kunde inte skapa mappen - + <p>Could not create local folder <i>%1</i>. <p>Kunde inte skapa lokal mapp <i>%1</i>. - + Confirm Folder Sync Connection Removal Bekräfta radering av anslutning till mappsynkronisering - + Remove Folder Sync Connection Ta bort anslutning till mappsynkronisering - + Sync Running Synkronisering pågår - + The syncing operation is running.<br/>Do you want to terminate it? En synkronisering pågår.<br/>Vill du avbryta den? - + %1 in use %1 används - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Serverversion %1 är gammal och stöds inte längre! Fortsätt på egen risk. - + Connected to %1. Ansluten till %1. - + Server %1 is temporarily unavailable. Servern %1 är för tillfället inte tillgänglig. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. Utloggad från %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. Ingen anslutning till %1 vid %2. - + Log in Logga in - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Bekräfta radering an kontot - + <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> <p>Vill du verkligen avsluta anslutningen till kontot <i>%1</i>?</p><p><b>Observera:</b> Detta kommer <b>inte</b> radera några filer.</p> - + Remove connection Radera anslutning - + + Open folder Öppna mapp - - + + Log out Logga ut - + Resume sync Återuppta synkronisering - + Pause sync Pausa synkronisering - + <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> <p>Vill du verkligen avbryta synkronisering av mappen <i>%1</i>?</p><p><b>Observera:</b> Detta kommer <b>inte</b> radera några filer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) av %2 används. Vissa mappar, inklusive nätverks- eller delade mappar, kan ha andra begränsningar. - + %1 of %2 in use %1 av %2 används - + Currently there is no storage usage information available. Just nu finns ingen utrymmes information tillgänglig - + No %1 connection configured. Ingen %1 anslutning konfigurerad. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Utloggad - + Disconnected Bortkopplad - + Connected Ansluten - + Service unavailable Tjänsten är inte tillgänglig - + + Maintenance mode + + + + Network error Nätverksfel - + Configuration error Konfigurationsfel - + + Asking Credentials + + + + Unknown account state Okänd kontostatus @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveraktivitet - + Sync Protocol Synkprotokoll - - List of ignored or erroneous files - Lista av ignorerade eller felaktiga filer - - - - Copy - Kopiera - - - - Copy the activity list to the clipboard. - Kopiera aktivitetslistan till urklipp. - - - + Not Synced Inte synkroniserad - + Not Synced (%1) %1 is the number of not synced files. Inte synkad (%1) - + The server activity list has been copied to the clipboard. Listan på serveraktivitet har kopierats till urklipp. - + The sync activity list has been copied to the clipboard. Listan på synkaktivitet har kopierats till urklipp. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopierat till urklipp @@ -448,47 +477,47 @@ Textetikett - + Server Activities Serveraktivitet - + Copy Kopiera - + Copy the activity list to the clipboard. Kopiera aktivitetslistan till urklipp. - + Action Required: Notifications Åtgärd krävs: Notifieringar - + <br/>Account %1 does not have activities enabled. <br/>Kontot %1 har inte aktiviteter aktiverade - + You received %n new notification(s) from %2. Du har mottagit %n ny notifiering från %2.Du har mottagit %n nya notifieringar från %2. - + You received %n new notification(s) from %1 and %2. Du tog emot %1 ny notis från %1 och %2.Du tog emot %n nya notiser från %1 och %2. - + You received new notifications from %1, %2 and other accounts. Du tog emot nya notiser från %1, %2 och andra konton. - + %1 Notifications - Action Required %1 Notiser - Åtgärd krävs @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Kunde inte komma åt konfigurationsfilen - + There was an error while accessing the configuration file at %1. - + Quit ownCloud Avsluta ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Inget ownCloud konto konfigurerat - + The configured server for this client is too old Den konfigurerade servern är för den här klienten är för gammal - + Please update to the latest server and restart the client. Uppgradera servern och starta sedan om klienten. - + Authentication error: Either username or password are wrong. Autentiseringsfel: Användarnamn eller lösenord är felaktigt - + timeout timeout - + The provided credentials are not correct De angivna uppgifterna stämmer ej - - OCC::DeleteJob - - - Connection timed out - Tidsgräns för anslutningen överskreds - - OCC::DiscoveryMainThread - + Aborted by the user Avbruten av användare @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Den lokala mappen %1 finns inte. - + %1 should be a folder but is not. %1 borde vara en mapp, men är inte det. - + %1 is not readable. %1 är inte läsbar. - + %1 has been removed. %1 names a file. %1 har tagits bort. - + %1 has been downloaded. %1 names a file. %1 har laddats ner. - + %1 has been updated. %1 names a file. %1 har uppdaterats. - + %1 has been renamed to %2. %1 and %2 name files. %1 har döpts om till %2. - + %1 has been moved to %2. %1 har flyttats till %2. - + %1 and %n other file(s) have been removed. %1 och %n andra filer har tagits bort.%1 och %n andra filer har tagits bort. - + %1 and %n other file(s) have been downloaded. %1 och %n andra filer har laddats ner.%1 och %n andra filer har laddats ner. - + %1 and %n other file(s) have been updated. %1 och %n andra filer har uppdaterats.%1 och %n andra filer har uppdaterats. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 har döpts om till %2 och %n andra filer har döpts om.%1 har döpts om till %2 och %n andra filer har döpts om. - + %1 has been moved to %2 and %n other file(s) have been moved. %1 har flyttats till %2 och %n andra filer har flyttats.%1 har flyttats till %2 och %n andra filer har flyttats. - + %1 has and %n other file(s) have sync conflicts. %1 och %n andra filer har synk-konflikter.%1 och %n andra filer har synk-konflikter. - + %1 has a sync conflict. Please check the conflict file! %1 har en synk-konflikt. Vänligen kontrollera konfliktfilen! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 och %n andra filer kunde inte synkas på grund av fel. Se loggen för detaljer.%1 och %n andra filer kunde inte synkas på grund av fel. Se loggen för detaljer. - + %1 could not be synced due to an error. See the log for details. %1 kunde inte synkroniseras på grund av ett fel. Kolla loggen för ytterligare detaljer. - + Sync Activity Synk aktivitet - + Could not read system exclude file Kunde inte läsa systemets exkluderings-fil - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,29 +777,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ta bort alla filer? - + Remove all files Ta bort alla filer - + Keep files Behåll filer - + This sync would reset the files to an earlier 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? @@ -787,17 +808,17 @@ Detta kan vara för att en säkerhetskopia har återställts på servern. Om du fortsätter synkningen kommer alla dina filer återställas med en äldre version av filen. Vill du behålla dina nyare lokala filer som konfliktfiler? - + Backup detected Backup upptäckt - + Normal Synchronisation Normal synkronisation - + Keep Local Files as Conflict Behåll lokala filer som konflikt @@ -805,112 +826,112 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderMan - + Could not reset folder state Kunde inte återställa mappens skick - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. En gammal synkroniseringsjournal '%1' hittades, men kunde inte raderas. Vänligen se till att inga program för tillfället använder den. - + (backup) (säkerhetskopia) - + (backup %1) (säkerhetkopia %1) - + Undefined State. Okänt tillstånd. - + Waiting to start syncing. Väntar på att starta synkronisering. - + Preparing for sync. Förbereder synkronisering - + Sync is running. Synkronisering pågår. - + Last Sync was successful. Senaste synkronisering lyckades. - + Last Sync was successful, but with warnings on individual files. Senaste synkning lyckades, men det finns varningar för vissa filer! - + Setup Error. Inställningsfel. - + User Abort. Användare Avbryt - + Sync is paused. Synkronisering är pausad. - + %1 (Sync is paused) %1 (Synk är stoppad) - + No valid folder selected! Ingen giltig mapp markerad! - + The selected path is not a folder! Den markerade sökvägen är inte en mapp! - + You have no permission to write to the selected folder! Du har inga skrivrättigheter till den valda mappen! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! Den lokala mappen %1 innehåller redan en mapp som synkas. Var god välj en annan! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! Den lokala mappen %1 finns redan inuti en mapp som synkas. Var god välj en annan! - + 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! Den lokala mappen %1 är en symbolisk länk. Länkmålet finns redan inuti en mapp som synkas. Var god välj en annan! @@ -918,17 +939,17 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderStatusDelegate - + Add Folder Sync Connection Lägg till mapp att synka. - + Synchronizing with local folder Synkroniserar med lokal mapp - + File Fil @@ -936,134 +957,144 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderStatusModel - + You need to be connected to add a folder Du måste vara ansluten för att lägga till en mapp - + Click this button to add a folder to synchronize. Klicka här för att lägga till en mapp att synka. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ett fel uppstod när mapplistan försökte laddas från servern. - + Signed out Utloggad - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Tillägg av mappar är avstängt eftersom du redan synkar alla dina filer. Om du vill synka fler mappar, var god ta bort den nuvarande rotmappen. - + Fetching folder list from server... Hämtar mapplistan från servern... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' Kollar efter ändringar i '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda ner %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda upp %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 kvar, %1 av %2, fil %3 av %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Väntar... - + Waiting for %n other folder(s)... Väntat på %n annan mapp...Väntat på %n andra mappar... - + Preparing to sync... Förbereder för att synkronisera... @@ -1071,12 +1102,12 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderWizard - + Add Folder Sync Connection Lägg till mapp att synka. - + Add Sync Connection Lägg till anslutning. @@ -1089,7 +1120,7 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Klicka för att välja en lokal mapp att synka. - + Enter the path to the local folder. Ange sökvägen till den lokala mappen. @@ -1112,42 +1143,42 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Ange namnet på den nya mappen som skall skapas under '%1': - + Folder was successfully created on %1. Mappen skapades på %1. - + Authentication failed accessing %1 Autentisering misslyckades att komma åt %1 - + Failed to create the folder on %1. Please check manually. Det gick inte att skapa mappen på %1. Kontrollera manuellt. - + Failed to list a folder. Error: %1 Kunde inte lista en mapp. Felkod: %1 - + Choose this to sync the entire account Välj detta för att synka allt - + This folder is already being synced. Denna mappen synkas redan. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkar redan <i>%1</i>, vilket är övermapp till <i>%2</i> - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Du synkroniserar redan alla dina filer. Synkronisering av en annan mapp stöds <b>ej</b>. Om du vill synka flera mappar, ta bort den för tillfället konfigurerade rotmappen från synk. @@ -1168,22 +1199,22 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Ingen E-Tag mottogs från servern, kontrollera proxy/gateway - + We received a different E-Tag for resuming. Retrying next time. Vi mottog en helt annan e-tag för att återuppta. Försök igen nästa gång. - + Server returned wrong content-range Servern returnerade felaktig content-range - + Connection Timeout Anslutningen avbröts på grund av timeout @@ -1206,23 +1237,23 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre För aktivitetsfältet - + Advanced Avancerad - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1242,28 +1273,28 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Använd &monokroma ikoner - + Edit &Ignored Files Ändra &ignorerade filer - + S&how crash reporter Visa krashrapporteraren - - + + About Om - + Updates Uppdateringar - + &Restart && Update %Starta om && Uppdatera @@ -1271,22 +1302,22 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vänligen ange %1 lösenord:<br><br>Användare: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Avläsning från kedjan misslyckades med felkod: '%1' - + Enter Password Ange lösenord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicka här</a> för att begära ett app-lösenord från webbgränssnittet. @@ -1368,55 +1399,125 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Denna post hanteras av systemet på '%1' och kan inte ändras här. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Loggdata - + &Search: &Sök: - + &Find &Hitta - + + &Capture debug messages + + + + Clear Rensa - + Clear the log display. Rensa loggfönstret. - + S&ave S&para - + Save the log file to a file on disk for debugging. Spara loggfilen till en fil på disk för felsökning. - + Save log file Spara loggfil - + Error Fel - + Could not write to log file %1 Kunde inte skriva till loggfilen %1 @@ -1424,24 +1525,16 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::Logger - + Error Fel - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Filen '%1'<br/>kan inte öppnas för skrivning.<br/><br/>Loggtexten kan <b>inte</b> sparas!</nobr> - - OCC::MoveJob - - - Connection timed out - Tidsgräns för anslutningen överskreds - - OCC::NSISUpdater @@ -1553,27 +1646,27 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Begränsa automatiskt - + Hostname of proxy server Hostnamn för proxyserver - + Username for proxy server Användarnamn för proxyserver - + Password for proxy server Lösenord för proxyanvändare - + HTTP(S) proxy HTTP(S) proxy - + SOCKS5 proxy SOCKS5 proxy @@ -1586,79 +1679,112 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::NotificationWidget - + Created at %1 Skapad %1 - + Closing in a few seconds... Stänger om ett par sekunder... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 begäran misslyckades %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' vald %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Ny %1 uppdatering tillgänglig - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. En ny uppdatering för %1 kommer installeras. Programmet kan be om ytterligare rättigheter under processen. - + Downloading version %1. Please wait... Laddar ner version %1. Var god vänta... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Kunde inte ladda ner uppdateringen. Klicka <a href='%1'>här</a> för att ladda ner uppdateringen manuellt. - + Could not check for new updates. Kunde inte söka efter uppdateringar. - + %1 version %2 available. Restart application to start the update. %1 version %2 tillgänglig. Starta om programmet för att starta uppdateringen. - + New %1 version %2 available. Please use the system's update tool to install it. Ny %1 version %2 tillgänglig. Var vänlig använd systemets verktyg för uppdateringar för att installera versionen. - + Checking update server... Kontrollerar uppdateringsservern... - + Update status is unknown: Did not check for new updates. Uppdateringsstatus är okänd: Gjorde ingen kontroll av nya uppdateringar. - + No updates available. Your installation is at the latest version. Inga uppdateringar tillgängliga. Din installation är redan den senaste versionen. @@ -1671,43 +1797,43 @@ ytterligare rättigheter under processen. OCC::OwncloudAdvancedSetupPage - + Connect to %1 Anslut till %1 - + Setup local folder options Inställningar för lokala mappar. - + Connect... Anslut... - + %1 folder '%2' is synced to local folder '%3' %1 mappen '%2' är synkroniserad mot den lokala mappen '%3' - + Sync the folder '%1' Synka mappen '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Varning:</strong> Den lokala mappen är inte tom. Välj alternativ!</small></p> - + Local Sync Folder Lokal mapp för synkning - - + + (%1) (%1) @@ -1740,7 +1866,7 @@ ytterligare rättigheter under processen. Konfigurera TLS klient-certifikat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Misslyckades med att ansluta till den säkra serveradressen <em>%1</em>. Hur vill du gå vidare?</p></body></html> @@ -1748,47 +1874,60 @@ ytterligare rättigheter under processen. OCC::OwncloudHttpCredsPage - + &Email &E-post - + Connect to %1 Anslut till %1 - + Enter user credentials Ange inloggningsuppgifter + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 Anslut till %1 - + Setup %1 server Installerar %1 server - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Denna URL är INTE säker eftersom den inte är krypterad. Det är inte lämpligt använda den. - + This url is secure. You can use it. Denna url är säker. Du kan använda den. - + &Next > &Nästa > @@ -1796,22 +1935,22 @@ Det är inte lämpligt använda den. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Lyckades ansluta till %1: %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Misslyckades att ansluta till %1 vid %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Försök att ansluta till %1 på %2 tog för lång tid. - + Trying to connect to %1 at %2... Försöker ansluta till %1 på %2... @@ -1831,109 +1970,109 @@ Det är inte lämpligt använda den. Åtkomst förbjuden av servern. För att bekräfta att du har korrekta rättigheter, <a href="%1">klicka här</a> för att ansluta till tjänsten med din webb-läsare. - + Invalid URL Ogiltig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkmapp %1 finns redan, aktiverar den för synk.<br/><br/> - + Creating local sync folder %1... Skapar lokal synk-mapp %1... - + ok ok - + failed. misslyckades. - + Could not create local folder %1 Kunde inte skapa lokal mapp %1 - + No remote folder specified! Ingen fjärrmapp specificerad! - + Error: %1 Fel: %1 - + creating folder on ownCloud: %1 skapar mapp på ownCloud: %1 - + Remote folder %1 created successfully. Fjärrmapp %1 har skapats. - + The remote folder %1 already exists. Connecting it for syncing. Fjärrmappen %1 finns redan. Ansluter den för synkronisering. - + The folder creation resulted in HTTP error code %1 Skapande av mapp resulterade i HTTP felkod %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Det gick inte att skapa mappen efter som du inte har tillräckliga rättigheter!<br/>Vänligen återvänd och kontrollera dina rättigheter. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Misslyckades skapa fjärrmappen, troligen p.g.a felaktiga inloggningsuppgifter.</font><br/>Kontrollera dina inloggningsuppgifter.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Misslyckades skapa fjärrmapp %1 med fel <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsanslutning från %1 till fjärrmappen %2 har skapats. - + Successfully connected to %1! Ansluten till %1! - + Connection to %1 could not be established. Please check again. Anslutningen till %1 kunde inte etableras. Var god kontrollera och försök igen. - + Folder rename failed Omdöpning av mapp misslyckades - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan inte ta bort och göra en säkerhetskopia av mappen på grund av att mappen eller en fil i den används av ett annat program. Vänligen stäng mappen eller filen och försök igen eller avbryt installationen. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokal synkmapp %1 skapad!</b></font> @@ -1941,12 +2080,12 @@ Det är inte lämpligt använda den. OCC::OwncloudWizard - + %1 Connection Wizard %1 Anslutningsguiden - + Skip folders configuration Hoppa över konfiguration utav mappar @@ -1954,33 +2093,25 @@ Det är inte lämpligt använda den. OCC::OwncloudWizardResultPage - + Everything set up! Allt är konfigurerat! - + Open Local Folder Öppnar lokal mapp - + Open %1 in Browser Öppna %1 i webbläsare - - OCC::PUTFileJob - - - Connection Timeout - Anslutningen avbröts på grund av timeout - - OCC::PollJob - + Invalid JSON reply from the poll URL Ogiltigt JSON-svar från hämtnings-URLen @@ -1988,7 +2119,7 @@ Det är inte lämpligt använda den. OCC::PropagateDirectory - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -1996,47 +2127,47 @@ Det är inte lämpligt använda den. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Fil %1 kan inte laddas ner på grund av namnkonflikt med en lokal fil! - - The download would reduce free disk space below %1 - Nedladdningen skulle innebära ledigt utrymme understiger %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Ledigt utrymme är under %1 - + File was deleted from server Filen har tagits bort från servern - + The file could not be downloaded completely. Filen kunde inte laddas ner fullständigt. - + The downloaded file is empty despite the server announced it should have been %1. Den nedladdade filen är tom men servern sa att den skulle vara %1. - + File %1 cannot be saved because of a local file name clash! Fil %1 kan inte sparas eftersom namnet krockar med en lokal fil! - + File has changed since discovery Filen har ändrats sedan upptäckten - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2044,17 +2175,12 @@ Det är inte lämpligt använda den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Återställning misslyckades: %1 - - Continue blacklisting: - Fortsätt svartlista: - - - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mapp togs bort från en skrivskyddad delning, men återställning misslyckades: %1 @@ -2062,22 +2188,22 @@ Det är inte lämpligt använda den. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 kunde inte ta bort fil %1, fel: %2 - + Attention, possible case sensitivity clash with %1 Observera, eventuell skiftlägeskänslig konflikt med %1 - + could not create folder %1 kunde inte skapa mapp %1 - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2085,17 +2211,17 @@ Det är inte lämpligt använda den. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fel vid borttagning '%1': %2; - + Could not remove folder '%1' Kunde inte ta bort mapp '%1' - + Could not remove %1 because of a local file name clash Det gick inte att ta bort %1 på grund av ett lokalt filnamn @@ -2103,13 +2229,13 @@ Det är inte lämpligt använda den. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Filen %1 kan inte döpas om till %2 på grund av ett lokalt filnamn - - + + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2117,12 +2243,12 @@ Det är inte lämpligt använda den. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Den här filen har tagits bort från en endast-läsbar delning. Den återställdes. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Felaktig HTTP-kod i svaret från servern. '204' förväntades, men "%1 %2" mottogs. @@ -2130,12 +2256,12 @@ Det är inte lämpligt använda den. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Felaktig HTTP-kod i svaret från servern. '201' förväntades, men "%1 %2" mottogs. - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2143,28 +2269,28 @@ Det är inte lämpligt använda den. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Denna mapp får inte byta namn. Den kommer att döpas om till sitt ursprungliga namn. - + This folder must not be renamed. Please name it back to Shared. Denna mapp får ej döpas om. Vänligen döp den till Delad igen. - + The file was renamed but is part of a read only share. The original file was restored. En fil döptes om men är en del av en endast-läsbar delning. Original filen återställdes. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Felaktig HTTP-kod i svaret från servern. '201' förväntades, men "%1 %2" mottogs. - - + + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2172,27 +2298,32 @@ Det är inte lämpligt använda den. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Filen Raderad - + Local file changed during syncing. It will be resumed. Lokal fil ändrades under synkningen. Den kommer återupptas. - + Local file changed during sync. Lokal fil ändrades under synk. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2200,32 +2331,32 @@ Det är inte lämpligt använda den. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Tvinga jobbavbryt vid återställning av HTTP-anslutning med Qt < 5.4.2. - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synk. - + Unexpected return code from server (%1) - + Missing File ID from server Saknar Fil-ID från servern - + Missing ETag from server Saknar ETag från servern @@ -2233,32 +2364,32 @@ Det är inte lämpligt använda den. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Tvinga jobbavbryt vid återställning av HTTP-anslutning med Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Filen ändrades lokalt men är en del av en endast-läsbar delning. Den återställdes och din editering är i konflikt filen. - + Poll URL missing Hämtnings-URL saknas - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synk. - + The server did not acknowledge the last chunk. (No e-tag was present) Servern bekräftade inte senaste leveransen. (Ingen e-tagg fanns) @@ -2276,42 +2407,42 @@ Det är inte lämpligt använda den. Textetikett - + Time Tid - + File Fil - + Folder Mapp - + Action Ågärd - + Size Storlek - + Local sync protocol Lokalt synkprotokoll - + Copy Kopiera - + Copy the activity list to the clipboard. Kopiera aktivitetslistan till urklipp. @@ -2352,7 +2483,7 @@ Det är inte lämpligt använda den. OCC::SelectiveSyncDialog - + Choose What to Sync Välj vad som ska synkas @@ -2360,33 +2491,33 @@ Det är inte lämpligt använda den. OCC::SelectiveSyncWidget - + Loading ... Laddar ... - + Deselect remote folders you do not wish to synchronize. - + Name Namn - + Size Storlek - - + + No subfolders currently on the server. Inga undermappar på servern för närvarande. - + An error occurred while loading the list of sub folders. Ett fel uppstod när listan för submappar laddades. @@ -2399,22 +2530,22 @@ Det är inte lämpligt använda den. Inställningar - + Activity Aktivitet - + General Allmänt - + Network Nätverk - + Account Konto @@ -2422,27 +2553,27 @@ Det är inte lämpligt använda den. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitet - + General Allmänt - + Network Nätverk - + Account Konto @@ -2470,35 +2601,45 @@ Det är inte lämpligt använda den. Sökväg till ownCloud: - + %1 Sharing %1 Delning - + %1 %1 - + Folder: %2 Mapp: %2 - + The server does not allow sharing Servern tillåter inte delning - + Retrieving maximum possible sharing permissions from server... Tar emot maximal delningsbehörighet från servern... - + The file can not be shared because it was shared without sharing permission. Filen kan inte delas eftersom den delades utan delningsrättigheter. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2508,92 +2649,126 @@ Det är inte lämpligt använda den. Dela NewDocument.odt - - Share link - Dela länk - - - + TextLabel Textetikett - + Set &password Sätt &lösenord - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Sätt datum för &utgång - + Set password Ange lösenord - - &Mail link - &E-postlänk + + Link properties: + - Copy &link - Kopiera &länk + Show file listing + - + Allow editing Tillåt redigering - + Anyone with the link has access to the file/folder Vem som helst med länken kan komma åt filen eller mappen - + + P&assword protect L&ösenordsskydda - + Password Protected Lösenordsskyddad - + The file can not be shared because it was shared without sharing permission. Filen kan inte delas eftersom den delades utan delningsrättigheter. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Publik d&elning kräver lösenord - + Please Set Password Var vänlig sätt lösenord - - - Could not open email client - Kunde inte öppna e-postklient - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Det uppstod ett fel när e-postklienten skulle startas för att skapa ett nytt meddelande. Kanske är ingen standard-e-postklient konfigurerad? - - - - - &Share link - &Dela länk - OCC::ShareUserGroupWidget @@ -2603,68 +2778,98 @@ Det är inte lämpligt använda den. Dela NewDocument.odt - + Share with users or groups ... Dela med användare eller grupper ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' Inga resultat för '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Form + - + TextLabel - Textetikett + - + can edit - kan redigera + - + can share - får dela + - + ... - ... + - + create - skapa + - + change - ändra + - + delete - radera + OCC::ShibbolethCredentials - + Login Error Login fel - + You must sign in as user %1 Du måste logga in som en användare %1 @@ -2672,22 +2877,22 @@ Det är inte lämpligt använda den. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Autentisera - + SSL Chipher Debug View Debugvy SSL-kryptering - + Reauthentication required Autentisering krävs - + Your session has expired. You need to re-login to continue to use the client. Din session har gått ut. Du måste logga in på nytt för att kunna fortsätta använda klienten. @@ -2695,26 +2900,46 @@ Det är inte lämpligt använda den. OCC::SocketApi - + Share with %1 parameter is ownCloud Dela med %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Certifikatdetaljer</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Alternativnamn: @@ -2799,7 +3024,7 @@ Det är inte lämpligt använda den. %1 - + This connection is encrypted using %1 bit %2. Denna anslutningen är krypterad med %1 bit %2 @@ -2816,7 +3041,7 @@ Det är inte lämpligt använda den. Certifikatinformation: - + This connection is NOT secure as it is not encrypted. Denna anslutningen är INTE säker eftersom den inte är krypterad. @@ -2836,67 +3061,67 @@ Det är inte lämpligt använda den. Lita på detta certifikat i alla fall - + Untrusted Certificate Ej betrott certifikat - + Cannot connect securely to <i>%1</i>: Kan inte ansluta säkert till <i>%1</i>: - + with Certificate %1 med Certifikat %1 - + &lt;not specified&gt; &lt;inte angivet&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Enhet: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingeravtryck (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingeravtryck (SHA1): <tt>%1</tt> - + Effective Date: %1 Giltigt datum: %1 - + Expiration Date: %1 Utgångsdatum: %1 - + Issuer: %1 Utfärdare: %1 @@ -2904,285 +3129,300 @@ Det är inte lämpligt använda den. OCC::SyncEngine - + Success. Lyckades. - + CSync failed to load the journal file. The journal file is corrupted. CSync misslyckades med att ladda journalfilen. Journalfilen är korrupt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Plugin %1 för csync kunde inte laddas.<br/>Var god verifiera installationen!</p> - + CSync got an error while processing internal trees. CSYNC fel vid intern bearbetning. - - CSync failed to reserve memory. - CSync misslyckades att reservera minne. - - - + CSync fatal parameter error. CSync fatal parameter fel. - + CSync processing step update failed. CSync processteg update misslyckades. - + CSync processing step reconcile failed. CSync processteg reconcile misslyckades. - + CSync could not authenticate at the proxy. CSync kunde inte autentisera mot proxy. - + CSync failed to lookup proxy or server. CSync misslyckades att hitta proxy eller server. - + CSync failed to authenticate at the %1 server. CSync misslyckades att autentisera mot %1 servern. - + CSync failed to connect to the network. CSync misslyckades att ansluta mot nätverket. - + A network connection timeout happened. En timeout på nätverksanslutningen har inträffat. - + A HTTP transmission error happened. Ett HTTP överföringsfel inträffade. - + The mounted folder is temporarily not available on the server Den monterade mappen är tillfälligt otillgänglig på servern - + An error occurred while opening a folder En fel inträffande under öppnandet av en mapp - + Error while reading folder. Fel vid mappinläsning. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Filen/Mappen är ignorerad för att den är dold. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Endast %1 tillgängligt, behöver minst %2 för att starta - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: Ingen plats på %1 server tillgänglig. - + CSync unspecified error. CSync ospecificerat fel. - + Aborted by the user Avbruten av användare - + CSync failed to access CSync misslyckades med att läsa - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync misslyckades med att ladda eller skapa journalfilen. Säkerställ att du har rättigheter att läsa och skriva i den lokala synkmappen. - + CSync failed due to unhandled permission denied. CSync misslyckades på grund av ohanterad avslagning av rättighet. - + CSync tried to create a folder that already exists. CSync försökte skapa en mapp som redan finns. - + The service is temporarily unavailable Tjänsten är tillfälligt otillgänglig - + Access is forbidden Tillgång förbjuden - + An internal error number %1 occurred. Ett internt fel nummer %1 inträffade. - - The item is not synced because of previous errors: %1 - Objektet kunde inte synkas på grund av tidigare fel: %1 - - - + Symbolic links are not supported in syncing. Symboliska länkar stöds ej i synkningen. - + File is listed on the ignore list. Filen är listad i ignorerings listan. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. Filnamn innehåller mellanslag i slutet. - + Filename is too long. Filnamnet är för långt. - + Stat failed. Stat misslyckades. - + Filename encoding is not valid Filnamnskodning är inte giltig - + Invalid characters, please rename "%1" Otillåtna tecken, var vänlig byt namn på "%1" - - Unable to initialize a sync journal. - Kan inte initialisera en synk journal. - - - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan @@ -3198,7 +3438,7 @@ Det är inte lämpligt använda den. OCC::Systray - + %1: %2 %1: %2 @@ -3206,17 +3446,17 @@ Det är inte lämpligt använda den. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. För mer information vänligen besök <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribueras av %1 och licenserad under GNU General Public License (GPL) Version 2.0.<br/>%2 och %2 logotyp är registrerade varumärken av %1 i Förenta Staterna, andra länder, eller både och.</p> @@ -3224,17 +3464,17 @@ Det är inte lämpligt använda den. OCC::ValidateChecksumHeader - + The checksum header is malformed. Checksummans huvud är felformaterad. - + The checksum header contained an unknown checksum type '%1' Checksummans huvud innehåller en okänd checksumma av typ '%1' - + The downloaded file does not match the checksum, it will be resumed. Den nedladdade filen stämmer inte med checksumman, den kommer startas om. @@ -3242,207 +3482,207 @@ Det är inte lämpligt använda den. OCC::ownCloudGui - + Please sign in Vänliga logga in - + Folder %1: %2 Mapp %1: %2 - + No sync folders configured. Ingen synkroniseringsmapp är konfigurerad. - + There are no sync folders configured. Det finns inga synkmappar konfigurerade. - + Open in browser Öppna i webbläsare - - - + + + Log in... Logga in... - - - + + + Log out Logga ut - + Recent Changes Senaste ändringar - + Checking for changes in '%1' Kollar efter ändringar i '%1' - + Managed Folders: Hanterade mappar: - + Open folder '%1' Öppna mapp '%1' - + Open %1 in browser Öppna %1 i webbläsaren - + Unknown status Okänd status - + Settings... Inställningar... - + Details... Detaljer... - + Help Hjälp - + Quit %1 Avsluta %1 - + Disconnected from %1 Koppla från %1 - + Unsupported Server Version Serverversion stöds inte - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Servern på konto %1 kör en gammal version %2 som inte längre stöds. Att använda den här klienten med den serverversionen är otestat och potentiellt farligt. Fortsätt på egen risk. - + Disconnected from accounts: Bortkopplad från dessa konton: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Synkronisering för konto är avstängd - + Unpause all folders Sluta pausa alla mappar - + Pause all folders Pausa alla mappar - + Unpause all synchronization Sluta pausa all synkroinisering - + Unpause synchronization Sluta pausa synkronisering - + Pause all synchronization Pausa all synkronisering - + Pause synchronization Pausa synkronisering - + Log out of all accounts Logga ut från alla konton - + Log in to all accounts... Logga in på alla konton... - + New account... Nytt konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krascha nu - + No items synced recently Inga filer har synkroniseras nyligen - + Syncing %1 of %2 (%3 left) Synkroniserar %1 av %2 (%3 kvar) - + Syncing %1 of %2 Synkroniserar %1 av %2 - + Syncing %1 (%2 left) Synkroniserar %1 (%2 kvar) - + Syncing %1 Synkroniserar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell version @@ -3450,7 +3690,7 @@ Det är inte lämpligt använda den. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3553,78 +3793,42 @@ Det är inte lämpligt använda den. &Lösenord + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Formulär - - Server &address: - Server&adress: - - - - - TextLabel Textetikett - - - Use &secure connection - Använd &säker anslutning - - - - CheckBox - Kryssruta - - - - &Username: - &Användarnamn: - - - - Enter the ownCloud username. - Ange ditt användarnamn till ownCloud. - - - - &Password: - &Lösenord: - - - - Enter the ownCloud password. - Ange ditt lösenord till ownCloud. - - - - Do not allow the local storage of the password. - Tillåt inte att lösenordet lagras lokalt. - - - - &Do not store password on local machine - &Spara inte lösenordet på denna dator. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Skriv in webbadressen till den ownCloud-server du vill ansluta till (utan http eller https). - Ser&ver Address @@ -3668,7 +3872,7 @@ Det är inte lämpligt använda den. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3676,42 +3880,42 @@ Det är inte lämpligt använda den. QObject - + in the future i framtiden - + %n day(s) ago %n dag sedan%n dag(ar) sedan - + %n hour(s) ago %n timme sedan%n timmar sedan - + now nu - + Less than a minute ago Mindre än en minut sedan - + %n minute(s) ago %n minut sedan%n minut(er) sedan - + Some time ago En stund sedan - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3720,57 +3924,57 @@ Det är inte lämpligt använda den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n månad(er)%n månad(er) - + %n day(s) %n dag(ar)%n dag(ar) - + %n hour(s) %n timme/timmar%n timme/timmar - + %n minute(s) %n minut(er)%n minut(er) - + %n second(s) %n sekund(er)%n sekund(er) - + %1 %2 %1 %2 @@ -3791,102 +3995,97 @@ Det är inte lämpligt använda den. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Byggd från Git revision <a href="%1">%2</a> den %3, %4 med Qt %5, %6</small></p> - - - built with %1 - byggt med %1 - progress - + Downloaded Nedladdats - + Uploaded Uppladdad - + Server version downloaded, copied changed local file into conflict file Serverversionen nedladdad, kopierade den ändrade lokala filen till konfliktfil - + Deleted Raderad - + Moved to %1 Flyttad till %1 - + Ignored Ignorerad - + Filesystem access error Åtkomstfel till filsystemet - + Error Fel - + Updated local metadata Uppdaterade lokal metadata - - + + Unknown Okänt - + downloading laddar ner - + uploading laddar upp - + deleting raderar - + moving flyttar - + ignoring ignorerar + - error fel - + updating local metadata uppdaterar lokal metadata @@ -3894,54 +4093,77 @@ Det är inte lämpligt använda den. theme - + Status undefined Odefinierad status - + Waiting to start sync Väntar på att starta synkronisering - + Sync is running Synkronisering är aktiv - + Sync Success Lyckad synkronisering - + Sync Success, some files were ignored. Synk lyckades, men vissa filer ignorerades. - + Sync Error Synkfel - + Setup Error Inställningsfel - + Preparing to sync Förbereder synkronisering - + Aborting... Avbryter - + Sync is paused Synk är pausad + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_th.ts b/translations/client_th.ts index ff11aa807..3a3c6be62 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time แฟ้มปลายทางมีขนาดที่ระบุไม่ได้หรือการปรับเปลี่ยนเวลา @@ -81,6 +81,24 @@ ป้ายข้อความ + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel ยกเลิก @@ -136,188 +154,204 @@ เชื่อมต่อกับ <server> ด้วยผู้ใช้ <user> - + No account configured. ไม่มีการกำหนดค่าบัญชี - + Add new เพิ่มใหม่ - + Remove ลบออก - + Account บัญชี - + Choose what to sync เลือกข้อมูลที่ต้องการประสาน - + Force sync now บังคับประสานข้อมูลเดี๋ยวนี้ - + Restart sync ประสานข้อมูลอีกครั้ง - + Remove folder sync connection ลบโฟลเดอร์ที่ประสานข้อมูลออก - + Folder creation failed สร้างโฟลเดอร์ล้มเหลว - + <p>Could not create local folder <i>%1</i>. <p>ไม่สามารถสร้างโฟลเดอร์ต้นทาง <i>%1</i>. - + Confirm Folder Sync Connection Removal ยืนยันการลบโฟลเดอร์ที่ประสานข้อมูลออก - + Remove Folder Sync Connection ลบโฟลเดอร์ที่ประสานข้อมูล - + Sync Running กำลังประสานข้อมูล - + The syncing operation is running.<br/>Do you want to terminate it? กำลังดำเนินการประสานข้อมูลอยู่ <br/>คุณต้องการสิ้นสุดการทำงาน? - + %1 in use %1 กำลังถูกใช้งาน - + %1 as <i>%2</i> %1 เช่น <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. เซิร์ฟเวอร์เวอร์ชัน %1 เป็นรุ่นเก่าและไม่ได้รับการสนับสนุน! ดำเนินการความเสี่ยงด้วยคุณเอง - + Connected to %1. เชื่อมต่อกับ %1 - + Server %1 is temporarily unavailable. เซิร์ฟเวอร์ %1 ไม่สามารถใช้ได้ชั่วคราว - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. ลงชื่อออกจาก %1 - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. ไม่มีการเชื่อมต่อไปยัง %1 ที่ %2 - + Log in เข้าสู่ระบบ - + There are folders that were not synchronized because they are too big: บางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะขนาดของมันใหญ่เกินไป: - + There are folders that were not synchronized because they are external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอก - + There are folders that were not synchronized because they are too big or external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอกหรือมีขนาดที่ใหญ่เกินไป - + Confirm Account Removal ยืนยันการลบบัญชี - + <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> <p>คุณต้องการลบการเชื่อมต่อกับบัญชี<i>%1</i>?</p><p><b>หมายเหตุ:</b> นี้จะ <b>ไม่</b> ลบไฟล์ใดๆ</p> - + Remove connection ลบการเชื่อมต่อ - + + Open folder เปิดโฟลเดอร์ - - + + Log out ออกจากระบบ - + Resume sync ประสานข้อมูลอีกครั้ง - + Pause sync หยุดประสานข้อมูลชั่วคราว - + <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> <p>คุณต้องการที่จะหยุดการประสานข้อมูลโฟลเดอร์<i>%1</i>?</p><p><b>หมายเหตุ:</b> นี้จะ <b>ไม่</b> ลบไฟล์ใดๆ</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. มีการใช้งาน %1 (%3%) จาก %2 บางโฟลเดอร์รวมทั้งเครือข่ายที่ติดตั้งหรือโฟลเดอร์ที่แชร์อาจมีข้อจำกัดที่แตกต่างกัน - + %1 of %2 in use มีการใช้งาน %1 จาก %2 - + Currently there is no storage usage information available. ขณะนี้ไม่มีพื้นที่จัดเก็บข้อมูลที่ใช้งานได้ - + No %1 connection configured. ไม่มีการเชื่อมต่อ %1 ที่ถูกกำหนดค่า @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out ออกจากระบบ - + Disconnected ยกเลิกการเชื่อมต่อ - + Connected เชื่อมต่อ - + Service unavailable ไม่สามารถให้บริการได้ - + + Maintenance mode + + + + Network error ข้อผิดพลาดของเครือข่าย - + Configuration error กำหนดค่าผิดพลาด - + + Asking Credentials + + + + Unknown account state ไม่ระบุสถานะบัญชี @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity กิจกรรมของเซิร์ฟเวอร์ - + Sync Protocol โปรโตคอลที่ใช้ในการผสานข้อมูล - - List of ignored or erroneous files - รายชื่อของไฟล์ที่ถูกเพิกเฉยหรือมีผิดพลาด - - - - Copy - คัดลอก - - - - Copy the activity list to the clipboard. - คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด - - - + Not Synced ไม่ถูกประสานข้อมูลให้ตรงกัน - + Not Synced (%1) %1 is the number of not synced files. ไม่ถูกประสานข้อมูล (%1) - + The server activity list has been copied to the clipboard. รายการกิจกรรมเซิร์ฟเวอร์ได้ถูกคัดลอกไปยังคลิปบอร์ด - + The sync activity list has been copied to the clipboard. รายการกิจกรรมการประสานข้อมูลได้ถูกคัดลอกไปยังคลิปบอร์ด - + The list of unsynced items has been copied to the clipboard. รายชื่อของรายการที่ไม่ได้ประสานข้อมูล ได้ถูกคัดลอกไปยังคลิปบอร์ด - + Copied to clipboard คัดลอกไปยังคลิปบอร์ด @@ -448,47 +477,47 @@ ป้ายข้อความ - + Server Activities กิจกรรมของเซิร์ฟเวอร์ - + Copy คัดลอก - + Copy the activity list to the clipboard. คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด - + Action Required: Notifications จำเป็นต้องทำ: การแจ้งเตือน - + <br/>Account %1 does not have activities enabled. <br />บัญชี %1 ไม่มีกิจกรรมที่เปิดใช้งาน - + You received %n new notification(s) from %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %2 - + You received %n new notification(s) from %1 and %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %1 และ %2 - + You received new notifications from %1, %2 and other accounts. คุณได้รับการแจ้งเตือนใหม่จาก %1, %2 และผู้ใช้อื่นๆ - + %1 Notifications - Action Required %1 การแจ้งเตือน - จำเป็นต้องดำเนินการ @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file เกิดข้อผิดพลาดขณะกำลังเข้าถึงไฟล์กำหนดค่า - + There was an error while accessing the configuration file at %1. เกิดข้อผิดพลาดขณะกำลังเข้าถึงไฟล์กำหนดค่า %1 - + Quit ownCloud ออกจาก ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured ไม่มีการกำหนดค่าบัญชี ownCloud - + The configured server for this client is too old การกำหนดค่าเซิร์ฟเวอร์สำหรับไคลเอ็นต์นี้เก่าเกินไป - + Please update to the latest server and restart the client. กรุณาอัพเดทเซิร์ฟเวอร์ใหม่ใหม่ที่สุดและรีสตาร์ทไคลเอนต์ - + Authentication error: Either username or password are wrong. ข้อผิดพลาดในการตรวจสอบ: ทั้งชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง - + timeout หมดเวลา - + The provided credentials are not correct ระบุข้อมูลประจำตัวไม่ถูกต้อง - - OCC::DeleteJob - - - Connection timed out - หมดเวลาการเชื่อมต่อ - - OCC::DiscoveryMainThread - + Aborted by the user ยกเลิกโดยผู้ใช้ @@ -632,125 +653,125 @@ OCC::Folder - + Local folder %1 does not exist. โฟลเดอร์ต้นทาง %1 ไม่มีอยู่ - + %1 should be a folder but is not. %1 ควรจะเป็นโฟลเดอร์ แต่ทำไม่ได้ - + %1 is not readable. ไม่สามารถอ่านข้อมูล %1 ได้ - + %1 has been removed. %1 names a file. %1 ได้ถูกลบออก - + %1 has been downloaded. %1 names a file. %1 ได้ถูกดาวน์โหลด - + %1 has been updated. %1 names a file. %1 ได้ถูกอัพเดทเรียบร้อยแล้ว - + %1 has been renamed to %2. %1 and %2 name files. %1 ได้ถูกเปลี่ยนชื่อเป็น %2 - + %1 has been moved to %2. %1 ได้ถูกย้ายไปยัง %2 - + %1 and %n other file(s) have been removed. %1 และ %n ไฟล์อื่นๆได้ถูกลบออก - + %1 and %n other file(s) have been downloaded. %1 และ %n ไฟล์อื่นๆ ได้ถูกดาวน์โหลดเรียบร้อยแล้ว - + %1 and %n other file(s) have been updated. %1 และ %n ไฟล์อื่นๆ ได้รับการอัพเดท - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 และไฟล์อื่นๆอีก %n ไฟล์ได้ถูกเปลี่ยนชื่อเป็น %2 - + %1 has been moved to %2 and %n other file(s) have been moved. %1 และไฟล์อื่นๆอีก %n ไฟล์ได้ถูกย้ายไปยัง %2 - + %1 has and %n other file(s) have sync conflicts. %1 และ %n ไฟล์อื่นๆ เกิดปัญหาขณะประสานข้อมูล - + %1 has a sync conflict. Please check the conflict file! %1 มีปัญหาขณะประสานข้อมูล กรุณาตรวจสอบไฟล์ที่มีปัญหานั้น - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 และไฟล์อื่นๆอีก %n ไฟล์ไม่สามารถประสานข้อมูลเนื่องจากเกิดข้อผิดพลาด กรุณาดูไฟล์ log สำหรับรายละเอียดเพิ่มเติม - + %1 could not be synced due to an error. See the log for details. %1 ไม่สามารถประสานข้อมูลเนื่องจากมีข้อผิดพลาด สามารถดูไฟล์ log สำหรับรายละเอียดเพิ่มเติม - + Sync Activity ความเคลื่อนไหวของการประสานข้อมูล - + Could not read system exclude file ไม่สามารถอ่าน ยกเว้นไฟล์ระบบ - + A new folder larger than %1 MB has been added: %2. โฟลเดอร์ใหม่มีขนาดใหญ่กว่า %1 เมกะไบต์ ได้ถูกเพิ่ม: %2 - + A folder from an external storage has been added. โฟลเดอร์ที่มีพื้นที่จัดเก็บข้อมูลภายนอกได้ถูกเพิ่ม - + Please go in the settings to select it if you wish to download it. กรุณาไปในส่วนของการตั้งค่าเพื่อเลือก ถ้าคุณต้องการจะดาวน์โหลด - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -761,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a หากคุณตัดสินใจที่จะลบไฟล์ก็จะทำให้ไม่มีใครสามารถใช้งานโฟลเดอร์นี้ได้เพราะคุณเป็นเจ้าของ - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -771,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce ถ้าเรื่องนี้เป็นอุบัติเหตุและคุณตัดสินใจที่จะเก็บไฟล์ของคุณ ไฟล์ของคุณก็จะถูกประสานข้อมูลใหม่อีกครั้ง - + Remove All Files? ลบไฟล์ทั้งหมด? - + Remove all files ลบไฟล์ทั้งหมด - + Keep files เก็บไฟล์เอาไว้ - + This sync would reset the files to an earlier 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? @@ -795,17 +816,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an ไฟล์ปัจจุบันของคุณทั้งหมดจะถูกเขียนทับด้วยไฟล์เก่า คุณต้องการเก็บไฟล์ไว้? - + Backup detected ตรวจพบการสำรองข้อมูล - + Normal Synchronisation ประสานข้อมูลปกติ - + Keep Local Files as Conflict เก็บไฟล์ต้นทางเป็นไฟล์ที่มีปัญหา @@ -813,112 +834,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state ไม่สามารถรีเซ็ตสถานะโฟลเดอร์ - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. บนบันทึกการประสานข้อมูลเก่า '%1' แต่ไม่สามารถลบออกได้ กรุณาตรวจสอบให้แน่ใจว่าไม่มีแอพฯ หรือการทำงานใดๆที่ใช้มันอยู่ - + (backup) (สำรองข้อมูล) - + (backup %1) (สำรองข้อมูล %1) - + Undefined State. สถานะที่ยังไม่ได้ถูกกำหนด - + Waiting to start syncing. กำลังรอเริ่มต้นการประสานข้อมูล - + Preparing for sync. กำลังเตรียมการประสานข้อมูล - + Sync is running. การประสานข้อมูลกำลังทำงาน - + Last Sync was successful. ประสานข้อมูลครั้งล่าสุดเสร็จเรียบร้อยแล้ว - + Last Sync was successful, but with warnings on individual files. การประสานข้อมูลสำเร็จ แต่มีคำเตือนในแต่ละไฟล์ - + Setup Error. เกิดข้อผิดพลาดในการติดตั้ง - + User Abort. ยกเลิกผู้ใช้ - + Sync is paused. การประสานข้อมูลถูกหยุดไว้ชั่วคราว - + %1 (Sync is paused) %1 (การประสานข้อมูลถูกหยุดชั่วคราว) - + No valid folder selected! เลือกโฟลเดอร์ไม่ถูกต้อง! - + The selected path is not a folder! เส้นทางที่เลือกไม่ใช่โฟลเดอร์! - + You have no permission to write to the selected folder! คุณมีสิทธิ์ที่จะเขียนโฟลเดอร์ที่เลือกนี้! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! โฟลเดอร์ต้นทาง %1 ได้ถูกเก็บข้อมูลของพาทแล้ว ลิงค์เป้าหมายมีโฟลเดอร์ที่ประสานข้อมูลแล้ว โปรดเลือกอันอื่น! - + There is already a sync from the server to this local folder. Please pick another local folder! โฟลเดอร์ต้นทางนี้ได้ถูกประสานข้อมูลกับเซิร์ฟเวอร์แล้ว โปรดเลือกโฟลเดอร์ต้นทางอื่นๆ! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! เนื้อหาโฟลเดอร์ต้นทาง %1 ได้ถูกใช้ไปแล้วในโฟลเดอร์ที่ประสานข้อมูล กรุณาเลือกอีกอันหนึ่ง! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! เนื้อหาของโฟลเดอร์ต้นทาง %1 ไดถูกใช้ไปแล้วในโฟลเดอร์ที่ประสานข้อมูล กรุณาเลือกอีกอันหนึ่ง! - + 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! โฟลเดอร์ต้นทาง %1 เป็นการเชื่อมโยงสัญลักษณ์ เป้าหมายของลิงค์มีเนื้อหาที่ถูกใช้ไปแล้วในโฟลเดอร์ที่ประสานข้อมูล กรุณาเลือกอีกอันหนึ่ง! @@ -927,17 +948,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Synchronizing with local folder กำลังประสานข้อมูลกับโฟลเดอร์ต้นทาง - + File ไฟล์ @@ -945,134 +966,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder คุณจะต้องเชื่อมต่อก่อนที่จะเพิ่มโฟลเดอร์ - + Click this button to add a folder to synchronize. คลิกที่ปุ่มนี้เพื่อเพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. ข้อผิดพลาดในขณะที่โหลดรายชื่อโฟลเดอร์จากเซิร์ฟเวอร์ - + Signed out ออกจากระบบ - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. การเพิ่มโฟลเดอร์ถูกยกเลิกเพราะคุณได้ประสานไฟล์ทั้งหมดของคุณอยู่แล้ว หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์โปรดลบโฟลเดอร์รากกำหนดค่าในปัจจุบัน - + Fetching folder list from server... กำลังดึงรายการโฟลเดอร์จากเซิร์ฟเวอร์ ... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" กำลังประสานข้อมูล %1 - - + + , หรือ - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ดาวน์โหลด %1/วินาที - + u2193 %1/s u2193 %1/วินาที - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - อัปโหลด + อัพโหลด - + u2191 %1/s u2191 %1/วินาที - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ของ %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" เหลืออีก %5 ไฟล์, %1 ไฟล์จาก %2, %3 ไฟล์จาก %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 จาก %2, %3 จาก %4 ไฟล์ - + file %1 of %2 ไฟล์ %1 จาก %2 - + Waiting... กรุณารอซักครู่... - + Waiting for %n other folder(s)... กำลังรออีก (%n) โฟลเดอร์... - + Preparing to sync... กำลังเตรียมพร้อมในการประสานข้อมูล @@ -1080,12 +1111,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Add Sync Connection เพิ่มการประสานข้อมูลให้ตรงกัน @@ -1098,7 +1129,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an คลิกเพื่อเลือกโฟลเดอร์ในการประสานข้อมูล - + Enter the path to the local folder. ป้อนพาธไปยังโฟลเดอร์ต้นทาง @@ -1121,42 +1152,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an ใส่ชื่อของโฟลเดอร์ใหม่ที่จะถูกสร้างขึ้นดังต่อไปนี้ '%1': - + Folder was successfully created on %1. โฟลเดอร์ถูกสร้างขึ้นเรียบร้อยแล้วเมื่อ %1... - + Authentication failed accessing %1 รับรองความถูกต้องล้มเหลวขณะกำลังเข้าถึง %1 - + Failed to create the folder on %1. Please check manually. ไม่สามารถสร้างโฟลเดอร์บน %1 กรุณาตรวจสอบด้วยตนเอง - + Failed to list a folder. Error: %1 รายการโฟลเดอร์ล้มเหลว ข้อผิดพลาด: %1 - + Choose this to sync the entire account เลือกตัวเลือกนี้เพื่อประสานข้อมูลบัญชีทั้งหมด - + This folder is already being synced. โฟลเดอร์นี้ถูกประสานข้อมูลอยู่แล้ว - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. คุณประสานข้อมูล <i>%1</i> อยู่แล้ว ซึ่งมีโฟลเดอร์หลักเป็น <i>%2</i> - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. คุณกำลังผสานข้อมูลไฟลืทั้งหมดอยู่แล้ว การผสานข้อมูลโฟลเดอร์อื่นๆ<b>ไม่</b>ได้รับการสนับสนุน หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์ กรุณาลบการกำหนดค่าผสานข้อมูลโฟลเดอร์รากในปัจจุบัน @@ -1177,22 +1208,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway ไม่มี E-Tag ที่ได้รับจากเซิร์ฟเวอร์ กรุณาตรวจสอบ พร็อกซี่หรือเกตเวย์ - + We received a different E-Tag for resuming. Retrying next time. เราได้รับ E-Tag ที่แตกต่างกันสำหรับการทำงาน กรุณาลองอีกครั้งในเวลาถัดไป - + Server returned wrong content-range เซิร์ฟเวอร์ส่งคืนช่วงของเนื้อหาที่ผิด - + Connection Timeout หมดเวลาการเชื่อมต่อ @@ -1215,23 +1246,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an สำหรับถาดของระบบ - + Advanced ขั้นสูง - + Ask for confirmation before synchronizing folders larger than ถามก่อนที่จะประสานข้อมูลกับโฟลเดอร์ที่มีขนาดใหญ่กว่า - + MB Trailing part of "Ask confirmation before syncing folder larger than" เมกะไบต์ - + Ask for confirmation before synchronizing external storages ถามก่อนที่จะประสานข้อมูลกับพื้นที่จัดเก็บข้อมูลภายนอก @@ -1251,28 +1282,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an ใช้ไอคอนขาวดำ - + Edit &Ignored Files แก้ไขและละเว้นการแก้ไขไฟล์ - + S&how crash reporter แสดงรายงานความผิดพลาด - - + + About เกี่ยวกับเรา - + Updates อัพเดท - + &Restart && Update และเริ่มต้นใหม่ && อัพเดท @@ -1280,22 +1311,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> กรุณากรอกรหัสผ่าน %1:<br><br>ผู้ใช้: %2<br>บัญชี: %3<br> - + Reading from keychain failed with error: '%1' อ่านจาก Keychain ล้มเหลวด้วยข้อผิดพลาด: '%1' - + Enter Password ป้อนรหัสผ่าน - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">คลิกที่นี่</a> เพื่อขอรหัสผ่านแอพฯ จากเว็บอินเตอร์เฟส @@ -1377,55 +1408,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from รายการนี้ถูกระบุโดยระบบที่ '%1' และไม่สามารถแก้ไขได้ในมุมมองนี้ + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output ผลลัพธ์ของไฟล์ log - + &Search: &ค้นหา: - + &Find &ค้น - + + &Capture debug messages + + + + Clear ล้าง - + Clear the log display. ล้างข้อมูลไฟล์ log ที่แสดงอยู่ - + S&ave &บันทึก - + Save the log file to a file on disk for debugging. บันทึกไฟล์ log บนดิสก์เพื่อตรวจสอบข้อผิดพลาด - + Save log file บันทึกข้อมูลไฟล์ log - + Error ข้อผิดพลาด - + Could not write to log file %1 ไม่สามารถเขียนไฟล์ log %1 @@ -1433,24 +1534,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error ข้อผิดพลาด - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>ไฟล์ '%1'<br/>ไม่สามารถเปิดขึ้นมาเพื่อเขียนข้อมูลได้<br/><br/>ผลลัพธ์ของไฟล์ log <b>ไม่สามารถ</b> บันทึกข้อมูลได้!</nobr> - - OCC::MoveJob - - - Connection timed out - หมดเวลาการเชื่อมต่อ - - OCC::NSISUpdater @@ -1562,27 +1655,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from จำกัดโดยอัตโนมัติ - + Hostname of proxy server ชื่อโฮสต์ของเซิร์ฟเวอร์พร็อกซี่ - + Username for proxy server ชื่อผู้ใช้ของเซิร์ฟเวอร์พร็อกซี่ - + Password for proxy server รหัสผ่านของเซิร์ฟเวอร์พร็อกซี่ - + HTTP(S) proxy พร็อกซี HTTP(S) - + SOCKS5 proxy พร็อกซี SOCKS5 @@ -1595,78 +1688,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 ถูกสร้างแล้วที่ %1 - + Closing in a few seconds... กำลังจะปิดในไม่กี่วินาที ... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 ร้องขอล้มเหลวที่ %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' ได้เลือกแล้วที่ %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready มี %1 พร้อมอัพเดทใหม่ - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. มีการอัพเดทใหม่สำหรับ %1 มันเกี่ยวกับการติดตั้ง การอัพเดทอาจจะถามสิทธิประโยชน์เพิ่มเติมในระหว่างกระบวนการ - + Downloading version %1. Please wait... กำลังดาวน์โหลดรุ่น %1 กรุณารอสักครู่... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. ไม่สามารถดาวน์โหลดการอัพเดท กรุณาคลิก<a href='%1'>ที่นี่</a> เพื่อดาวน์โหลดการอัพเดทด้วยตนเอง - + Could not check for new updates. ไม่สามารถตรวจสอบการอัพเดทใหม่ - + %1 version %2 available. Restart application to start the update. มี %1 รุ่น %2 พร้อมใช้งานแล้ว เริ่มต้นแอพพลิเคชันใหม่เพื่อเริ่มต้นการอัพเดท - + New %1 version %2 available. Please use the system's update tool to install it. มี %1 รุ่น %2 พร้อมใช้งานแล้ว กรุณาใช้เครื่องมืออัพเดทระบบเพื่อติดตั้ง - + Checking update server... กำลังตรวจสอบการอัพเดทเซิร์ฟเวอร์... - + Update status is unknown: Did not check for new updates. สถานะการอัพเดทที่ไม่รู้จัก: จะไม่มีการตรวจสอบการอัพเดทใหม่ - + No updates available. Your installation is at the latest version. ไม่พบการอัพเดท ตัวที่ติดตั้งเป็นเวอร์ชั่นล่าสุด @@ -1679,43 +1805,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 เชื่อมต่อไปยัง %1 - + Setup local folder options ตั้งค่าตัวเลือกโฟลเดอร์ต้นทาง - + Connect... เชื่อมต่อ... - + %1 folder '%2' is synced to local folder '%3' %1 โฟลเดอร์ '%2' ถูกประสานข้อมูลไปยังโฟลเดอร์ต้นทาง '%3' - + Sync the folder '%1' ประสานข้อมูลโฟลเดอร์ '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>คำเตือน:</strong> โฟลเดอร์ต้นทางจะต้องไม่ว่างเปล่า เลือกความละเอียด!</small></p> - + Local Sync Folder ประสานโฟลเดอร์ต้นทาง - - + + (%1) (%1) @@ -1748,7 +1874,7 @@ for additional privileges during the process. กำหนดค่าใบรับรอง TLS ฝั่งไคลเอ็นต์ - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>ไม่สามารถเชื่อมต่อไปยังที่อยู่เซิร์ฟเวอร์ที่ปลอดภัย<em>%1</em> คุณต้องการที่จะดำเนินการต่อไป?</p></body></html> @@ -1756,47 +1882,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email และอีเมล - + Connect to %1 เชื่อมต่อไปยัง %1 - + Enter user credentials ป้อนข้อมูลประจำตัวของผู้ใช้ + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 เชื่อมต่อไปยัง %1 - + Setup %1 server ติดตั้งเซิร์ฟเวอร์ %1 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. URL นี้ไม่มีความปลอดภัยเพราะมันไม่ถูกเข้ารหัส ไม่แนะนำให้ใช้ - + This url is secure. You can use it. URL นี้มีความปลอดภัย คุณสามารถใช้มัน - + &Next > และถัดไป > @@ -1804,22 +1943,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">เชื่อมต่อกับ %1: %2 รุ่น %3 (%4) เสร็จเรียบร้อยแล้ว</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ล้มเหลวในการเชื่อมต่อไปยัง %1 ที่ %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. หมดเวลาขณะที่พยายามเชื่อมต่อไปยัง %1 ที่ %2 - + Trying to connect to %1 at %2... กำลังพยายามเชื่อมต่อไปที่ %1 ที่ %2... @@ -1839,109 +1978,109 @@ It is not advisable to use it. การเข้าถึงถูกระงับโดยเซิร์ฟเวอร์ เพื่อตรวจสอบว่าคุณมีการเข้าถึงที่เหมาะสม <a href="%1">คลิกที่นี่</a> เพื่อรเข้าถึงบริการกับเบราว์เซอร์ของคุณ - + Invalid URL URL ไม่ถูกต้อง - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ประสานข้อมูลโฟลเดอร์ต้นทาง %1 มีอยู่แล้ว กรุณาตั้งค่าเพื่อถ่ายข้อมูล <br/<br/> - + Creating local sync folder %1... สร้างประสานข้อมูลโฟลเดอร์ต้นทาง %1... - + ok ตกลง - + failed. ล้มเหลว - + Could not create local folder %1 ไม่สามารถสร้างผสานข้อมูลโฟลเดอร์ต้นทาง %1... - + No remote folder specified! ไม่มีโฟลเดอร์รีโมทที่ระบุ! - + Error: %1 ข้อผิดพลาด: %1 - + creating folder on ownCloud: %1 กำลังสร้างโฟลเดอร์ใหม่บน ownCloud: %1 - + Remote folder %1 created successfully. โฟลเดอร์รีโมท %1 ถูกสร้างเรียบร้อยแล้ว - + The remote folder %1 already exists. Connecting it for syncing. โฟลเดอร์รีโมทมี %1 อยู่แล้ว กำลังเชื่อมต่อเพื่อถ่ายโอนข้อมูล - + The folder creation resulted in HTTP error code %1 การสร้างโฟลเดอร์ดังกล่าวส่งผลให้เกิดรหัสข้อผิดพลาด HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> สร้างโฟลเดอร์ระยะไกลล้มเหลวเนื่องจากมีข้อมูลผิดพลาด! - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">การสร้างโฟลเดอร์รีโมทล้มเหลว ซึ่งอาจมีสาเหตุมาจากการกรอกข้อมูลส่วนตัวเพื่อเข้าใช้งานไม่ถูกต้อง.</font><br/>กรุณาย้อนกลับไปแล้วตรวจสอบข้อมูลส่วนตัวของคุณอีกครั้ง.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. การสร้างโฟลเดอร์ระยะไกล %1 ล้มเหลวเนื่องข้อผิดพลาด <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. การเชื่อมต่อเผื่อประสานข้อมูลจาก %1 ไปที่ไดเร็กทอรี่ระยะไกล %2 ได้ถูกติดตั้งแล้ว - + Successfully connected to %1! เชื่อมต่อไปที่ %1! สำเร็จ - + Connection to %1 could not be established. Please check again. การเชื่อมต่อกับ %1 ไม่สามารถดำเนินการได้ กรุณาตรวจสอบอีกครั้ง - + Folder rename failed เปลี่ยนชื่อโฟลเดอร์ล้มเหลว - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. ไม่สามารถลบและสำรองข้อมูลโฟลเดอร์เพราะโฟลเดอร์หรือไฟล์ในนั้นจะเปิดในโปรแกรมอื่นอยู่ กรุณาปิดโฟลเดอร์หรือไฟล์และกดลองใหม่อีกครั้งหรือยกเลิกการติดตั้ง - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ประสานข้อมูลโฟลเดอร์ต้นทาง %1 ได้ถูกสร้างขึ้นเรียบร้อยแล้ว!</b></font> @@ -1949,12 +2088,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 ตัวช่วยสร้างการเชื่อมต่อ - + Skip folders configuration ข้ามการกำหนดค่าโฟลเดอร์ @@ -1962,33 +2101,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! ตั้งค่าทุกอย่าง! - + Open Local Folder เปิดโฟลเดอร์ต้นทาง - + Open %1 in Browser เปิด %1 ในเบราว์เซอร์ - - OCC::PUTFileJob - - - Connection Timeout - หมดเวลาการเชื่อมต่อ - - OCC::PollJob - + Invalid JSON reply from the poll URL ตอบกลับ JSON ไม่ถูกต้องจาก URL แบบสำรวจความคิดเห็น @@ -1996,7 +2127,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2004,47 +2135,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! ไฟล์ %1 ไม่สามารถดาวน์โหลดได้เพราะชื่อไฟล์ต้นทางเหมือนกัน! - - The download would reduce free disk space below %1 - การดาวน์โหลดจะลดพื้นที่ว่างในดิสก์ด้านล่าง %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 พื้นที่ว่างในดิสก์น้อยกว่า %1 - + File was deleted from server ไฟล์ถูกลบออกจากเซิร์ฟเวอร์ - + The file could not be downloaded completely. ดาวน์โหลดไฟล์ไม่สำเร็จ - + The downloaded file is empty despite the server announced it should have been %1. ไฟล์ที่ดาวน์โหลดว่างเปล่าแม้ว่าเซิร์ฟเวอร์ประกาศว่าควรจะเป็น %1 - + File %1 cannot be saved because of a local file name clash! ไฟล์ %1 ไม่สามารถบันทึกได้เพราะชื่อไฟล์ต้นทางเหมือนกัน! - + File has changed since discovery ไฟล์มีการเปลี่ยนแปลงตั้งแต่ถูกพบ - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2052,17 +2183,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; ฟื้นฟูล้มเหลว: %1 - - Continue blacklisting: - ดำเนินการขึ้นบัญชีดำ: - - - + A file or folder was removed from a read only share, but restoring failed: %1 ไฟล์หรือโฟลเดอร์ที่ถูกลบออกจากส่วนการอ่านเพียงอย่างเดียว แต่ล้มเหลวในการฟื้นฟู: %1 @@ -2070,22 +2196,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ไม่สามารถลบไฟล์ %1, ข้อผิดพลาด: %2 - + Attention, possible case sensitivity clash with %1 คำเตือน เคสที่เป็นไปไม่ได้มีผลกับ %1 - + could not create folder %1 ไม่สามารถสร้างโฟลเดอร์ %1 - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2093,17 +2219,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; ข้อผิดพลาดขณะกำลังลบ '%1': %2; - + Could not remove folder '%1' ไม่สามารถลบโฟลเดอร์ '%1' - + Could not remove %1 because of a local file name clash ไม่สามารถลบ %1 เพราะชื่อไฟล์ต้นทางเหมือนกัน! @@ -2111,13 +2237,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash ไฟล์ %1 ไม่สามารถเปลี่ยนชื่อเป็น %2 เพราะชื่อไฟล์ต้นทางตรงกัน! - - + + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2125,12 +2251,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. ไฟล์ถูกลบออกจากการแชร์เพื่ออ่านเพียงอย่างเดียว ได้รับการกู้คืน - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". รหัส HTTP ผิดพลาด โดยเซิร์ฟเวอร์คาดว่าจะได้รับรหัส 204 แต่กลับได้รับ "%1 %2" @@ -2138,12 +2264,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". รหัส HTTP ผิดพลาด โดยเซิร์ฟเวอร์คาดว่าจะได้รับรหัส 201 แต่กลับได้รับ "%1 %2" - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2151,28 +2277,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. โฟลเดอร์นี้จะต้องไม่ถูกเปลี่ยนชื่อ มันจะถูกเปลี่ยนกลับไปใช้ชื่อเดิม - + This folder must not be renamed. Please name it back to Shared. โฟลเดอร์นี้จะต้องไม่ถูกเปลี่ยนชื่อ กรุณาตั้งชื่อมันให้เหมือนตอนที่แชร์ - + The file was renamed but is part of a read only share. The original file was restored. ไฟล์ที่ถูกเปลี่ยนชื่อ แต่เป็นส่วนหนึ่งของการแชร์เพื่ออ่านเพียงอย่างเดียว ไฟล์ต้นฉบับจะถูกกู้คืน - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". รหัส HTTP ผิดพลาด โดยเซิร์ฟเวอร์คาดว่าจะได้รับรหัส 201 แต่กลับได้รับ "%1 %2" - - + + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2180,27 +2306,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists ไม่สามารถอัพโหลดไฟล์ %1 เนื่องจากมีไฟล์อื่นที่มีชื่อเดียวกันอยู่แล้ว - + File Removed ไฟล์ถูกลบไปแล้ว - + Local file changed during syncing. It will be resumed. ไฟล์ต้นทางถูกเปลี่ยนแปลงในระหว่างการซิงค์ มันจะกลับมา - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2208,32 +2339,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. บังคับให้ยกเลิกงานในการตั้งค่าการเชื่อมต่อ HTTP กับ Qt < 5.4.2 - + The local file was removed during sync. ไฟล์ต้นทางถูกลบออกในระหว่างการประสานข้อมูล - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + Unexpected return code from server (%1) มีรหัสข้อผิดพลาดตอบกลับมาจากเซิร์ฟเวอร์ (%1) - + Missing File ID from server ไฟล์ไอดีได้หายไปจากเซิร์ฟเวอร์ - + Missing ETag from server ETag ได้หายไปจากเซิร์ฟเวอร์ @@ -2241,32 +2372,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. บังคับให้ยกเลิกงานในการตั้งค่าการเชื่อมต่อ HTTP กับ Qt < 5.4.2 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. ไฟล์ต้นทางได้ถูกแก้ไขแต่เป็นส่วนหนึ่งของการแชร์ให้สามารถอ่านได้อย่างเดียว มันถูกกู้คืนและการแก้ไขของคุณอยู่ในไฟล์ที่มีปัญหา - + Poll URL missing URL แบบสำรวจความคิดเห็นหายไป - + The local file was removed during sync. ไฟล์ต้นทางถูกลบออกในระหว่างการประสานข้อมูล - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + The server did not acknowledge the last chunk. (No e-tag was present) เซิร์ฟเวอร์ไม่ยอมรับส่วนสุดท้าย (ไม่มี e-tag ในปัจจุบัน) @@ -2284,42 +2415,42 @@ It is not advisable to use it. ป้ายข้อความ - + Time เวลา - + File ไฟล์ - + Folder แฟ้มเอกสาร - + Action การกระทำ - + Size ขนาด - + Local sync protocol โปรโตคอลการประสานข้อมูลต้นทาง - + Copy คัดลอก - + Copy the activity list to the clipboard. คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด @@ -2360,7 +2491,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync เลือกสิ่งที่ต้องการประสานข้อมูล @@ -2368,33 +2499,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... กำลังโหลด ... - + Deselect remote folders you do not wish to synchronize. ไม่ต้องเลือกรีโมทโฟลเดอร์ที่คุณไม่ต้องการประสานข้อมูล - + Name ชื่อ - + Size ขนาด - - + + No subfolders currently on the server. ไม่มีโฟลเดอร์ย่อยอยู่บนเซิร์ฟเวอร์ - + An error occurred while loading the list of sub folders. เกิดข้อผิดพลาดขณะโหลดรายชื่อของโฟลเดอร์ย่อย @@ -2407,22 +2538,22 @@ It is not advisable to use it. ตั้งค่า - + Activity กิจกรรม - + General ทั่วไป - + Network เครือข่าย - + Account บัญชี @@ -2430,27 +2561,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity กิจกรรม - + General ทั่วไป - + Network เครือข่าย - + Account บัญชี @@ -2478,35 +2609,45 @@ It is not advisable to use it. พาธ ownCloud: - + %1 Sharing กำลังแชร์ %1 - + %1 %1 - + Folder: %2 โฟลเดอร์: %2 - + The server does not allow sharing เซิร์ฟเวอร์ไม่อนุญาตให้แชร์ - + Retrieving maximum possible sharing permissions from server... คุณใช้สิทธิ์การเรียกข้อมูลจากเซิฟเวอร์สูงสุดแล้ว - + The file can not be shared because it was shared without sharing permission. ไม่สามารถแชร์ไฟล์เพราะไม่ได้รับอนุญาต + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2516,92 +2657,126 @@ It is not advisable to use it. แชร์ NewDocument.odt - - Share link - แชร์ลิงค์ - - - + TextLabel ป้ายข้อความ - + Set &password ตั้ง &รหัสผ่าน - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date ตั้ง &วันหมดอายุ - + Set password ตั้งรหัสผ่าน - - &Mail link - และลิงค์อีเมล + + Link properties: + - Copy &link - คัดลอก &ลิงค์ + Show file listing + - + Allow editing อนุญาตให้แก้ไข - + Anyone with the link has access to the file/folder ทุกคนที่มีลิงก์สามารถเข้าถึงไฟล์หรือโฟลเดอร์ได้ - + + P&assword protect ป้องกันด้วยรหัสผ่าน - + Password Protected รหัสผ่านถูกป้องกันแล้ว - + The file can not be shared because it was shared without sharing permission. ไม่สามารถแชร์ไฟล์เพราะไม่ได้รับอนุญาต - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password การแชร์สาธารณะจำเป็นต้องมีรหัสผ่าน - + Please Set Password กรุณาตั้งรหัสผ่าน - - - Could not open email client - ไม่สามารถเปิดไคลเอนต์อีเมล - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - เกิดข้อผิดพลาดเมื่อเปิดไคลเอ็นต์อีเมลเพื่อสร้างข้อความใหม่ บางทีไคลเอ็นต์อีเมลอาจยังไม่ได้ตั้งค่า? - - - - - &Share link - &แชร์ลิงค์ - OCC::ShareUserGroupWidget @@ -2611,68 +2786,98 @@ It is not advisable to use it. แชร์ NewDocument.odt - + Share with users or groups ... แชร์กับผู้ใช้หรือกลุ่ม ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' ไม่มีผลลัพธ์สำหรับ '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - แบบฟอร์ม + - + TextLabel - ป้ายข้อความ + - + can edit - สามารถแก้ไข + - + can share - สามารถแชร์ได้ + - + ... - ... + - + create - สร้าง + - + change - เปลี่ยนแปลง + - + delete - ลบ + OCC::ShibbolethCredentials - + Login Error เข้าสู่ระบบผิดพลาด - + You must sign in as user %1 คุณต้องเข้าสู่ระบบเป็นผู้ใช้ %1 @@ -2680,22 +2885,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - รับรองความถูกต้อง - + SSL Chipher Debug View ดู SSL Chipher Debug - + Reauthentication required จำเป้นต้องรับรองความถูกต้องอีกครั้ง - + Your session has expired. You need to re-login to continue to use the client. เซสชั่นของคุณหมดอายุแล้ว คุณจำเป็นต้องเข้าสู่ระบบใหม่ @@ -2703,26 +2908,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud แชร์กับ %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>รายละเอียดใบรับรองความถูกต้อง</h3> - + Common Name (CN): ชื่อทั่วไป (Common Name): - + Subject Alternative Names: ชื่อเรื่องทางเลือก: @@ -2807,7 +3032,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. การเชื่อมต่อนี้ถูกเข้ารหัสโดยใช้ %1 บิต %2 @@ -2823,7 +3048,7 @@ It is not advisable to use it. ข้อมูลการรับรอง: - + This connection is NOT secure as it is not encrypted. การเชื่อมต่อนี้ไม่มีความปลอดภัยเพราะมันไม่ได้เข้ารหัส @@ -2842,67 +3067,67 @@ It is not advisable to use it. เชื่อถือในใบรับรองความปลอดภัยนี้ไม่ว่าอย่างไร - + Untrusted Certificate ใบรับรองไม่น่าเชื่อถือ - + Cannot connect securely to <i>%1</i>: ไม่สามารถเชื่อมต่อแบบปลอดภัยไปยัง <i>%1</i>: - + with Certificate %1 ด้วยใบรับรองความปลอดภัย %1 - + &lt;not specified&gt; &lt;ยังไม่ได้ถูกระบุ&gt; - - + + Organization: %1 หน่วยงาน: %1 - - + + Unit: %1 หน่วย: %1 - - + + Country: %1 ประเทศ: %1 - + Fingerprint (MD5): <tt>%1</tt> ลายนิ้วมือ (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> ลายนิ้วมือ (SHA1): <tt>%1</tt> - + Effective Date: %1 วันที่บังคับใช้: %1 - + Expiration Date: %1 หมดอายุวันที่: %1 - + Issuer: %1 ผู้รับรอง: %1 @@ -2910,285 +3135,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. เสร็จสิ้น - + CSync failed to load the journal file. The journal file is corrupted. CSync ไม่สามารถโหลดไฟล์เจอร์นัล ไฟล์เจอร์นัลได้รับความเสียหาย - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>ปลั๊กอิน %1 สำหรับ csync ไม่สามารถโหลดได้.<br/>กรุณาตรวจสอบความถูกต้องในการติดตั้ง!</p> - + CSync got an error while processing internal trees. CSync เกิดข้อผิดพลาดบางประการในระหว่างประมวลผล internal trees - - CSync failed to reserve memory. - การจัดสรรหน่วยความจำ CSync ล้มเหลว - - - + CSync fatal parameter error. พบข้อผิดพลาดเกี่ยวกับ CSync fatal parameter - + CSync processing step update failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync processing step reconcile failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync could not authenticate at the proxy. CSync ไม่สามารถรับรองความถูกต้องที่พร็อกซี่ - + CSync failed to lookup proxy or server. CSync ไม่สามารถค้นหาพร็อกซี่บนเซิร์ฟเวอร์ได้ - + CSync failed to authenticate at the %1 server. CSync ล้มเหลวในการยืนยันสิทธิ์การเข้าใช้งานที่เซิร์ฟเวอร์ %1 - + CSync failed to connect to the network. CSync ล้มเหลวในการเชื่อมต่อกับเครือข่าย - + A network connection timeout happened. หมดเวลาการเชื่อมต่อเครือข่าย - + A HTTP transmission error happened. เกิดข้อผิดพลาดเกี่ยวกับ HTTP transmission - + The mounted folder is temporarily not available on the server โฟลเดอร์ที่ติดตั้งชั่วคราว ไม่สามารถใช้งานบนเซิร์ฟเวอร์ - + An error occurred while opening a folder เกิดข้อผิดพลาดบางอย่างขณะกำลังเปิดโฟลเดอร์ - + Error while reading folder. เกิดข้อผิดพลาดขณะกำลังอ่านโฟลเดอร์ - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. ไฟล์/โฟลเดอร์ ที่ซ่อนอยู่จะถูกละเว้น - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: ไม่มีพื้นที่เหลือเพียงพอบนเซิร์ฟเวอร์ %1 - + CSync unspecified error. CSync ไม่สามารถระบุข้อผิดพลาดได้ - + Aborted by the user ยกเลิกโดยผู้ใช้ - + CSync failed to access ล้มเหลวในการเข้าถึง CSync - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync ผิดพลาด ไม่สามารถโหลดหรือสร้างไฟล์เจอร์นัล ให้แน่ใจว่าคุณได้อ่านและเขียนสิทธิ์ในการประสานโฟลเดอร์ต้นทาง - + CSync failed due to unhandled permission denied. CSync ล้มเหลวเนื่องจากการอนุญาตให้จัดการได้ถูกปฏิเสธ - + CSync tried to create a folder that already exists. CSync พยายามสร้างโฟลเดอร์ที่มีอยู่แล้ว - + The service is temporarily unavailable ไม่สามารถใช้บริการได้ชั่วคราว - + Access is forbidden ถูกปฏิเสธการเข้าถึง - + An internal error number %1 occurred. จำนวนข้อผิดพลาดภายในที่เกิดขึ้น %1 - - The item is not synced because of previous errors: %1 - รายการจะไม่ถูกประสานข้อมูลเนื่องจากเกิดข้อผิดพลาดก่อนหน้านี้: %1 - - - + Symbolic links are not supported in syncing. ลิงค์สัญลักษณ์จะไม่ได้รับการสนับสนุนในการประสานข้อมูล - + File is listed on the ignore list. ไฟล์อยู่ในรายการที่ละเว้น - + File names ending with a period are not supported on this file system. ชื่อไฟล์ที่ลงท้ายด้วยระยะเวลา ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + File names containing the character '%1' are not supported on this file system. ชื่อไฟล์ที่มีตัวอักษร '%1' ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + The file name is a reserved name on this file system. ชื่อไฟล์นี้เป็นชื่อที่ถูกสงวนไว้ - + Filename contains trailing spaces. ชื่อไฟล์มีช่องว่างต่อท้าย - + Filename is too long. ชื่อไฟล์ยาวเกินไป - + Stat failed. สถิติความล้มเหลว - + Filename encoding is not valid การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - + Invalid characters, please rename "%1" ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - - Unable to initialize a sync journal. - ไม่สามารถเตรียมการประสานข้อมูลเจอร์นัล - - - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา @@ -3204,7 +3444,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3212,17 +3452,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>รุ่น %1 สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชม <a href='%2'>%3</a></p> - + <p>Copyright ownCloud GmbH</p> <p>ลิขสิทธิ์ ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>เผยแพร่โดย %1 และมีใบอนุญาตภายใต้ GNU General Public License (GPL) รุ่น 2.0 <br/>%2 และการลงทะเบียนโลโก้ %2 เครื่องหมายการค้าของ %1 ในประเทศสหรัฐอเมริกา ประเทศอื่นๆ หรือทั้งสองอย่าง</p> @@ -3230,17 +3470,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. การตรวจสอบส่วนหัวผิดรูปแบบ - + The checksum header contained an unknown checksum type '%1' จากการตรวจสอบส่วนหัวมีประเภทที่ไม่รู้จัก '%1' - + The downloaded file does not match the checksum, it will be resumed. ไฟล์ที่ดาวน์โหลดมาไม่ตรงกับการตรวจสอบที่จะกลับมา @@ -3248,207 +3488,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in กรุณาเข้าสู่ระบบ - + Folder %1: %2 โฟลเดอร์ %1: %2 - + No sync folders configured. ยังไม่มีการกำหนดค่าโฟลเดอร์ที่ต้องการประสานข้อมูล - + There are no sync folders configured. ไม่มีการกำหนดค่าการประสานข้อมูลโฟลเดอร์ - + Open in browser เปิดในเบราว์เซอร์ - - - + + + Log in... เข้าสู่ระบบ... - - - + + + Log out ออกจากระบบ - + Recent Changes การเปลี่ยนแปลงล่าสุด - + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + Managed Folders: โฟลเดอร์ที่มีการจัดการแล้ว: - + Open folder '%1' เปิดโฟลเดอร์ '%1' - + Open %1 in browser เปิด %1 ในเบราว์เซอร์ - + Unknown status สถานะที่ไม่รู้จัก - + Settings... ตั้งค่า... - + Details... รายละเอียด... - + Help ช่วยเหลือ - + Quit %1 ออก %1 - + Disconnected from %1 ถูกตัดการเชื่อมต่อจาก %1 - + Unsupported Server Version ไม่สนับสนุนรุ่นของ Server - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. เซิฟเวอร์บนบัญชี %1 ได้ใช้งานในรุ่นเก่าและเป็นรุ่นที่ไม่ได้รับการสนับสนุนแล้ว %2 หากใช้งานต่อไปอาจเป็นอันตราย ดำเนินการที่มีความเสี่ยงด้วยตัวคุณเอง - + Disconnected from accounts: ยกเลิกการเชื่อมต่อจากบัญชี: - + Account %1: %2 บัญชี %1: %2 - + Account synchronization is disabled บัญชีประสานข้อมูลถูกปิดใช้งาน - + Unpause all folders ทำโฟลเดอร์ทั้งหมดต่อ - + Pause all folders หยุดโฟลเดอร์ทั้งหมดชั่วคราว - + Unpause all synchronization ประสานข้อมูลทั้งหมดต่อ - + Unpause synchronization ประสานข้อมูลต่อ - + Pause all synchronization หยุดการประสานข้อมูลทั้งหมดชั่วคราว - + Pause synchronization หยุดการประสานข้อมูลชั่วคราว - + Log out of all accounts ออกจากระบบของบัญชีทั้งหมด - + Log in to all accounts... เข้าสู่ระบบของบัญชีทั้งหมด... - + New account... สร้างบัญชีใหม่... - + Crash now Only shows in debug mode to allow testing the crash handler ความผิดพลาดในขณะนี้ - + No items synced recently ไม่มีรายการที่ถูกประสานข้อมูลเมื่อเร็วๆ นี้ - + Syncing %1 of %2 (%3 left) กำลังประสานข้อมูล %1 จาก %2 (เหลือ %3) - + Syncing %1 of %2 กำลังประสานข้อมูล %1 จากทั้งหมด %2 - + Syncing %1 (%2 left) กำลังประสานข้อมูล %1 (เหลือ %2) - + Syncing %1 กำลังประสานข้อมูล %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date ถึงวันที่ @@ -3456,7 +3696,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> <p>รุ่น %2 สำหรับข้อมูลเพิ่มเดิมไปดูได้ที่ <a href="%3">https://%4</a></p><p> หรือแจ้งปัญหาที่ทราบไปที่: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>โดย Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt และอีกหลายท่าน</small></p><p>ลิขสิทธิ์ ownCloud GmbH</p><p>ได้รับอนุญาตภายใต้ GNU General Public License (GPL) เวอร์ชัน 2.0<br/>ownCloud และโลโก้ OwnCloud เป็นเครื่องหมายจดทะเบียนการค้าของ ownCloud GmbH ในประเทศสหรัฐอเมริกาหรือประเทศอื่นๆ</p> @@ -3559,78 +3799,42 @@ It is not advisable to use it. และหรัสผ่าน + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form แบบฟอร์ม - - Server &address: - เซิร์ฟเวอร์และที่อยู่: - - - - - TextLabel ป้ายข้อความ - - - Use &secure connection - ใช้การเชื่อมต่อแบบ &ป้องกันความปลอดภัย - - - - CheckBox - ช่องกาตัวเลือก - - - - &Username: - &ชื่อผู้ใช้งาน: - - - - Enter the ownCloud username. - กรอกชื่อผู้ใช้ ownCloud - - - - &Password: - &รหัสผ่าน: - - - - Enter the ownCloud password. - กรอกรหัสผ่าน ownCloud - - - - Do not allow the local storage of the password. - ไม่อนุญาตให้จัดเก็บข้อมูลรหัสผ่านเอาไว้ในพื้นที่จัดเก็บต้นทาง - - - - &Do not store password on local machine - และโปรดอย่าจัดเก็บรหัสผ่านเอาไว้ในเครื่องคอมพิวเตอร์ของคุณ - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - กรอกที่อยู่ url ของ ownCloud ที่คุณต้องการเชื่อมต่อ (ไม่ต้องมี http: หรือ https) - Ser&ver Address @@ -3674,7 +3878,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3682,42 +3886,42 @@ It is not advisable to use it. QObject - + in the future ในอนาคต - + %n day(s) ago %n วันที่ผ่านมา - + %n hour(s) ago %n ชั่วโมงที่ผ่านมา - + now ตอนนี้ - + Less than a minute ago ไม่กี่นาทีที่ผ่านมา - + %n minute(s) ago %n นาทีที่ผ่านมา - + Some time ago บางเวลาที่ผ่านมา - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3726,57 +3930,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 กิกะไบต์ - + %L1 MB %L1 เมกะไบต์ - + %L1 KB %L1 กิโลไบต์ - + %L1 B %L1 B - + %n year(s) %n ปี - + %n month(s) %n เดือน - + %n day(s) %n วัน - + %n hour(s) %n ชั่วโมง - + %n minute(s) %n นาที - + %n second(s) %n วินาที - + %1 %2 %1 %2 @@ -3797,102 +4001,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>ที่สร้างขึ้นจากการแก้ไข Git <a href="%1">%2</a> บน %3, %4 กำลังใช้ Qt %5, %6</small></p> - - - built with %1 - สร้างด้วย %1 - progress - + Downloaded ถูกดาวน์โหลด - + Uploaded ถูกอัพโหลด - + Server version downloaded, copied changed local file into conflict file ดาวน์โหลดรุ่นของเซิฟเวอร์แล้ว ได้ถูกคัดลอกและเปลี่ยนแปลงไฟล์ต้นฉบับลงในไฟล์ที่มีปัญหา - + Deleted ลบแล้ว - + Moved to %1 ถูกย้ายไปยัง %1 - + Ignored ถูกละเว้น - + Filesystem access error ข้อผิดพลาดในการเข้าถึงระบบไฟล์ - + Error ข้อผิดพลาด - + Updated local metadata อัพเดทเมตาดาต้าต้นทางแล้ว - - + + Unknown ไม่ทราบ - + downloading กำลังดาวน์โหลด - + uploading กำลังอัพโหลด - + deleting กำลังลบ - + moving กำลังย้าย - + ignoring กำลังละเว้น + - error ข้อผิดพลาด - + updating local metadata กำลังอัพเดทเมตาดาต้าต้นทาง @@ -3900,54 +4099,77 @@ It is not advisable to use it. theme - + Status undefined สถานะไม่สามารถระบุได้ - + Waiting to start sync กำลังรอการเริ่มต้นประสานข้อมูล - + Sync is running การประสานข้อมูลกำลังทำงาน - + Sync Success การประสานข้อมูลเสร็จสิ้น - + Sync Success, some files were ignored. ประสานข้อมูลสำเร็จ บางไฟล์ถูกละเลย - + Sync Error ประสานข้อมูลผิดพลาด - + Setup Error เกิดข้อผิดพลาดในการตั้งค่า - + Preparing to sync เตรียมความพร้อมในการประสานข้อมูล - + Aborting... กำลังยกเลิก... - + Sync is paused การประสานข้อมูลถูกหยุดชั่วคราว + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_tr.ts b/translations/client_tr.ts index f053594e1..9d0efe3fa 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Hedef dosya beklenilmeyen boyuta veya düzenlenme tarihine sahip @@ -81,6 +81,24 @@ MetinEtiketi + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel İptal @@ -136,188 +154,204 @@ <server> ile <user> olarak bağlantı kuruldu - + No account configured. Hiçbir hesap yapılandırılmamış. - + Add new Yeni ekle - + Remove Kaldır - + Account Hesap - + Choose what to sync Ne eşitleneceğini seçin - + Force sync now Şimdi eşitlemeye zorla - + Restart sync Eşitlemeyi yeniden başlat - + Remove folder sync connection Klasör eşitleme bağlantısını sil - + Folder creation failed Klasör oluşturma başarısız oldu - + <p>Could not create local folder <i>%1</i>. <p><i>%1</i> yerel klasörü oluşturulamadı. - + Confirm Folder Sync Connection Removal Klasör Eşitleme Bağlantısının Silinmesini Onaylayın - + Remove Folder Sync Connection Klasör Eşitleme Bağlantısını Sil - + Sync Running Eşitleme Çalışıyor - + The syncing operation is running.<br/>Do you want to terminate it? Eşitleme işlemi devam ediyor.<br/>Durdurmak istiyor musunuz? - + %1 in use %1 kullanımda - + %1 as <i>%2</i> %1 <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Sunucu sürümü %1 eski ve desteklenmiyor! Kendi riskinizle devam edin. - + Connected to %1. %1 ile bağlı. - + Server %1 is temporarily unavailable. %1 sunucusu geçici olarak ulaşılamaz durumda. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. %1 oturumu sonlandırıldı. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. %1 ile %2 bağlantısı yok. - + Log in Giriş yap - + There are folders that were not synchronized because they are too big: Çok büyük oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are external storages: Harici depolama diskinde oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are too big or external storages: Çok büyük oldukları için ya da harici depolama alanında oldukları için eşitlenmeyen klasörler var: - + Confirm Account Removal Hesap Silinmesini Onaylayın - + <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> <p><i>%1</i> hesabının bağlantısını kaldırmayı gerçekten istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmeyecektir</b>.</p> - + Remove connection Bağlantıyı kaldır - + + Open folder Klasörü aç - - + + Log out Çıkış yap - + Resume sync Eşitlemeye devam et - + Pause sync Eşitlemeyi duraklat - + <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> <p><i>%1</i> klasörünün eşitlemesini durdurmayı gerçekten istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmeyecektir</b>.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) / %2 kullanımda. Ağdan bağlanmış veya paylaşılan dizinlerin farklı sınırları olabilir. - + %1 of %2 in use %1 / %2 kullanımda - + Currently there is no storage usage information available. Şu anda depolama kullanım bilgisi mevcut değil. - + No %1 connection configured. Hiç %1 bağlantısı yapılandırılmamış. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Oturum sonlandırıldı - + Disconnected Bağlantı kesildi - + Connected Bağlandı - + Service unavailable Hizmet kullanılamıyor - + + Maintenance mode + + + + Network error Ağ hatası - + Configuration error Yapılandırma hatası - + + Asking Credentials + + + + Unknown account state Bilinmeyen hesap durumu @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Sunucu Etkinliği - + Sync Protocol Eşitleme Protokolü - - List of ignored or erroneous files - Gözardı edilen veya hatalı dosyaların listesi - - - - Copy - Kopyala - - - - Copy the activity list to the clipboard. - Etkinlik listesini panoya kopyala. - - - + Not Synced Eşitlenmedi - + Not Synced (%1) %1 is the number of not synced files. Eşitlenmedi (%1) - + The server activity list has been copied to the clipboard. Sunucu etkinlik listesi panoya kopyalandı. - + The sync activity list has been copied to the clipboard. Eşitleme etkinlik listesi panoya kopyalandı. - + The list of unsynced items has been copied to the clipboard. Eşitlenmemiş ögelerin listesi panoya kopyalandı. - + Copied to clipboard Panoya kopyalandı @@ -448,47 +477,47 @@ MetinEtiketi - + Server Activities Sunucu Etkinlikleri - + Copy Kopyala - + Copy the activity list to the clipboard. Etkinlik listesini panoya kopyala. - + Action Required: Notifications Eylem Gerekiyor: Bildirimler - + <br/>Account %1 does not have activities enabled. <br/>%1 hesabının geçerli kılınmış etkinlikleri bulunmamakta. - + You received %n new notification(s) from %2. %2 için %n yeni bildiriminiz var.%2 için %n yeni bildiriminiz var. - + You received %n new notification(s) from %1 and %2. %2 ve %1 için %n yeni bildiriminiz var.%2 ve %1 için %n yeni bildiriminiz var. - + You received new notifications from %1, %2 and other accounts. %2, %1 ve diğer hesaplardan %n yeni bildiriminiz var. - + %1 Notifications - Action Required %1 Bildirim - Eylem Gerekiyor @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud ownCloud'dan çık @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Hiçbir ownCloud hesabı yapılandırılmamış - + The configured server for this client is too old Yapılandırılmış sunucu, bu istemci için çok eski - + Please update to the latest server and restart the client. Lütfen en son sunucuya güncelleyin veya istemciyi yeniden başlatın - + Authentication error: Either username or password are wrong. Giriş hatası: Kullanıcı adı veya parola hatalı. - + timeout zaman aşımı - + The provided credentials are not correct Sağlanan kimlik bilgileri doğru değil - - OCC::DeleteJob - - - Connection timed out - Bağlantı zaman aşımına uğradı - - OCC::DiscoveryMainThread - + Aborted by the user Kullanıcı tarafından iptal edildi @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. %1 yerel klasörü mevcut değil. - + %1 should be a folder but is not. %1 bir dizin olmalı, ancak değil. - + %1 is not readable. %1 okunabilir değil. - + %1 has been removed. %1 names a file. %1 kaldırıldı. - + %1 has been downloaded. %1 names a file. %1 indirildi. - + %1 has been updated. %1 names a file. %1 güncellendi. - + %1 has been renamed to %2. %1 and %2 name files. %1, %2 olarak adlandırıldı. - + %1 has been moved to %2. %1, %2 konumuna taşındı. - + %1 and %n other file(s) have been removed. %1 ve diğer %n dosya kaldırıldı.%1 ve diğer %n dosya kaldırıldı. - + %1 and %n other file(s) have been downloaded. %1 ve diğer %n dosya indirildi.%1 ve diğer %n dosya indirildi. - + %1 and %n other file(s) have been updated. '%1' ve diğer %n dosya güncellendi.%1 ve diğer %n dosya güncellendi. - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1, %2 olarak yeniden adlandırıldı ve %n diğer dosyanın adı değiştirildi.%1, %2 olarak yeniden adlandırıldı ve %n diğer dosyanın adı değiştirildi. - + %1 has been moved to %2 and %n other file(s) have been moved. %1, %2 konumuna taşındı ve %n diğer dosya taşındı.%1, %2 konumuna taşındı ve %n diğer dosya taşındı. - + %1 has and %n other file(s) have sync conflicts. %1 ve %n diğer dosya eşitleme çakışması bulunduruyor.%1 ve %n diğer dosya eşitleme çakışması bulunduruyor. - + %1 has a sync conflict. Please check the conflict file! %1 bir eşitleme çakışması bulunduruyor. Lütfen çakışan dosyayı kontrol edin! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 ve diğer %n dosya hatalar nedeniyle eşlenemedi. Ayrıntılar için ayıt dosyasına bakın.%1 ve diğer %n dosya hatalar nedeniyle eşlenemedi. Ayrıntılar için günlük dosyasına bakın. - + %1 could not be synced due to an error. See the log for details. %1 bir hata nedeniyle eşitlenemedi. Ayrıntılar için günlüğe bakın. - + Sync Activity Eşitleme Etkinliği - + Could not read system exclude file Sistem hariç tutulma dosyası okunamadı - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Tüm Dosyalar Kaldırılsın mı? - + Remove all files Tüm dosyaları kaldır - + Keep files Dosyaları koru - + This sync would reset the files to an earlier 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? - + Backup detected Yedek bulundu - + Normal Synchronisation Normal Eşitleme - + Keep Local Files as Conflict Çakışma Durumunda Yerel Dosyaları Tut @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Klasör durumu sıfırılanamadı - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Eski eşitleme günlüğü '%1' bulundu ancak kaldırılamadı. Başka bir uygulama tarafından kullanılmadığından emin olun. - + (backup) (yedek) - + (backup %1) (yedek %1) - + Undefined State. Tanımlanmamış Durum. - + Waiting to start syncing. Eşitlemenin başlanması bekleniyor. - + Preparing for sync. Eşitleme için hazırlanıyor. - + Sync is running. Eşitleme çalışıyor. - + Last Sync was successful. Son Eşitleme başarılı oldu. - + Last Sync was successful, but with warnings on individual files. Son eşitleme başarılıydı, ancak tekil dosyalarda uyarılar vardı. - + Setup Error. Kurulum Hatası. - + User Abort. Kullanıcı İptal Etti. - + Sync is paused. Eşitleme duraklatıldı. - + %1 (Sync is paused) %1 (Eşitleme duraklatıldı) - + No valid folder selected! Geçerli klasör seçilmedi! - + The selected path is not a folder! Seçilen yol bir klasör değil! - + You have no permission to write to the selected folder! Seçilen klasöre yazma izniniz yok! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! %1 yerel klasörü zaten bir eşitleme klasörü içermektedir. Lütfen farklı bir seçim yapın! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! %1 yerel klasörü zaten bir eşitleme klasörü içindedir. Lütfen farklı bir seçim yapın! - + 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! %1 yerel klasörü sembolik bağlantıdır. Bu bağlantının işaretlediği klasör zaten yapılandırılmış bir klasör içindedir. Lütfen farklı bir seçim yapın! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection Klasör Eşitleme Bağlantısı Ekle - + Synchronizing with local folder Yerel klasör ile eşitleniyor - + File Dosya @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Bir klasör eklemek için bağlı olmanız gerekir - + Click this button to add a folder to synchronize. Bir klasörü eşitlemeye dahil etmek için bu düğmeye tıklayın. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Sunucudan klasörlerin listesi yüklenirken hata oluştu. - + Signed out Oturum sonlandırıldı - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Klasör ekleme devre dışı, çünkü şu anda bütün dosyalarınızı eşitliyorsunuz. Çoklu klasör eşitlemesi yapmak istiyorsanız, lütfen geçerli yapılandırılmış kök klasörünü silin. - + Fetching folder list from server... Sunucudan klasör listesi alınıyor... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' %1 üzerindeki değişiklikler denetleniyor - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 eşitleniyor - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) indirme %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) gönderme %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Kalan %5, %1/%2, dosya %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, %3/%4 dosya - + file %1 of %2 dosya %1/%2 - + Waiting... Bekleniyor... - + Waiting for %n other folder(s)... Diğer %n klasör bekleniyor...Diğer %n klasör bekleniyor... - + Preparing to sync... Eşitleme için hazırlanıyor... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Klasör Eşitleme Bağlantısı Ekle - + Add Sync Connection Eşitleme Bağlantısı Ekle @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Eşitlemek için yerel bir klasör seçmek üzere tıklayın. - + Enter the path to the local folder. Yerel klasörün yolunu girin. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an '%1' altında oluşturulacak yeni klasörün adını girin: - + Folder was successfully created on %1. Klasör %1 üzerinde başarıyla oluşturuldu. - + Authentication failed accessing %1 %1 erişimi için giriş başarısız - + Failed to create the folder on %1. Please check manually. %1 üzerinde klasör oluşturma başarısız. Lütfen elle denetleyin. - + Failed to list a folder. Error: %1 Bir klasörün listelenmesi başarısız oldu. Hata: %1 - + Choose this to sync the entire account Tüm hesabı eşitlemek için bunu seçin - + This folder is already being synced. Bu klasör zaten eşitleniyor. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i> zaten eşitleniyor. Bu, <i>%2</i> klasörünün üst klasörü. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Zaten tüm dosyalarınızı eşitliyorsunuz. Farklı bir klasör eşitlemek <b>desteklenmiyor</b>. Eğer çoklu klasörleri eşitlemek isterseniz, lütfen şu anda yapılandırılmış kök klasör eşitlemesini kaldırın. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Sunucudan E-Tag alınamadı, Vekil Sunucu/Ağ Geçidi'ni denetleyin. - + We received a different E-Tag for resuming. Retrying next time. Devam etmek üzere farklı bir E-Etiket aldık. Sonraki işlemde yeniden denenecek. - + Server returned wrong content-range Sunucu yanlış içerik aralığı döndürdü - + Connection Timeout Bağlantı Zaman Aşımı @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an Sistem Çekmecesi için - + Advanced Gelişmiş - + Ask for confirmation before synchronizing folders larger than senkronizasyon dosyaları - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an İki &Renkli Simgeler Kullan - + Edit &Ignored Files Yoksayılan &Dosyaları Düzenle - + S&how crash reporter Ç&ökme bildiricisini göster - - + + About Hakkında - + Updates Güncellemeler - + &Restart && Update &Yeniden Başlat ve Güncelle @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' Anahtar zinciri okuması hatayla sonuçlandı: '%1' - + Enter Password Parolayı Girin - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1366,55 +1397,125 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Bu girdi '%1' üzerinde sistem tarafından sağlanmaktadır ve bu görünümde değiştirilemez. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Günlük Çıktısı - + &Search: &Ara: - + &Find &Bul - + + &Capture debug messages + + + + Clear Temizle - + Clear the log display. Günlük göstergesini temizle. - + S&ave K&aydet - + Save the log file to a file on disk for debugging. Hata ayıklama için günlük dosyasını kaydet. - + Save log file Günlük dosyasını kaydet - + Error Hata - + Could not write to log file %1 %1 günlük dosyasına yazılamadı @@ -1422,24 +1523,16 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::Logger - + Error Hata - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' dosyası<br/>yazmak üzere açılamadı.<br/><br/>Günlük çıktısı <b>kaydedilemez</b>!</nobr> - - OCC::MoveJob - - - Connection timed out - Bağlantı zaman aşımına uğradı - - OCC::NSISUpdater @@ -1551,27 +1644,27 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Otomatik sınırla - + Hostname of proxy server Vekil sunucu makine adı - + Username for proxy server Vekil sunucu kullanıcı adı - + Password for proxy server Vekil sunucu parolası - + HTTP(S) proxy HTTP(S) vekil sunucusu - + SOCKS5 proxy SOCKS5 vekil sunucusu @@ -1584,78 +1677,111 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::NotificationWidget - + Created at %1 Oluşturulma %1 - + Closing in a few seconds... Saniyeler içinde kapatılıyor... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 isteği %2 üzerinde başarısız oldu - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' %2 üzerinde '%1' seçildi + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Yeni %1 Güncellemesi Hazır - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. %1 için yeni bir güncelleme yüklenmek üzere. İşlem sürerken güncelleyici başka yetkiler isteyebilir. - + Downloading version %1. Please wait... %1 sürümü indirilyor. Lütfen bekleyin... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Güncelleme indirilemedi. Lütfen güncellemeyi elle indirmek için <a href='%1'>buraya</a> tıklayın. - + Could not check for new updates. Yeni güncellemeler denetlenemedi. - + %1 version %2 available. Restart application to start the update. %1 sürümü mevcut. Güncellemeyi başlatmak için uygulamayı yeniden başlatın. - + New %1 version %2 available. Please use the system's update tool to install it. Yeni %1 sürüm mevcut. Lütfen kurulum için sistem güncelleştirme aracını kullanın. - + Checking update server... Güncelleme sunucusu denetleniyor... - + Update status is unknown: Did not check for new updates. Güncelleme durumu bilinmiyor: Yeni güncellemeler denetlenemedi. - + No updates available. Your installation is at the latest version. Güncelleme yok. Kurulumunuz son sürümde. @@ -1668,43 +1794,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 %1 bağlantısını yap - + Setup local folder options Yerel klasör seçeneklerini ayarla - + Connect... Bağlan... - + %1 folder '%2' is synced to local folder '%3' %1 klasörü '%2', yerel '%3' klasörü ile eşitlendi - + Sync the folder '%1' '%1' klasörünü eşitle - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>Uyarı:</strong> Yerel klasör boş değil. Bir çözüm seçin!</small></p> - + Local Sync Folder Yerel Eşitleme Klasörü - - + + (%1) (%1) @@ -1737,7 +1863,7 @@ for additional privileges during the process. İstemci taraflı TLS sertifikasını yapılandır - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p><em>%1</em> güvenli sunucu adresine bağlantı başarısız. Nasıl devam etmek istersiniz?</p></body></html> @@ -1745,47 +1871,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &E-posta - + Connect to %1 %1 bağlantısını yap - + Enter user credentials Kullanıcı kimlik bilgilerini gir + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 %1 bağlantısını yap - + Setup %1 server %1 sunucusunu ayarla - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Bu adres şifrelenmediğinden güvenli DEĞİL. Kullanmanız önerilmez. - + This url is secure. You can use it. Bu adres güvenli. Kullanabilirsiniz. - + &Next > &İleri > @@ -1793,22 +1932,22 @@ Kullanmanız önerilmez. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">%1 bağlantısı başarılı: %2 sürüm %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 üzerinde %1 adresine bağlanılamadı:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 üzerinde %1 bağlantısı yapılırken zaman aşımı. - + Trying to connect to %1 at %2... %2 üzerinde %1 bağlantısı deneniyor... @@ -1828,109 +1967,109 @@ Kullanmanız önerilmez. Erişim sunucu tarafından yasaklandı. Geçerli erişime sahip olup olmadığınızı doğrulamak için hizmete web tarayıcınızla erişmek üzere <a href="%1">buraya tıklayın</a>. - + Invalid URL Geçersiz URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Yerel eşitleme klasörü %1 zaten mevcut, eşitlemek için ayarlanıyor.<br/><br/> - + Creating local sync folder %1... Yerel eşitleme klasörü %1 oluşturuluyor... - + ok tamam - + failed. başarısız. - + Could not create local folder %1 %1 yerel klasörü oluşturulamadı - + No remote folder specified! Uzak klasör belirtilmemiş! - + Error: %1 Hata: %1 - + creating folder on ownCloud: %1 ownCloud üzerinde klasör oluşturuluyor: %1 - + Remote folder %1 created successfully. %1 uzak klasörü başarıyla oluşturuldu. - + The remote folder %1 already exists. Connecting it for syncing. Uzak klasör %1 zaten mevcut. Eşitlemek için bağlanılıyor. - + The folder creation resulted in HTTP error code %1 Klasör oluşturma %1 HTTP hata kodu ile sonuçlandı - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Uzak klasör oluşturması, geçersiz kimlik bilgileri nedeniyle başarısız!<br/>Lütfen geri gidin ve bilgileri denetleyin.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Uzak klasör oluşturma muhtemelen hatalı kimlik bilgilerinden dolayı başarısız oldu.</font><br/>Lütfen geri gidip kimlik bilgilerini doğrulayın.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Uzak klasör %1 oluşturma işlemi <tt>%2</tt> hatası ile başarısız oldu. - + A sync connection from %1 to remote directory %2 was set up. %1 kaynaklı %2 uzak dizinine bir eşitleme bağlantısı ayarlandı. - + Successfully connected to %1! %1 bağlantısı başarılı! - + Connection to %1 could not be established. Please check again. %1 bağlantısı kurulamadı. Lütfen tekrar denetleyin. - + Folder rename failed Klasör adlandırma başarısız - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Klasör veya içerisindeki bir dosya farklı bir program içerisinde açık olduğundan, kaldırma ve yedekleme işlemi yapılamıyor. Lütfen klasör veya dosyayı kapatıp yeniden deneyin veya kurulumu iptal edin. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Yerel eşitleme klasörü %1 başarıyla oluşturuldu!</b></font> @@ -1938,12 +2077,12 @@ Kullanmanız önerilmez. OCC::OwncloudWizard - + %1 Connection Wizard %1 Bağlantı Sihirbazı - + Skip folders configuration Klasör yapılandırmasını atla @@ -1951,33 +2090,25 @@ Kullanmanız önerilmez. OCC::OwncloudWizardResultPage - + Everything set up! Her şey ayarlandı! - + Open Local Folder Yerel Klasörü Aç - + Open %1 in Browser %1'ı Tarayıcıda Aç - - OCC::PUTFileJob - - - Connection Timeout - Bağlantı Zaman Aşımı - - OCC::PollJob - + Invalid JSON reply from the poll URL Getirme URL'sinden geçersiz JSON yanıtı @@ -1985,7 +2116,7 @@ Kullanmanız önerilmez. OCC::PropagateDirectory - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -1993,47 +2124,47 @@ Kullanmanız önerilmez. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! %1 dosyası, yerel dosya adı çakışması nedeniyle indirilemiyor! - - The download would reduce free disk space below %1 - Dosya indirimi boş disk alanını %1 altına düşürecektir + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 Boş disk alanı %1 altında - + File was deleted from server Dosya sunucudan silindi - + The file could not be downloaded completely. Dosya tamamıyla indirilemedi. - + The downloaded file is empty despite the server announced it should have been %1. Sunucu boyutunu %1 olarak duyurmasına rağmen indirilen dosya boş. - + File %1 cannot be saved because of a local file name clash! Yerel bir dosya ismi ile çakıştığından, %1 dosyası kaydedilemedi! - + File has changed since discovery Dosya, bulunduğundan itibaren değişmiş - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2041,17 +2172,12 @@ Kullanmanız önerilmez. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Geri Yükleme Başarısız: %1 - - Continue blacklisting: - Kara listeye devam et: - - - + A file or folder was removed from a read only share, but restoring failed: %1 Bir dosya veya dizin bir salt okunur paylaşımdan kaldırılmıştı, ancak geri yükleme başarısız oldu: %1 @@ -2059,22 +2185,22 @@ Kullanmanız önerilmez. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 %1 dosyası silinemedi, hata: %2 - + Attention, possible case sensitivity clash with %1 Uyarı, %1 ile muhtemel harf duyarlılığı çatışması - + could not create folder %1 %1 klasörü oluşturulamadı - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2082,17 +2208,17 @@ Kullanmanız önerilmez. OCC::PropagateLocalRemove - + Error removing '%1': %2; '%1' silme hatası: %2; - + Could not remove folder '%1' '%1' klasörü silinemiyor - + Could not remove %1 because of a local file name clash %1 dosyası yerel bir dosya adı çakışması nedeniyle kaldırılamadı @@ -2100,13 +2226,13 @@ Kullanmanız önerilmez. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Yerel bir dosya adı çakışması nedeniyle %1 dosyası %2 olarak adlandırılamadı - - + + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2114,12 +2240,12 @@ Kullanmanız önerilmez. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Dosya salt okunur bir paylaşımdan kaldırılmıştı. Geri yüklendi. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Sunucudan yanlış HTTP kodu döndü. 204 bekleniyordu, ancak "%1 %2" geldi. @@ -2127,12 +2253,12 @@ Kullanmanız önerilmez. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Sunucudan yanlış HTTP kodu döndü. 201 bekleniyordu, ancak "%1 %2" geldi. - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2140,28 +2266,28 @@ Kullanmanız önerilmez. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Bu klasörün adı değiştirilmemelidir. Özgün adına geri dönüştürüldü. - + This folder must not be renamed. Please name it back to Shared. Bu klasörün adı değiştirilmemelidir. Lütfen Shared olarak geri adlandırın. - + The file was renamed but is part of a read only share. The original file was restored. Dosya adlandırıldı ancak salt okunur paylaşımın bir parçası. Özgün dosya geri yüklendi. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Sunucudan yanlış HTTP kodu döndü. 201 bekleniyordu, ancak "%1 %2" geldi. - - + + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2169,27 +2295,32 @@ Kullanmanız önerilmez. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Dosya Kaldırıldı - + Local file changed during syncing. It will be resumed. Eşitleme sırasında yerel dosya değişti. Devam edilecek. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2197,32 +2328,32 @@ Kullanmanız önerilmez. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Qt < 5.4.2 ile HTTP bağlantı sıfırlamasında görev iptali zorlanıyor. - + The local file was removed during sync. Eşitleme sırasında yerel dosya kaldırıldı. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + Unexpected return code from server (%1) (%1) Sunucusundan bilinmeyen dönüş kodu - + Missing File ID from server - + Missing ETag from server @@ -2230,32 +2361,32 @@ Kullanmanız önerilmez. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Qt < 5.4.2 ile HTTP bağlantı sıfırlamasında görev iptali zorlanıyor. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Dosya yerel olarak düzenlendi ancak salt okunur paylaşımın bir parçası. Geri yüklendi ve düzenlemeniz çakışan dosyada. - + Poll URL missing Getirme URL'si eksik - + The local file was removed during sync. Eşitleme sırasında yerel dosya kaldırıldı. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + The server did not acknowledge the last chunk. (No e-tag was present) Sunucu son yığını onaylamadı. (Mevcut e-etiket bulunamadı) @@ -2273,42 +2404,42 @@ Kullanmanız önerilmez. MetinEtiketi - + Time Zaman - + File Dosya - + Folder Klasör - + Action Eylem - + Size Boyut - + Local sync protocol Yerel eşitleme protokolü - + Copy Kopyala - + Copy the activity list to the clipboard. Etkinlik listesini panoya kopyala. @@ -2349,7 +2480,7 @@ Kullanmanız önerilmez. OCC::SelectiveSyncDialog - + Choose What to Sync Ne Eşitleneceğini Seçin @@ -2357,33 +2488,33 @@ Kullanmanız önerilmez. OCC::SelectiveSyncWidget - + Loading ... Yükleniyor... - + Deselect remote folders you do not wish to synchronize. - + Name Ad - + Size Boyut - - + + No subfolders currently on the server. Sunucuda şu anda alt dizin bulunmuyor. - + An error occurred while loading the list of sub folders. Alt klasör listesi alınırken bir hata oluştu. @@ -2396,22 +2527,22 @@ Kullanmanız önerilmez. Ayarlar - + Activity Etkinlik - + General Genel - + Network - + Account Hesap @@ -2419,27 +2550,27 @@ Kullanmanız önerilmez. OCC::SettingsDialogMac - + %1 %1 - + Activity Etkinlik - + General Genel - + Network - + Account Hesap @@ -2467,35 +2598,45 @@ Kullanmanız önerilmez. ownCloud Yolu: - + %1 Sharing %1 Paylaşma - + %1 %1 - + Folder: %2 Klasör: %2 - + The server does not allow sharing Sunucu, paylaşımı desteklemiyor - + Retrieving maximum possible sharing permissions from server... Sunucudan mümkün olan en fazla paylaşım hakları alınıyor... - + The file can not be shared because it was shared without sharing permission. Dosya paylaşılamaz, çünkü sizinle paylaşım izni olmaksızın paylaşılmış. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2505,92 +2646,126 @@ Kullanmanız önerilmez. YeniBelge.odt dosyasını paylaş - - Share link - Paylaşma bağlantısı - - - + TextLabel MetinEtiketi - + Set &password &Parola belirle - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Son kullanma tarihi b&elirle - + Set password Parolayı ayarla - - &Mail link + + Link properties: - Copy &link - Bağ&lantıyı kopyala + Show file listing + - + Allow editing Düzenlemeye izin ver - + Anyone with the link has access to the file/folder Dosya/klasör linkine sahip Herkes erişebilir - + + P&assword protect &Parola koruması - + Password Protected Parola Korumalı - + The file can not be shared because it was shared without sharing permission. Dosya paylaşılamaz, çünkü sizinle paylaşım izni olmaksızın paylaşılmış. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Herkese &açık paylaşım için parola gerekir - + Please Set Password Lütfen Parola Atayın - - - Could not open email client - E posta istemcisi açılamadı - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - Yeni mesaj oluşturmak için eposta istemcisini çalıştırıken bir hata oluştu. Belki varsayılan eposta istemcisi ayarlanmamıştır? - - - - - &Share link - &Paylaşma bağlantısı - OCC::ShareUserGroupWidget @@ -2600,68 +2775,98 @@ Kullanmanız önerilmez. YeniBelge.odt dosyasını paylaş - + Share with users or groups ... Kullanıcı ve gruplarla paylaş... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' '%1' için sonuç yok + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Form + - + TextLabel - MetinEtiketi + - + can edit - düzenleyebilir + - + can share - paylaşabilir + - + ... - ... + - + create - oluştur + - + change - değiştir + - + delete - sil + OCC::ShibbolethCredentials - + Login Error Oturum Açma Hatası - + You must sign in as user %1 %1 kullanıcısı olarak oturum açmalısınız @@ -2669,22 +2874,22 @@ Kullanmanız önerilmez. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Kimlik Doğrulaması - + SSL Chipher Debug View SSL Şifreleme Hata Ayıklama Görünümü - + Reauthentication required Yeniden kimlik doğrulama gerekli - + Your session has expired. You need to re-login to continue to use the client. Oturumunuzun süresi doldu. İstemciyi kullanmaya devam etmek için yeniden oturum açmanız gerekiyor. @@ -2692,26 +2897,46 @@ Kullanmanız önerilmez. OCC::SocketApi - + Share with %1 parameter is ownCloud %1 ile paylaş + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifika Ayrıntıları</h3> - + Common Name (CN): Ortak Ad (CN): - + Subject Alternative Names: Konu Alternatif İsimleri: @@ -2796,7 +3021,7 @@ Kullanmanız önerilmez. %1 - + This connection is encrypted using %1 bit %2. Bu bağlantı %1 bit %2 kullanılarak şifrelenmiştir. @@ -2813,7 +3038,7 @@ Kullanmanız önerilmez. Sertifika bilgisi: - + This connection is NOT secure as it is not encrypted. Bu bağlantı şifrelenmediğinden güvenli DEĞİL. @@ -2833,67 +3058,67 @@ Kullanmanız önerilmez. Yine de bu sertifikaya güven - + Untrusted Certificate Güvensiz Sertifika - + Cannot connect securely to <i>%1</i>: <i>%1</i> sunucusuna güvenli şekilde bağlanılamıyor: - + with Certificate %1 Sertifika: %1 - + &lt;not specified&gt; &lt;belirtilmemiş&gt; - - + + Organization: %1 Kurum: %1 - - + + Unit: %1 Birim: %1 - - + + Country: %1 Ülke: %1 - + Fingerprint (MD5): <tt>%1</tt> Parmak izi (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Parmak izi (SHA1): <tt>%1</tt> - + Effective Date: %1 Etkili Tarih: %1 - + Expiration Date: %1 Son Kullanım Tarihi: %1 - + Issuer: %1 Veren: %1 @@ -2901,285 +3126,300 @@ Kullanmanız önerilmez. OCC::SyncEngine - + Success. Başarılı. - + CSync failed to load the journal file. The journal file is corrupted. CSync günlük dosyasını yükleyemedi. Günlük dosyası bozuk. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Csync için %1 eklentisi yüklenemedi.<br/>Lütfen kurulumu doğrulayın!</p> - + CSync got an error while processing internal trees. CSync dahili ağaçları işlerken bir hata ile karşılaştı. - - CSync failed to reserve memory. - CSync bellek ayıramadı. - - - + CSync fatal parameter error. CSync ciddi parametre hatası. - + CSync processing step update failed. CSync güncelleme süreç adımı başarısız. - + CSync processing step reconcile failed. CSync uzlaştırma süreç adımı başarısız. - + CSync could not authenticate at the proxy. CSync vekil sunucuda kimlik doğrulayamadı. - + CSync failed to lookup proxy or server. CSync bir vekil veya sunucu ararken başarısız oldu. - + CSync failed to authenticate at the %1 server. CSync %1 sunucusunda kimlik doğrularken başarısız oldu. - + CSync failed to connect to the network. CSync ağa bağlanamadı. - + A network connection timeout happened. Bir ağ zaman aşımı meydana geldi. - + A HTTP transmission error happened. Bir HTTP aktarım hatası oluştu. - + The mounted folder is temporarily not available on the server Bağlanan dizin geçici olarak sunucuda mevcut değil - + An error occurred while opening a folder Klasör açılırken bir hata oluştu - + Error while reading folder. Klasör okunurken hata oluştu. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. Dosya/Klasör gizli olduğu için yoksayıldı. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: %1 sunucusunda kullanılabilir alan yok. - + CSync unspecified error. CSync belirtilmemiş hata. - + Aborted by the user Kullanıcı tarafından iptal edildi - + CSync failed to access CSync erişimde başarısız oldu - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync, günlük dosyası yüklenemedi veya oluşturalamadı. Lütfen yerel eşitleme dizininde okuma ve yazma izinleriniz olduğundan emin olun. - + CSync failed due to unhandled permission denied. CSync ele alınmayan izin reddinden dolayı başarısız. - + CSync tried to create a folder that already exists. CSync, zaten mevcut olan bir klasör oluşturmaya çalıştı. - + The service is temporarily unavailable Hizmet geçiçi olarak kullanılamıyor - + Access is forbidden Erişim yasak - + An internal error number %1 occurred. %1 numaralı dahili bir hata oluştu - - The item is not synced because of previous errors: %1 - Bu öge, önceki hatalardan dolayı eşitlenemiyor: %1 - - - + Symbolic links are not supported in syncing. Sembolik bağlantılar eşitlemede desteklenmiyor. - + File is listed on the ignore list. Dosya yoksayma listesinde. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. Dosya adı bu dosya sisteminde ayrılmış bir addır. - + Filename contains trailing spaces. - + Filename is too long. Dosya adı çok uzun. - + Stat failed. Durum alma başarısız. - + Filename encoding is not valid Dosya adı kodlaması geçerli değil - + Invalid characters, please rename "%1" Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - - Unable to initialize a sync journal. - Bir eşitleme günlüğü başlatılamadı. - - - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak @@ -3195,7 +3435,7 @@ Kullanmanız önerilmez. OCC::Systray - + %1: %2 %1: %2 @@ -3203,17 +3443,17 @@ Kullanmanız önerilmez. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Sürüm %1. Daha fazla bilgi için lütfen <a href='%2'>%3</a> adresini ziyaret edin.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 tarafından dağıtılmış ve GNU Genel Kamu Lisansı (GPL) Sürüm 2.0 ile lisanslanmıştır.<br/>%2 ve %2 logoları ABD ve/veya diğer ülkelerde %1 tescili markalarıdır.</p> @@ -3221,17 +3461,17 @@ Kullanmanız önerilmez. OCC::ValidateChecksumHeader - + The checksum header is malformed. Sağlama toplam başlığı bozulmuş. - + The checksum header contained an unknown checksum type '%1' Sağlama başlığı bilinmeyen '%1' sağlama tipi içeriyor - + The downloaded file does not match the checksum, it will be resumed. İndirilen dosya sağlama toplamı ile eşleşmiyor, devam edilecek. @@ -3239,207 +3479,207 @@ Kullanmanız önerilmez. OCC::ownCloudGui - + Please sign in Lütfen oturum açın - + Folder %1: %2 Klasör %1: %2 - + No sync folders configured. Yapılandırılmış eşitleme klasörü yok. - + There are no sync folders configured. Yapılandırılmış eşitleme klasörü yok. - + Open in browser Tarayıcıda aç - - - + + + Log in... Giriş yap... - - - + + + Log out Çıkış yap - + Recent Changes Son Değişiklikler - + Checking for changes in '%1' %1 deki değişiklikler denetleniyor - + Managed Folders: Yönetilen Klasörler: - + Open folder '%1' '%1' klasörünü aç - + Open %1 in browser %1'ı tarayıcıda aç - + Unknown status Bilinmeyen durum - + Settings... Ayarlar... - + Details... Ayrıntılar... - + Help Yardım - + Quit %1 %1'tan çık - + Disconnected from %1 %1 ile bağlantı kesildi - + Unsupported Server Version Desteklenmeyen Sunucu Sürümü - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. %1 hesabındaki sunucu eski ve desteklenmeyen %2 sürümünde. Bu istemciyi desteklenmeyen sunucu sürümlerinde kullanmak test edilmemiş olmasının yanında muhtemelen tehlikeli. Kendi riskinizle devam edin. - + Disconnected from accounts: Bu hesapların bağlantıları kesildi: - + Account %1: %2 Hesap %1: %2 - + Account synchronization is disabled Hesap eşitlemesi devre dışı bırakıldı. - + Unpause all folders Tüm klasörleri devam ettir - + Pause all folders Tüm klasörleri durdur - + Unpause all synchronization Tüm eşitlemeleri devam ettir - + Unpause synchronization Eşitlemeyi devam ettir - + Pause all synchronization Tüm eşitlemeleri durdur - + Pause synchronization Eşitlemeyi durdur - + Log out of all accounts Tüm hesaplardan çıkış yap - + Log in to all accounts... Tüm hesaplara giriş yap... - + New account... Yeni hesap... - + Crash now Only shows in debug mode to allow testing the crash handler Şimdi çök - + No items synced recently Yakın zamanda eşitlenen öge yok - + Syncing %1 of %2 (%3 left) Eşitlenen %1/%2 (%3 kaldı) - + Syncing %1 of %2 %2 nin %1 i eşitleniyor - + Syncing %1 (%2 left) Eşitlenen %1 (%2 kaldı) - + Syncing %1 %1 eşitleniyor - + %1 (%2, %3) %1 (%2, %3) - + Up to date Güncel @@ -3447,7 +3687,7 @@ Kullanmanız önerilmez. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3550,78 +3790,42 @@ Kullanmanız önerilmez. &Parola + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Form - - Server &address: - Sunucu &adresi: - - - - - TextLabel MetinEtiketi - - - Use &secure connection - &Güvenli bağlantı kullan - - - - CheckBox - İşaretKutusu - - - - &Username: - &Kullanıcı Adı: - - - - Enter the ownCloud username. - ownCloud kullanıcı adınızı girin. - - - - &Password: - &Parola: - - - - Enter the ownCloud password. - ownCloud parolanızı girin. - - - - Do not allow the local storage of the password. - Parolaların yerel depolanmasına izin verme. - - - - &Do not store password on local machine - &Parolayı yerel makinede kaydetme - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Bağlanmak istediğiniz ownCloud adresini girin (http veya https olmaksızın). - Ser&ver Address @@ -3665,7 +3869,7 @@ Kullanmanız önerilmez. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3673,42 +3877,42 @@ Kullanmanız önerilmez. QObject - + in the future gelecekte - + %n day(s) ago %n gün önce%n gün önce - + %n hour(s) ago %n saat önce%n saat önce - + now şimdi - + Less than a minute ago 1 dakika önce - + %n minute(s) ago %n dakika önce%n dakika önce - + Some time ago Bir süre önce - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3717,57 +3921,57 @@ Kullanmanız önerilmez. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n yıl%n yıl - + %n month(s) %n ay%n ay - + %n day(s) %n gün%n gün - + %n hour(s) %n saat%n saat - + %n minute(s) %n dakika%n dakika - + %n second(s) %n saniye%n saniye - + %1 %2 %1 %2 @@ -3788,102 +3992,97 @@ Kullanmanız önerilmez. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small><a href="%1">%2</a> Git gözden geçirmesi ile %3, %4 tarihinde, Qt %5, %6 kullanılarak derlendi.</small></p> - - - built with %1 - - progress - + Downloaded İndirildi - + Uploaded Yüklendi - + Server version downloaded, copied changed local file into conflict file Sunucu sürümü indirildi, çakışan dosya içine değiştirilmiş yerel dosya kopyalandı - + Deleted Silindi - + Moved to %1 %1 konumuna taşındı - + Ignored Yoksayıldı - + Filesystem access error Dosya sistemi erişim hatası - + Error Hata - + Updated local metadata - - + + Unknown Bilinmeyen - + downloading indirilen: - + uploading yüklenen: - + deleting silinen: - + moving taşınan: - + ignoring yoksayılan: + - error hata - + updating local metadata @@ -3891,54 +4090,77 @@ Kullanmanız önerilmez. theme - + Status undefined Tanımsız durum - + Waiting to start sync Eşitlemenin başlanması bekleniyor - + Sync is running Eşitleme çalışıyor - + Sync Success Eşitleme Başarılı - + Sync Success, some files were ignored. Eşitleme Başarılı, bazı dosyalar yoksayıldı. - + Sync Error Eşitleme Hatası - + Setup Error Kurulum Hatası - + Preparing to sync Eşitleme için hazırlanıyor - + Aborting... İptal ediliyor... - + Sync is paused Eşitleme duraklatıldı + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 66f2561d8..4749c5165 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Файл призначення має неочікуваний розмір або час редагування @@ -81,6 +81,24 @@ Мітка + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel Скасувати @@ -136,188 +154,204 @@ Підключено до <server> як <user> - + No account configured. Обліковий запис не налаштовано. - + Add new Додати - + Remove Видалити - + Account Обліковий запис - + Choose what to sync Оберіть, що хочете синхронізувати - + Force sync now Примусово синхронізувати зараз - + Restart sync Перезапустити синхронізацію - + Remove folder sync connection - + Folder creation failed Не вдалося створити теку - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Виконується синхронізація - + The syncing operation is running.<br/>Do you want to terminate it? Виконується процедура синхронізації.<br/>Бажаєте зупинити? - + %1 in use %1 використовується - + %1 as <i>%2</i> %1 як <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Підключено до %1. - + Server %1 is temporarily unavailable. Сервер %1 тимчасово недоступний. - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. - + Log in Увійти - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Підтвердіть видалення облікового запису - + <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> - + Remove connection - + + Open folder Відкрити каталог - - + + Log out Вихід - + Resume sync Відновити синхронізацію - + Pause sync Призупинити синхронізацію - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. Використовується %1 (%3%) з %2. Деякі теки, включаючи мережеві змонтовані чи спільні, можуть мати інші обмеження. - + %1 of %2 in use Використовується %1 з %2 - + Currently there is no storage usage information available. На даний час немає відомостей про наповнення сховища. - + No %1 connection configured. Жодного %1 підключення не налаштовано. @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out Вийшов - + Disconnected Від'єднаний - + Connected З'єднаний - + Service unavailable Сервіс недоступний - + + Maintenance mode + + + + Network error Помилка мережі - + Configuration error Помилка конфігурації - + + Asking Credentials + + + + Unknown account state Невідомий стан облікового запису @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Серверна активність - + Sync Protocol Протокол Синхронізації - - List of ignored or erroneous files - - - - - Copy - Копіювати - - - - Copy the activity list to the clipboard. - Скопіювати протокол синхронізації до буферу обміну. - - - + Not Synced Не синхронізовано - + Not Synced (%1) %1 is the number of not synced files. Not Synced (%1) - + The server activity list has been copied to the clipboard. Список серверних операцій скопійовано до буферу обміну. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Скопійовано в буфер обміну @@ -448,47 +477,47 @@ Мітка - + Server Activities Серверні операції - + Copy Копіювати - + Copy the activity list to the clipboard. Скопіювати протокол синхронізації до буферу обміну. - + Action Required: Notifications Необхідна Дія: Сповіщення - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. Ви отримали %n нове сповіщення від %2.Ви отримали %n нових сповіщень від %2.Ви отримали %n нових сповіщень від %2. - + You received %n new notification(s) from %1 and %2. Ви отримали %n нове сповіщення від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2. - + You received new notifications from %1, %2 and other accounts. Ви отримали нові сповіщення від %1, %2 та інших облікових записів. - + %1 Notifications - Action Required %1 Сповіщень - Необхідна Дія @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured Обліковий запис ownCloud не налаштовано - + The configured server for this client is too old Налаштований сервер застарий для цього клієнта - + Please update to the latest server and restart the client. Будь ласка, оновіть сервер до останньої версії та перезавантажте клієнт. - + Authentication error: Either username or password are wrong. Помилка автентифікації: ім'я користувача або пароль невірні. - + timeout час вичерпано - + The provided credentials are not correct Введені дані не вірні - - OCC::DeleteJob - - - Connection timed out - Час очікування з'єднання перевищено - - OCC::DiscoveryMainThread - + Aborted by the user Скасовано користувачем @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. Локальна тека %1 не існує. - + %1 should be a folder but is not. - + %1 is not readable. %1 не читається. - + %1 has been removed. %1 names a file. %1 видалено. - + %1 has been downloaded. %1 names a file. %1 завантажено. - + %1 has been updated. %1 names a file. %1 оновлено. - + %1 has been renamed to %2. %1 and %2 name files. %1 перейменовано на %2 - + %1 has been moved to %2. %1 переміщено в %2. - + %1 and %n other file(s) have been removed. - + %1 and %n other file(s) have been downloaded. - + %1 and %n other file(s) have been updated. - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 не може синхронізуватися через помилки. Дивіться деталі в журналі. - + Sync Activity Журнал синхронізації - + Could not read system exclude file Неможливо прочитати виключений системний файл - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Видалити усі файли? - + Remove all files Видалити усі файли - + Keep files Зберегти файли - + This sync would reset the files to an earlier 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? - + Backup detected Резервну копію знайдено - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state Не вдалося скинути стан теки - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. Знайдено старий журнал синхронізації '%1', його неможливо видалити. Будь ласка, впевніться що він не відкритий в іншій програмі. - + (backup) (Резервна копія) - + (backup %1) (Резервна копія %1) - + Undefined State. Невизначений стан. - + Waiting to start syncing. Очікування початку синхронізації. - + Preparing for sync. Підготовка до синхронізації - + Sync is running. Синхронізація запущена. - + Last Sync was successful. Остання синхронізація була успішною. - + Last Sync was successful, but with warnings on individual files. Остання синхронізація пройшла вдало, але були зауваження про деякі файли. - + Setup Error. Помилка встановлення. - + User Abort. Скасовано користувачем. - + Sync is paused. Синхронізація призупинена. - + %1 (Sync is paused) %1 (Синхронізація призупинена) - + No valid folder selected! - + The selected path is not a folder! - + You have no permission to write to the selected folder! У вас немає прав на запис в цю теку! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! - + 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! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection - + Synchronizing with local folder Синхронізується з локальною текою - + File Файл @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Вийшов - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - - Checking for changes in '%1' + + There are unresolved conflicts. Click for details. + Checking for changes in '%1' + + + + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) завантаження %1/с - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) відвантаження %1/с - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 файл %1 з %2 - + Waiting... Очікування... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Натисніть, щоб обрати локальну теку для синхронізації. - + Enter the path to the local folder. Введіть шлях до локальної теки. @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an Введіть ім'я нової теки, яка буде створена тут '%1': - + Folder was successfully created on %1. Теку успішно створено на %1. - + Authentication failed accessing %1 Помилка аутентифікації при доступі до %1 - + Failed to create the folder on %1. Please check manually. Не вдалося створити теку на %1. Будь ласка, перевірте вручну. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Оберіть це для синхронізації всього облікового запису - + This folder is already being synced. Тека вже синхронізується. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Тека <i>%1</i> вже синхронізується, та вона є батьківською для <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Всі ваші файли синхронізуються. Синхронізація інших тек в цьому режимі <b>не</b> підтримується. Якщо вам необхідно синхронізувати декілька локальних каталогів, спочатку видаліть синхронізацію батьківської теки. @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway Не отримано E-Tag від серверу, перевірте мережеві налаштування (проксі, шлюз) - + We received a different E-Tag for resuming. Retrying next time. Ми отримали інший E-Tag для відновлення. Спробуйте ще раз пізніше. - + Server returned wrong content-range Сервер повернув невірний content-range - + Connection Timeout Час з'єднання вичерпано @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced Додатково - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an Використовувати &монохромні піктограми - + Edit &Ignored Files Редагувати &ігноровані файли - + S&how crash reporter - - + + About Про - + Updates Оновлення - + &Restart && Update &Перезавантаження && Оновлення @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Введіть Пароль - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1364,55 +1395,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from Цей запис створено системою в '%1', тут змінити його не можна. + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output Вивід журналу - + &Search: &Пошук: - + &Find &Знайти - + + &Capture debug messages + + + + Clear Очистити - + Clear the log display. Очистити дисплей журналу. - + S&ave З&берегти - + Save the log file to a file on disk for debugging. Зберегти файл журналу у файл на диску для обробки. - + Save log file Зберегти файл журналу - + Error Помилка - + Could not write to log file %1 Не вдалося записати в файл журналу %1 @@ -1420,24 +1521,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Помилка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Файл '%1'<br/>не вдається відкрити на запис.<br/><br/>Журнал <b>не</b> можливо зберегти!</nobr> - - OCC::MoveJob - - - Connection timed out - Час очікування з'єднання вичерпано - - OCC::NSISUpdater @@ -1549,27 +1642,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from Автоматичне обмеження - + Hostname of proxy server Ім'я хоста проксі-сервера - + Username for proxy server Ім'я користувача проксі-сервера - + Password for proxy server Пароль для проксі-сервера - + HTTP(S) proxy HTTP(S) проксі - + SOCKS5 proxy SOCKS5 проксі @@ -1582,78 +1675,111 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready Доступне оновлення %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Буде встановлено оновлення для %1. Програма оновлення може запитати додаткові привілеї. - + Downloading version %1. Please wait... Завантаження файлів %1. Будь ласка, почекайте... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Неможливо завантажити оновлення. Будь ласка, натисніть <a href='%1'>тут</a>, щоб самостійно завантажити оновлення. - + Could not check for new updates. Не вдалося перевірити наявність оновлень. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Перевірка оновлень на сервері... - + Update status is unknown: Did not check for new updates. Статус оновлення невідомий: Не вдалося перевірити наявність оновлень. - + No updates available. Your installation is at the latest version. У вас встановленно останню версію. @@ -1666,43 +1792,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 З'єднати з %1 - + Setup local folder options Налаштування локальної теки - + Connect... Підключення ... - + %1 folder '%2' is synced to local folder '%3' %1 тека '%2' синхронізована з локальним каталогом '%3' - + Sync the folder '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> - + Local Sync Folder Локальна Тека для Синхронізації - - + + (%1) (%1) @@ -1735,7 +1861,7 @@ for additional privileges during the process. Налаштувати TLS сертифікат клієнта - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не вдалося підключитися до безпечного серверу за адресою <em>%1</em>. Як Ви хочете продовжити?</p></body></html> @@ -1743,47 +1869,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 З'єднати з %1 - + Enter user credentials Вказати облікові дані + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 З'єднати з %1 - + Setup %1 server Налаштувати %1 сервер - + This url is NOT secure as it is not encrypted. It is not advisable to use it. Це посилання НЕ зашифроване. Ми не рекомендуємо відкривати такі посилання. - + This url is secure. You can use it. Ця адреса безпечна. Її можна використовувати. - + &Next > &Наступний> @@ -1791,22 +1930,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успішно підключено до %1: %2 версія %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не вдалося з'єднатися з %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Перевищено час очікування з'єднання до %1 на %2. - + Trying to connect to %1 at %2... Спроба підключення до %1 на %2... @@ -1826,109 +1965,109 @@ It is not advisable to use it. Доступ заборонений сервером. Щоб довести, що у Вас є права доступу, <a href="%1">клікніть тут</a> для входу через Ваш браузер. - + Invalid URL Невірний URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальна тека синхронізації %1 вже існує, налаштування її для синхронізації.<br/><br/> - + Creating local sync folder %1... Створення локальної теки для синхронізації %1... - + ok ok - + failed. не вдалося. - + Could not create local folder %1 Не вдалося створити локальну теку $1 - + No remote folder specified! Не вказано віддалену теку! - + Error: %1 Помилка: %1 - + creating folder on ownCloud: %1 створення теки на ownCloud: %1 - + Remote folder %1 created successfully. Віддалена тека %1 успішно створена. - + The remote folder %1 already exists. Connecting it for syncing. Віддалена тека %1 вже існує. Під'єднання для синхронізації. - + The folder creation resulted in HTTP error code %1 Створення теки завершилось HTTP помилкою %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Створити віддалену теку не вдалося через невірно вказані облікові дані.<br/>Поверніться назад та перевірте облікові дані.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Створити віддалену теку не вдалося, можливо, через невірно вказані облікові дані.</font><br/>Будь ласка, поверніться назад та перевірте облікові дані.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Не вдалося створити віддалену теку %1 через помилку <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. З'єднання для синхронізації %1 з віддаленою текою %2 було встановлено. - + Successfully connected to %1! Успішно під'єднано до %1! - + Connection to %1 could not be established. Please check again. Підключення до %1 встановити не вдалося. Будь ласка, перевірте ще раз. - + Folder rename failed Не вдалося перейменувати теку - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Неможливо видалити теку та створити її резервну копію, оскільки тека або файли, що в ній розташовані, використовуються. Будь ласка, закрийте всі програми, що можуть використовувати цю теку та спробуйте ще раз, або скасуйте встановлення. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальна тека синхронізації %1 успішно створена!</b></font> @@ -1936,12 +2075,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard Майстер з'єднання %1 - + Skip folders configuration Пропустити налаштування теки @@ -1949,33 +2088,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! Усе налаштовано! - + Open Local Folder Відкрити локальну теку - + Open %1 in Browser Відкрити %1 в Браузері - - OCC::PUTFileJob - - - Connection Timeout - Час з'єднання вичерпано - - OCC::PollJob - + Invalid JSON reply from the poll URL Неправильна JSON відповідь на сформований URL @@ -1983,7 +2114,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -1991,47 +2122,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! Файл %1 не може бути завантажено через локальний конфлікт назви файлу! - - The download would reduce free disk space below %1 + + The download would reduce free local disk space below the limit - + Free space on disk is less than %1 - + File was deleted from server Файл видалено з сервера - + The file could not be downloaded completely. Файл не може бути завантажений повністю. - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! Файл %1 не збережено через локальний конфлікт назви файлу! - + File has changed since discovery Файл змінився з моменту знаходження - + Error writing metadata to the database @@ -2039,17 +2170,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Відновлення не вдалося: %1 - - Continue blacklisting: - Продовжити занесення до чорного списку: - - - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2057,22 +2183,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Увага, можливий конфлікт чутливості до реєстру з %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2080,17 +2206,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Помилка видалення '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Неможливо видалити %1 через локальний конфлікт назви файлу @@ -2098,13 +2224,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash %1 не можна перейменувати на %2 через локальний конфлікт назви файлу - - + + Error writing metadata to the database @@ -2112,12 +2238,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. Файл видалено з опублікованої теки з правами тільки на перегляд. Файл відновлено. - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". Сервер відповів неправильним HTTP кодом. Очікувався 204, але отримано "%1 %2". @@ -2125,12 +2251,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер відповів неправильним HTTP кодом. Очікувався 201, але отримано "%1 %2". - + Error writing metadata to the database @@ -2138,28 +2264,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. Цю теку не можна перейменувати. Буде використано старе ім'я. - + This folder must not be renamed. Please name it back to Shared. Цю теку не можна перейменувати. Будь ласка, поверніть їй ім'я Shared. - + The file was renamed but is part of a read only share. The original file was restored. Файл було перейменовано, але він розташований в теці з правами лише на перегляд. Відновлено оригінальний файл. - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". Сервер відповів неправильним HTTP кодом. Очікувався 201, але отримано "%1 %2". - - + + Error writing metadata to the database @@ -2167,27 +2293,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed Файл видалено - + Local file changed during syncing. It will be resumed. Локальний файл змінився під час синхронізації. Його буде відновлено. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database @@ -2195,32 +2326,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Примусове припинення завдання при скиданні HTTP з’єднання з Qt < 5.4.2. - + The local file was removed during sync. Локальний файл було видалено під час синхронізації. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2228,32 +2359,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Примусове припинення завдання при скиданні HTTP з’єднання з Qt < 5.4.2. - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Файл було змінено локально, але він розташований в теці з правами лише на перегляд. Файл відновлено, а ваші зміни розташовані в теці конфліктів. - + Poll URL missing Не вистачає сформованого URL - + The local file was removed during sync. Локальний файл було видалено під час синхронізації. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2271,42 +2402,42 @@ It is not advisable to use it. Мітка - + Time Час - + File Файл - + Folder Тека - + Action Дія - + Size Розмір - + Local sync protocol - + Copy Копіювати - + Copy the activity list to the clipboard. Скопіювати протокол синхронізації до буферу обміну. @@ -2347,7 +2478,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Оберіть, що хочете синхронізувати @@ -2355,33 +2486,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... Завантаження ... - + Deselect remote folders you do not wish to synchronize. - + Name Ім’я - + Size Розмір - - + + No subfolders currently on the server. На сервері зараз немає підтек. - + An error occurred while loading the list of sub folders. @@ -2394,22 +2525,22 @@ It is not advisable to use it. Налаштування - + Activity Активність - + General Загалом - + Network Мережа - + Account Обліковий запис @@ -2417,27 +2548,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Активність - + General Загалом - + Network Мережа - + Account Обліковий запис @@ -2465,35 +2596,45 @@ It is not advisable to use it. Шлях до ownCloud: - + %1 Sharing Ви поділилися %1 - + %1 %1 - + Folder: %2 Тека: %2 - + The server does not allow sharing - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. Цей файл неможливо поширити, бо ним поділилися без права на поширення. + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2503,92 +2644,126 @@ It is not advisable to use it. Поділитися NewDocument.odt - - Share link - Поділитись посиланням - - - + TextLabel Мітка - + Set &password Встановити &пароль - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date Встановити т&ермін дії - + Set password Встановіть пароль - - &Mail link + + Link properties: - Copy &link - Копіювати п&осилання + Show file listing + - + Allow editing Дозволити редагування - + Anyone with the link has access to the file/folder Будь хто з цім посиланням має доступ до файлу/теки - + + P&assword protect &Захистити паролем - + Password Protected Захищено паролем - + The file can not be shared because it was shared without sharing permission. Цей файл неможливо поширити, бо ним поділилися без права на поширення. - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password Публічне по&ширення вимагає пароль - + Please Set Password - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - По&ділитись посиланням - OCC::ShareUserGroupWidget @@ -2598,68 +2773,98 @@ It is not advisable to use it. Поділитися NewDocument.odt - + Share with users or groups ... Поширити серед користувачів або груп ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - Форма + - + TextLabel - Мітка + - + can edit - може редагувати + - + can share - може ділитися з іншими + - + ... - ... + - + create - створити + - + change - змінити + - + delete - видалити + OCC::ShibbolethCredentials - + Login Error Помилка входу - + You must sign in as user %1 Ви маєте увійти як %1 @@ -2667,22 +2872,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - Аутентифікація - + SSL Chipher Debug View - + Reauthentication required Потрібна повторна аутентифікація - + Your session has expired. You need to re-login to continue to use the client. Ваша сесія скінчилася. Вам потрібно ввійти знову, щоб продовжити користуватися програмою. @@ -2690,26 +2895,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Поділитися з %1 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>Деталі сертифікату</h3> - + Common Name (CN): Загальне Ім'я (CN): - + Subject Alternative Names: Альтернативне Ім'я: @@ -2794,7 +3019,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. З'єднання зашифроване %1-бітним %2. @@ -2811,7 +3036,7 @@ It is not advisable to use it. Інформація про сертифікат: - + This connection is NOT secure as it is not encrypted. З'єднання НЕ зашифровано. @@ -2831,67 +3056,67 @@ It is not advisable to use it. Все одно довіряти цьому сертифікату - + Untrusted Certificate Недовірений сертифікат - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 з Сертифікатом %1 - + &lt;not specified&gt; &lt;не вказано&gt; - - + + Organization: %1 Організація: %1 - - + + Unit: %1 Підрозділ: %1 - - + + Country: %1 Країна: %1 - + Fingerprint (MD5): <tt>%1</tt> Відбиток (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Відбиток (SHA1): <tt>%1</tt> - + Effective Date: %1 Дата введення в дію: %1 - + Expiration Date: %1 Термін Дії: %1 - + Issuer: %1 Емітент: %1 @@ -2899,285 +3124,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успішно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не вдалося завантажити файл журналу. Файл журналу пошкоджений. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Не вдалося завантажити плагін для синхронізації %1.<br/>Будь ласка, перевірте його встановлення!</p> - + CSync got an error while processing internal trees. У CSync виникла помилка під час сканування внутрішньої структури каталогів. - - CSync failed to reserve memory. - CSync не вдалося зарезервувати пам'ять. - - - + CSync fatal parameter error. У CSync сталася фатальна помилка параметра. - + CSync processing step update failed. CSync не вдалася зробити оновлення . - + CSync processing step reconcile failed. CSync не вдалася зробити врегулювання. - + CSync could not authenticate at the proxy. CSync не вдалося аутентифікуватися на проксі-сервері. - + CSync failed to lookup proxy or server. CSync не вдалося знайти Проксі або Сервер. - + CSync failed to authenticate at the %1 server. CSync не вдалося аутентифікуватися на %1 сервері. - + CSync failed to connect to the network. CSync не вдалося приєднатися до мережі. - + A network connection timeout happened. Час під'єднання до мережі вичерпався. - + A HTTP transmission error happened. Сталася помилка передачі даних по HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync: на сервері %1 скінчилося місце. - + CSync unspecified error. Невизначена помилка CSync. - + Aborted by the user Скасовано користувачем - + CSync failed to access CSync не вдалося отримати доступ - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Служба тимчасово недоступна - + Access is forbidden Доступ заборонений - + An internal error number %1 occurred. Виникла внутрішня помилка за номером %1. - - The item is not synced because of previous errors: %1 - Шлях не синхронізується через помилки: %1 - - - + Symbolic links are not supported in syncing. Синхронізація символічних посилань не підтримується. - + File is listed on the ignore list. Файл присутній у списку ігнорованих. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Шлях до файлу занадто довгий. - + Stat failed. - + Filename encoding is not valid Кодування файлу не припустиме - + Invalid characters, please rename "%1" - - Unable to initialize a sync journal. - Не вдалося ініціалізувати протокол синхронізації. - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело @@ -3193,7 +3433,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3201,17 +3441,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Версія %1. Для отримання більш детальної інформації, будь ласка, відвідайте <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Поширюється через %1 і під ліцензією GNU General Public License (GPL) версії 2.0<br/>%2 логотип %2 є зареєстрованими торговими марками %1 у Сполучених Штатах та інших країнах, або обох.</p> @@ -3219,17 +3459,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Заголовок контрольної суми пошкоджено. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. Завантажений файл не відповідає контрольній сумі, його буде відновлено. @@ -3237,207 +3477,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Увійдіть будь ласка - + Folder %1: %2 Тека %1: %2 - + No sync folders configured. Жодна тека не налаштована для синхронізації. - + There are no sync folders configured. Немає налаштованих тек для синхронізації. - + Open in browser Відкрити у переглядачі - - - + + + Log in... Увійти... - - - + + + Log out Вихід - + Recent Changes Недавні зміни - + Checking for changes in '%1' - + Managed Folders: Керовані теки: - + Open folder '%1' Відкрити теку '%1' - + Open %1 in browser Відкрити %1 в браузері - + Unknown status Невідомий статус - + Settings... Налаштування... - + Details... Деталі... - + Help Допомога - + Quit %1 Закрити %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 Обліковий запис %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Вийти зі всіх облікових записів - + Log in to all accounts... Увійти до всіх облікових записів... - + New account... Новий обліковий запис... - + Crash now Only shows in debug mode to allow testing the crash handler Критична помилка - + No items synced recently Нещодавно нічого не синхронізувалося - + Syncing %1 of %2 (%3 left) Синхронізовано %1 з %2 (залишилося %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронізовано %1 (залишилося %2) - + Syncing %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Оновлено @@ -3445,7 +3685,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3548,78 +3788,42 @@ It is not advisable to use it. &Пароль + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form Форма - - Server &address: - &Адреса сервера: - - - - - TextLabel Мітка - - - Use &secure connection - Використання &безпечного підключення - - - - CheckBox - Чекбокс - - - - &Username: - &Ім'я користувача: - - - - Enter the ownCloud username. - Введіть ім'я користувача ownCloud. - - - - &Password: - &Пароль: - - - - Enter the ownCloud password. - Введіть пароль для ownCloud. - - - - Do not allow the local storage of the password. - Не допускати локального зберігання паролів. - - - - &Do not store password on local machine - &Не зберігайте пароль на локальному комп'ютері. - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - Введіть адресу ownCloud, до якого Ви бажаєте підключитись (без http чи https). - Ser&ver Address @@ -3663,7 +3867,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3671,42 +3875,42 @@ It is not advisable to use it. QObject - + in the future у майбутньому - + %n day(s) ago - + %n hour(s) ago - + now зараз - + Less than a minute ago Менше хвилини тому - + %n minute(s) ago - + Some time ago Деякий час тому - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3715,57 +3919,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3786,102 +3990,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Зібрано з Git ревізії <a href="%1">%2</a> %3, %4, використовуючи Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded Завантажено - + Uploaded Вивантажено - + Server version downloaded, copied changed local file into conflict file - + Deleted Видалено - + Moved to %1 Переміщено до %1 - + Ignored Проігноровано - + Filesystem access error Помилка доступу до файлової системи - + Error Помилка - + Updated local metadata - - + + Unknown Невідомо - + downloading зкачування - + uploading завантаження - + deleting видалення - + moving переміщення - + ignoring ігнорування + - error помилка - + updating local metadata @@ -3889,54 +4088,77 @@ It is not advisable to use it. theme - + Status undefined Статус не визначено - + Waiting to start sync Очікування початку синхронізації - + Sync is running Проводиться синхронізація - + Sync Success Синхронізація успішно виконана - + Sync Success, some files were ignored. Синхронізацію завершено, деякі файли проігноровано. - + Sync Error Помилка синхронізації - + Setup Error Помилка налаштування - + Preparing to sync Підготовка до синхронізації - + Aborting... Відміна... - + Sync is paused Синхронізація призупинена + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 0f0ce5d3e..252a1b024 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 目标文件的大小和修改时间无法预料 @@ -68,12 +68,12 @@ Lorem ipsum dolor sit amet - + Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporm - + Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod temporm @@ -81,6 +81,24 @@ 文本标签 + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -111,12 +129,12 @@ Synchronize none - + 都不同步 Apply manual changes - + 应用手工修改 @@ -125,8 +143,8 @@ - - + + Cancel 取消 @@ -136,188 +154,204 @@ <user> 已经连接到 <server> - + No account configured. 没有配置的帐号。 - + Add new 添加 - + Remove 移除 - + Account 账户 - + Choose what to sync 选择同步内容 - + Force sync now 强制同步 - + Restart sync 重新开始同步 - + Remove folder sync connection 断开文件夹同步 - + Folder creation failed 文件夹创建失败 - + <p>Could not create local folder <i>%1</i>. <p>无法创建文件夹 <i>%1</i>。 - + Confirm Folder Sync Connection Removal 确定断开文件夹同步 - + Remove Folder Sync Connection 断开文件夹同步 - + Sync Running 正在同步 - + The syncing operation is running.<br/>Do you want to terminate it? 正在执行同步。<br />您确定要关闭它吗? - + %1 in use %1 使用中 - + %1 as <i>%2</i> %1, <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. 服务器版本 %1 很旧且不支持,继续操作将自行承担风险。 - + Connected to %1. 连接到 %1。 - + Server %1 is temporarily unavailable. 远程服务器%1暂时不可用。 - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. 从 %1 退出 - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. 没有到位于%2中的%1的连接 - + Log in 登录 - + There are folders that were not synchronized because they are too big: - + 以下目录由于太大而没有同步: - + There are folders that were not synchronized because they are external storages: - + 以下目录由于是外部存储而没有同步: - + There are folders that were not synchronized because they are too big or external storages: - + 以下目录由于太大或是外部存储而没有同步: - + Confirm Account Removal 确认删除账号 - + <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> <p>你确定要删除账号的连接? <i>%1</i>?</p><p><b>Note:</b> 这 <b>不会</b> 删除任何文件</p> - + Remove connection 删除连接 - + + Open folder 打开文件夹 - - + + Log out 注销 - + Resume sync 恢复同步 - + Pause sync 暂停同步 - + <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> <p>你确定要停止文件夹同步? <i>%1</i>?</p><p><b>Note:</b> 这 <b>不会</b> 删除任何文件</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 使用中。一些文件夹,例如网络挂载的和共享的文件夹,可能有不同的限制。 - + %1 of %2 in use 使用量 %1 / %2 - + Currently there is no storage usage information available. 目前没有储存使用量信息可用。 - + No %1 connection configured. 没有 %1 连接配置。 @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out 已退出 - + Disconnected 连接已断开 - + Connected 已连接 - + Service unavailable 服务不可用 - + + Maintenance mode + + + + Network error 网络错误 - + Configuration error 配置错误 - + + Asking Credentials + + + + Unknown account state 未知的账户状态 @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity 服务器动态 - + Sync Protocol 同步协议 - - List of ignored or erroneous files - 忽视或错误的文件列表 - - - - Copy - 复制 - - - - Copy the activity list to the clipboard. - 复制动态列表到剪贴板。 - - - + Not Synced 未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步 (%1) - + The server activity list has been copied to the clipboard. 服务器动态已被复制到剪贴板。 - + The sync activity list has been copied to the clipboard. 同步动态已被复制到剪贴板。 - + The list of unsynced items has been copied to the clipboard. - + 未同步列表已复制到剪贴板。 - + Copied to clipboard 复制到剪贴板 @@ -448,47 +477,47 @@ 文本标签 - + Server Activities 服务器动态 - + Copy 复制 - + Copy the activity list to the clipboard. 复制动态列表到剪贴板。 - + Action Required: Notifications 需采取的操作:通知 - + <br/>Account %1 does not have activities enabled. <br/>帐户%1没有同步活动。 - + You received %n new notification(s) from %2. 你收到 %n 新的通知来自于 %2. - + You received %n new notification(s) from %1 and %2. 你收到 %n 新的通知来自 %1 和 %2。 - + You received new notifications from %1, %2 and other accounts. 你收到新的通知 %1, %2 和其它账户。 - + %1 Notifications - Action Required %1 通知 - 需要采取行动 @@ -508,7 +537,7 @@ Certificate & Key (pkcs12) : - + 证书与秘钥(pkcs12): @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file 访问配置文件时发生错误 - + There was an error while accessing the configuration file at %1. - + 访问配置文件 %1 时发生错误。 - + Quit ownCloud 退出 ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 向数据库写入元数据错误 @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured 没有已经配置的 ownCloud 帐号 - + The configured server for this client is too old 此客户端连接到的服务器版本过旧 - + Please update to the latest server and restart the client. 请更新到最新的服务器版本然后重启客户端。 - + Authentication error: Either username or password are wrong. 认证失败:用户名或密码错误 - + timeout 超时 - + The provided credentials are not correct 提供的证书不正确 - - OCC::DeleteJob - - - Connection timed out - 连接超时 - - OCC::DiscoveryMainThread - + Aborted by the user 用户撤销 @@ -632,170 +653,179 @@ OCC::Folder - + Local folder %1 does not exist. 本地文件夹 %1 不存在。 - + %1 should be a folder but is not. %1 应该是一个文件夹,但是它现在不是文件夹 - + %1 is not readable. %1 不可读。 - + %1 has been removed. %1 names a file. %1 已移除。 - + %1 has been downloaded. %1 names a file. %1 已下载。 - + %1 has been updated. %1 names a file. %1 已更新。 - + %1 has been renamed to %2. %1 and %2 name files. %1 已更名为 %2。 - + %1 has been moved to %2. %1 已移动至 %2。 - + %1 and %n other file(s) have been removed. %1 和 %n 其它文件已被移除。 - + %1 and %n other file(s) have been downloaded. %1 和 %n 其它文件已下载。 - + %1 and %n other file(s) have been updated. %1 和 %n 其它文件已更新。 - + %1 has been renamed to %2 and %n other file(s) have been renamed. %1 已经更名为 %2,其它 %3 文件也已更名。 - + %1 has been moved to %2 and %n other file(s) have been moved. %1 已移动到 %2,其它 %3 文件也已移动。 - + %1 has and %n other file(s) have sync conflicts. %1 和 %n 其他文件有同步冲突。 - + %1 has a sync conflict. Please check the conflict file! %1 有同步冲突。请检查冲突文件! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. %1 和 %n 其他文件由于错误不能同步。详细信息请查看日志。 - + %1 could not be synced due to an error. See the log for details. %1 同步出错。详情请查看日志。 - + Sync Activity 同步活动 - + Could not read system exclude file 无法读取系统排除的文件 - + A new folder larger than %1 MB has been added: %2. - + 一个大于 %1 MB 的新文件夹 %2 已被添加。 + - + A folder from an external storage has been added. - + 一个来自外部存储的文件夹已被添加。 + - + Please go in the settings to select it if you wish to download it. - + 如果您想下载,请到设置页面选择它。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. - + 同步文件夹'%1'的所有文件已经在服务器端删除。 +删除动作会被同步到本地的同步文件夹,内部的文件将不可用,您需要有相应权限来恢复。 +如果您想保留这些文件,同时您有相应权限的话,它们将被重新同步到服务器。 +如果您决定删除这些文件,它们将不再可用,除非您是其所有者。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + 本地文件夹'%1'的所有文件都已经被删除。这些删除动作会被同步到您的服务器,相应的文件将不再可用,除非被回复。 +确定要把这些动作同步到服务器吗? +如果这是一个意外而您想要保留这些文件,他们会被重新从服务器同步过来。 - + Remove All Files? 删除所有文件? - + Remove all files 删除所有文件 - + Keep files 保持所有文件 - + This sync would reset the files to an earlier 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? - + 同步将把同步文件夹 '%1' 之中的文件重置到更早时间。 +有可能因为服务器端恢复到了旧有备份。 +继续正常同步将导致您全部文件被更早状态的旧文件覆盖。您想要保留冲突文件的本地最新版本吗? - + Backup detected 备份已删除 - + Normal Synchronisation 正常同步 - + Keep Local Files as Conflict 保留本地文件为冲突文件 @@ -803,112 +833,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state 不能重置文件夹状态 - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. 一个旧的同步日志 '%1' 被找到,但是不能被移除。请确定没有应用程序正在使用它。 - + (backup) (备份) - + (backup %1) (备份 %1) - + Undefined State. 未知状态。 - + Waiting to start syncing. 等待启动同步。 - + Preparing for sync. 准备同步。 - + Sync is running. 同步正在运行。 - + Last Sync was successful. 最后一次同步成功。 - + Last Sync was successful, but with warnings on individual files. 上次同步已成功,不过一些文件出现了警告。 - + Setup Error. 安装失败 - + User Abort. 用户撤销。 - + Sync is paused. 同步已暂停。 - + %1 (Sync is paused) %1 (同步已暂停) - + No valid folder selected! 没有选择有效的文件夹! - + The selected path is not a folder! 选择的路径不是一个文件夹! - + You have no permission to write to the selected folder! 你没有写入所选文件夹的权限! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + 本地文件夹 %1 包含了一个符号连接,而该连接的目标包含了一个已经同步的文件夹。请另行选择! - + There is already a sync from the server to this local folder. Please pick another local folder! - + 已经有一个从服务器到此文件夹的同步设置。请选择其他本地文件夹! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! 本地文件夹 %1 包含有正在使用的同步文件夹,请选择另一个! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! 本地文件夹 %1 是正在使用的同步文件夹,请选择另一个! - + 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! 选择的文件夹 %1 是一个符号连接,连接指向的是正在使用的同步文件夹,请选择另一个! @@ -916,17 +946,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection 添加同步文件夹 - + Synchronizing with local folder 与本地文件夹同步 - + File 文件 @@ -934,134 +964,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 请先登录后再添加文件夹 - + Click this button to add a folder to synchronize. 点击选择进行同步的本地文件夹。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 载入文件夹列表时发生错误。 - + Signed out 已登出 - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 - + Fetching folder list from server... 获取文件夹列表... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' 在 %1 检查更改 - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 正在同步 %1 - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下载 %1/s - + u2193 %1/s u2193 %1/秒 - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上传 %1/s - + u2191 %1/s u2191 %1/秒 - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 剩余: %5,%1 / %2, 文件数量 %3 / %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, file %3 of %4 - + file %1 of %2 第 %1 个文件,共 %2 个 - + Waiting... 请稍等... - + Waiting for %n other folder(s)... 等待 %n 个其他文件(文件夹) - + Preparing to sync... 准备同步... @@ -1069,12 +1109,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 添加同步文件夹 - + Add Sync Connection 添加同步连接 @@ -1087,7 +1127,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an 点击选择进行同步的本地文件夹。 - + Enter the path to the local folder. 输入本地文件夹的路径。 @@ -1110,42 +1150,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an 输入 %1 中的新文件夹的名称: - + Folder was successfully created on %1. 文件夹在 %1 上创建成功。 - + Authentication failed accessing %1 访问 %1 时认证失败 - + Failed to create the folder on %1. Please check manually. 无法在 %1 处创建文件夹。请自行检查。 - + Failed to list a folder. Error: %1 列表失败。错误: %1 - + Choose this to sync the entire account 选择此项以同步整个账户 - + This folder is already being synced. 文件夹已在同步中。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 你已经在同步 <i>%1</i>,<i>%2</i> 是它的一个子文件夹。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 @@ -1166,22 +1206,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway 未能收到来自服务器的 E-Tag,请检查代理/网关 - + We received a different E-Tag for resuming. Retrying next time. 我们收到了不同的恢复 E-Tag,将在下次尝试。 - + Server returned wrong content-range 服务器返回了错误的内容长度 - + Connection Timeout 连接超时 @@ -1204,25 +1244,25 @@ Continuing the sync as normal will cause all your files to be overwritten by an 系统托盘 - + Advanced 高级 - + Ask for confirmation before synchronizing folders larger than - + 请询问确认同步,若同步文件夹大于 - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages - + 请询问确认同步,若涉及外部存储 @@ -1240,28 +1280,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an 使用单色图标 - + Edit &Ignored Files 编辑忽略的文件 - + S&how crash reporter 显示崩溃报告器 - - + + About 关于 - + Updates 更新 - + &Restart && Update 重启并更新 (&R) @@ -1269,24 +1309,24 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + 请输入 %1 密码:<br><br>用户:%2<br>账户:%3<br> - + Reading from keychain failed with error: '%1' 获取密钥链失败,错误: '%1' - + Enter Password 输入密码 - + <a href="%1">Click here</a> to request an app password from the web interface. - + <a href="%1">点击这里</a>从 web 界面请求一个 app 密码。 @@ -1366,55 +1406,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from 此项目由系统在 %1 处提供,不能在这里被修改。 + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output 日志输出 - + &Search: &搜索: - + &Find 查找 (&F) - + + &Capture debug messages + + + + Clear 清除 - + Clear the log display. 清空日志显示。 - + S&ave 保存 (&S) - + Save the log file to a file on disk for debugging. 保存日志文件到磁盘以供调试。 - + Save log file 保存日志文件 - + Error 错误 - + Could not write to log file %1 无法写入日志文件%1 @@ -1422,24 +1532,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error 错误 - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>文件 '%1'<br/>不能写入。<br/><br/>将<b>不</b>能保存日志输出!</nobr> - - OCC::MoveJob - - - Connection timed out - 连接超时 - - OCC::NSISUpdater @@ -1551,27 +1653,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from 自动限制 - + Hostname of proxy server 代理服务器主机名 - + Username for proxy server 代理服务器用户名 - + Password for proxy server 代理服务器密码 - + HTTP(S) proxy HTTP(S) 代理 - + SOCKS5 proxy SOCKS5 代理 @@ -1584,79 +1686,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 创建于 %1 - + Closing in a few seconds... 几秒钟后关闭... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' %1 请求失败于 %2 - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' '%1' 选定于 %2 + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready 新的 %1 更新就绪 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. 新版本&1已经可以更新。更新过程会请求额外的权限。 - + Downloading version %1. Please wait... 正在下载版本 %1,请稍候(“稍后”和“稍候”请分清楚,OK?)... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. 无法下载更新,请点击<a href='%1'>此处</a>手动下载更新。 - + Could not check for new updates. 无法检查新更新。 - + %1 version %2 available. Restart application to start the update. %1 版本 %2 现在可用,请重启应用以开始更新。 - + New %1 version %2 available. Please use the system's update tool to install it. %1 新版本 %2 已经可用,使用系统更新工具升级。 - + Checking update server... 检查更新服务器 - + Update status is unknown: Did not check for new updates. 还没有检查过更新。 - + No updates available. Your installation is at the latest version. 亲,你使用的已经是最新的版本了 @@ -1669,43 +1804,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 连接到 %1 - + Setup local folder options 设置本地文件夹 - + Connect... 连接... - + %1 folder '%2' is synced to local folder '%3' %1 文件夹 '%2' 将被同步到本地文件夹 '%3' - + Sync the folder '%1' 同步文件夹 %1 - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>警告:</strong> 本地目录非空。选择一个操作!</small></p> - + Local Sync Folder 本地同步文件夹 - - + + (%1) (%1) @@ -1738,7 +1873,7 @@ for additional privileges during the process. 设置客户端 TLS 证书 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>无法连接到指定地址的安全服务器 <em>%1</em>。请问是否继续?</p></body></html> @@ -1746,46 +1881,59 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email &电子邮件 - + Connect to %1 连接到 %1 - + Enter user credentials 输入用户密码 + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 连接到 %1 - + Setup %1 server 设置 %1 服务器 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. 这个地址没有使用加密,不够安全,不建议使用。 - + This url is secure. You can use it. 此地址是安全的。您可以使用它 - + &Next > 下一步 (&N) > @@ -1793,22 +1941,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">成功连接到 %1:%2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 连接到 %1 (%2)失败:<br />%3 - + Timeout while trying to connect to %1 at %2. 连接到 %1 (%2) 时超时。 - + Trying to connect to %1 at %2... 尝试连接位于 %2 的 %1... @@ -1828,109 +1976,109 @@ It is not advisable to use it. 服务器拒绝了访问。<a href="%1">点击这里打开浏览器</a> 来确认您是否有权访问。 - + Invalid URL 无效URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步文件夹 %1 已存在,将使用它来同步。<br/><br/> - + Creating local sync folder %1... 创建本地同步目录%1 - + ok 成功 - + failed. 失败 - + Could not create local folder %1 不能创建本地文件夹 %1 - + No remote folder specified! 未指定远程文件夹! - + Error: %1 错误:%1 - + creating folder on ownCloud: %1 在 ownCloud 创建文件夹:%1 - + Remote folder %1 created successfully. 远程目录%1成功创建。 - + The remote folder %1 already exists. Connecting it for syncing. 远程文件夹 %1 已存在。连接它以供同步。 - + The folder creation resulted in HTTP error code %1 创建文件夹出现 HTTP 错误代码 %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 远程文件夹创建失败,因为提供的凭证有误!<br/>请返回并检查您的凭证。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">远程文件夹创建失败,可能是由于提供的用户名密码不正确。</font><br/>请返回并检查它们。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 创建远程文件夹 %1 失败,错误为 <tt>%2</tt>。 - + A sync connection from %1 to remote directory %2 was set up. 已经设置了一个 %1 到远程文件夹 %2 的同步连接 - + Successfully connected to %1! 成功连接到了 %1! - + Connection to %1 could not be established. Please check again. 无法建立到 %1的链接,请稍后重试(这里“稍后”用对了,赞!)。 - + Folder rename failed 文件夹更名失败 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 无法移除和备份文件夹,由于文件夹或文件正在被另一程序占用。请关闭程序后重试,或取消安装。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步目录 %1 已成功创建</b></font> @@ -1938,12 +2086,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1 链接向导 - + Skip folders configuration 跳过文件夹设置 @@ -1951,33 +2099,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! 一切都设置好了! - + Open Local Folder 打开本地文件夹 - + Open %1 in Browser 在浏览器中打开 %1 - - OCC::PUTFileJob - - - Connection Timeout - 连接超时 - - OCC::PollJob - + Invalid JSON reply from the poll URL 推送 URL 传来的 JSON 无效 @@ -1985,7 +2125,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 向数据库写入元数据错误 @@ -1993,47 +2133,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! 由于本地文件名冲突,文件 %1 无法下载。 - - The download would reduce free disk space below %1 - 下载将会使用 %1 的磁盘空间 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 空闲磁盘空间少于 %1 - + File was deleted from server 已从服务器删除文件 - + The file could not be downloaded completely. 文件无法完整下载。 - + The downloaded file is empty despite the server announced it should have been %1. 虽然服务器宣称已完成 %1,但实际下载文件为空。 - + File %1 cannot be saved because of a local file name clash! 由于本地文件名冲突,文件 %1 无法保存。 - + File has changed since discovery 自从发现文件以来,它已经被改变了 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2041,17 +2181,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ;恢复失败:%1 - - Continue blacklisting: - 继续黑名单: - - - + A file or folder was removed from a read only share, but restoring failed: %1 文件(夹)移除了只读共享,但恢复失败:%1 @@ -2059,22 +2194,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 不能删除文件 %1, 错误: %2 - + Attention, possible case sensitivity clash with %1 小心!%1 的文件名可能有大小写冲突 - + could not create folder %1 无法创建文件夹 %1 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2082,17 +2217,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; 删除'%1'错误:%2 - + Could not remove folder '%1' 无法删除文件夹 %1 - + Could not remove %1 because of a local file name clash 由于本地文件名冲突,不能删除 %1 @@ -2100,13 +2235,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash 由于本地文件名冲突,文件 %1 无法更名为 %2 - - + + Error writing metadata to the database 向数据库写入元数据错误 @@ -2114,12 +2249,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. 文件已经移除只读共享,并已经恢复。 - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". 服务器返回的 HTTP 状态错误,应返回 204,但返回的是“%1 %2”。 @@ -2127,12 +2262,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 服务器返回的 HTTP 状态错误,应返回 201,但返回的是“%1 %2”。 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2140,28 +2275,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. 文件无法更名,已经恢复为原文件名。 - + This folder must not be renamed. Please name it back to Shared. 文件无法更名,请改回“Shared”。 - + The file was renamed but is part of a read only share. The original file was restored. 文件已经更名,但这是某个只读分享的一部分,原文件已经恢复。 - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 服务器返回的 HTTP 状态错误,应返回 201,但返回的是“%1 %2”。 - - + + Error writing metadata to the database 向数据库写入元数据错误 @@ -2169,27 +2304,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + 文件 %1 无法上传,因为存在同名文件,文件名仅有大小写不同。 - + File Removed 已移除文件 - + Local file changed during syncing. It will be resumed. 本地文件在同步时已修改,完成后会再次同步 - + Local file changed during sync. 本地文件在同步时已修改。 - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database 向数据库写入元数据错误 @@ -2197,65 +2337,65 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Qt < 5.4.2 时强制中止连接重置。 - + The local file was removed during sync. 本地文件在同步时已删除。 - + Local file changed during sync. 本地文件在同步时已修改。 - + Unexpected return code from server (%1) - + 从服务器得到了意外的返回值(%1) - + Missing File ID from server - + 服务器端文件 ID缺失 - + Missing ETag from server - + 服务器端ETag缺失 OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. Qt < 5.4.2 时强制中止连接重置。 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 文件已经在本地修改,但这是某个只读分享的一部分,原文件已经恢复。您的修改已保存在冲突文件中。 - + Poll URL missing 缺少轮询 URL - + The local file was removed during sync. 本地文件在同步时已删除。 - + Local file changed during sync. 本地文件在同步时已修改。 - + The server did not acknowledge the last chunk. (No e-tag was present) 服务器未确认上一分块。(找不到 E-tag) @@ -2273,42 +2413,42 @@ It is not advisable to use it. 文本标签 - + Time 时间 - + File 文件 - + Folder 文件夹 - + Action 动作 - + Size 大小 - + Local sync protocol 本地同步协议 - + Copy 复制 - + Copy the activity list to the clipboard. 复制动态列表到剪贴板。 @@ -2349,7 +2489,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 选择同步内容 @@ -2357,33 +2497,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... 加载中... - + Deselect remote folders you do not wish to synchronize. - + 反选您不想同步的那些远端文件夹 - + Name 名称 - + Size 大小 - - + + No subfolders currently on the server. 这个服务器上暂不存在子文件夹。 - + An error occurred while loading the list of sub folders. 载入子文件夹列表时发生错误。 @@ -2396,22 +2536,22 @@ It is not advisable to use it. 设置 - + Activity 动态 - + General 常规 - + Network 网络 - + Account 账户 @@ -2419,27 +2559,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity 动态 - + General 常规 - + Network 网络 - + Account 账户 @@ -2467,35 +2607,45 @@ It is not advisable to use it. ownCloud 路径: - + %1 Sharing %1 分享 - + %1 %1 - + Folder: %2 文件夹:%2 - + The server does not allow sharing 服务器不支持共享 - + Retrieving maximum possible sharing permissions from server... 从服务器获取最大可能的共享权限... - + The file can not be shared because it was shared without sharing permission. 未分配共享权限,无法共享文件。 + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2505,92 +2655,126 @@ It is not advisable to use it. 分享 NewDocument.odt - - Share link - 分享链接 - - - + TextLabel 文本标签 - + Set &password 设置密码(&p) - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date 设置过期日期(&e) - + Set password 设置密码 - - &Mail link + + Link properties: - Copy &link - 复制链接(&l) + Show file listing + - + Allow editing 允许编辑 - + Anyone with the link has access to the file/folder - + 任何查看此链接的人都可以访问文件、文件夹 - + + P&assword protect 密码保护(&a) - + Password Protected 密码保护 - + The file can not be shared because it was shared without sharing permission. 未分配共享权限,无法共享文件。 - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password 公开分享需要密码 - + Please Set Password 请设置密码 - - - Could not open email client - 无法打开邮件客户端 - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - 分享链接(&s) - OCC::ShareUserGroupWidget @@ -2600,68 +2784,98 @@ It is not advisable to use it. 分享 NewDocument.odt - + Share with users or groups ... 分享给其他用户或组 ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' 没有 '%1' 相关结果 + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - 窗体 + - + TextLabel - 文本标签 + - + can edit - 可编辑 + - + can share - 可共享 + - + ... - ... + - + create - 创建 + - + change - 更改 + - + delete - 删除 + OCC::ShibbolethCredentials - + Login Error 登录错误 - + You must sign in as user %1 你必须以用户'%1'身份登录 @@ -2669,22 +2883,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - 认证 - + SSL Chipher Debug View 查看SSL加密调试信息 - + Reauthentication required 需要重新认证 - + Your session has expired. You need to re-login to continue to use the client. 您的会话已经过期。请重新登录。 @@ -2692,26 +2906,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud 使用 %1 共享 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>证书信息</h3> - + Common Name (CN): 常用名 (CN): - + Subject Alternative Names: 主体备用名称: @@ -2796,7 +3030,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. 此连接通过 %1 位的 %2 加密。 @@ -2813,7 +3047,7 @@ It is not advisable to use it. 证书信息: - + This connection is NOT secure as it is not encrypted. 此连接未经过加密。 @@ -2833,67 +3067,67 @@ It is not advisable to use it. 总是信任该证书 - + Untrusted Certificate 不被信任的证书 - + Cannot connect securely to <i>%1</i>: 无法安全连接到 <i>%1</i>: - + with Certificate %1 使用证书 %1 - + &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 组织:%1 - - + + Unit: %1 单位:%1 - - + + Country: %1 国家: %1 - + Fingerprint (MD5): <tt>%1</tt> MD5指纹: <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> SHA1指纹: <tt>%1</tt> - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 过期日期:%1 - + Issuer: %1 签发人:%1 @@ -2901,285 +3135,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSync同步无法载入日志文件。日志文件已损坏。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csync 的 %1 插件不能加载。<br/>请校验安装!</p> - + CSync got an error while processing internal trees. CSync 在处理内部文件树时出错。 - - CSync failed to reserve memory. - CSync 失败,内存不足。 - - - + CSync fatal parameter error. CSync 致命参数错误。 - + CSync processing step update failed. CSync 处理步骤更新失败。 - + CSync processing step reconcile failed. CSync 处理步骤调和失败。 - + CSync could not authenticate at the proxy. CSync 代理认证失败。 - + CSync failed to lookup proxy or server. CSync 无法查询代理或服务器。 - + CSync failed to authenticate at the %1 server. CSync 于 %1 服务器认证失败。 - + CSync failed to connect to the network. CSync 联网失败。 - + A network connection timeout happened. 网络连接超时。 - + A HTTP transmission error happened. HTTP 传输错误。 - + The mounted folder is temporarily not available on the server 该文件夹在服务器上不可用 - + An error occurred while opening a folder 打开目录失败 - + Error while reading folder. 读取目录时出错 - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. 已忽略隐藏的文件和文件夹。 - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync:%1 服务器空间已满。 - + CSync unspecified error. CSync 未定义错误。 - + Aborted by the user 用户撤销 - + CSync failed to access 访问 CSync 失败 - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Csync同步失败,请确定是否有本地同步目录的读写权 - + CSync failed due to unhandled permission denied. 出于未处理的权限拒绝,CSync 失败。 - + CSync tried to create a folder that already exists. CSync 尝试创建了已有的文件夹。 - + The service is temporarily unavailable 服务暂时不可用 - + Access is forbidden 访问被拒绝 - + An internal error number %1 occurred. 发生内部错误 %1 - - The item is not synced because of previous errors: %1 - 文件没有被同步因为之前的错误: %1 - - - + Symbolic links are not supported in syncing. 符号链接不被同步支持。 - + File is listed on the ignore list. 文件在忽略列表中。 - + File names ending with a period are not supported on this file system. - + 文件名结尾不可以为“.”。 - + File names containing the character '%1' are not supported on this file system. 此文件系统不支持包含字符 '%1' 的文件名。 - + The file name is a reserved name on this file system. - + 文件名为系统保留文件名。 - + Filename contains trailing spaces. 文件名尾部含有空格 - + Filename is too long. 文件名过长。 - + Stat failed. 状态失败。 - + Filename encoding is not valid 文件名编码无效 - + Invalid characters, please rename "%1" 无效的字符,请更改为 “%1” - - Unable to initialize a sync journal. - 无法初始化同步日志 - - - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source @@ -3195,7 +3444,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3203,17 +3452,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>版本 %1。详情请见 <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>ownCloud GmbH 版权所有</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 使用GNU通用公共许可证 (GPL) 2.0。<br/>%2 以及 %2 标识已由 %1 注册使用。</p> @@ -3221,17 +3470,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. 校验异常 - + The checksum header contained an unknown checksum type '%1' 校验头包含未知的校验类型 '%1' - + The downloaded file does not match the checksum, it will be resumed. 下载的文件校验失败,将会回退。 @@ -3239,207 +3488,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 请登录 - + Folder %1: %2 文件夹 %1: %2 - + No sync folders configured. 没有已配置的同步文件夹。 - + There are no sync folders configured. 没有已配置的同步文件夹。 - + Open in browser 在浏览器中打开 - - - + + + Log in... 登录 - - - + + + Log out 注销 - + Recent Changes 最近修改 - + Checking for changes in '%1' 检查 %1 的更改 - + Managed Folders: 管理的文件夹: - + Open folder '%1' 打开文件夹“%1” - + Open %1 in browser 在浏览器中打开%1 - + Unknown status 未知状态 - + Settings... 设置... - + Details... 细节... - + Help 帮助 - + Quit %1 退出 %1 - + Disconnected from %1 已从服务器断开 %1 - + Unsupported Server Version 不支持的服务器版本 - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. 账户 %1 的服务器运行着一个古老而不受支持的版本 %2。使用该客户端未支持的服务器版本未经测试并且可能存在潜在危险。继续操作需要自行承担风险。 - + Disconnected from accounts: 已断开账户: - + Account %1: %2 账户 %1: %2 - + Account synchronization is disabled 帐户同步被禁用 - + Unpause all folders 解除暂停所有文件夹 - + Pause all folders 暂停所有文件夹 - + Unpause all synchronization 解除暂停所有同步 - + Unpause synchronization 解除暂停同步 - + Pause all synchronization 暂停所有同步 - + Pause synchronization 暂停同步 - + Log out of all accounts 注销所有账户 - + Log in to all accounts... 登录所有账户 - + New account... - + 新账号…… - + Crash now Only shows in debug mode to allow testing the crash handler 发生了崩溃 - + No items synced recently 近期没有项目被同步 - + Syncing %1 of %2 (%3 left) 同步 %2 中的 %1 (剩余 %3) - + Syncing %1 of %2 - + 正在同步 %1,共 %2 - + Syncing %1 (%2 left) 同步 %1 (剩余 %2) - + Syncing %1 正在同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 更新 @@ -3447,9 +3696,9 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> - + <p>版本 %2,更多信息请访问<a href="%3">https://%4</a></p> 帮助信息请访问:<a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a><p><p> <small>By Klaas Freitag, Daniel Molkentin, Jan-Christoph Borchardt, Olivier Goffart, Markus Götz and others.</small></p><p>版权所有ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud 以及 ownCloud 标志是 ownCloud Inc. 的注册商标。 @@ -3488,7 +3737,7 @@ It is not advisable to use it. Ask for confirmation before synchroni&zing folders larger than - + 询问确认,若同步 (^z) 文件夹大于 @@ -3499,7 +3748,7 @@ It is not advisable to use it. Ask for confirmation before synchronizing e&xternal storages - + 在同步外部存储时,询问确认 (&x) @@ -3550,82 +3799,46 @@ It is not advisable to use it. 密码 (&P) + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form 窗体 - - Server &address: - 服务器地址 (&A): - - - - - TextLabel 文本标签 - - - Use &secure connection - 使用安全连接 (&S) - - - - CheckBox - 复选框 - - - - &Username: - 用户名 (&U): - - - - Enter the ownCloud username. - 输入 ownCloud 用户名。 - - - - &Password: - 密码 (&P): - - - - Enter the ownCloud password. - 输入ownCloud密码 - - - - Do not allow the local storage of the password. - 不允许本地存储密码。 - - - - &Do not store password on local machine - 不要在本地计算机上存储密码 (&D) - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - 输入您想要连接到的 ownCloud 网址 (不带 http 或 https)。 - Ser&ver Address - + 服务器地址 (&v) @@ -3665,7 +3878,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION QT_LAYOUT_DIRECTION @@ -3673,42 +3886,42 @@ It is not advisable to use it. QObject - + in the future 将来 - + %n day(s) ago %n 天前 - + %n hour(s) ago %n 小时前 - + now 现在 - + Less than a minute ago 刚刚 - + %n minute(s) ago %n 分钟前 - + Some time ago 之前 - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3717,57 +3930,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n 月 - + %n day(s) %n 天 - + %n hour(s) %n 小时 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 @@ -3788,102 +4001,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>从 Git 版本 <a href="%1">%2</a> 在 %3 上构建, %4 使用了 Qt %5, %6</small></p> - - - built with %1 - - progress - + Downloaded 已下载 - + Uploaded 已上传 - + Server version downloaded, copied changed local file into conflict file 服务器版本已下载,复制并更改本地冲突文件 - + Deleted 已删除 - + Moved to %1 已移动到 %1 - + Ignored 已忽略 - + Filesystem access error 文件系统访问错误 - + Error 错误 - + Updated local metadata 已更新本地元数据 - - + + Unknown 未知 - + downloading 正在下载 - + uploading 正在上传 - + deleting 删除 - + moving 移动 - + ignoring 忽略 + - error 错误 - + updating local metadata 正在更新本地元数据 @@ -3891,54 +4099,77 @@ It is not advisable to use it. theme - + Status undefined 状态未定义 - + Waiting to start sync 等待同步启动 - + Sync is running 同步运行中 - + Sync Success 同步成功 - + Sync Success, some files were ignored. 同步成功,部分文件被忽略。 - + Sync Error 同步错误 - + Setup Error 关闭 - + Preparing to sync 正在准备同步 - + Aborting... 正在撤销... - + Sync is paused 同步被暂停 + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 9513b38fb..e9fb5b5cc 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 目的地的檔案大小或修改時間產生異常 @@ -81,6 +81,24 @@ 文字標籤 + + OCC::AbstractNetworkJob + + + Connection timed out + + + + + Unknown error: network reply was deleted + + + + + Server replied "%1 %2" to "%3 %4" + + + OCC::AccountSettings @@ -125,8 +143,8 @@ - - + + Cancel 取消 @@ -136,188 +154,204 @@ 以 <user> 的身分連接 <server> - + No account configured. 沒有設置帳號。 - + Add new 新增 - + Remove 移除 - + Account 帳號 - + Choose what to sync 選擇要同步的項目 - + Force sync now - + Restart sync - + Remove folder sync connection 移除資料夾同步連線 - + Folder creation failed 資料夾建立失敗 - + <p>Could not create local folder <i>%1</i>. <p>無法建立本地資料夾 <i>%1</i> - + Confirm Folder Sync Connection Removal 確認移除資料夾同步連線 - + Remove Folder Sync Connection 移除資料夾同步連線 - + Sync Running 正在同步中 - + The syncing operation is running.<br/>Do you want to terminate it? 正在同步中<br/>你真的想要中斷? - + %1 in use %1 正在使用 - + %1 as <i>%2</i> %1 如 <i>%2<i> - + The server version %1 is old and unsupported! Proceed at your own risk. 伺服器版本%1過舊,已不支援。繼續的風險請自負。 - + Connected to %1. 已連線到 %1 - + Server %1 is temporarily unavailable. 伺服器 %1 暫時無法使用。 - + + Server %1 is currently in maintenance mode. + + + + Signed out from %1. 從 %1 登出 - + + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. + + + + + Connecting to %1... + + + + No connection to %1 at %2. 沒有從 %2 連線到 %1 - + Log in 登入 - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal 確認移除帳號 - + <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> <p>您確定要中斷此帳號 <i>%1</i> 的連線?</p><p><b>注意:</b>此操作 <b>不會</b> 刪除任何的檔案。</p> - + Remove connection 移除連線 - + + Open folder 開啟資料夾 - - + + Log out 登出 - + Resume sync 繼續同步 - + Pause sync 暫停同步 - + <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> <p>您確定要停止同步資料夾 <i>%1</i>?</p><p><b>注意:</b> 此操作 <b>不會</b> 刪除任何檔案</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) 中的 %2 正在使用, 有些資料夾,包括網路掛載或分享資料夾,可能有不同的限制。 - + %1 of %2 in use 已使用 %2 中的 %1% - + Currently there is no storage usage information available. 目前無法查詢儲存空間使用資訊。 - + No %1 connection configured. 沒有 %1 連線設置。 @@ -325,37 +359,47 @@ OCC::AccountState - + Signed out 已登出 - + Disconnected 已經離線 - + Connected 已連線 - + Service unavailable 服務無法使用 - + + Maintenance mode + + + + Network error 網路異常 - + Configuration error 設定錯誤 - + + Asking Credentials + + + + Unknown account state 未知的帳號狀態 @@ -376,59 +420,44 @@ OCC::ActivitySettings - - + + Server Activity 伺服器活動 - + Sync Protocol 同步協定 - - List of ignored or erroneous files - 被忽略或者錯誤的檔案列表 - - - - Copy - 複製 - - - - Copy the activity list to the clipboard. - 複製活動列表到剪貼簿。 - - - + Not Synced 尚未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步(%1) - + The server activity list has been copied to the clipboard. 伺服器活動列表已經被複製到剪貼簿。 - + The sync activity list has been copied to the clipboard. 同步活動列表已經被複製到剪貼簿。 - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard 複製至剪貼簿中 @@ -448,47 +477,47 @@ 文字標籤 - + Server Activities 伺服器活動 - + Copy 複製 - + Copy the activity list to the clipboard. 複製活動列表到剪貼簿。 - + Action Required: Notifications 需要動作: 通知 - + <br/>Account %1 does not have activities enabled. <br/> 帳號 %1 尚未啟用紀錄行為功能 - + You received %n new notification(s) from %2. 您收到 %n 新的通知從 %2 - + You received %n new notification(s) from %1 and %2. 您收到 %n 新的通知從 %1 跟 %2 - + You received new notifications from %1, %2 and other accounts. 您收到 %n 新的通知從 %1, %2 跟其他帳戶 - + %1 Notifications - Action Required %1 通知 - 需要動作 @@ -534,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -575,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -583,48 +612,40 @@ OCC::ConnectionValidator - + No ownCloud account configured 沒有設置 ownCloud 帳號 - + The configured server for this client is too old 設置的伺服器對這個客戶端來說太舊了 - + Please update to the latest server and restart the client. 請將伺服器端更新到最新版並重新啟動客戶端 - + Authentication error: Either username or password are wrong. 驗證錯誤︰使用者名稱或是密碼錯誤 - + timeout 逾時 - + The provided credentials are not correct 提供的憑證不正確 - - OCC::DeleteJob - - - Connection timed out - 連線逾時 - - OCC::DiscoveryMainThread - + Aborted by the user 使用者中斷 @@ -632,123 +653,123 @@ OCC::Folder - + Local folder %1 does not exist. 本地資料夾 %1 不存在 - + %1 should be a folder but is not. 資料夾不存在, %1 必須是資料夾 - + %1 is not readable. %1 是不可讀的 - + %1 has been removed. %1 names a file. %1 已被移除。 - + %1 has been downloaded. %1 names a file. %1 已被下載。 - + %1 has been updated. %1 names a file. %1 已被更新。 - + %1 has been renamed to %2. %1 and %2 name files. %1 已被重新命名為 %2。 - + %1 has been moved to %2. %1 已被搬移至 %2。 - + %1 and %n other file(s) have been removed. %1 跟 %n 其他檔案已經被刪除 - + %1 and %n other file(s) have been downloaded. %1 跟 %n 其他檔案已經被下載 - + %1 and %n other file(s) have been updated. %1 跟 %n 其他檔案已經被修改 - + %1 has been renamed to %2 and %n other file(s) have been renamed. - + %1 has been moved to %2 and %n other file(s) have been moved. - + %1 has and %n other file(s) have sync conflicts. - + %1 has a sync conflict. Please check the conflict file! - + %1 and %n other file(s) could not be synced due to errors. See the log for details. - + %1 could not be synced due to an error. See the log for details. %1 因為錯誤無法被同步。請從紀錄檔觀看細節。 - + Sync Activity 同步活動 - + Could not read system exclude file 無法讀取系統的排除檔案 - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -756,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? 移除所有檔案? - + Remove all files 移除所有檔案 - + Keep files 保留檔案 - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -803,112 +824,112 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderMan - + Could not reset folder state 無法重置資料夾狀態 - + An old sync journal '%1' was found, but could not be removed. Please make sure that no application is currently using it. 發現較舊的同步處理日誌'%1',但無法移除。請確認沒有應用程式正在使用它。 - + (backup) (備份) - + (backup %1) (備份 %1) - + Undefined State. 未知狀態 - + Waiting to start syncing. 正在等待同步開始 - + Preparing for sync. 正在準備同步。 - + Sync is running. 同步執行中 - + Last Sync was successful. 最後一次同步成功 - + Last Sync was successful, but with warnings on individual files. 最新一次的同步已經成功,但是有部份檔案有問題 - + Setup Error. 安裝失敗 - + User Abort. 使用者中斷。 - + Sync is paused. 同步已暫停 - + %1 (Sync is paused) %1 (同步暫停) - + No valid folder selected! 沒有選擇有效的資料夾 - + The selected path is not a folder! 所選的路徑並非資料夾! - + You have no permission to write to the selected folder! 您沒有權限來寫入被選取的資料夾! - + The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + There is already a sync from the server to this local folder. Please pick another local folder! - + The local folder %1 already contains a folder used in a folder sync connection. Please pick another one! 本地資料夾 %1 裡已經有被資料夾同步功能使用的資料夾,請選擇其他資料夾! - + The local folder %1 is already contained in a folder used in a folder sync connection. Please pick another one! 本地資料夾 %1 是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! - + 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! 本地資料夾 %1 是一個捷徑,此捷徑的目標是被包含在一個已經被資料夾同步功能使用的資料夾,請選擇其他資料夾! @@ -916,17 +937,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusDelegate - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Synchronizing with local folder - + File 檔案 @@ -934,134 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 您必須連上伺服器才能新增資料夾 - + Click this button to add a folder to synchronize. 點擊此按鈕來新增同步資料夾 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 從伺服器端同步資料夾清單時發生錯誤。 - + Signed out 已登出 - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. 新增資料夾失敗,您已經同步您擁有的所有檔案,如果您想要同步多個資料夾,請移除當前設定的根目錄資料夾。 - + Fetching folder list from server... 從伺服器抓取資料夾清單中... - + + There are unresolved conflicts. Click for details. + + + + Checking for changes in '%1' 檢查 '%1' 的變動 - + + Reconciling changes + + + + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同步 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下載 %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上傳 %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 的 %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 的 %2, 檔案 %3 的 %4 - + file %1 of %2 檔案 %1 的 %2 - + Waiting... 等待中... - + Waiting for %n other folder(s)... 正在等候 %n 的資料夾(可能不只一個) - + Preparing to sync... 正在準備同步... @@ -1069,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Add Sync Connection 新增同步連線 @@ -1087,7 +1118,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an 請選擇要同步的本地資料夾 - + Enter the path to the local folder. 請輸入本地資料夾的路徑 @@ -1110,42 +1141,42 @@ Continuing the sync as normal will cause all your files to be overwritten by an 請輸入欲創建在 '%1' 底下的新資料夾名稱: - + Folder was successfully created on %1. 資料夾成功建立在%1 - + Authentication failed accessing %1 存取 %1 認証失敗 - + Failed to create the folder on %1. Please check manually. 在 %1 建立資料夾失敗,請手動檢查 - + Failed to list a folder. Error: %1 取得資料夾清單失敗,錯誤: %1 - + Choose this to sync the entire account 請選擇這個功能用來同步整個帳號 - + This folder is already being synced. 這個資料夾已經被同步了。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 您已經同步了 <i>%1</i>, 這個資料夾是 <i>%2</i> 的母資料夾。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. 您已經同步了所有的檔案。同步另一個資料夾的功能是<b>不支援</b> 的。如果您想要同步多個資料夾,請移除目前設定的根目錄資料夾。 @@ -1166,22 +1197,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::GETFileJob - + No E-Tag received from server, check Proxy/Gateway 沒有收到來自伺服器的 E-Tag,請檢查代理伺服器或網路閘道 - + We received a different E-Tag for resuming. Retrying next time. 在復原時收到了不同的 E-Tag,將在下一次重新嘗試取得 - + Server returned wrong content-range 伺服器回應錯誤的內容長度 - + Connection Timeout 連線逾時 @@ -1204,23 +1235,23 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Advanced 進階 - + Ask for confirmation before synchronizing folders larger than - + MB Trailing part of "Ask confirmation before syncing folder larger than" MB - + Ask for confirmation before synchronizing external storages @@ -1240,28 +1271,28 @@ Continuing the sync as normal will cause all your files to be overwritten by an 使用&單色圖示 - + Edit &Ignored Files 編輯&被忽略的檔案 - + S&how crash reporter &顯示意外回報器 - - + + About 關於 - + Updates 更新 - + &Restart && Update 重新啟動並更新 (&R) @@ -1269,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' 從授權碼讀取資料時失敗,錯誤: '%1' - + Enter Password 輸入密碼 - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1366,55 +1397,125 @@ Items where deletion is allowed will be deleted if they prevent a directory from 這個項目是由系統提供在 '%1' 且不能在這個頁面被修改 + + OCC::IssuesWidget + + + Form + + + + + List of issues + + + + + Account + + + + + + <no filter> + + + + + + Folder + + + + + Show warnings + + + + + Show ignored files + + + + + Copy the issues list to the clipboard. + + + + + Copy + + + + + Time + + + + + File + + + + + Issue + + + OCC::LogBrowser - + Log Output 記錄輸出 - + &Search: &搜尋: - + &Find 尋找 (&F): - + + &Capture debug messages + + + + Clear 清除 - + Clear the log display. 清除所顯示的記錄 - + S&ave 儲存 (&A) - + Save the log file to a file on disk for debugging. 將記錄檔儲存到硬碟用於除錯 - + Save log file 儲存記錄檔 - + Error 錯誤 - + Could not write to log file %1 無法寫入記錄檔 %1 @@ -1422,24 +1523,16 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error 錯誤 - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>檔案 '%1'<br/>無法開啟與寫入<br/><br/>記錄 <b>無法</b> 被儲存</nobr> - - OCC::MoveJob - - - Connection timed out - 連線逾時 - - OCC::NSISUpdater @@ -1551,27 +1644,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from 自動限制 - + Hostname of proxy server 代理伺服器主機名稱 - + Username for proxy server 代理伺服器使用者名稱 - + Password for proxy server 代理伺服器密碼 - + HTTP(S) proxy HTTP(S) 代理伺服器 - + SOCKS5 proxy SOCKS5 代理伺服器 @@ -1584,79 +1677,112 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NotificationWidget - + Created at %1 - + Closing in a few seconds... - + %1 request failed at %2 The second parameter is a time, such as 'failed at 09:58pm' - + '%1' selected at %2 The second parameter is a time, such as 'selected at 09:58pm' + + OCC::OAuth + + + Error returned from the server: <em>%1</em> + + + + + There was an error accessing the 'token' endpoint: <br><em>%1</em> + + + + + Could not parse the JSON returned from the server: <br><em>%1</em> + + + + + The reply from the server did not contain all expected fields + + + + + <h1>Login Error</h1><p>%1</p> + + + + + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> + + + OCC::OCUpdater - + New %1 Update Ready 新 %1 更新已經就緒 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. 一個新的 %1 更新已經安裝完成。更新也許會詢問 要求給予權限在安裝的過程中。 - + Downloading version %1. Please wait... 正在下載版本 %1,請稍候... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. 無法下載更新檔,請點選連結 <a href='%1'>按這裡</a> 手動下載更新檔。 - + Could not check for new updates. 無法檢查是否有新更新檔。 - + %1 version %2 available. Restart application to start the update. %1 的版本 %2 已經可以安裝,請重新啟動應用程式開始安裝更新。 - + New %1 version %2 available. Please use the system's update tool to install it. 新 %1 版本 %2 已經可以安裝了, 請使用系統的安裝工具來安裝。 - + Checking update server... 檢查更新伺服器中... - + Update status is unknown: Did not check for new updates. 無法取得更新狀態: 無法檢查是否有新更新檔。 - + No updates available. Your installation is at the latest version. 目前沒有可用的更新檔,您安裝的版本是最新的了。 @@ -1669,43 +1795,43 @@ for additional privileges during the process. OCC::OwncloudAdvancedSetupPage - + Connect to %1 連線到 %1 - + Setup local folder options 設定本地資料夾選項 - + Connect... 連線中... - + %1 folder '%2' is synced to local folder '%3' %1 資料夾 '%2' 與本地資料夾 '%3' 同步 - + Sync the folder '%1' 同步資料夾 '%1' - + <p><small><strong>Warning:</strong> The local folder is not empty. Pick a resolution!</small></p> <p><small><strong>警告:</strong> 本地端的資料夾不是空的. 請選擇解決方案!</small></p> - + Local Sync Folder 本地同步資料夾 - - + + (%1) (%1) @@ -1738,7 +1864,7 @@ for additional privileges during the process. 設定客戶端 TLS 憑證 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>無法連線到安全伺服器 <em>%1</em>,您想要如何處理?</p></body></html> @@ -1746,47 +1872,60 @@ for additional privileges during the process. OCC::OwncloudHttpCredsPage - + &Email - + Connect to %1 連線到 %1 - + Enter user credentials 請輸入使用者憑證 + + OCC::OwncloudOAuthCredsPage + + + Connect to %1 + + + + + Login in your browser + + + OCC::OwncloudSetupPage - + Connect to %1 連線到 %1 - + Setup %1 server 設定 %1 伺服器 - + This url is NOT secure as it is not encrypted. It is not advisable to use it. 這個url沒有加密,是不安全的, 不建議您使用此url。 - + This url is secure. You can use it. 這個 URL 是安全的,您可以使用它。 - + &Next > 下一步 (&N) > @@ -1794,22 +1933,22 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">成功連線到 %1: %2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 從 %2 連線到 %1 失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. 從 %2 嘗試連線到 %1 逾時。 - + Trying to connect to %1 at %2... 嘗試連線到%1從%2 @@ -1829,109 +1968,109 @@ It is not advisable to use it. 從伺服器存取被拒絕。為了正確驗證您的存取資訊 <a href="%1">請點選這裡</a> 透過瀏覽器來存取服務 - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步資料夾%1已存在, 將其設置為同步<br/><br/> - + Creating local sync folder %1... 建立本地同步資料夾 %1... - + ok ok - + failed. 失敗 - + Could not create local folder %1 無法建立本地資料夾 %1 - + No remote folder specified! 沒有指定遠端資料夾! - + Error: %1 錯誤: %1 - + creating folder on ownCloud: %1 在 ownCloud 建立資料夾: %1 - + Remote folder %1 created successfully. 遠端資料夾%1建立成功! - + The remote folder %1 already exists. Connecting it for syncing. 遠端資料夾%1已存在,連線同步中 - + The folder creation resulted in HTTP error code %1 在HTTP建立資料夾失敗, error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 由於帳號或密碼錯誤,遠端資料夾建立失敗<br/>請檢查您的帳號密碼。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">遠端資料夾建立失敗,也許是因為所提供的帳號密碼錯誤</font><br/>請重新檢查您的帳號密碼</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 建立遠端資料夾%1發生錯誤<tt>%2</tt>失敗 - + A sync connection from %1 to remote directory %2 was set up. 從%1到遠端資料夾%2的連線已建立 - + Successfully connected to %1! 成功連接到 %1 ! - + Connection to %1 could not be established. Please check again. 無法建立連線%1, 請重新檢查 - + Folder rename failed 重新命名資料夾失敗 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 無法移除與備份此資料夾,因為有其他的程式正在使用其中的資料夾或者檔案。請關閉使用中的資料夾或檔案並重試或者取消設定。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步資料夾 %1 建立成功!</b></font> @@ -1939,12 +2078,12 @@ It is not advisable to use it. OCC::OwncloudWizard - + %1 Connection Wizard %1連線精靈 - + Skip folders configuration 忽略資料夾設定資訊 @@ -1952,33 +2091,25 @@ It is not advisable to use it. OCC::OwncloudWizardResultPage - + Everything set up! 一切都準備就緒! - + Open Local Folder 打開本地資料夾 - + Open %1 in Browser 瀏覽器中開啟 %1 - - OCC::PUTFileJob - - - Connection Timeout - 連線逾時 - - OCC::PollJob - + Invalid JSON reply from the poll URL 不合法的JSON資訊從URL中回傳 @@ -1986,7 +2117,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -1994,47 +2125,47 @@ It is not advisable to use it. OCC::PropagateDownloadFile - + File %1 can not be downloaded because of a local file name clash! 檔案 %1 無法被下載,因為本地端的檔案名稱已毀損! - - The download would reduce free disk space below %1 - 這次下載將會減少硬碟空間: %1 + + The download would reduce free local disk space below the limit + - + Free space on disk is less than %1 可用的硬碟空間已經少於 %1 - + File was deleted from server 檔案已從伺服器被刪除 - + The file could not be downloaded completely. 檔案下載無法完成。 - + The downloaded file is empty despite the server announced it should have been %1. - + File %1 cannot be saved because of a local file name clash! 檔案 %1 無法存檔,因為本地端的檔案名稱已毀損! - + File has changed since discovery 尋找的過程中檔案已經被更改 - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2042,17 +2173,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 重新儲存失敗 %1 - - Continue blacklisting: - 持續的黑名單列表: - - - + A file or folder was removed from a read only share, but restoring failed: %1 檔案或目錄已經從只供讀取的分享中被移除,但是復原失敗: %1 @@ -2060,22 +2186,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 無法刪除檔案 %1,錯誤: %2 - + Attention, possible case sensitivity clash with %1 注意! %1 的名稱可能有大小寫衝突。 - + could not create folder %1 無法建立資料夾 %1 - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2083,17 +2209,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; 移除時發生錯誤 '%1': %2; - + Could not remove folder '%1' 無法移除資料夾 '%1' - + Could not remove %1 because of a local file name clash 無法刪除 %1 ,因為本地端的檔案名稱已毀損! @@ -2101,13 +2227,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash 檔案 %1 無法更名成 %2,因為本地端的檔案名稱已毀損 - - + + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2115,12 +2241,12 @@ It is not advisable to use it. OCC::PropagateRemoteDelete - + The file has been removed from a read only share. It was restored. 已復原從只供讀取的分享中被移除檔案 - + Wrong HTTP code returned by server. Expected 204, but received "%1 %2". 從伺服器端回傳錯誤的 HTTP 代碼, 預期是 204, 但是接收到的是 "%1 %2". @@ -2128,12 +2254,12 @@ It is not advisable to use it. OCC::PropagateRemoteMkdir - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 從伺服器端回傳錯誤的 HTTP 代碼, 預期是 201, 但是接收到的是 "%1 %2". - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2141,28 +2267,28 @@ It is not advisable to use it. OCC::PropagateRemoteMove - + This folder must not be renamed. It is renamed back to its original name. 這個資料夾不應該被更名,他已經被改回原本的名稱了。 - + This folder must not be renamed. Please name it back to Shared. 這個資料夾已經被分享,不應該被更名,請改回原本的名稱。 - + The file was renamed but is part of a read only share. The original file was restored. 檔案更名完成,但這檔案是只供讀取的分享,原始檔案已被還原 - + Wrong HTTP code returned by server. Expected 201, but received "%1 %2". 從伺服器端回傳錯誤的 HTTP 代碼, 預期是 201, 但是接收到的是 "%1 %2". - - + + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2170,27 +2296,32 @@ It is not advisable to use it. OCC::PropagateUploadFileCommon - + File %1 cannot be uploaded because another file with the same name, differing only in case, exists - + File Removed 檔案已移除 - + Local file changed during syncing. It will be resumed. 本地端的檔案在同步的過程中被更改,此檔案將會被還原。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + + Upload of %1 exceeds the quota for the folder + + + + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2198,32 +2329,32 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. HTTP連線工作被強制中斷,Qt版本< 5.4.2 - + The local file was removed during sync. 本地端的檔案在同步過程中被刪除。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2231,32 +2362,32 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - + Forcing job abort on HTTP connection reset with Qt < 5.4.2. HTTP連線工作被強制中斷,Qt版本< 5.4.2 - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 檔案已經在本機上修改,但這檔案是只供讀取的分享,您的修改已還原並保存在衝突檔案中。 - + Poll URL missing 缺少輪詢的超連結 - + The local file was removed during sync. 本地端的檔案在同步過程中被刪除。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + The server did not acknowledge the last chunk. (No e-tag was present) 伺服器不承認檔案的最後一個分割檔。(e-tag不存在) @@ -2274,42 +2405,42 @@ It is not advisable to use it. 文字標籤 - + Time 時間 - + File 檔案 - + Folder 資料夾 - + Action 動作 - + Size 大小 - + Local sync protocol 本機同步協定 - + Copy 複製 - + Copy the activity list to the clipboard. 複製活動列表到剪貼簿。 @@ -2350,7 +2481,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 選擇要同步的項目 @@ -2358,33 +2489,33 @@ It is not advisable to use it. OCC::SelectiveSyncWidget - + Loading ... 載入中… - + Deselect remote folders you do not wish to synchronize. - + Name 名稱 - + Size 大小 - - + + No subfolders currently on the server. 目前沒有子資料夾在伺服器上。 - + An error occurred while loading the list of sub folders. @@ -2397,22 +2528,22 @@ It is not advisable to use it. 設定 - + Activity 活動 - + General 一般 - + Network 網路 - + Account 帳號 @@ -2420,27 +2551,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity 活動 - + General 一般 - + Network 網路 - + Account 帳號 @@ -2468,35 +2599,45 @@ It is not advisable to use it. ownCloud 路徑: - + %1 Sharing %1 分享 - + %1 %1 - + Folder: %2 資料夾: %2 - + The server does not allow sharing 伺服器不允許共享 - + Retrieving maximum possible sharing permissions from server... - + The file can not be shared because it was shared without sharing permission. 這個檔案無法被分享,並沒有分享此檔案的權限。 + + + Users and Groups + + + + + Public Links + + OCC::ShareLinkWidget @@ -2506,92 +2647,126 @@ It is not advisable to use it. 分享 新文件.odt - - Share link - 分享連結 - - - + TextLabel 文字標籤 - + Set &password 設定密碼 - + + Enter a name to create a new public link... + + + + + &Create new + + + + Set &expiration date 設定到期日 - + Set password 設定密碼 - - &Mail link + + Link properties: - Copy &link - 複製連結 + Show file listing + - + Allow editing 允許編輯 - + Anyone with the link has access to the file/folder - + + P&assword protect &密碼保護 - + Password Protected 密碼保護 - + The file can not be shared because it was shared without sharing permission. 這個檔案無法被分享,並沒有分享此檔案的權限。 - - + + %1 link + + + + + Link shares have been disabled + + + + + Create public link share + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Copy link to clipboard (direct download) + + + + + Send link by email + + + + + Send link by email (direct download) + + + + + Public link + + + + Public sh&aring requires a password 公開&共享需要密碼 - + Please Set Password 請設定密碼 - - - Could not open email client - - - - - There was an error when launching the email client to create a new message. Maybe no default email client is configured? - - - - - - &Share link - &分享連結 - OCC::ShareUserGroupWidget @@ -2601,68 +2776,98 @@ It is not advisable to use it. 分享 新文件.odt - + Share with users or groups ... 與用戶或群組分享 ... - + + <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> + + + + + The item is not shared with any users or groups + + + + + Open link in browser + + + + + Copy link to clipboard + + + + + Send link by email + + + + No results for '%1' '%1' 沒有結果 + + + I shared something with you + + - OCC::ShareWidget + OCC::ShareUserLine - + Form - 表單 + - + TextLabel - 文字標籤 + - + can edit - 可編輯 + - + can share - 可分享 + - + ... - ... + - + create - 建立 + - + change - 更動 + - + delete - 刪除 + OCC::ShibbolethCredentials - + Login Error 登入錯誤 - + You must sign in as user %1 您必須以 %1 使用者登入 @@ -2670,22 +2875,22 @@ It is not advisable to use it. OCC::ShibbolethWebView - + %1 - Authenticate %1 - 驗證 - + SSL Chipher Debug View - + Reauthentication required 要求重新驗證 - + Your session has expired. You need to re-login to continue to use the client. 您的認証已經過期了,您必須重新登入才能繼續使用。 @@ -2693,26 +2898,46 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud 與 %1 分享 + + + I shared something with you + + + + + Share... + + + + + Copy private link to clipboard + + + + + Send private link by email... + + OCC::SslButton - + <h3>Certificate Details</h3> <h3>憑證細節</h3> - + Common Name (CN): (通用名): - + Subject Alternative Names: 主題備用名稱: @@ -2797,7 +3022,7 @@ It is not advisable to use it. %1 - + This connection is encrypted using %1 bit %2. 這個連線已經使用 %1 bit %2 加密。 @@ -2814,7 +3039,7 @@ It is not advisable to use it. 憑證資訊: - + This connection is NOT secure as it is not encrypted. 這個連線沒有經過加密,是不安全的。 @@ -2834,67 +3059,67 @@ It is not advisable to use it. 信任此憑證 - + Untrusted Certificate 不信任的憑證 - + Cannot connect securely to <i>%1</i>: 無法安全的連線到 <i>%1</i>: - + with Certificate %1 與憑證 %1 - + &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 組織:%1 - - + + Unit: %1 單位:%1 - - + + Country: %1 國家:%1 - + Fingerprint (MD5): <tt>%1</tt> 指紋 (MD5): &lt;tt&gt;%1&lt;/tt&gt; - + Fingerprint (SHA1): <tt>%1</tt> 指紋 (SHA1): &lt;tt&gt;%1&lt;/tt&gt; - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 到期日: %1 - + Issuer: %1 簽發者: %1 @@ -2902,285 +3127,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSync 讀取歷程檔案失敗,歷程檔案已經損毀。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>用於csync的套件%1</p> - + CSync got an error while processing internal trees. CSync 處理內部資料樹時發生錯誤 - - CSync failed to reserve memory. - CSync 無法取得記憶體空間。 - - - + CSync fatal parameter error. CSync 參數錯誤。 - + CSync processing step update failed. CSync 處理步驟 "update" 失敗。 - + CSync processing step reconcile failed. CSync 處理步驟 "reconcile" 失敗。 - + CSync could not authenticate at the proxy. CSync 無法在代理伺服器認證。 - + CSync failed to lookup proxy or server. CSync 查詢代理伺服器或伺服器失敗。 - + CSync failed to authenticate at the %1 server. CSync 於伺服器 %1 認證失敗。 - + CSync failed to connect to the network. CSync 無法連接到網路。 - + A network connection timeout happened. 網路連線逾時。 - + A HTTP transmission error happened. HTTP 傳輸錯誤。 - + The mounted folder is temporarily not available on the server 掛載的資料夾暫時無法在伺服器上使用 - + An error occurred while opening a folder 開啟資料夾時發生錯誤。 - + Error while reading folder. 讀取資料夾時發生錯誤。 - + + %1 (skipped due to earlier error, trying again in %2) + + + + File/Folder is ignored because it's hidden. - + + Folder hierarchy is too deep + + + + + Conflict: Server version downloaded, local copy renamed and not uploaded. + + + + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + + Unable to open or create the local sync database. Make sure you have write access in the sync folder. + + + + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + + Disk space is low: Downloads that would reduce free space below %1 were skipped. + + + + + There is insufficient space available on the server for some uploads. + + + + CSync: No space on %1 server available. CSync:伺服器 %1 沒有可用空間。 - + CSync unspecified error. CSync 未知的錯誤。 - + Aborted by the user 使用者中斷 - + CSync failed to access CSync 存取失敗。 - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync 讀取或創建歷程檔案時失敗,請確定您在此本地資料夾有讀寫的權限。 - + CSync failed due to unhandled permission denied. CSync 失敗,由於權限未處理被拒。 - + CSync tried to create a folder that already exists. CSync 試圖建立一個已經存在的資料夾。 - + The service is temporarily unavailable 這個服務暫時無法使用。 - + Access is forbidden 存取被拒 - + An internal error number %1 occurred. 發生內部錯誤,錯誤代碼 %1。 - - The item is not synced because of previous errors: %1 - 因為先前的錯誤: %1 物件沒有同步成功 - - - + Symbolic links are not supported in syncing. 同步不支援捷徑連結 - + File is listed on the ignore list. 檔案被列在忽略清單。 - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. 檔案名稱太長了。 - + Stat failed. 狀態失敗。 - + Filename encoding is not valid 檔案名稱編碼是無效的 - + Invalid characters, please rename "%1" 無效的字元,請您重新命名 "%1" - - Unable to initialize a sync journal. - 同步處理日誌無法初始化 - - - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 @@ -3196,7 +3436,7 @@ It is not advisable to use it. OCC::Systray - + %1: %2 %1: %2 @@ -3204,17 +3444,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>版本 %1. 如欲得知更多資訊,請到此拜訪 <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3222,17 +3462,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. 校驗碼異常。 - + The checksum header contained an unknown checksum type '%1' 校正資料含有未知的型態 '%1' - + The downloaded file does not match the checksum, it will be resumed. 下載的檔案驗證失敗,將會被還原 @@ -3240,207 +3480,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 請登入 - + Folder %1: %2 資料夾 %1: %2 - + No sync folders configured. 尚未設置同步資料夾。 - + There are no sync folders configured. 尚未設置同步資料夾。 - + Open in browser 用瀏覽器開啟 - - - + + + Log in... 登入... - - - + + + Log out 登出 - + Recent Changes 最近的更動 - + Checking for changes in '%1' 檢查 '%1' 的變動 - + Managed Folders: 管理的資料夾: - + Open folder '%1' 開啟 %1 資料夾 - + Open %1 in browser 瀏覽器中開啟 %1 - + Unknown status 未知狀態 - + Settings... 設定… - + Details... 細節… - + Help 說明 - + Quit %1 離開 %1 - + Disconnected from %1 從 %1 斷線 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: 已從帳號離線: - + Account %1: %2 帳號 %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts 登出所有的帳戶 - + Log in to all accounts... 登入所有的帳戶 - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler 發生非預期結果 - + No items synced recently 最近沒有項目被同步 - + Syncing %1 of %2 (%3 left) 同步中 %1 的 %2 (剩餘 %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) 同步中 %1 (剩餘 %2) - + Syncing %1 同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新的 @@ -3448,7 +3688,7 @@ It is not advisable to use it. OCC::ownCloudTheme - + <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> @@ -3551,78 +3791,42 @@ It is not advisable to use it. 密碼 (&P) + + OwncloudOAuthCredsPage + + + Form + + + + + Please switch to your browser to proceed. + + + + + An error occured while connecting. Please try again. + + + + + Re-open Browser + + + OwncloudSetupPage - Form 表單 - - Server &address: - 伺服器位址 (&A): - - - - - TextLabel 文字標籤 - - - Use &secure connection - 使用安全連線 (&S) - - - - CheckBox - 核取方塊 - - - - &Username: - 使用者名稱 (&U): - - - - Enter the ownCloud username. - 輸入ownCloud使用者名稱 - - - - &Password: - 密碼 (&P): - - - - Enter the ownCloud password. - 輸入ownCloud使用者密碼 - - - - Do not allow the local storage of the password. - 不儲存密碼在本地機器上 - - - - &Do not store password on local machine - 不儲存密碼在本地機器上 (&D) - - - - https:// - https:// - - - - Enter the url of the ownCloud you want to connect to (without http or https). - 輸入欲連線的ownCloud的url(不需要輸入http或http) - Ser&ver Address @@ -3666,7 +3870,7 @@ It is not advisable to use it. QApplication - + QT_LAYOUT_DIRECTION @@ -3674,42 +3878,42 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago 不到一分鐘前 - + %n minute(s) ago - + Some time ago 前一段時間 - + %1: %2 this displays an error string (%2) for a file %1 %1: %2 @@ -3718,57 +3922,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3789,102 +3993,97 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>根據Git版本號<a href="%1">%2</a>在 %3建置, %4 使用了Qt %5,%6</small></p> - - - built with %1 - - progress - + Downloaded 已下載 - + Uploaded 已上傳 - + Server version downloaded, copied changed local file into conflict file - + Deleted 已刪除 - + Moved to %1 搬移到 %1 - + Ignored 已忽略 - + Filesystem access error 存取檔案系統錯誤 - + Error 錯誤 - + Updated local metadata - - + + Unknown 未知 - + downloading 下載中 - + uploading 上傳中 - + deleting 刪除中 - + moving 搬移中 - + ignoring 忽略中 + - error 錯誤 - + updating local metadata @@ -3892,54 +4091,77 @@ It is not advisable to use it. theme - + Status undefined 未定義的狀態 - + Waiting to start sync 等待開始同步 - + Sync is running 同步中 - + Sync Success 同步完成 - + Sync Success, some files were ignored. 同步成功,部份檔案被忽略 - + Sync Error 同步失敗 - + Setup Error 安裝錯誤 - + Preparing to sync 正在準備同步。 - + Aborting... 中斷中… - + Sync is paused 同步已暫停 + + utility + + + Could not open browser + + + + + There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? + + + + + Could not open email client + + + + + There was an error when launching the email client to create a new message. Maybe no default email client is configured? + + + \ No newline at end of file From de8ab35cb3587a1c216d82f4ece0c35aa860f450 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 11 Sep 2017 18:53:51 +0200 Subject: [PATCH 030/166] Add clean_tarball.sh #6005 --- admin/linux/clean_tarball.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 admin/linux/clean_tarball.sh diff --git a/admin/linux/clean_tarball.sh b/admin/linux/clean_tarball.sh new file mode 100755 index 000000000..9c969543c --- /dev/null +++ b/admin/linux/clean_tarball.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +rm -vrf admin/ +rm -vrf src/3rdparty/sqlite3 +rm -vrf binary/ +rm -vrf src/3rdparty/libcrashreporter-qt +rm -vrf shell_integration/windows +rm -vrf shell_integration/MacOSX From de5de6284cc079225fa1a0461be77ec5970434c4 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 7 Sep 2017 14:58:45 +0200 Subject: [PATCH 031/166] Use DetermineAuthTypeJob in HttpCredentials * Move it to networkjobs * Minor adjustments to its logic * Fixes redirect handling for oauth/basic http auth check #6003 --- src/gui/creds/httpcredentialsgui.cpp | 20 +++---- src/gui/owncloudsetupwizard.cpp | 58 +------------------ src/gui/owncloudsetupwizard.h | 19 ------ src/gui/wizard/owncloudoauthcredspage.cpp | 2 +- src/gui/wizard/owncloudsetuppage.cpp | 8 +-- src/gui/wizard/owncloudsetuppage.h | 4 +- src/gui/wizard/owncloudwizard.cpp | 8 +-- src/gui/wizard/owncloudwizard.h | 3 +- src/gui/wizard/owncloudwizardcommon.h | 6 -- src/libsync/creds/httpcredentials.cpp | 22 +++---- src/libsync/creds/httpcredentials.h | 4 ++ src/libsync/networkjobs.cpp | 70 +++++++++++++++++++++++ src/libsync/networkjobs.h | 26 +++++++++ 13 files changed, 136 insertions(+), 114 deletions(-) diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index e65554f49..98e4df907 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -22,6 +22,7 @@ #include "creds/httpcredentialsgui.h" #include "theme.h" #include "account.h" +#include "networkjobs.h" #include #include "asserts.h" @@ -39,15 +40,11 @@ void HttpCredentialsGui::askFromUser() void HttpCredentialsGui::askFromUserAsync() { - _password = QString(); // So our QNAM does not add any auth - - // First, we will send a call to the webdav endpoint to check what kind of auth we need. - auto reply = _account->sendRequest("GET", _account->davUrl()); - QTimer::singleShot(30 * 1000, reply, &QNetworkReply::abort); - QObject::connect(reply, &QNetworkReply::finished, this, [this, reply] { - reply->deleteLater(); - if (reply->rawHeader("WWW-Authenticate").contains("Bearer ")) { - // OAuth + // First, we will check what kind of auth we need. + auto job = new DetermineAuthTypeJob(_account->sharedFromThis(), this); + job->setTimeout(30 * 1000); + QObject::connect(job, &DetermineAuthTypeJob::authType, this, [this](DetermineAuthTypeJob::AuthType type) { + if (type == DetermineAuthTypeJob::OAuth) { _asyncAuth.reset(new OAuth(_account, this)); _asyncAuth->_expectedUser = _user; connect(_asyncAuth.data(), &OAuth::result, @@ -56,15 +53,16 @@ void HttpCredentialsGui::askFromUserAsync() this, &HttpCredentialsGui::authorisationLinkChanged); _asyncAuth->start(); emit authorisationLinkChanged(); - } else if (reply->error() == QNetworkReply::AuthenticationRequiredError) { + } else if (type == DetermineAuthTypeJob::Basic) { // Show the dialog // We will re-enter the event loop, so better wait the next iteration QMetaObject::invokeMethod(this, "showDialog", Qt::QueuedConnection); } else { - // Network error? + // Network error? Unsupported auth type? emit asked(); } }); + job->start(); } void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user, diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 3ee02c73a..4b2886e39 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -207,8 +207,8 @@ void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl &url, const QJsonObje DetermineAuthTypeJob *job = new DetermineAuthTypeJob(_ocWizard->account(), this); job->setIgnoreCredentialFailure(true); - connect(job, SIGNAL(authType(WizardCommon::AuthType)), - _ocWizard, SLOT(setAuthType(WizardCommon::AuthType))); + connect(job, &DetermineAuthTypeJob::authType, + _ocWizard, &OwncloudWizard::setAuthType); job->start(); } @@ -600,58 +600,4 @@ AccountState *OwncloudSetupWizard::applyAccountChanges() return newState; } - -DetermineAuthTypeJob::DetermineAuthTypeJob(AccountPtr account, QObject *parent) - : AbstractNetworkJob(account, QString(), parent) - , _redirects(0) -{ - // This job implements special redirect handling to detect redirections - // to pages that are indicative of Shibboleth-using servers. Hence we - // disable the standard job redirection handling here. - _followRedirects = false; -} - -void DetermineAuthTypeJob::start() -{ - sendRequest("GET", account()->davUrl()); - AbstractNetworkJob::start(); -} - -bool DetermineAuthTypeJob::finished() -{ - QUrl redirection = reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); - qCDebug(lcWizard) << redirection.toString(); - if (_redirects >= maxRedirects()) { - redirection.clear(); - } - if ((reply()->error() == QNetworkReply::AuthenticationRequiredError) || redirection.isEmpty()) { - if (reply()->rawHeader("WWW-Authenticate").contains("Bearer ")) { - emit authType(WizardCommon::OAuth); - } else { - emit authType(WizardCommon::HttpCreds); - } - } else if (redirection.toString().endsWith(account()->davPath())) { - // do a new run - _redirects++; - resetTimeout(); - sendRequest("GET", redirection); - return false; // don't discard - } else { -#ifndef NO_SHIBBOLETH - QRegExp shibbolethyWords("SAML|wayf"); - - shibbolethyWords.setCaseSensitivity(Qt::CaseInsensitive); - if (redirection.toString().contains(shibbolethyWords)) { - emit authType(WizardCommon::Shibboleth); - } else -#endif - { - // TODO: Send an error. - // eh? - emit authType(WizardCommon::HttpCreds); - } - } - return true; -} - } // namespace OCC diff --git a/src/gui/owncloudsetupwizard.h b/src/gui/owncloudsetupwizard.h index 39f401db6..28fa884fa 100644 --- a/src/gui/owncloudsetupwizard.h +++ b/src/gui/owncloudsetupwizard.h @@ -33,25 +33,6 @@ class AccountState; class OwncloudWizard; -/** - * @brief The DetermineAuthTypeJob class - * @ingroup gui - */ -class DetermineAuthTypeJob : public AbstractNetworkJob -{ - Q_OBJECT -public: - explicit DetermineAuthTypeJob(AccountPtr account, QObject *parent = 0); - void start() Q_DECL_OVERRIDE; -signals: - void authType(WizardCommon::AuthType); -private slots: - bool finished() Q_DECL_OVERRIDE; - -private: - int _redirects; -}; - /** * @brief The OwncloudSetupWizard class * @ingroup gui diff --git a/src/gui/wizard/owncloudoauthcredspage.cpp b/src/gui/wizard/owncloudoauthcredspage.cpp index a4bf5988e..6d9ed4c75 100644 --- a/src/gui/wizard/owncloudoauthcredspage.cpp +++ b/src/gui/wizard/owncloudoauthcredspage.cpp @@ -76,7 +76,7 @@ void OwncloudOAuthCredsPage::asyncAuthResult(OAuth::Result r, const QString &use /* OAuth not supported (can't open browser), fallback to HTTP credentials */ OwncloudWizard *ocWizard = qobject_cast(wizard()); ocWizard->back(); - ocWizard->setAuthType(WizardCommon::HttpCreds); + ocWizard->setAuthType(DetermineAuthTypeJob::Basic); break; } case OAuth::Error: diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 271c943a2..39afeecfc 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -40,7 +40,7 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) , _ocUser() , _authTypeKnown(false) , _checking(false) - , _authType(WizardCommon::HttpCreds) + , _authType(DetermineAuthTypeJob::Basic) , _progressIndi(new QProgressIndicator(this)) { _ui.setupUi(this); @@ -201,9 +201,9 @@ bool OwncloudSetupPage::urlHasChanged() int OwncloudSetupPage::nextId() const { - if (_authType == WizardCommon::HttpCreds) { + if (_authType == DetermineAuthTypeJob::Basic) { return WizardCommon::Page_HttpCreds; - } else if (_authType == WizardCommon::OAuth) { + } else if (_authType == DetermineAuthTypeJob::OAuth) { return WizardCommon::Page_OAuthCreds; } else { return WizardCommon::Page_ShibbolethCreds; @@ -235,7 +235,7 @@ bool OwncloudSetupPage::validatePage() } } -void OwncloudSetupPage::setAuthType(WizardCommon::AuthType type) +void OwncloudSetupPage::setAuthType(DetermineAuthTypeJob::AuthType type) { _authTypeKnown = true; _authType = type; diff --git a/src/gui/wizard/owncloudsetuppage.h b/src/gui/wizard/owncloudsetuppage.h index accd39989..13efa806b 100644 --- a/src/gui/wizard/owncloudsetuppage.h +++ b/src/gui/wizard/owncloudsetuppage.h @@ -53,7 +53,7 @@ public: QString localFolder() const; void setRemoteFolder(const QString &remoteFolder); void setMultipleFoldersExist(bool exist); - void setAuthType(WizardCommon::AuthType type); + void setAuthType(DetermineAuthTypeJob::AuthType type); public slots: void setErrorString(const QString &, bool retryHTTPonly); @@ -80,7 +80,7 @@ private: bool _authTypeKnown; bool _checking; bool _multipleFoldersExist; - WizardCommon::AuthType _authType; + DetermineAuthTypeJob::AuthType _authType; QProgressIndicator *_progressIndi; QButtonGroup *_selectiveSyncButtons; diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index 9fb20ced6..a1c24bbd4 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -167,17 +167,17 @@ void OwncloudWizard::successfulStep() next(); } -void OwncloudWizard::setAuthType(WizardCommon::AuthType type) +void OwncloudWizard::setAuthType(DetermineAuthTypeJob::AuthType type) { _setupPage->setAuthType(type); #ifndef NO_SHIBBOLETH - if (type == WizardCommon::Shibboleth) { + if (type == DetermineAuthTypeJob::Shibboleth) { _credentialsPage = _shibbolethCredsPage; } else #endif - if (type == WizardCommon::OAuth) { + if (type == DetermineAuthTypeJob::OAuth) { _credentialsPage = _browserCredsPage; - } else { + } else { // try Basic auth even for "Unknown" _credentialsPage = _httpCredsPage; } next(); diff --git a/src/gui/wizard/owncloudwizard.h b/src/gui/wizard/owncloudwizard.h index 78f5bb444..e82817a03 100644 --- a/src/gui/wizard/owncloudwizard.h +++ b/src/gui/wizard/owncloudwizard.h @@ -21,6 +21,7 @@ #include #include +#include "networkjobs.h" #include "wizard/owncloudwizardcommon.h" #include "accountfwd.h" @@ -75,7 +76,7 @@ public: QSslCertificate _clientSslCertificate; public slots: - void setAuthType(WizardCommon::AuthType type); + void setAuthType(DetermineAuthTypeJob::AuthType type); void setRemoteFolder(const QString &); void appendToConfigurationLog(const QString &msg, LogType type = LogParagraph); void slotCurrentPageChanged(int); diff --git a/src/gui/wizard/owncloudwizardcommon.h b/src/gui/wizard/owncloudwizardcommon.h index eaad00704..c55ed04fd 100644 --- a/src/gui/wizard/owncloudwizardcommon.h +++ b/src/gui/wizard/owncloudwizardcommon.h @@ -28,12 +28,6 @@ namespace WizardCommon { QString subTitleTemplate(); void initErrorLabel(QLabel *errorLabel); - enum AuthType { - HttpCreds, - Shibboleth, - OAuth - }; - enum SyncMode { SelectiveMode, BoxMode diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 53215de2a..b82588f84 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -58,18 +58,20 @@ protected: QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData) Q_DECL_OVERRIDE { QNetworkRequest req(request); - if (_cred && !_cred->password().isEmpty()) { - if (_cred->isUsingOAuth()) { - req.setRawHeader("Authorization", "Bearer " + _cred->password().toUtf8()); - } else { - QByteArray credHash = QByteArray(_cred->user().toUtf8() + ":" + _cred->password().toUtf8()).toBase64(); + if (!req.attribute(HttpCredentials::DontAddCredentialsAttribute).toBool()) { + if (_cred && !_cred->password().isEmpty()) { + if (_cred->isUsingOAuth()) { + req.setRawHeader("Authorization", "Bearer " + _cred->password().toUtf8()); + } else { + QByteArray credHash = QByteArray(_cred->user().toUtf8() + ":" + _cred->password().toUtf8()).toBase64(); + req.setRawHeader("Authorization", "Basic " + credHash); + } + } else if (!request.url().password().isEmpty()) { + // Typically the requests to get or refresh the OAuth access token. The client + // credentials are put in the URL from the code making the request. + QByteArray credHash = request.url().userInfo().toUtf8().toBase64(); req.setRawHeader("Authorization", "Basic " + credHash); } - } else if (!request.url().password().isEmpty()) { - // Typically the requests to get or refresh the OAuth access token. The client - // credentials are put in the URL from the code making the request. - QByteArray credHash = request.url().userInfo().toUtf8().toBase64(); - req.setRawHeader("Authorization", "Basic " + credHash); } if (_cred && !_cred->_clientSslKey.isNull() && !_cred->_clientSslCertificate.isNull()) { diff --git a/src/libsync/creds/httpcredentials.h b/src/libsync/creds/httpcredentials.h index df3bcdabc..0dc7ad732 100644 --- a/src/libsync/creds/httpcredentials.h +++ b/src/libsync/creds/httpcredentials.h @@ -19,6 +19,7 @@ #include #include #include +#include #include "creds/abstractcredentials.h" class QNetworkReply; @@ -75,6 +76,9 @@ class OWNCLOUDSYNC_EXPORT HttpCredentials : public AbstractCredentials friend class HttpCredentialsAccessManager; public: + /// Don't add credentials if this is set on a QNetworkRequest + static constexpr QNetworkRequest::Attribute DontAddCredentialsAttribute = QNetworkRequest::User; + explicit HttpCredentials(); HttpCredentials(const QString &user, const QString &password, const QSslCertificate &certificate = QSslCertificate(), const QSslKey &key = QSslKey()); diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 613098dda..304bb839d 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -36,6 +36,7 @@ #include "owncloudpropagator.h" #include "creds/abstractcredentials.h" +#include "creds/httpcredentials.h" namespace OCC { @@ -47,6 +48,7 @@ Q_LOGGING_CATEGORY(lcAvatarJob, "sync.networkjob.avatar", QtInfoMsg) Q_LOGGING_CATEGORY(lcMkColJob, "sync.networkjob.mkcol", QtInfoMsg) Q_LOGGING_CATEGORY(lcProppatchJob, "sync.networkjob.proppatch", QtInfoMsg) Q_LOGGING_CATEGORY(lcJsonApiJob, "sync.networkjob.jsonapi", QtInfoMsg) +Q_LOGGING_CATEGORY(lcDetermineAuthTypeJob, "sync.networkjob.determineauthtype", QtInfoMsg) RequestEtagJob::RequestEtagJob(AccountPtr account, const QString &path, QObject *parent) : AbstractNetworkJob(account, path, parent) @@ -798,4 +800,72 @@ bool JsonApiJob::finished() return true; } +DetermineAuthTypeJob::DetermineAuthTypeJob(AccountPtr account, QObject *parent) + : AbstractNetworkJob(account, QString(), parent) + , _redirects(0) +{ + // This job implements special redirect handling to detect redirections + // to pages that are indicative of Shibboleth-using servers. Hence we + // disable the standard job redirection handling here. + _followRedirects = false; +} + +void DetermineAuthTypeJob::start() +{ + send(account()->davUrl()); + AbstractNetworkJob::start(); +} + +bool DetermineAuthTypeJob::finished() +{ + QUrl redirection = reply()->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl(); + if (_redirects >= maxRedirects()) { + redirection.clear(); + } + + auto authChallenge = reply()->rawHeader("WWW-Authenticate").toLower(); + if (redirection.isEmpty()) { + if (authChallenge.contains("bearer ")) { + emit authType(OAuth); + } else if (!authChallenge.isEmpty()) { + emit authType(Basic); + } else { + // This is also where we end up in case of network error. + emit authType(Unknown); + } + } else if (redirection.toString().endsWith(account()->davPath())) { + // do a new run + _redirects++; + resetTimeout(); + send(redirection); + qCDebug(lcDetermineAuthTypeJob()) << "Redirected to:" << redirection.toString(); + return false; // don't discard + } else { +#ifndef NO_SHIBBOLETH + QRegExp shibbolethyWords("SAML|wayf"); + shibbolethyWords.setCaseSensitivity(Qt::CaseInsensitive); + if (redirection.toString().contains(shibbolethyWords)) { + emit authType(Shibboleth); + } else +#endif + { + // We got redirected to an address that doesn't look like shib + // and also doesn't have the davPath. Give up. + qCWarning(lcDetermineAuthTypeJob()) << account()->davUrl() + << "was redirected to the incompatible address" + << redirection.toString(); + emit authType(Unknown); + } + } + return true; +} + +void DetermineAuthTypeJob::send(const QUrl &url) +{ + QNetworkRequest req; + // Prevent HttpCredentialsAccessManager from setting an Authorization header. + req.setAttribute(HttpCredentials::DontAddCredentialsAttribute, true); + sendRequest("GET", url, req); +} + } // namespace OCC diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index 8929391f2..fb54e95ba 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -330,6 +330,32 @@ private: QList> _additionalParams; }; +/** + * @brief Checks with auth type to use for a server + * @ingroup libsync + */ +class OWNCLOUDSYNC_EXPORT DetermineAuthTypeJob : public AbstractNetworkJob +{ + Q_OBJECT +public: + enum AuthType { + Unknown, + Basic, + OAuth, + Shibboleth + }; + + explicit DetermineAuthTypeJob(AccountPtr account, QObject *parent = 0); + void start() Q_DECL_OVERRIDE; +signals: + void authType(AuthType); +private slots: + bool finished() Q_DECL_OVERRIDE; +private: + void send(const QUrl &url); + int _redirects; +}; + } // namespace OCC #endif // NETWORKJOBS_H From 09173fb727ca271643657cb95de30844ff81a689 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 8 Sep 2017 11:59:45 +0200 Subject: [PATCH 032/166] Update server url in case of permanent redirection #5972 This is the first time the account url may update outside of account setup. Summary of redirection handling: 1. During account setup (wizard) - status.php gets permanently redirected -> adjust url - authed PROPFIND gets *any* redirection -> adjust url 2. During connectivity ping (ConnectionValidator) - status.php gets permanently redirected -> adjust url (new!) All other redirections should be followed transparently and don't update the account url in the settings. --- src/gui/owncloudsetupwizard.cpp | 9 +++------ src/libsync/abstractnetworkjob.cpp | 2 ++ src/libsync/abstractnetworkjob.h | 8 ++++++++ src/libsync/connectionvalidator.cpp | 7 +++++++ src/libsync/networkjobs.cpp | 26 ++++++++++++++++++++++++-- src/libsync/networkjobs.h | 21 +++++++++++++++++++++ 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 4b2886e39..9e6853db8 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -196,13 +196,10 @@ void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl &url, const QJsonObje // https://github.com/owncloud/core/pull/27473/files _ocWizard->account()->setServerVersion(serverVersion); - QString p = url.path(); - if (p.endsWith("/status.php")) { + if (url != _ocWizard->account()->url()) { // We might be redirected, update the account - QUrl redirectedUrl = url; - redirectedUrl.setPath(url.path().left(url.path().length() - 11)); - _ocWizard->account()->setUrl(redirectedUrl); - qCInfo(lcWizard) << " was redirected to" << redirectedUrl.toString(); + _ocWizard->account()->setUrl(url); + qCInfo(lcWizard) << " was redirected to" << url.toString(); } DetermineAuthTypeJob *job = new DetermineAuthTypeJob(_ocWizard->account(), this); diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 71984a66a..9c60da8f9 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -182,6 +182,8 @@ void AbstractNetworkJob::slotFinished() } else if (verb.isEmpty()) { qCWarning(lcNetworkJob) << this << "cannot redirect request: could not detect original verb"; } else { + emit redirected(_reply, redirectUrl, _redirectCount - 1); + // Create the redirected request and send it qCInfo(lcNetworkJob) << "Redirecting" << verb << requestedUrl << redirectUrl; resetTimeout(); diff --git a/src/libsync/abstractnetworkjob.h b/src/libsync/abstractnetworkjob.h index 36a5113ff..03de2d458 100644 --- a/src/libsync/abstractnetworkjob.h +++ b/src/libsync/abstractnetworkjob.h @@ -98,6 +98,14 @@ signals: void networkError(QNetworkReply *reply); void networkActivity(); + /** Emitted when a redirect is followed. + * + * \a reply The "please redirect" reply + * \a targetUrl Where to redirect to + * \a redirectCount Counts redirect hops, first is 0. + */ + void redirected(QNetworkReply *reply, const QUrl &targetUrl, int redirectCount); + protected: void setupConnections(QNetworkReply *reply); diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index 9eff065de..f2bae6638 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -135,6 +135,13 @@ void ConnectionValidator::slotStatusFound(const QUrl &url, const QJsonObject &in << CheckServerJob::versionString(info) << "(" << serverVersion << ")"; + // Update server url in case of redirection + if (_account->url() != url) { + qCInfo(lcConnectionValidator()) << "status.php was redirected to" << url.toString(); + _account->setUrl(url); + _account->wantsAccountSaved(_account.data()); + } + if (!serverVersion.isEmpty() && !setAndCheckServerVersion(serverVersion)) { return; } diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 304bb839d..c92936e3a 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -397,13 +397,17 @@ namespace { CheckServerJob::CheckServerJob(AccountPtr account, QObject *parent) : AbstractNetworkJob(account, QLatin1String(statusphpC), parent) , _subdirFallback(false) + , _permanentRedirects(0) { setIgnoreCredentialFailure(true); + connect(this, SIGNAL(redirected(QNetworkReply *, QUrl, int)), + SLOT(slotRedirected(QNetworkReply *, QUrl, int))); } void CheckServerJob::start() { - sendRequest("GET", makeAccountUrl(path())); + _serverUrl = account()->url(); + sendRequest("GET", Utility::concatUrlPath(_serverUrl, path())); connect(reply(), SIGNAL(metaDataChanged()), this, SLOT(metaDataChangedSlot())); connect(reply(), SIGNAL(encrypted()), this, SLOT(encryptedSlot())); AbstractNetworkJob::start(); @@ -455,6 +459,24 @@ void CheckServerJob::encryptedSlot() mergeSslConfigurationForSslButton(reply()->sslConfiguration(), account()); } +void CheckServerJob::slotRedirected(QNetworkReply *reply, const QUrl &targetUrl, int redirectCount) +{ + QByteArray slashStatusPhp("/"); + slashStatusPhp.append(statusphpC); + + int httpCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + QString path = targetUrl.path(); + if ((httpCode == 301 || httpCode == 308) // permanent redirection + && redirectCount == _permanentRedirects // don't apply permanent redirects after a temporary one + && path.endsWith(slashStatusPhp)) { + _serverUrl = targetUrl; + _serverUrl.setPath(path.left(path.size() - slashStatusPhp.size())); + qCInfo(lcCheckServerJob) << "status.php was permanently redirected to" + << targetUrl << "new server url is" << _serverUrl; + ++_permanentRedirects; + } +} + void CheckServerJob::metaDataChangedSlot() { account()->setSslConfiguration(reply()->sslConfiguration()); @@ -499,7 +521,7 @@ bool CheckServerJob::finished() qCInfo(lcCheckServerJob) << "status.php returns: " << status << " " << reply()->error() << " Reply: " << reply(); if (status.object().contains("installed")) { - emit instanceFound(reply()->url(), status.object()); + emit instanceFound(_serverUrl, status.object()); } else { qCWarning(lcCheckServerJob) << "No proper answer on " << reply()->url(); emit instanceNotFound(reply()); diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index fb54e95ba..7992be25a 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -241,6 +241,11 @@ public: static bool installed(const QJsonObject &info); signals: + /** Emitted when a status.php was successfully read. + * + * \a url see _serverStatusUrl (does not include "/status.php") + * \a info The status.php reply information + */ void instanceFound(const QUrl &url, const QJsonObject &info); /** Emitted on invalid status.php reply. @@ -248,6 +253,11 @@ signals: * \a reply is never null */ void instanceNotFound(QNetworkReply *reply); + + /** A timeout occurred. + * + * \a url The specific url where the timeout happened. + */ void timeout(const QUrl &url); private: @@ -256,9 +266,20 @@ private: private slots: virtual void metaDataChangedSlot(); virtual void encryptedSlot(); + void slotRedirected(QNetworkReply *reply, const QUrl &targetUrl, int redirectCount); private: bool _subdirFallback; + + /** The permanent-redirect adjusted account url. + * + * Note that temporary redirects or a permanent redirect behind a temporary + * one do not affect this url. + */ + QUrl _serverUrl; + + /** Keep track of how many permanent redirect were applied. */ + int _permanentRedirects; }; From 2b7919fb3a9c80f3781b27384920472161b0d0ee Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 12 Sep 2017 02:18:30 +0200 Subject: [PATCH 033/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 120 ++++++++--------- translations/client_cs.ts | 132 +++++++++---------- translations/client_de.ts | 172 ++++++++++++------------ translations/client_el.ts | 132 +++++++++---------- translations/client_en.ts | 82 ++++++------ translations/client_es.ts | 132 +++++++++---------- translations/client_es_AR.ts | 116 ++++++++-------- translations/client_et.ts | 124 +++++++++--------- translations/client_eu.ts | 120 ++++++++--------- translations/client_fa.ts | 116 ++++++++-------- translations/client_fi.ts | 122 ++++++++--------- translations/client_fr.ts | 132 +++++++++---------- translations/client_gl.ts | 122 ++++++++--------- translations/client_hu.ts | 120 ++++++++--------- translations/client_it.ts | 132 +++++++++---------- translations/client_ja.ts | 130 +++++++++--------- translations/client_nb_NO.ts | 132 +++++++++---------- translations/client_nl.ts | 132 +++++++++---------- translations/client_pl.ts | 128 +++++++++--------- translations/client_pt.ts | 132 +++++++++---------- translations/client_pt_BR.ts | 248 +++++++++++++++++------------------ translations/client_ru.ts | 142 ++++++++++---------- translations/client_sk.ts | 120 ++++++++--------- translations/client_sl.ts | 132 +++++++++---------- translations/client_sr.ts | 120 ++++++++--------- translations/client_sv.ts | 130 +++++++++--------- translations/client_th.ts | 132 +++++++++---------- translations/client_tr.ts | 130 +++++++++--------- translations/client_uk.ts | 124 +++++++++--------- translations/client_zh_CN.ts | 130 +++++++++--------- translations/client_zh_TW.ts | 120 ++++++++--------- 32 files changed, 2031 insertions(+), 2028 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 6726bda23..ebbba0347 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -111,6 +111,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 0cc0ff2cf..cf6859480 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Temps d'espera de la connexió esgotat. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ No hi ha cap compte d'OwnCloud configurat - + The configured server for this client is too old El servidor configurat per aquest client és massa antic - + Please update to the latest server and restart the client. Actualitzeu el servidor a l'última versió i reestabliu el client. - + Authentication error: Either username or password are wrong. Error d'autentificació: Aquest nom d'usuari o contrasenya son incorrectes. - + timeout temps excedit - + The provided credentials are not correct Les credencials proporcionades no són correctes @@ -1304,22 +1304,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Introduïu la contrassenya de %1:<br><br>Usuari: %2<br>Compte: %3<br> - + Reading from keychain failed with error: '%1' La lectura de la cadena de claus ha fallat amb l'error: '%1' - + Enter Password Escriviu contrasenya - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1406,7 +1406,7 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Form - + Formulari @@ -1416,7 +1416,7 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Account - + Compte @@ -1428,7 +1428,7 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Folder - + Carpeta @@ -1448,17 +1448,17 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Copy - + Copiar Time - + Hora File - + Fitxer @@ -1896,7 +1896,7 @@ privilegis addicionals durant el procés. Connect to %1 - + Connecta a %1 @@ -1942,139 +1942,139 @@ No és aconsellada usar-la. <font color="green">S'ha connectat correctament amb %1: %2 versió %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ha fallat la connexió amb %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. S'ha esgotat el temps d'espera mentres es conectava a %1 a les %2. - + Trying to connect to %1 at %2... Intentant connectar amb %1 a %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. El servidor ha prohibit l'accés. Per verificar que teniu permisos, <a href="%1">cliqueu aquí</a> per accedir al servei amb el vostre navegador. - + Invalid URL URL incorrecte - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta local %1 ja existeix, s'està configurant per sincronitzar.<br/><br/> - + Creating local sync folder %1... S'està creant la carpeta de sincronització local %1... - + ok correcte - + failed. ha fallat. - + Could not create local folder %1 No s'ha pogut crear la carpeta local %1 - + No remote folder specified! No heu especificat cap carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creant la carpeta a ownCloud: %1 - + Remote folder %1 created successfully. La carpeta remota %1 s'ha creat correctament. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ja existeix. S'hi està connectant per sincronitzar-les. - - + + The folder creation resulted in HTTP error code %1 La creació de la carpeta ha resultat en el codi d'error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ha fallat la creació de la carpeta perquè les credencials proporcionades són incorrectes!<br/>Aneu enrera i comproveu les credencials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creació de la carpeta remota ha fallat, probablement perquè les credencials facilitades són incorrectes.</font><br/>Comproveu les vostres credencials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creació de la carpeta remota %1 ha fallat amb l'error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. S'ha establert una connexió de sincronització des de %1 a la carpeta remota %2. - + Successfully connected to %1! Connectat amb èxit a %1! - + Connection to %1 could not be established. Please check again. No s'ha pogut establir la connexió amb %1. Comproveu-ho de nou. - + Folder rename failed Ha fallat en canviar el nom de la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No es pot esborrar i restaurar la carpeta perquè una carpeta o un fitxer de dins està obert en un altre programa. Tanqueu la carpeta o el fitxer i intenteu-ho de nou o cancel·leu la configuració. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>la carpeta de sincronització %1 s'ha creat correctament!</b></font> @@ -2749,7 +2749,7 @@ No és aconsellada usar-la. Send link by email - + Envia l'enllaç per correu electrònic @@ -2807,7 +2807,7 @@ No és aconsellada usar-la. Send link by email - + Envia l'enllaç per correu electrònic @@ -2825,42 +2825,42 @@ No és aconsellada usar-la. Form - + Formulari TextLabel - + TextLabel can edit - + pot editar can share - + pot compartir ... - + ... create - + crea change - + canvi delete - + elimina @@ -3800,7 +3800,7 @@ No és aconsellada usar-la. Form - + Formulari diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 9239eb84e..071dda21e 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Připojení vypršelo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Žádný účet ownCloud nenastaven - + The configured server for this client is too old Server nastavený pro tohoto klienta je příliš starý - + Please update to the latest server and restart the client. Aktualizujte prosím na poslední verzi serveru a restartujte klienta. - + Authentication error: Either username or password are wrong. Chyba ověření: Uživatelské jméno nebo heslo není správné. - + timeout vypršel časový interval - + The provided credentials are not correct Poskytnuté přihlašovací údaje nejsou správné @@ -1307,22 +1307,22 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vložte prosím %1 heslo:<br><br>Uživatel: %2<br>Účet: %3<br> - + Reading from keychain failed with error: '%1' Čtení z klíčenky selhalo s chybou: '%1' - + Enter Password Zadejte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikněte sem</a> pro vyžádání hesla aplikace z webového rozhraní. @@ -1409,7 +1409,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Form - + Formulář @@ -1419,7 +1419,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Account - + Účet @@ -1431,7 +1431,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Folder - + Adresář @@ -1451,17 +1451,17 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Copy - + Kopie Time - + Čas File - + Soubor @@ -1899,7 +1899,7 @@ můžete být požádáni o dodatečná oprávnění. Connect to %1 - + Připojit k %1 @@ -1945,139 +1945,139 @@ Nedoporučuje se jí používat. <font color="green">Úspěšně připojeno k %1: %2 verze %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Selhalo spojení s %1 v %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Vypršení časového limitu při pokusu o připojení k %1 na %2. - + Trying to connect to %1 at %2... Pokouším se připojit k %1 na %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Ověřený požadavek na server byl přesměrován na '%1'. URL je špatně, server není správně nakonfigurován. - + There was an invalid response to an authenticated webdav request Byla obdržena nesprávná odpověď na ověřený webdav požadavek - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Přístup zamítnut serverem. Pro ověření správných přístupových práv <a href="%1">klikněte sem</a> a otevřete službu ve svém prohlížeči. - + Invalid URL Neplatná URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Místní synchronizovaný adresář %1 již existuje, nastavuji jej pro synchronizaci.<br/><br/> - + Creating local sync folder %1... Vytvářím místní adresář pro synchronizaci %1... - + ok OK - + failed. selhalo. - + Could not create local folder %1 Nelze vytvořit místní adresář %1 - + No remote folder specified! Není nastaven žádný vzdálený adresář! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytvářím adresář na ownCloudu: %1 - + Remote folder %1 created successfully. Vzdálený adresář %1 byl úspěšně vytvořen. - + The remote folder %1 already exists. Connecting it for syncing. Vzdálený adresář %1 již existuje. Spojuji jej pro synchronizaci. - - + + The folder creation resulted in HTTP error code %1 Vytvoření adresáře selhalo s HTTP chybou %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.<br/>Vraťte se prosím zpět a zkontrolujte je.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.</font><br/>Vraťte se prosím zpět a zkontrolujte je.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytváření vzdáleného adresáře %1 selhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Bylo nastaveno synchronizované spojení z %1 do vzdáleného adresáře %2. - + Successfully connected to %1! Úspěšně spojeno s %1. - + Connection to %1 could not be established. Please check again. Spojení s %1 nelze navázat. Prosím zkuste to znovu. - + Folder rename failed Přejmenování adresáře selhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nelze odstranit a zazálohovat adresář, protože adresář nebo soubor v něm je otevřen v jiném programu. Prosím zavřete adresář nebo soubor a zkuste znovu nebo zrušte akci. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Místní synchronizovaný adresář %1 byl úspěšně vytvořen!</b></font> @@ -2638,12 +2638,12 @@ Nedoporučuje se jí používat. Users and Groups - + Uživatelé a skupiny Public Links - + Veřejné odkazy @@ -2691,7 +2691,7 @@ Nedoporučuje se jí používat. Show file listing - + Ukázat výpis souborů @@ -2752,7 +2752,7 @@ Nedoporučuje se jí používat. Send link by email - + Poslat odkaz emailem @@ -2762,7 +2762,7 @@ Nedoporučuje se jí používat. Public link - + Veřejný odkaz @@ -2810,7 +2810,7 @@ Nedoporučuje se jí používat. Send link by email - + Poslat odkaz emailem @@ -2828,42 +2828,42 @@ Nedoporučuje se jí používat. Form - + Formulář TextLabel - + Textový popisek can edit - + lze upravovat can share - + může sdílet ... - + ... create - + vytvořit change - + změnit delete - + smazat @@ -3803,7 +3803,7 @@ Nedoporučuje se jí používat. Form - + Formulář @@ -4163,12 +4163,12 @@ Nedoporučuje se jí používat. Could not open email client - + Nelze otevřít poštovního klienta There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Došlo k chybě při otevírání nové zprávy v emailovém klientu. Možná nebyl nastaven výchozí emailový klient? \ No newline at end of file diff --git a/translations/client_de.ts b/translations/client_de.ts index f17ee98e3..a4faa6a47 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -83,20 +83,20 @@ OCC::AbstractNetworkJob - - - Connection timed out - - - Unknown error: network reply was deleted - + Connection timed out + Zeitüberschreitung bei der Verbindung - + + Unknown error: network reply was deleted + Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht + + + Server replied "%1 %2" to "%3 %4" - + Server hat "%1 %2" auf "%3 %4" geantwortet @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + Server %1 befindet sich im Wartungsmodus. @@ -261,12 +261,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Berechtigung vom Browser einholen. <a href='%1'> Hier klicken </a> zum nochmaligen Öffnen des Browsers. Connecting to %1... - + Verbinde mit %1... @@ -381,7 +381,7 @@ Maintenance mode - + Wartungsmodus @@ -396,7 +396,7 @@ Asking Credentials - + Zugangsdaten werden abgefragt @@ -617,27 +617,27 @@ Kein ownCloud-Konto konfiguriert - + The configured server for this client is too old Der konfigurierte Server ist für diesen Client zu alt - + Please update to the latest server and restart the client. Aktualisieren Sie auf die letzte Server-Version und starten Sie den Client neu. - + Authentication error: Either username or password are wrong. Authentifizierungsfehler: Entweder der Benutzername oder das Passwort sind falsch. - + timeout Zeitüberschreitung - + The provided credentials are not correct Die zur Verfügung gestellten Anmeldeinformationen sind nicht korrekt @@ -1003,7 +1003,7 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter There are unresolved conflicts. Click for details. - + Es existieren ungelöste Konflikte. Für Details klicken. @@ -1013,7 +1013,7 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Reconciling changes - + Änderungen zusammenführen @@ -1309,22 +1309,22 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Bitte Kennwort für %1 eingeben:<br><br>Benutzer: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Schlüsselbund fehlgeschlagen mit Fehler: '%1' - + Enter Password Passwort eingeben - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicken Sie hier</a> um ein App-Passwort von dem Web-Interface zu erhalten. @@ -1411,64 +1411,64 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun Form - + Formular List of issues - + Liste der Fehler Account - + Benutzerkonto <no filter> - + <no filter> Folder - + Ordner Show warnings - + Warnungen anzeigen Show ignored files - + Ignorierte Dateien anzeigen Copy the issues list to the clipboard. - + Liste der Fehler in die Zwischenablage kopieren. Copy - + Kopieren Time - + Zeit File - + Datei Issue - + Fehler @@ -1491,7 +1491,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun &Capture debug messages - + Fehlermeldungen aufzei&chnen @@ -1713,7 +1713,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun Error returned from the server: <em>%1</em> - + Fehler vom Server zurückgegeben: <em>%1</em> @@ -1900,7 +1900,7 @@ for additional privileges during the process. Connect to %1 - + Verbinden mit %1 @@ -1946,139 +1946,139 @@ Es ist nicht ratsam, diese zu benutzen. <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Die Verbindung zu %1 auf %2:<br/>%3 konnte nicht hergestellt werden - + Timeout while trying to connect to %1 at %2. Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. - + Trying to connect to %1 at %2... Verbindungsversuch mit %1 unter %2… - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an '%1'. Diese Adresse ist ungültig, der Server ist falsch konfiguriert. - + There was an invalid response to an authenticated webdav request Es gab eine ungültige Reaktion auf eine WebDav-Authentifizeriungs-Anfrage - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. - + Invalid URL Ungültige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> - + Creating local sync folder %1... Lokaler Synchronisations-Ordner %1 wird erstellt ... - + ok ok - + failed. fehlgeschlagen. - + Could not create local folder %1 Der lokale Ordner %1 konnte nicht angelegt werden - + No remote folder specified! Keinen entfernten Ordner angegeben! - + Error: %1 Fehler: %1 - + creating folder on ownCloud: %1 erstelle Ordner auf ownCloud: %1 - + Remote folder %1 created successfully. Remoteordner %1 erfolgreich erstellt. - + The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisation. - - + + The folder creation resulted in HTTP error code %1 Das Erstellen des Verzeichnisses erzeugte den HTTP-Fehler-Code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Die Remote-Ordner-Erstellung ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Die Remote-Ordner-Erstellung ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Remote-Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Eine Synchronisationsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. - + Successfully connected to %1! Erfolgreich verbunden mit %1! - + Connection to %1 could not be established. Please check again. Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. - + Folder rename failed Ordner umbenennen fehlgeschlagen. - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei oder beenden Sie die Installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erfolgreich erstellt!</b></font> @@ -2639,12 +2639,12 @@ Es ist nicht ratsam, diese zu benutzen. Users and Groups - + Nutzer und Gruppen Public Links - + Öffentliche Links @@ -2692,7 +2692,7 @@ Es ist nicht ratsam, diese zu benutzen. Show file listing - + Dateiliste anzeigen @@ -2753,7 +2753,7 @@ Es ist nicht ratsam, diese zu benutzen. Send link by email - + Link als E-Mail verschicken @@ -2763,7 +2763,7 @@ Es ist nicht ratsam, diese zu benutzen. Public link - + Öffentlicher Link @@ -2811,7 +2811,7 @@ Es ist nicht ratsam, diese zu benutzen. Send link by email - + Link als E-Mail verschicken @@ -2829,42 +2829,42 @@ Es ist nicht ratsam, diese zu benutzen. Form - + Formular TextLabel - + TextLabel can edit - + kann bearbeiten can share - + kann teilen ... - + ... create - + erstellen change - + Ändern delete - + löschen @@ -3804,7 +3804,7 @@ Es ist nicht ratsam, diese zu benutzen. Form - + Formular @@ -4164,12 +4164,12 @@ Es ist nicht ratsam, diese zu benutzen. Could not open email client - + Die E-Mail Anwendung konnte nicht geöffnet werden There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Es ist ein Fehler beim Öffnen der E-Mail Anwendung, zum Erstellen einer neuen Nachricht, aufgetreten. Vielleicht ist keine standardmäßige E-Mail Anwendung konfiguriert? \ No newline at end of file diff --git a/translations/client_el.ts b/translations/client_el.ts index d69e7efbb..76ab785a7 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Η σύνδεση έληξε. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Δεν έχει ρυθμιστεί λογαριασμός ownCloud - + The configured server for this client is too old Ο ρυθμισμένος διακομιστής για αυτό το δέκτη είναι πολύ παλιός - + Please update to the latest server and restart the client. Παρακαλώ ενημερώστε το διακομιστή στη νεώτερη έκδοση και επανεκκινήστε το δέκτη. - + Authentication error: Either username or password are wrong. Σφάλμα Πιστοποίησης: Το όνομα χρήστη ή ο κωδικός πρόσβασης είναι λανθασμένα. - + timeout παρέλευση χρονικού ορίου - + The provided credentials are not correct Τα παρεχόμενα διαπιστευτήρια δεν είναι σωστά @@ -1309,22 +1309,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Παρακαλώ εισάγετε %1 κωδικού πρόσβασης:<br><br>Χρήστης: %2<br>Λογαριασμός: %3<br> - + Reading from keychain failed with error: '%1' Η ανάγνωση από την κλειδοθήκη απέτυχε με σφάλμα: '%1' - + Enter Password Εισάγετε Κωδικό Πρόσβασης - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">πατήστε εδώ</a>για να ζητήσετε έναν κωδικό πρόσβασης εφαρμογής από τη διεπαφή ιστού. @@ -1411,7 +1411,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Φόρμα @@ -1421,7 +1421,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Λογαριασμός @@ -1433,7 +1433,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Φάκελος @@ -1453,17 +1453,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Αντιγραφή Time - + Ώρα File - + Αρχείο @@ -1901,7 +1901,7 @@ for additional privileges during the process. Connect to %1 - + Σύνδεση με %1 @@ -1947,139 +1947,139 @@ It is not advisable to use it. <font color="green">Επιτυχής σύνδεση στο %1: %2 έκδοση %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Αποτυχία σύνδεσης με το %1 στο %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Λήξη χρονικού ορίου κατά τη σύνδεση σε %1 σε %2. - + Trying to connect to %1 at %2... Προσπάθεια σύνδεσης στο %1 για %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Η πιστοποιημένη αίτηση στον διακομιστή ανακατευθύνθηκε σε '%1'. Το URL είναι εσφαλμένο, ο διακομιστής δεν έχει διαμορφωθεί σωστά. - + There was an invalid response to an authenticated webdav request Υπήρξε μια άκυρη απόκριση σε μια πιστοποιημένη αίτηση - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Απαγόρευση πρόσβασης από τον διακομιστή. Για να επιβεβαιώσετε ότι έχετε δικαιώματα πρόσβασης, <a href="%1">πατήστε εδώ</a> για να προσπελάσετε την υπηρεσία με το πρόγραμμα πλοήγησής σας. - + Invalid URL Μη έγκυρη URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Ο τοπικός φάκελος συγχρονισμού %1 υπάρχει ήδη, ρύθμιση για συγχρονισμό.<br/><br/> - + Creating local sync folder %1... Δημιουργία τοπικού φακέλου συγχρονισμού %1... - + ok οκ - + failed. απέτυχε. - + Could not create local folder %1 Αδυναμία δημιουργίας τοπικού φακέλου %1 - + No remote folder specified! Δεν προσδιορίστηκε κανένας απομακρυσμένος φάκελος! - + Error: %1 Σφάλμα: %1 - + creating folder on ownCloud: %1 δημιουργία φακέλου στο ownCloud: %1 - + Remote folder %1 created successfully. Ο απομακρυσμένος φάκελος %1 δημιουργήθηκε με επιτυχία. - + The remote folder %1 already exists. Connecting it for syncing. Ο απομακρυσμένος φάκελος %1 υπάρχει ήδη. Θα συνδεθεί για συγχρονισμό. - - + + The folder creation resulted in HTTP error code %1 Η δημιουργία φακέλου είχε ως αποτέλεσμα τον κωδικό σφάλματος HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Η δημιουργία απομακρυσμένου φακέλλου απέτυχε επειδή τα διαπιστευτήρια είναι λάθος!<br/>Παρακαλώ επιστρέψετε και ελέγξετε τα διαπιστευτήριά σας.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Η δημιουργία απομακρυσμένου φακέλου απέτυχε, πιθανώς επειδή τα διαπιστευτήρια που δόθηκαν είναι λάθος.</font><br/>Παρακαλώ επιστρέψτε πίσω και ελέγξτε τα διαπιστευτήρια σας.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Η δημιουργία απομακρυσμένου φακέλου %1 απέτυχε με σφάλμα <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Μια σύνδεση συγχρονισμού από τον απομακρυσμένο κατάλογο %1 σε %2 έχει ρυθμιστεί. - + Successfully connected to %1! Επιτυχής σύνδεση με %1! - + Connection to %1 could not be established. Please check again. Αδυναμία σύνδεσης στον %1. Παρακαλώ ελέξτε ξανά. - + Folder rename failed Αποτυχία μετονομασίας φακέλου - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Αδυναμία αφαίρεσης και δημιουργίας αντιγράφου ασφαλείας του φακέλου διότι ο φάκελος ή ένα αρχείο του είναι ανοικτό από άλλο πρόγραμμα. Παρακαλώ κλείστε τον φάκελο ή το αρχείο και πατήστε επανάληψη ή ακυρώστε την ρύθμιση. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Επιτυχής δημιουργία τοπικού φακέλου %1 για συγχρονισμό!</b></font> @@ -2640,12 +2640,12 @@ It is not advisable to use it. Users and Groups - + Χρήστες και Ομάδες Public Links - + Δημόσιοι σύνδεσμοι @@ -2693,7 +2693,7 @@ It is not advisable to use it. Show file listing - + Εμφάνιση αρχείου καταγραφής @@ -2754,7 +2754,7 @@ It is not advisable to use it. Send link by email - + Αποστολή συνδέσμου με αλληλογραφία @@ -2764,7 +2764,7 @@ It is not advisable to use it. Public link - + Δημόσιος σύνδεσμος @@ -2812,7 +2812,7 @@ It is not advisable to use it. Send link by email - + Αποστολή συνδέσμου με αλληλογραφία @@ -2830,42 +2830,42 @@ It is not advisable to use it. Form - + Φόρμα TextLabel - + TextLabel can edit - + δυνατότητα επεξεργασίας can share - + δυνατότητα διαμοιρασμού ... - + ... create - + δημιουργία change - + αλλαγή delete - + διαγραφή @@ -3805,7 +3805,7 @@ It is not advisable to use it. Form - + Φόρμα @@ -4165,12 +4165,12 @@ It is not advisable to use it. Could not open email client - + Αδυναμία ανοίγματος πελάτη ηλεκτρονικής αλληλογραφίας There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Παρουσιάστηκε σφάλμα κατά την εκκίνηση του προγράμματος-πελάτη ηλεκτρονικού ταχυδρομείου για τη δημιουργία νέου μηνύματος. Ίσως δεν έχει ρυθμιστεί προεπιλεγμένο πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου; \ No newline at end of file diff --git a/translations/client_en.ts b/translations/client_en.ts index 299642812..f04d5c7b4 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -86,17 +86,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -625,27 +625,27 @@ - + The configured server for this client is too old - + Please update to the latest server and restart the client. - + Authentication error: Either username or password are wrong. - + timeout - + The provided credentials are not correct @@ -1332,22 +1332,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1966,139 +1966,139 @@ It is not advisable to use it. - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> - + Creating local sync folder %1... - + ok - + failed. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. - + The remote folder %1 already exists. Connecting it for syncing. - - + + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. - + Successfully connected to %1! - + Connection to %1 could not be established. Please check again. - + Folder rename failed - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> diff --git a/translations/client_es.ts b/translations/client_es.ts index 5e7af352b..26c874477 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ No se ha configurado ninguna cuenta de ownCloud - + The configured server for this client is too old La configuración del servidor para este cliente está obsoleta - + Please update to the latest server and restart the client. Por favor, actualice a la última versión del servidor y reinicie el cliente - + Authentication error: Either username or password are wrong. Error de autenticación: El usuario o la contraseña son incorrectos - + timeout tiempo de espera - + The provided credentials are not correct Las credenciales proporcionadas no son correctas @@ -1309,22 +1309,22 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor introduzca la contraseña de %1:<br><br>Usuario: %2<br>Cuenta: %3<br> - + Reading from keychain failed with error: '%1' La lectura del llavero ha fallado y ha generado este error: '%1' - + Enter Password Introduzca la contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. @@ -1411,7 +1411,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Form - + Formulario @@ -1421,7 +1421,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Account - + Cuenta @@ -1433,7 +1433,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Folder - + Carpeta @@ -1453,17 +1453,17 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Copy - + Copiar Time - + Hora File - + Archivo @@ -1900,7 +1900,7 @@ for additional privileges during the process. Connect to %1 - + Conectar a %1 @@ -1946,139 +1946,139 @@ No se recomienda usarla. <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Fallo al conectar %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 - + Trying to connect to %1 at %2... Intentando conectar a %1 desde %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a '%1'. La dirección URL es errónea, el servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Ha habido una respuesta no válida a una solicitud autenticada de webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que usted tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio con su navegador. - + Invalid URL URL inválida. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> - + Creating local sync folder %1... Creando carpeta de sincronización local %1 - + ok bien - + failed. ha fallado. - + Could not create local folder %1 No se ha podido crear la carpeta local %1 - + No remote folder specified! ¡No se ha especificado ninguna carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectándola para sincronizacion. - - + + The folder creation resulted in HTTP error code %1 La creación de la carpeta ha producido el código de error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 - + Successfully connected to %1! ¡Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. - + Folder rename failed Error al renombrar la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No se puede eliminar y respaldar la carpeta porque la misma o un fichero en ella está abierto por otro programa. Por favor, cierre la carpeta o el fichero y reintente, o cancele la instalación. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> @@ -2639,12 +2639,12 @@ No se recomienda usarla. Users and Groups - + Usuarios y Grupos Public Links - + Enlaces Publicos @@ -2692,7 +2692,7 @@ No se recomienda usarla. Show file listing - + Mostrar listado de archivos @@ -2753,7 +2753,7 @@ No se recomienda usarla. Send link by email - + Enviar enlace por e-mail @@ -2763,7 +2763,7 @@ No se recomienda usarla. Public link - + Enlace Publico @@ -2811,7 +2811,7 @@ No se recomienda usarla. Send link by email - + Enviar enlace por e-mail @@ -2829,42 +2829,42 @@ No se recomienda usarla. Form - + Formulario TextLabel - + Etiqueta de texto can edit - + puede editar can share - + puede compartir ... - + ... create - + crear change - + Cambiar delete - + eliminar @@ -3804,7 +3804,7 @@ No se recomienda usarla. Form - + Formulario @@ -4164,12 +4164,12 @@ No se recomienda usarla. Could not open email client - + No se pudo abrir el cliente de correo There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Ocurrió un error al lanzar el cliente de correo electrónico para crear un nuevo mensaje. ¿Puede ser que no haya ningún cliente de correo electrónico configurado? \ No newline at end of file diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 1adc9833f..eecbfc77d 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ No hay una cuenta ownCloud configurada. - + The configured server for this client is too old La configuración del servidor al cliente es obsoleta - + Please update to the latest server and restart the client. Por favor actualice a la última versión del servidor y reinicie el cliente. - + Authentication error: Either username or password are wrong. Error de autentificación: el usuario o contraseña es incorrecta. - + timeout agotado - + The provided credentials are not correct Las credenciales otorgadas no son correctas @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Ingresar contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Formulario @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Cuenta @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Carpeta @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Copiar Time - + Hora File - + Archivo @@ -1889,7 +1889,7 @@ for additional privileges during the process. Connect to %1 - + Conectar a %1 @@ -1934,139 +1934,139 @@ It is not advisable to use it. <font color="green">Conectado a %1: versión de %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falló al conectarse a %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo excedido mientras se intentaba conectar a %1 desde %2. - + Trying to connect to %1 at %2... Intentando conectar a %1 en %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> El directorio de sincronización local %1 ya existe, configurándolo para la sincronización.<br/><br/> - + Creating local sync folder %1... - + ok aceptar - + failed. Error. - + Could not create local folder %1 No fue posible crear el directorio local %1 - + No remote folder specified! ¡No se ha especificado un directorio remoto! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 Creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. El directorio remoto %1 fue creado con éxito. - + The remote folder %1 already exists. Connecting it for syncing. El directorio remoto %1 ya existe. Estableciendo conexión para sincronizar. - - + + The folder creation resulted in HTTP error code %1 La creación del directorio resultó en un error HTTP con código de error %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto, probablemente porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Se prtodujo un error <tt>%2</tt> al crear el directorio remoto %1. - + A sync connection from %1 to remote directory %2 was set up. Fue creada una conexión de sincronización desde %1 al directorio remoto %2. - + Successfully connected to %1! Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No fue posible establecer la conexión a %1. Por favor, intentalo nuevamente. - + Folder rename failed Error Al Renombrar Directorio - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Directorio local %1 creado</b></font> @@ -2741,7 +2741,7 @@ It is not advisable to use it. Send link by email - + Mandar enlace por e-mail @@ -2799,7 +2799,7 @@ It is not advisable to use it. Send link by email - + Mandar enlace por e-mail @@ -2817,22 +2817,22 @@ It is not advisable to use it. Form - + Formulario TextLabel - + EtiquetaDeTexto can edit - + podés editar can share - + puede compartir @@ -2842,7 +2842,7 @@ It is not advisable to use it. create - + crear @@ -2852,7 +2852,7 @@ It is not advisable to use it. delete - + borrar @@ -3790,7 +3790,7 @@ It is not advisable to use it. Form - + Formulario diff --git a/translations/client_et.ts b/translations/client_et.ts index 1698e8054..abe871e8a 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Ühendus aegus - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Ühtegi ownCloud kontot pole seadistatud - + The configured server for this client is too old Seadistatud server on selle kliendi jaoks liiga vana - + Please update to the latest server and restart the client. Palun uuenda server viimasele versioonile ning taaskäivita klient. - + Authentication error: Either username or password are wrong. Autentimise tõrge: Kasutajanimi või parool on vale - + timeout aegumine - + The provided credentials are not correct Sisestatud kasutajatunnused pole õiged @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Sisesta parool - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Vorm @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Konto @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Kaust @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Kopeeri Time - + Aeg File - + Fail @@ -1889,7 +1889,7 @@ for additional privileges during the process. Connect to %1 - + Ühendu %1 @@ -1935,139 +1935,139 @@ Selle kasutamine pole soovitatav. <font color="green">Edukalt ühendatud %1: %2 versioon %3 (4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ühendumine ebaõnnestus %1 %2-st:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Püüan ühenduda %1 kohast %2 - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Kohalik kataloog %1 on juba olemas. Valmistan selle ette sünkroniseerimiseks. - + Creating local sync folder %1... Kohaliku kausta %1 sünkroonimise loomine ... - + ok ok - + failed. ebaõnnestus. - + Could not create local folder %1 Ei suuda tekitada kohalikku kataloogi %1 - + No remote folder specified! Ühtegi võrgukataloogi pole määratletud! - + Error: %1 Viga: %1 - + creating folder on ownCloud: %1 loon uue kataloogi ownCloudi: %1 - + Remote folder %1 created successfully. Eemalolev kaust %1 on loodud. - + The remote folder %1 already exists. Connecting it for syncing. Serveris on kataloog %1 juba olemas. Ühendan selle sünkroniseerimiseks. - - + + The folder creation resulted in HTTP error code %1 Kausta tekitamine lõppes HTTP veakoodiga %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Kataloogi loomine serverisse ebaõnnestus, kuna kasutajatõendid on valed!<br/>Palun kontrolli oma kasutajatunnust ja parooli.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Serveris oleva kataloogi tekitamine ebaõnnestus tõenäoliselt valede kasutajatunnuste tõttu.</font><br/>Palun mine tagasi ning kontrolli kasutajatunnust ning parooli.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Kataloogi %1 tekitamine serverisse ebaõnnestus veaga <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. Loodi sünkroniseerimisühendus kataloogist %1 serveri kataloogi %2 - + Successfully connected to %1! Edukalt ühendatud %1! - + Connection to %1 could not be established. Please check again. Ühenduse loomine %1 ebaõnnestus. Palun kontrolli uuesti. - + Folder rename failed Kataloogi ümbernimetamine ebaõnnestus - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ei suuda eemaldada ning varundada kataloogi kuna kataloog või selles asuv fail on avatud mõne teise programmi poolt. Palun sulge kataloog või fail ning proovi uuesti või katkesta paigaldus. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Kohalik kataloog %1 edukalt loodud!</b></font> @@ -2633,7 +2633,7 @@ Selle kasutamine pole soovitatav. Public Links - + Avalikud lingid @@ -2681,7 +2681,7 @@ Selle kasutamine pole soovitatav. Show file listing - + Näita failide nimekirja @@ -2742,7 +2742,7 @@ Selle kasutamine pole soovitatav. Send link by email - + Saada link e-postiga @@ -2800,7 +2800,7 @@ Selle kasutamine pole soovitatav. Send link by email - + Saada link e-postiga @@ -2818,42 +2818,42 @@ Selle kasutamine pole soovitatav. Form - + Vorm TextLabel - + Tekstisilt can edit - + saab muuta can share - + saab jagada ... - + ... create - + loo change - + muuda delete - + kustuta @@ -3793,7 +3793,7 @@ Selle kasutamine pole soovitatav. Form - + Vorm diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 299aaa2cb..a2732ea7f 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Konexioa denboraz kanpo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Ez dago ownCloud konturik konfiguratuta - + The configured server for this client is too old Bezero honentzako konfiguratutako zerbitzaria oso zaharra da - + Please update to the latest server and restart the client. Mesedez eguneratu zerbitzarira eta berrabiarazi bezeroa. - + Authentication error: Either username or password are wrong. Autentikazio errorea: Erabiltzaile izena edota pasahitza gaizki daude. - + timeout denbora iraungi da - + The provided credentials are not correct Emandako kredentzialak ez dira zuzenak @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Sartu Pasahitza - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1402,7 +1402,7 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Form - + Formularioa @@ -1412,7 +1412,7 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Account - + Kontua @@ -1424,7 +1424,7 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Folder - + Karpeta @@ -1444,17 +1444,17 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Copy - + Kopiatu Time - + Noiz File - + Fitxategia @@ -1891,7 +1891,7 @@ for additional privileges during the process. Connect to %1 - + %1ra konektatu @@ -1937,139 +1937,139 @@ Ez da gomendagarria erabltzea. <font color="green">Konexioa ongi burutu da %1 zerbitzarian: %2 bertsioa %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Denbora iraungi da %1era %2n konektatzen saiatzean. - + Trying to connect to %1 at %2... %2 zerbitzarian dagoen %1 konektatzen... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL Baliogabeko URLa - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Bertako %1 karpeta dagoeneko existitzen da, sinkronizaziorako prestatzen.<br/><br/> - + Creating local sync folder %1... Bertako %1 sinkronizazio karpeta sortzen... - + ok ados - + failed. huts egin du. - + Could not create local folder %1 Ezin da %1 karpeta lokala sortu - + No remote folder specified! Ez da urruneko karpeta zehaztu! - + Error: %1 Errorea: %1 - + creating folder on ownCloud: %1 ownClouden karpeta sortzen: %1 - + Remote folder %1 created successfully. Urruneko %1 karpeta ongi sortu da. - + The remote folder %1 already exists. Connecting it for syncing. Urruneko %1 karpeta dagoeneko existintzen da. Bertara konetatuko da sinkronizatzeko. - - + + The folder creation resulted in HTTP error code %1 Karpeta sortzeak HTTP %1 errore kodea igorri du - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Huts egin du urrutiko karpeta sortzen emandako kredintzialak ez direlako zuzenak!<br/> Egin atzera eta egiaztatu zure kredentzialak.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Urruneko karpeten sortzeak huts egin du ziuraski emandako kredentzialak gaizki daudelako.</font><br/>Mesedez atzera joan eta egiaztatu zure kredentzialak.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Urruneko %1 karpetaren sortzeak huts egin du <tt>%2</tt> errorearekin. - + A sync connection from %1 to remote directory %2 was set up. Sinkronizazio konexio bat konfiguratu da %1 karpetatik urruneko %2 karpetara. - + Successfully connected to %1! %1-era ongi konektatu da! - + Connection to %1 could not be established. Please check again. %1 konexioa ezin da ezarri. Mesedez egiaztatu berriz. - + Folder rename failed Karpetaren berrizendatzeak huts egin du - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ezin da karpeta ezabatu eta kopia egin, karpeta edo barruko fitxategiren bat beste programa batean irekita dagoelako. Mesedez itxi karpeta edo fitxategia eta sakatu berrekin edo ezeztatu konfigurazioa. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Bertako sinkronizazio %1 karpeta ongi sortu da!</b></font> @@ -2744,7 +2744,7 @@ Ez da gomendagarria erabltzea. Send link by email - + Bidali lotura posta bidez @@ -2802,7 +2802,7 @@ Ez da gomendagarria erabltzea. Send link by email - + Bidali lotura posta bidez @@ -2820,42 +2820,42 @@ Ez da gomendagarria erabltzea. Form - + Formularioa TextLabel - + TestuEtiketa can edit - + editatu dezake can share - + partekatu dezake ... - + ... create - + sortu change - + aldatu delete - + ezabatu @@ -3793,7 +3793,7 @@ Ez da gomendagarria erabltzea. Form - + Formularioa diff --git a/translations/client_fa.ts b/translations/client_fa.ts index fd91b4a62..935ca1cf7 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ - + The configured server for this client is too old - + Please update to the latest server and restart the client. - + Authentication error: Either username or password are wrong. - + timeout - + The provided credentials are not correct @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password رمز را وارد کنید - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + فرم @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + حساب کاربری @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + پوشه @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + کپی کردن Time - + زمان File - + فایل @@ -1889,7 +1889,7 @@ for additional privileges during the process. Connect to %1 - + متصل به %1 @@ -1934,139 +1934,139 @@ It is not advisable to use it. <font color="green"> با موفقیت متصل شده است به %1: %2 نسخه %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ارتباط ناموفق با %1 در %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... تلاش برای اتصال %1 به %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> پوشه همگام سازی محلی %1 در حال حاضر موجود است، تنظیم آن برای همگام سازی. <br/><br/> - + Creating local sync folder %1... - + ok خوب - + failed. ناموفق. - + Could not create local folder %1 نمی تواند پوشه محلی ایجاد کند %1 - + No remote folder specified! - + Error: %1 خطا: %1 - + creating folder on ownCloud: %1 ایجاد کردن پوشه بر روی ownCloud: %1 - + Remote folder %1 created successfully. پوشه از راه دور %1 با موفقیت ایجاد شده است. - + The remote folder %1 already exists. Connecting it for syncing. در حال حاضر پوشه از راه دور %1 موجود است. برای همگام سازی به آن متصل شوید. - - + + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ایجاد پوشه از راه دور ناموفق بود به علت اینکه اعتبارهای ارائه شده اشتباه هستند!<br/>لطفا اعتبارهای خودتان را بررسی کنید.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red"> ایجاد پوشه از راه دور ناموفق بود، شاید به علت اعتبارهایی که ارئه شده اند، اشتباه هستند.</font><br/> لطفا باز گردید و اعتبار خود را بررسی کنید.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. ایجاد پوشه از راه دور %1 ناموفق بود با خطا <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. یک اتصال همگام سازی از %1 تا %2 پوشه از راه دور راه اندازی شد. - + Successfully connected to %1! با موفقیت به %1 اتصال یافت! - + Connection to %1 could not be established. Please check again. اتصال به %1 نمی تواند مقرر باشد. لطفا دوباره بررسی کنید. - + Folder rename failed تغییر نام پوشه ناموفق بود - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b> پوشه همگام سازی محلی %1 با موفقیت ساخته شده است!</b></font> @@ -2741,7 +2741,7 @@ It is not advisable to use it. Send link by email - + لینک را توسط ایمیل بفرست. @@ -2799,7 +2799,7 @@ It is not advisable to use it. Send link by email - + لینک را توسط ایمیل بفرست. @@ -2817,22 +2817,22 @@ It is not advisable to use it. Form - + فرم TextLabel - + برچسب متنی can edit - + می توان ویرایش کرد can share - + قابل به اشتراک گذاری @@ -2842,17 +2842,17 @@ It is not advisable to use it. create - + ایجاد change - + تغییر delete - + حذف @@ -3790,7 +3790,7 @@ It is not advisable to use it. Form - + فرم diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 03e9d8c6e..736e2c26f 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Yhteys aikakatkaistiin - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ ownCloud-tiliä ei ole määritelty - + The configured server for this client is too old Määritelty palvelin on ohjelmistoversioltaan liian vanha tälle asiakasohjelmistolle - + Please update to the latest server and restart the client. Päivitä uusimpaan palvelinversioon ja käynnistä asiakasohjelmisto uudelleen. - + Authentication error: Either username or password are wrong. Tunnistautumisvirhe: käyttäjätunnus tai salasana on väärin. - + timeout aikakatkaisu - + The provided credentials are not correct Annetut tilitiedot eivät ole oikein @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Anna %1-salasana:<br><br>Käyttäjä: %2<br>Tili: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Anna salasana - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1402,7 +1402,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Form - + Lomake @@ -1412,7 +1412,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Account - + Tili @@ -1424,7 +1424,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Folder - + Kansio @@ -1444,17 +1444,17 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Copy - + Kopioi Time - + Aika File - + Tiedosto @@ -1891,7 +1891,7 @@ for additional privileges during the process. Connect to %1 - + Muodosta yhteys - %1 @@ -1937,139 +1937,139 @@ Osoitteen käyttäminen ei ole suositeltavaa. <font color="green">Muodostettu yhteys onnistuneesti kohteeseen %1: %2 versio %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Yhteys %1iin osoitteessa %2 epäonnistui:<br/>%3 - + Timeout while trying to connect to %1 at %2. Aikakatkaisu yrittäessä yhteyttä kohteeseen %1 osoitteessa %2. - + Trying to connect to %1 at %2... Yritetään yhdistetää palvelimeen %1 portissa %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request Todennettuun webdav-pyyntöön saatiin virheellinen vastaus - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Palvelin esti käyttämisen. Vahvista käyttöoikeutesi palvelimeen <a href="%1">napsauttamalla tästä</a> ja kirjaudu palveluun selaimella. - + Invalid URL Virheellinen verkko-osoite - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Paikallinen kansio %1 on jo olemassa, asetetaan se synkronoitavaksi.<br/><br/> - + Creating local sync folder %1... Luodaan paikallista synkronointikansiota %1... - + ok ok - + failed. epäonnistui. - + Could not create local folder %1 Paikalliskansion %1 luonti epäonnistui - + No remote folder specified! Etäkansiota ei määritelty! - + Error: %1 Virhe: %1 - + creating folder on ownCloud: %1 luodaan kansio ownCloudiin: %1 - + Remote folder %1 created successfully. Etäkansio %1 luotiin onnistuneesti. - + The remote folder %1 already exists. Connecting it for syncing. Etäkansio %1 on jo olemassa. Otetaan siihen yhteyttä tiedostojen täsmäystä varten. - - + + The folder creation resulted in HTTP error code %1 Kansion luonti aiheutti HTTP-virhekoodin %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Etäkansion luominen epäonnistui koska antamasi tunnus/salasana ei täsmää!<br/>Ole hyvä ja palaa tarkistamaan tunnus/salasana</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Pilvipalvelun etäkansion luominen ei onnistunut , koska tunnistautumistietosi ovat todennäköisesti väärin.</font><br/>Palaa takaisin ja tarkista käyttäjätunnus ja salasana.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Etäkansion %1 luonti epäonnistui, virhe <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Täsmäysyhteys kansiosta %1 etäkansioon %2 on asetettu. - + Successfully connected to %1! Yhteys kohteeseen %1 muodostettiin onnistuneesti! - + Connection to %1 could not be established. Please check again. Yhteyttä osoitteeseen %1 ei voitu muodostaa. Ole hyvä ja tarkista uudelleen. - + Folder rename failed Kansion nimen muuttaminen epäonnistui - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Paikallinen synkronointikansio %1 luotu onnistuneesti!</b></font> @@ -2744,7 +2744,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Send link by email - + Lähetä linkki sähköpostitse @@ -2802,7 +2802,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Send link by email - + Lähetä linkki sähköpostitse @@ -2820,42 +2820,42 @@ Osoitteen käyttäminen ei ole suositeltavaa. Form - + Lomake TextLabel - + TekstiLeima can edit - + voi muokata can share - + jaa ... - + ... create - + luo change - + muuta delete - + poista @@ -3795,7 +3795,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Form - + Lomake @@ -4155,7 +4155,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Could not open email client - + Sähköpostisovelluksen avaaminen epäonnistui diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 33af765a8..8ad4876d1 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Délai de connexion dépassé - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Aucun compte ownCloud configuré - + The configured server for this client is too old Le serveur configuré pour ce client est trop vieux - + Please update to the latest server and restart the client. Veuillez mettre à jour le serveur vers la dernière version et redémarrer le client. - + Authentication error: Either username or password are wrong. Erreur d'authentification: nom d'utilisateur et/ou mot de passe incorrect(s). - + timeout délai d'attente - + The provided credentials are not correct Les informations d'identification fournies ne sont pas correctes @@ -1310,22 +1310,22 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Merci de saisir le mot de passe de %1 :<br><br>Utilisateur : %2<br>Compte : %3<br> - + Reading from keychain failed with error: '%1' Erreur lors de l'accès au trousseau : '%1' - + Enter Password Saisissez le mot de passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. @@ -1412,7 +1412,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Form - + Form @@ -1422,7 +1422,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Account - + Compte @@ -1434,7 +1434,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Folder - + Dossier @@ -1454,17 +1454,17 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Copy - + Copier Time - + Heure File - + Fichier @@ -1902,7 +1902,7 @@ L'assistant peut demander des privilèges additionnels durant le processus. Connect to %1 - + Connexion à %1 @@ -1948,139 +1948,139 @@ Il est déconseillé de l'utiliser. <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Échec de la connexion à %1 sur %2 :<br/>%3 - + Timeout while trying to connect to %1 at %2. Délai d'attente dépassé lors de la connexion à %1 sur %2. - + Trying to connect to %1 at %2... Tentative de connexion à %1 sur %2 ... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La requête d'authentification vers le serveur a été redirigée vers '%1'. L'URL est erronée, le serveur est mal configuré. - + There was an invalid response to an authenticated webdav request Une réponse non valide a été reçue suite à une requête WebDav authentifiée. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès impossibe. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. - + Invalid URL URL invalide - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> - + Creating local sync folder %1... Création du dossier local de synchronisation %1... - + ok ok - + failed. échoué. - + Could not create local folder %1 Impossible de créer le dossier local %1 - + No remote folder specified! Aucun dossier distant spécifié ! - + Error: %1 Erreur : %1 - + creating folder on ownCloud: %1 création d'un dossier sur ownCloud : %1 - + Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. - + The remote folder %1 already exists. Connecting it for syncing. Le dossier distant %1 existe déjà. Connexion. - - + + The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. - + Successfully connected to %1! Connecté avec succès à %1 ! - + Connection to %1 could not be established. Please check again. La connexion à %1 n'a pu être établie. Veuillez réessayer. - + Folder rename failed Echec du renommage du dossier - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossible de supprimer et de sauvegarder le dossier parce que ce dossier ou un de ses fichiers est ouvert dans un autre programme. Veuillez fermer le dossier ou le fichier et ré-essayer, ou annuler l'installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> @@ -2641,12 +2641,12 @@ Il est déconseillé de l'utiliser. Users and Groups - + Utilisateurs et Groupes Public Links - + Liens publics @@ -2694,7 +2694,7 @@ Il est déconseillé de l'utiliser. Show file listing - + Montrer la liste des fichiers @@ -2755,7 +2755,7 @@ Il est déconseillé de l'utiliser. Send link by email - + Envoyer le lien par email @@ -2765,7 +2765,7 @@ Il est déconseillé de l'utiliser. Public link - + Lien public @@ -2813,7 +2813,7 @@ Il est déconseillé de l'utiliser. Send link by email - + Envoyer le lien par email @@ -2831,42 +2831,42 @@ Il est déconseillé de l'utiliser. Form - + Form TextLabel - + TextLabel can edit - + peut modifier can share - + peut partager ... - + ... create - + création change - + modification delete - + suppression @@ -3806,7 +3806,7 @@ Il est déconseillé de l'utiliser. Form - + Form @@ -4166,12 +4166,12 @@ Il est déconseillé de l'utiliser. Could not open email client - + Impossible d'ouvrir le client de messagerie There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Il y a eu une erreur lors du lancement du client de messagerie pour créer un nouveau message. Peut-être qu'aucun client de messagerie n'est configuré ? \ No newline at end of file diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 3ff42e260..63d449d96 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Esgotouse o tempo de conexión - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Non hai configurada ningunha conta ownCloud - + The configured server for this client is too old O servidor configurado para este cliente é moi antigo - + Please update to the latest server and restart the client. Actualice ao último servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Produciuse un erro de autenticación: Ou o nome de usuario ou o contrasinal poderían ser erróneos - + timeout caducidade - + The provided credentials are not correct As credenciais fornecidas non son correctas @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' A lectura do chaveiro fallou co erro: «%1» - + Enter Password Escriba o contrasinal - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Formulario @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Conta @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Cartafol @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Copiar Time - + Hora File - + Ficheiro @@ -1890,7 +1890,7 @@ actualización pode pedir privilexios adicionais durante o procedemento. Connect to %1 - + Conectar con %1 @@ -1936,139 +1936,139 @@ Recomendámoslle que non o use. <font color="green">Conectouse correctamente a %1: %2 versión %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Non foi posíbel conectar con %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Esgotouse o tempo tentando conectarse a %1 en %2... - + Trying to connect to %1 at %2... Tentando conectarse a %1 en %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. A solicitude autenticada no servidor foi redirixida a «%1», O URL é incorrecto, o servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Deuse unha resposta incorrecta a unha solicitude de WebDAV autenticada - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso prohibido polo servidor. Para comprobar que dispón do acceso axeitado, <a href="%1">prema aquí</a> para acceder ao servizo co seu navegador. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> O cartafol de sincronización local %1 xa existe. Configurándoo para a sincronización.<br/><br/> - + Creating local sync folder %1... Creando un cartafol local de sincronización %1... - + ok aceptar - + failed. fallou. - + Could not create local folder %1 Non foi posíbel crear o cartafol local %1 - + No remote folder specified! Non foi especificado o cartafol remoto! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 creando o cartafol en ownCloud: %1 - + Remote folder %1 created successfully. O cartafol remoto %1 creouse correctamente. - + The remote folder %1 already exists. Connecting it for syncing. O cartafol remoto %1 xa existe. Conectándoo para a sincronización. - - + + The folder creation resulted in HTTP error code %1 A creación do cartafol resultou nun código de erro HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A creación do cartafol remoto fracasou por por de seren incorrectas as credenciais!<br/>Volva atrás e comprobe as súas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A creación do cartafol remoto fallou probabelmente debido a que as credenciais que se deron non foran as correctas.</font><br/>Volva atrás e comprobe as súas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Produciuse un fallo ao crear o cartafol remoto %1 e dou o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Estabeleceuse a conexión de sincronización de %1 ao directorio remoto %2. - + Successfully connected to %1! Conectou satisfactoriamente con %1 - + Connection to %1 could not be established. Please check again. Non foi posíbel estabelecer a conexión con %1. Compróbeo de novo. - + Folder rename failed Non foi posíbel renomear o cartafol - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Non é posíbel retirar e facer unha copia de seguranza do cartafol, xa que o cartafol ou un ficheiro está aberto noutro programa Peche o cartafol ou o ficheiro e ténteo de novo, ou cancele a acción. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>O cartafol local de sincronización %1 creouse correctamente!</b></font> @@ -2629,7 +2629,7 @@ Recomendámoslle que non o use. Users and Groups - + Usuarios e grupos @@ -2743,7 +2743,7 @@ Recomendámoslle que non o use. Send link by email - + Enviar a ligazón por correo @@ -2801,7 +2801,7 @@ Recomendámoslle que non o use. Send link by email - + Enviar a ligazón por correo @@ -2819,42 +2819,42 @@ Recomendámoslle que non o use. Form - + Formulario TextLabel - + Etiqueta de texto can edit - + pode editar can share - + pode compartir ... - + ... create - + crear change - + cambio delete - + eliminar @@ -3794,7 +3794,7 @@ Recomendámoslle que non o use. Form - + Formulario diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 5ae7bdab2..9959e61a2 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + A kapcsolat időtúllépés miatt megszakadt - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Nincs ownCloud fiók beállítva - + The configured server for this client is too old A beállított szerver ehhez a klienshez túl régi - + Please update to the latest server and restart the client. Kérjük, frissítse a szervert az utolsó verzióra és indítsa újra a klienst. - + Authentication error: Either username or password are wrong. Hitelesítési hiba: A felhasználónév vagy a jelszó hibás. - + timeout időtúllépés - + The provided credentials are not correct A megadott adatok helytelenek. @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Jelszómegadás - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Űrlap @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Fiók @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Mappa @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Másolás Time - + Idő File - + Fájl @@ -1889,7 +1889,7 @@ for additional privileges during the process. Connect to %1 - + Csatlakozás: %1 @@ -1934,139 +1934,139 @@ It is not advisable to use it. <font color="green">Sikeresen csatlakozott az %1-hoz: %2 verziószám %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Próbál kapcsolódni az %1-hoz: %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL Érvénytelen URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A helyi %1 mappa már létezik, állítsa be a szinkronizálódását.<br/><br/> - + Creating local sync folder %1... - + ok ok - + failed. sikertelen. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 Hiba: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. %1 távoli nappa sikeresen létrehozva. - + The remote folder %1 already exists. Connecting it for syncing. A %1 távoli mappa már létezik. Csatlakoztassa a szinkronizációhoz. - - + + The folder creation resulted in HTTP error code %1 A könyvtár létrehozásakor keletkezett HTTP hibakód %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A távoli mappa létrehozása sikertelen, valószínűleg mivel hibásak a megdott hitelesítési adatok.</font><br/>Lépjen vissza és ellenőrizze a belépési adatokat.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A távoli %1 mappa létrehozása nem sikerült. Hibaüzenet: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A szinkronizációs kapcsolat a %1 és a %2 távoli mappa között létrejött. - + Successfully connected to %1! Sikeresen csatlakozva: %1! - + Connection to %1 could not be established. Please check again. A kapcsolat a %1 kiszolgálóhoz sikertelen. Ellenőrizze újra. - + Folder rename failed A mappa átnevezése nem sikerült - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Helyi %1 szinkronizációs mappa sikeresen létrehozva!</b></font> @@ -2741,7 +2741,7 @@ It is not advisable to use it. Send link by email - + Link küldése e-mail-ben @@ -2799,7 +2799,7 @@ It is not advisable to use it. Send link by email - + Link küldése e-mail-ben @@ -2817,42 +2817,42 @@ It is not advisable to use it. Form - + Űrlap TextLabel - + TextLabel can edit - + szerkesztheti can share - + megoszthatja ... - + ... create - + létrehozás change - + módosít delete - + töröl @@ -3791,7 +3791,7 @@ It is not advisable to use it. Form - + Űrlap diff --git a/translations/client_it.ts b/translations/client_it.ts index 999f3bf1f..43e7113ca 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Connessione scaduta - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Nessun account ownCloud configurato. - + The configured server for this client is too old Il server configurato per questo client è troppo datato - + Please update to the latest server and restart the client. Aggiorna all'ultima versione del server e riavvia il client. - + Authentication error: Either username or password are wrong. Errore di autenticazione: nome utente o password errati. - + timeout timeout - + The provided credentials are not correct Le credenziali fornite non sono corrette @@ -1305,22 +1305,22 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Digita la password di %1:<br><br>Utente: '%2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' Lettura dal portachiavi non riuscita con errore: '%1' - + Enter Password Digita password - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Fai clic qui</a> per richiedere una password dell'applicazione dall'interfaccia web. @@ -1407,7 +1407,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Form - + Modulo @@ -1417,7 +1417,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Account - + Account @@ -1429,7 +1429,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Folder - + Cartella @@ -1449,17 +1449,17 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Copy - + Copia Time - + Ora File - + File @@ -1896,7 +1896,7 @@ for additional privileges during the process. Connect to %1 - + Connetti a %1 @@ -1942,139 +1942,139 @@ Non è consigliabile utilizzarlo. <font color="green">Connesso correttamente a %1: %2 versione %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Connessione a %1 su %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo scaduto durante il tentativo di connessione a %1 su %2. - + Trying to connect to %1 at %2... Tentativo di connessione a %1 su %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La richiesta autenticata al server è stata rediretta a '%1'. L'URL è errato, il server non è configurato correttamente. - + There was an invalid response to an authenticated webdav request Ricevuta una risposta non valida a una richiesta webdav autenticata. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accesso negato dal server. Per verificare di avere i permessi appropriati, <a href="%1">fai clic qui</a> per accedere al servizio con il tuo browser. - + Invalid URL URL non valido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La cartella di sincronizzazione locale %1 esiste già, impostata per la sincronizzazione.<br/><br/> - + Creating local sync folder %1... Creazione della cartella locale di sincronizzazione %1... - + ok ok - + failed. non riuscita. - + Could not create local folder %1 Impossibile creare la cartella locale %1 - + No remote folder specified! Nessuna cartella remota specificata! - + Error: %1 Errore: %1 - + creating folder on ownCloud: %1 creazione cartella su ownCloud: %1 - + Remote folder %1 created successfully. La cartella remota %1 è stata creata correttamente. - + The remote folder %1 already exists. Connecting it for syncing. La cartella remota %1 esiste già. Connessione in corso per la sincronizzazione - - + + The folder creation resulted in HTTP error code %1 La creazione della cartella ha restituito un codice di errore HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La creazione della cartella remota non è riuscita poiché le credenziali fornite sono errate!<br/>Torna indietro e verifica le credenziali.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creazione della cartella remota non è riuscita probabilmente perché le credenziali fornite non sono corrette.</font><br/>Torna indietro e controlla le credenziali inserite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creazione della cartella remota %1 non riuscita con errore <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una connessione di sincronizzazione da %1 alla cartella remota %2 è stata stabilita. - + Successfully connected to %1! Connesso con successo a %1! - + Connection to %1 could not be established. Please check again. La connessione a %1 non può essere stabilita. Prova ancora. - + Folder rename failed Rinomina della cartella non riuscita - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossibile rimuovere o creare una copia di sicurezza della cartella poiché la cartella o un file in essa contenuto è aperta in un altro programma. Chiudi la cartella o il file e premi Riprova o annulla la configurazione. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Cartella locale %1 creata correttamente!</b></font> @@ -2635,12 +2635,12 @@ Non è consigliabile utilizzarlo. Users and Groups - + Utenti e Gruppi Public Links - + Collegamenti pubblici @@ -2688,7 +2688,7 @@ Non è consigliabile utilizzarlo. Show file listing - + Mostra elenco dei file @@ -2749,7 +2749,7 @@ Non è consigliabile utilizzarlo. Send link by email - + Invia collegamento tramite email @@ -2759,7 +2759,7 @@ Non è consigliabile utilizzarlo. Public link - + Collegamento pubblico @@ -2807,7 +2807,7 @@ Non è consigliabile utilizzarlo. Send link by email - + Invia collegamento tramite email @@ -2825,42 +2825,42 @@ Non è consigliabile utilizzarlo. Form - + Modulo TextLabel - + EtichettaTesto can edit - + può modificare can share - + può condividere ... - + ... create - + crea change - + cambia delete - + elimina @@ -3800,7 +3800,7 @@ Non è consigliabile utilizzarlo. Form - + Modulo @@ -4160,12 +4160,12 @@ Non è consigliabile utilizzarlo. Could not open email client - + Impossibile aprire il client di posta There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Si è verificato un errore durante l'avvio del client di posta per creare un nuovo messaggio. Forse non hai ancora configurato alcun client di posta predefinito? \ No newline at end of file diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 351566f43..2f684cd76 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + 接続タイムアウト - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ ownCloudアカウントが設定されていません - + The configured server for this client is too old このクライアントのサーバー設定は古すぎます。 - + Please update to the latest server and restart the client. サーバーを最新にアップデートして、クライアントを再起動してください。 - + Authentication error: Either username or password are wrong. 認証エラー: ユーザー名またはパスワードが間違っています。 - + timeout タイムアウト - + The provided credentials are not correct 入力された資格情報が正しくありません @@ -1307,22 +1307,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> %1 のパスワードを入力してください:<br> <br>ユーザー:%2<br>アカウント:%3<br> - + Reading from keychain failed with error: '%1' 鍵情報の読み込みに失敗しました。エラー: '%1' - + Enter Password パスワードを入力してください - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">ここをクリック</a>してウェブインターフェースからアプリパスワードをリクエストしてください。 @@ -1409,7 +1409,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + フォーム @@ -1419,7 +1419,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + アカウント @@ -1431,7 +1431,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + フォルダー @@ -1451,17 +1451,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + コピー Time - + 時刻 File - + ファイル @@ -1898,7 +1898,7 @@ for additional privileges during the process. Connect to %1 - + %1 に接続中 @@ -1943,139 +1943,139 @@ It is not advisable to use it. <font color="green">正常に %1 へ接続されました:%2 バージョン %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 の %1 に接続に失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 の %1 へ接続を試みた際にタイムアウトしました。 - + Trying to connect to %1 at %2... %2 の %1 へ接続を試みています... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. サーバーへの認証リクエストは '%1' へリダイレクトされました。URLは不正です、サーバーの設定に誤りがあります。 - + There was an invalid response to an authenticated webdav request 認証された WebDav リクエストに不正な応答がありました - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. サーバーによってアクセスが拒否されています。適切なアクセス権があるか検証するには、<a href="%1">ここをクリック</a>してブラウザーでサービスにアクセスしてください。 - + Invalid URL 無効なURL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ローカルの同期フォルダー %1 はすでに存在するため、同期の設定をしてください。<br/><br/> - + Creating local sync folder %1... ローカル同期フォルダー %1 を作成中... - + ok OK - + failed. 失敗。 - + Could not create local folder %1 ローカルフォルダー %1 を作成できませんでした - + No remote folder specified! リモートフォルダーが指定されていません! - + Error: %1 エラー: %1 - + creating folder on ownCloud: %1 ownCloud上にフォルダーを作成中: %1 - + Remote folder %1 created successfully. リモートフォルダー %1 は正常に生成されました。 - + The remote folder %1 already exists. Connecting it for syncing. リモートフォルダー %1 はすでに存在します。同期のために接続しています。 - - + + The folder creation resulted in HTTP error code %1 フォルダーの作成はHTTPのエラーコード %1 で終了しました - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 指定された資格情報が間違っているため、リモートフォルダーの作成に失敗しました!<br/>前に戻って資格情報を確認してください。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">おそらく資格情報が間違っているため、リモートフォルダーの作成に失敗しました。</font><br/>前に戻り、資格情報をチェックしてください。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. リモートフォルダー %1 の作成がエラーで失敗しました。<tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. %1 からリモートディレクトリ %2 への同期接続を設定しました。 - + Successfully connected to %1! %1への接続に成功しました! - + Connection to %1 could not be established. Please check again. %1 への接続を確立できませんでした。もう一度確認してください。 - + Folder rename failed フォルダー名の変更に失敗しました。 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. フォルダーまたはその中にあるファイルが他のプログラムで開かれているため、フォルダーの削除やバックアップができません。フォルダーまたはファイルを閉じてから再試行するか、セットアップをキャンセルしてください。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ローカルの同期フォルダー %1 は正常に作成されました!</b></font> @@ -2636,12 +2636,12 @@ It is not advisable to use it. Users and Groups - + ユーザーとグループ Public Links - + 公開リンク @@ -2689,7 +2689,7 @@ It is not advisable to use it. Show file listing - + ファイルリストを表示 @@ -2750,7 +2750,7 @@ It is not advisable to use it. Send link by email - + メールでリンクを送信 @@ -2808,7 +2808,7 @@ It is not advisable to use it. Send link by email - + メールでリンクを送信 @@ -2826,42 +2826,42 @@ It is not advisable to use it. Form - + フォーム TextLabel - + テキストラベル can edit - + 編集を許可 can share - + 共有可 ... - + create - + 作成 change - + 更新 delete - + 削除 @@ -3801,7 +3801,7 @@ It is not advisable to use it. Form - + フォーム @@ -4161,12 +4161,12 @@ It is not advisable to use it. Could not open email client - + 電子メールクライアントを開くことができませんでした There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + メールクライアントを起動して新しいメッセージを作成するときにエラーが発生しました。デフォルトのメールクライアントが設定されていませんか? \ No newline at end of file diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 14cd40ab4..11d84ff8e 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Forbindelsen fikk tidsavbrudd - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Ingen ownCloud-konter konfigurert - + The configured server for this client is too old Den konfigurerte serveren for denne klienten er for gammel - + Please update to the latest server and restart the client. Vennligst oppdatert til den nyeste serveren og start klienten på nytt. - + Authentication error: Either username or password are wrong. Autentiseringsfeil: Bruker navn eller passord er feil. - + timeout tidsavbrudd - + The provided credentials are not correct Oppgitt påloggingsinformasjon er feil @@ -1308,22 +1308,22 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Legg inn %1-passord:<br><br>Bruker: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Lesing fra nøkkelring feilet med feil: '%1' - + Enter Password Legg inn passord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikk her</a> for å be om et app-passord fra web-grensesnittet. @@ -1410,7 +1410,7 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Form - + Skjema @@ -1420,7 +1420,7 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Account - + Konto @@ -1432,7 +1432,7 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Folder - + Mappe @@ -1452,17 +1452,17 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Copy - + Kopier Time - + Tid File - + Fil @@ -1900,7 +1900,7 @@ kan be om flere rettigheter under behandlingen. Connect to %1 - + Koble til %1 @@ -1946,139 +1946,139 @@ Det er ikke tilrådelig å bruke den. <font color="green">Vellykket oppkobling mot %1: %2 versjon %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Klarte ikke å koble til %1 på %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tidsavbrudd ved oppkobling mot %1 på %2. - + Trying to connect to %1 at %2... Prøver å koble til %1 på %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Autentisert forespørsel til serveren ble omdirigert til '%1'. URL-en er ugyldig, serveren er feilkonfigurert. - + There was an invalid response to an authenticated webdav request Det kom et uventet svar fra en autentisert webdav-forespørsel. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Tilgang forbudt av serveren. For å sjekke om du har gyldig tilgang, <a href="%1">klikk her</a> for å aksessere tjenesten med nettleseren din. - + Invalid URL Ugyldig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkroniseringsmappe %1 finnes allerede. Setter den opp for synkronisering.<br/><br/> - + Creating local sync folder %1... Oppretter lokal synkroniseringsmappe %1... - + ok ok - + failed. feilet. - + Could not create local folder %1 Klarte ikke å opprette lokal mappe %1 - + No remote folder specified! Ingen ekstern mappe spesifisert! - + Error: %1 Feil: %1 - + creating folder on ownCloud: %1 oppretter mappe på ownCloud: %1 - + Remote folder %1 created successfully. Ekstern mappe %1 ble opprettet. - + The remote folder %1 already exists. Connecting it for syncing. Ekstern mappe %1 finnes allerede. Kobler den til for synkronisering. - - + + The folder creation resulted in HTTP error code %1 Oppretting av mappe resulterte i HTTP-feilkode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Oppretting av ekstern mappe feilet fordi påloggingsinformasjonen er feil!<br/>Gå tilbake og sjekk brukernavnet og passordet ditt.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Oppretting av ekstern mappe feilet, sannsynligvis fordi oppgitt påloggingsinformasjon er feil.</font><br/>Vennligst gå tilbake og sjekk ditt brukernavn og passord.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Oppretting av ekstern mappe %1 feilet med feil <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsforbindelse fra %1 til ekstern mappe %2 ble satt opp. - + Successfully connected to %1! Forbindelse til %1 opprettet! - + Connection to %1 could not be established. Please check again. Klarte ikke å etablere forbindelse til %1. Sjekk igjen. - + Folder rename failed Omdøping av mappe feilet - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan ikke fjerne og sikkerhetskopiere mappen fordi mappen eller en fil i mappen er åpen i et annet program. Lukk mappen eller filen og prøv igjen, eller avbryt oppsettet. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Oppretting av lokal synkroniseringsmappe %1 vellykket!</b></font> @@ -2639,12 +2639,12 @@ Det er ikke tilrådelig å bruke den. Users and Groups - + Brukere og grupper Public Links - + Offentlige lenker @@ -2692,7 +2692,7 @@ Det er ikke tilrådelig å bruke den. Show file listing - + Vis filoppføringer @@ -2753,7 +2753,7 @@ Det er ikke tilrådelig å bruke den. Send link by email - + Send link i e-post @@ -2763,7 +2763,7 @@ Det er ikke tilrådelig å bruke den. Public link - + Offentlig lenke @@ -2811,7 +2811,7 @@ Det er ikke tilrådelig å bruke den. Send link by email - + Send link i e-post @@ -2829,42 +2829,42 @@ Det er ikke tilrådelig å bruke den. Form - + Skjema TextLabel - + Tekst-etikett can edit - + kan endre can share - + kan dele ... - + ... create - + opprette change - + endre delete - + slett @@ -3804,7 +3804,7 @@ Det er ikke tilrådelig å bruke den. Form - + Skjema @@ -4164,12 +4164,12 @@ Det er ikke tilrådelig å bruke den. Could not open email client - + Klarte ikke å åpne epost-klient There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Det oppstod en feil ved oppstart av epost-klienten for å lage en ny melding. Kanskje ingen standard epost-klient er konfigurert? \ No newline at end of file diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 37a5d6ee6..cad9f3150 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Time-out verbinding - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Geen ownCloud-account geconfigureerd - + The configured server for this client is too old De voor dit programma ingestelde server is te oud - + Please update to the latest server and restart the client. Werk de server bij naar de nieuwste versie en herstart het programma. - + Authentication error: Either username or password are wrong. Authenticatiefout: Gebruikersnaam of wachtwoord onjuist. - + timeout time-out - + The provided credentials are not correct De verstrekte inloggegevens zijn niet juist @@ -1309,7 +1309,7 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Voer %1 wachtwoord in: @@ -1318,17 +1318,17 @@ Account: %3 - + Reading from keychain failed with error: '%1' Het lezen van de sleutelketen is mislukt met fout: '%1' - + Enter Password Vul het wachtwoord in - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. @@ -1415,7 +1415,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Form - + Formulier @@ -1425,7 +1425,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Account - + Account @@ -1437,7 +1437,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Folder - + Map @@ -1457,17 +1457,17 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Copy - + Kopiëren Time - + Tijd File - + Bestand @@ -1905,7 +1905,7 @@ vragen om extra autorisaties tijdens installatie. Connect to %1 - + Verbinden met %1 @@ -1951,139 +1951,139 @@ We adviseren deze site niet te gebruiken. <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Kon geen verbinding maken met %1 op %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Time-out bij verbinden met %1 om %2. - + Trying to connect to %1 at %2... Probeer te verbinden met %1 om %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. De geauthentiseerde aanvraag voor de server werd omgeleid naar '%1'. De URL is onjuist, de server is verkeerd geconfigureerd. - + There was an invalid response to an authenticated webdav request Er was een ongeldig antwoord op een geauthenticeerde webdav opvraging - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat u toegang mag hebben, <a href="%1">klik hier</a> om met uw browser toegang tot de service te krijgen. - + Invalid URL Ongeldige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokale synch map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> - + Creating local sync folder %1... Creëren lokale sync map %1... - + ok ok - + failed. mislukt. - + Could not create local folder %1 Kon lokale map %1 niet aanmaken - + No remote folder specified! Geen externe map opgegeven! - + Error: %1 Fout: %1 - + creating folder on ownCloud: %1 aanmaken map op ownCloud: %1 - + Remote folder %1 created successfully. Externe map %1 succesvol gecreërd. - + The remote folder %1 already exists. Connecting it for syncing. De remote map %1 bestaat al. Verbinden voor synchroniseren. - - + + The folder creation resulted in HTTP error code %1 Het aanmaken van de map resulteerde in HTTP foutcode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.<br/>Ga terug en controleer uw inloggegevens.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.</font><br/>ga terug en controleer uw inloggevens.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Aanmaken van remote map %1 mislukt met fout <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Er is een sync verbinding van %1 naar remote directory %2 opgezet. - + Successfully connected to %1! Succesvol verbonden met %1! - + Connection to %1 could not be established. Please check again. Verbinding met %1 niet geslaagd. Probeer het nog eens. - + Folder rename failed Hernoemen map mislukt - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan de map niet verwijderen en backuppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> @@ -2644,12 +2644,12 @@ We adviseren deze site niet te gebruiken. Users and Groups - + Gebruikers en Groepen Public Links - + Openbare Links @@ -2697,7 +2697,7 @@ We adviseren deze site niet te gebruiken. Show file listing - + Tonen bestandenlijst @@ -2758,7 +2758,7 @@ We adviseren deze site niet te gebruiken. Send link by email - + Versturen links via e-mail @@ -2768,7 +2768,7 @@ We adviseren deze site niet te gebruiken. Public link - + Openbare Link @@ -2816,7 +2816,7 @@ We adviseren deze site niet te gebruiken. Send link by email - + Versturen links via e-mail @@ -2834,42 +2834,42 @@ We adviseren deze site niet te gebruiken. Form - + Formulier TextLabel - + Tekstlabel can edit - + kan wijzigen can share - + kan delen ... - + ... create - + creëer change - + wijzig delete - + verwijderen @@ -3809,7 +3809,7 @@ We adviseren deze site niet te gebruiken. Form - + Formulier @@ -4169,12 +4169,12 @@ We adviseren deze site niet te gebruiken. Could not open email client - + Kon e-mailclient niet openen There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Er trad een fout op bij het starten van de e-mailclient om een nieuw bericht te maken. Misschien is er geen e-mailclient gedefinieerd? \ No newline at end of file diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 5a29fe3eb..fd5cb76aa 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Przekroczono czas odpowiedzi - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Nie skonfigurowano konta ownCloud - + The configured server for this client is too old Konfigurowany serwer dla tego klienta jest za stary - + Please update to the latest server and restart the client. Proszę zaaktualizować serwer do najnowszej wersji i zrestartować klienta. - + Authentication error: Either username or password are wrong. Błąd autentykacji: nazwa użytkownika lub hasło są nieprawidłowe. - + timeout wygaśnięcie - + The provided credentials are not correct Podane dane logowania są nieprawidłowe @@ -1302,22 +1302,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Wprowadź %1 hasło:<br><br>Użytkownik:%2<br>Konto:%3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Wprowadź hasło - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1404,7 +1404,7 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Form - + Formularz @@ -1414,7 +1414,7 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Account - + Konto @@ -1426,7 +1426,7 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Folder - + Folder @@ -1446,17 +1446,17 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Copy - + Kopiuj Time - + Czas File - + Plik @@ -1894,7 +1894,7 @@ o dodatkowe uprawnienia podczas procesu aktualizacji. Connect to %1 - + Podłącz do %1 @@ -1940,139 +1940,139 @@ Niezalecane jest jego użycie. <font color="green">Udane połączenie z %1: %2 wersja %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Nie udało się połączyć do %1 w %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Upłynął czas podczas próby połączenia do %1 na %2. - + Trying to connect to %1 at %2... Próba połączenia z %1 w %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Dostęp zabroniony przez serwer. Aby sprawdzić, czy masz odpowiednie uprawnienia, kliknij <a href="%1">tutaj</a>, aby połączyć się z usługą poprzez przeglądarkę. - + Invalid URL Błędny adres url. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokalny folder synchronizacji %1 już istnieje. Ustawiam go do synchronizacji.<br/><br/> - + Creating local sync folder %1... Tworzenie lokalnego folderu synchronizacji %1... - + ok OK - + failed. Błąd. - + Could not create local folder %1 Nie udało się utworzyć lokalnego folderu %1 - + No remote folder specified! Nie określono folderu zdalnego! - + Error: %1 Błąd: %1 - + creating folder on ownCloud: %1 tworzę folder na ownCloud: %1 - + Remote folder %1 created successfully. Zdalny folder %1 został utworzony pomyślnie. - + The remote folder %1 already exists. Connecting it for syncing. Zdalny folder %1 już istnieje. Podłączam go do synchronizowania. - - + + The folder creation resulted in HTTP error code %1 Tworzenie folderu spowodowało kod błędu HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Nie udało się utworzyć zdalnego folderu ponieważ podane dane dostępowe są nieprawidłowe!<br/>Wróć i sprawdź podane dane dostępowe.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Tworzenie folderu zdalnego nie powiodło się. Prawdopodobnie dostarczone poświadczenia są błędne.</font><br/>Wróć i sprawdź poświadczenia.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Tworzenie folderu zdalnego %1 nie powiodło się z powodu błędu <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Połączenie synchronizacji z %1 do katalogu zdalnego %2 zostało utworzone. - + Successfully connected to %1! Udane połączenie z %1! - + Connection to %1 could not be established. Please check again. Połączenie z %1 nie może być nawiązane. Sprawdź ponownie. - + Folder rename failed Zmiana nazwy folderu nie powiodła się - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nie można usunąć i zarchiwizować folderu ponieważ znajdujący się w nim plik lub folder jest otwarty przez inny program. Proszę zamknąć folder lub plik albo kliknąć ponów lub anuluj setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Utworzenie lokalnego folderu synchronizowanego %1 zakończone pomyślnie!</b></font> @@ -2633,12 +2633,12 @@ Niezalecane jest jego użycie. Users and Groups - + Użytkownicy i grupy Public Links - + Linki publiczne @@ -2686,7 +2686,7 @@ Niezalecane jest jego użycie. Show file listing - + Pokaż kolejno listę plików @@ -2747,7 +2747,7 @@ Niezalecane jest jego użycie. Send link by email - + Wyślij link mailem @@ -2805,7 +2805,7 @@ Niezalecane jest jego użycie. Send link by email - + Wyślij link mailem @@ -2823,42 +2823,42 @@ Niezalecane jest jego użycie. Form - + Formularz TextLabel - + Etykieta can edit - + może edytować can share - + może współdzielić ... - + ... create - + utwórz change - + zmiany delete - + usuń @@ -3798,7 +3798,7 @@ Niezalecane jest jego użycie. Form - + Formularz @@ -4159,7 +4159,7 @@ Kliknij Could not open email client - + Nie można uruchomić klienta email diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 243e3f303..cd0131b33 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + A ligação expirou - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Não foi configurada nenhuma conta ownCloud - + The configured server for this client is too old O servidor configurado para este cliente é muito antigo - + Please update to the latest server and restart the client. Por favor, atualize para a ultima versão do servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Erro de autenticação: o nome de utilizador ou a palavra-passe estão errados. - + timeout tempo expirado - + The provided credentials are not correct As credenciais fornecidas não estão corretas @@ -1309,22 +1309,22 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor, insira a palavra-passe %1:<br><br>Utilizador: %2<br>Conta: %3<br> - + Reading from keychain failed with error: '%1' A leitura da cadeia de dados falhou com um erro: '%1' - + Enter Password Insira a Palavra-passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma palavra-passe da aplicação a partir da interface da Web. @@ -1411,7 +1411,7 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Form - + Formulário @@ -1421,7 +1421,7 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Account - + Conta @@ -1433,7 +1433,7 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Folder - + Pasta @@ -1453,17 +1453,17 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Copy - + Copiar Time - + Tempo File - + Ficheiro @@ -1901,7 +1901,7 @@ poderá pedir por privilégios adicionais durante o processo. Connect to %1 - + Ligar a %1 @@ -1947,139 +1947,139 @@ Não é aconselhada a sua utilização. <font color="green">Ligado com sucesso a %1: %2 - versão: %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Não foi possível ligar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo expirou enquanto tentava ligar a %1 em %2. - + Trying to connect to %1 at %2... A tentar ligar a %1 em %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. O pedido de autenticação para o servidor foi redirecionado para '%1'. O URL é mau, o servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Houve uma resposta inválida para o pedido de autenticação webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acesso proibido pelo servidor. Para verificar que tem o acesso adequado, <a href="%1">clique aqui</a> para aceder ao serviço com o seu navegador. - + Invalid URL URL inválido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A pasta de sincronização local %1 já existe, a configurar para sincronizar.<br/><br/> - + Creating local sync folder %1... A criar a pasta de sincronização local %1... - + ok ok - + failed. Falhou. - + Could not create local folder %1 Não foi possível criar a pasta local %1 - + No remote folder specified! Não foi indicada a pasta remota! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 a criar a pasta na ownCloud: %1 - + Remote folder %1 created successfully. Criação da pasta remota %1 com sucesso! - + The remote folder %1 already exists. Connecting it for syncing. A pasta remota %1 já existe. Ligue-a para sincronizar. - - + + The folder creation resulted in HTTP error code %1 A criação da pasta resultou num erro HTTP com o código %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.<br/>Por favor, verifique as suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.</font><br/>Por favor, verifique as suas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A criação da pasta remota %1 falhou com o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A sincronização de %1 com a pasta remota %2 foi criada com sucesso. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Não foi possível ligar a %1 . Por Favor verifique novamente. - + Folder rename failed Erro ao renomear a pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup à pasta porque a pasta ou um ficheiro nesta está aberto em outro programa. Por favor, feche a pasta ou o ficheiro e clique novamente ou cancele a configuração. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -2640,12 +2640,12 @@ Não é aconselhada a sua utilização. Users and Groups - + Utilizadores e Grupos Public Links - + Ligações públicas @@ -2693,7 +2693,7 @@ Não é aconselhada a sua utilização. Show file listing - + Mostrar listagem de ficheiros @@ -2754,7 +2754,7 @@ Não é aconselhada a sua utilização. Send link by email - + Enviar hiperligação por e-mail @@ -2764,7 +2764,7 @@ Não é aconselhada a sua utilização. Public link - + Hiperligação Pública @@ -2812,7 +2812,7 @@ Não é aconselhada a sua utilização. Send link by email - + Enviar hiperligação por e-mail @@ -2830,42 +2830,42 @@ Não é aconselhada a sua utilização. Form - + Formulário TextLabel - + EtiquetaTexto can edit - + pode editar can share - + pode partilhar ... - + ... create - + criar change - + alterar delete - + eliminar @@ -3805,7 +3805,7 @@ Não é aconselhada a sua utilização. Form - + Formulário @@ -4165,12 +4165,12 @@ Não é aconselhada a sua utilização. Could not open email client - + Não foi possivel abrir o cliente de email There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Ocorreu um erro ao lançar o cliente de email para criar uma nova mensagem. Talvez nenhum cliente de email esteja configurado? \ No newline at end of file diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index f2788a152..3019fabb8 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -83,20 +83,20 @@ OCC::AbstractNetworkJob - - - Connection timed out - - - Unknown error: network reply was deleted - + Connection timed out + Conexão expirou - + + Unknown error: network reply was deleted + Erro desconhecido: a resposta da rede foi excluída + + + Server replied "%1 %2" to "%3 %4" - + Resposta do servidor "%1 %2" to "%3 %4" @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + Servidor %1 está atualmente em modo de manutenção. @@ -261,12 +261,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Obtendo autorização do navegador. <a href='%1'>Clique aqui</a> para reabrir o navegador. Connecting to %1... - + Conectando a %1... @@ -381,7 +381,7 @@ Maintenance mode - + Modo de manutenção @@ -396,7 +396,7 @@ Asking Credentials - + Solicitando Credenciais @@ -617,27 +617,27 @@ Nenhuma conta ownCloud configurada - + The configured server for this client is too old O servidor configurado para este cliente é muito antigo - + Please update to the latest server and restart the client. Por favor, atualize para o último servidor e reinicie o cliente. - + Authentication error: Either username or password are wrong. Erro de autenticação. Ou nome de usuário ou senha está errada. - + timeout tempo limite - + The provided credentials are not correct As credenciais fornecidas não estão corretas @@ -1001,7 +1001,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej There are unresolved conflicts. Click for details. - + Existem conflitos não resolvidos. Clique para detalhes. @@ -1011,7 +1011,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Reconciling changes - + Reconciliando mudanças @@ -1308,22 +1308,22 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Por favor entre uma senha %1:<br><br>Usuário: %2<br>Conta: %3<br> - + Reading from keychain failed with error: '%1' Leitura de chaveiro falhou com o erro: '%1' - + Enter Password Entrar Senha - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma senha de aplicativo na interface da web. @@ -1410,64 +1410,64 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um Form - + Formulário List of issues - + Lista de problemas Account - + Conta <no filter> - + <no filter> Folder - + Pasta Show warnings - + Mostrar avisos Show ignored files - + Mostrar arquivos ignorados Copy the issues list to the clipboard. - + Copie a lista de problemas para a área de transferência. Copy - + Copiar Time - + Horário File - + Arquivo Issue - + Problemas @@ -1490,7 +1490,7 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um &Capture debug messages - + &Mensagens de depuração de captura @@ -1712,32 +1712,32 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um Error returned from the server: <em>%1</em> - + Erro retornado do servidor: <em>%1</em> There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Ocorreu um erro ao acessar o ponto final do token: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> - + Não foi possível analisar o JSON retornado do servidor: <br><em>%1</em> The reply from the server did not contain all expected fields - + A resposta do servidor não continha todos os campos esperados <h1>Login Error</h1><p>%1</p> - + <h1>Erro de Login</h1><p>%1</p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + <h1>Usuário errado</h1><p>Você fez logon com o usuário <em>%1</em>, mas deve fazer login com o usuário <em>%2</em>.<br>Faça o logout de %3 em outra guia, então<a href='%4'>clique aqui</a> e faça o login como usuário%2</p> @@ -1899,12 +1899,12 @@ for additional privileges during the process. Connect to %1 - + Conectar a %1 Login in your browser - + Faça login no seu navegador @@ -1944,139 +1944,139 @@ It is not advisable to use it. <font color="green">Conectado com sucesso a %1: %2 versão %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falha ao conectar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. O tempo expirou ao tentar contactar %1 e %2. - + Trying to connect to %1 at %2... Tentando conectar a %1 em %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. A solicitação de autenticação ao servidor foi direcionada para '%1'. A URL está errada, a configuração do servidor está errada. - + There was an invalid response to an authenticated webdav request Houve uma resposta inválida a um pedido de autenticação WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acesso proibido pelo servidor. Para verificar se você tem acesso adequado, <a href="%1">clique aqui</a> para acessar o serviço com o seu navegador. - + Invalid URL URL inválida - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Pasta local de sincronização %1 já existe, configurando para sincronização. <br/><br/> - + Creating local sync folder %1... Criação de pasta de sincronização local %1... - + ok ok - + failed. falhou. - + Could not create local folder %1 Não foi possível criar pasta local %1 - + No remote folder specified! Nenhuma pasta remota foi especificada! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 criar pasta no ownCloud: %1 - + Remote folder %1 created successfully. Pasta remota %1 criada com sucesso. - + The remote folder %1 already exists. Connecting it for syncing. Pasta remota %1 já existe. Conectando para sincronizar. - - + + The folder creation resulted in HTTP error code %1 A criação da pasta resultou em um erro do código HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou porque as credenciais fornecidas estão erradas!<br/>Por favor, volte e verifique suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação remota de pasta falhou provavelmente as causas da falha na criação da pasta remota são credenciais erradas</font><br/>Volte e verifique suas credenciais, por favor.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Falha na criação da pasta remota %1 com erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Uma conexão de sincronização de %1 para o diretório remoto %2 foi realizada. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Conexão à %1 não foi estabelecida. Por favor, verifique novamente. - + Folder rename failed Falha no nome da pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup da pasta porque a pasta ou um arquivo que está nesta pasta está aberto em outro programa. Por favor, feche a pasta ou arquivo e clique tentar novamente ou cancelar a operação. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -2138,7 +2138,7 @@ It is not advisable to use it. The download would reduce free local disk space below the limit - + O download reduziria o espaço livre no disco local abaixo do limite @@ -2324,7 +2324,7 @@ It is not advisable to use it. Upload of %1 exceeds the quota for the folder - + O envio de %1 excede a quota da pasta @@ -2637,12 +2637,12 @@ It is not advisable to use it. Users and Groups - + Usuários e Grupos Public Links - + Linques Públicos @@ -2665,12 +2665,12 @@ It is not advisable to use it. Enter a name to create a new public link... - + Digite um nome para criar um novo lique público... &Create new - + &Criar um novo @@ -2685,12 +2685,12 @@ It is not advisable to use it. Link properties: - + Propriedades do linque: Show file listing - + Mostrar lista de arquivos @@ -2721,47 +2721,47 @@ It is not advisable to use it. %1 link - + %1 linque Link shares have been disabled - + Os compartilhamentos de linque foram desativados Create public link share - + Criar linque de compartilhamento público Open link in browser - + Abrir linque no navegador Copy link to clipboard - + Copiar o linque para a área de transferência Copy link to clipboard (direct download) - + Copiar o linque para a área de transferência (download direto) Send link by email - + Enviar linque por e-mail Send link by email (direct download) - + Enviar linque por e-mail (download direto) Public link - + Linque público @@ -2789,27 +2789,27 @@ It is not advisable to use it. <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> - + <html><head/><body><p>Você pode direcionar as pessoas para esse arquivo ou pasta compartilhada<a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">dando-lhes um linque privado</span></a>.</p></body></html> The item is not shared with any users or groups - + O item não está compartilhado com usuários ou grupos Open link in browser - + Abrir linque no navegador Copy link to clipboard - + Copiar o linque para a área de transferência Send link by email - + Enviar linque por e-mail @@ -2819,7 +2819,7 @@ It is not advisable to use it. I shared something with you - + Eu compartilhei algo com você @@ -2827,42 +2827,42 @@ It is not advisable to use it. Form - + Formulário TextLabel - + RótuloTexto can edit - + pode editar can share - + pode compartilhar ... - + ... create - + criar change - + mudar delete - + excluir @@ -2912,22 +2912,22 @@ It is not advisable to use it. I shared something with you - + Eu compartilhei algo com você Share... - + Compartilhar... Copy private link to clipboard - + Copie o linque privado para a área de transferência Send private link by email... - + Envie o linque privado por e-mail... @@ -3215,7 +3215,7 @@ It is not advisable to use it. %1 (skipped due to earlier error, trying again in %2) - + %1 (ignorado devido a um erro anterior, tentando novamente em %2) @@ -3225,12 +3225,12 @@ It is not advisable to use it. Folder hierarchy is too deep - + A hierarquia de pastas é muito profunda Conflict: Server version downloaded, local copy renamed and not uploaded. - + Conflito: Versão do servidor baixada, cópia local renomeada e não carregada. @@ -3241,7 +3241,7 @@ It is not advisable to use it. Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. @@ -3256,12 +3256,12 @@ It is not advisable to use it. Disk space is low: Downloads that would reduce free space below %1 were skipped. - + O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. There is insufficient space available on the server for some uploads. - + Há espaço disponível no servidor para alguns envios. @@ -3802,22 +3802,22 @@ It is not advisable to use it. Form - + Formulário Please switch to your browser to proceed. - + Mude para o seu navegador para prosseguir. An error occured while connecting. Please try again. - + Ocorreu um erro durante a conexão. Tente novamente. Re-open Browser - + Reabrir o navegador @@ -4152,22 +4152,22 @@ It is not advisable to use it. Could not open browser - + Não foi possível abrir o navegador There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + Ocorreu um erro ao iniciar o navegador para ir ao endereço URL %1. Talvez nenhum navegador padrão esteja configurado? Could not open email client - + Não foi possível abrir o cliente de e-mail There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Ocorreu um erro ao iniciar o cliente de e-mail para criar uma nova mensagem. Talvez nenhum cliente de e-mail padrão esteja configurado? \ No newline at end of file diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 4f8f4711a..5edbb53ff 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -83,18 +83,18 @@ OCC::AbstractNetworkJob - - - Connection timed out - - - Unknown error: network reply was deleted - + Connection timed out + Время ожидания соединения превышено - + + Unknown error: network reply was deleted + Неизвестная ошибка: сетевой ответ был удален + + + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Учётная запись OwnCloud не настроена - + The configured server for this client is too old Настроенный сервер слишком стар для этого клиента - + Please update to the latest server and restart the client. Обновите сервер до последней версии и перезапустите клиент. - + Authentication error: Either username or password are wrong. Ошибка авторизации: Имя пользователя или пароль не верны. - + timeout тайм-аут - + The provided credentials are not correct Введённые учётные данные не верны @@ -1307,22 +1307,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Пожалуйста введите пароль для %1:<br><br>Пользователь: %2<br>Учётная запись: %3<br> - + Reading from keychain failed with error: '%1' Чтение из брелока завершилось с ошибкой: '%1' - + Enter Password Введите пароль - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Кликните здесь</a> чтобы запросить пароль приложения через веб-интерфейс. @@ -1408,7 +1408,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Форма @@ -1418,19 +1418,19 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Уч.запись <no filter> - + <no filter> Folder - + Папка @@ -1450,17 +1450,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Копировать Time - + Время File - + Файл @@ -1898,7 +1898,7 @@ for additional privileges during the process. Connect to %1 - + Подключиться к %1 @@ -1944,139 +1944,139 @@ It is not advisable to use it. <font color="green">Успешное подключение к %1: %2 версия %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не удалось подключиться к %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Превышено время ожидания соединения к %1 на %2. - + Trying to connect to %1 at %2... Попытка соединиться с %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Запрос авторизации с сервера перенаправлен на '%1'. Ссылка не верна, сервер не настроен. - + There was an invalid response to an authenticated webdav request Обнаружен не верный ответ на авторизованный запрос WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Доступ запрещён сервером. Чтобы доказать, что у Вас есть права доступа, <a href="%1">нажмите здесь</a> для входа через Ваш браузер. - + Invalid URL Неверная ссылка - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальный каталог синхронизации %1 уже существует, используем его для синхронизации.<br/><br/> - + Creating local sync folder %1... Создание локальной папки синхронизации %1... - + ok ок - + failed. не удалось. - + Could not create local folder %1 Не удалось создать локальный каталог синхронизации %1 - + No remote folder specified! Не указан удалённый каталог! - + Error: %1 Ошибка: %1 - + creating folder on ownCloud: %1 создание каталога на ownCloud: %1 - + Remote folder %1 created successfully. Удалённый каталог %1 успешно создан. - + The remote folder %1 already exists. Connecting it for syncing. Удалённый каталог %1 уже существует. Подключение к нему для синхронизации. - - + + The folder creation resulted in HTTP error code %1 Создание каталога завершилось с HTTP-ошибкой %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Не удалось создать удаленный каталог, так как представленные параметры доступа неверны!<br/>Пожалуйста, вернитесь назад и проверьте учетные данные.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Не удалось создать удаленный каталог, возможно, указанные учетные данные неверны.</font><br/>Вернитесь назад и проверьте учетные данные.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Удаленный каталог %1 не создан из-за ошибки <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Установлено соединение синхронизации %1 к удалённому каталогу %2. - + Successfully connected to %1! Соединение с %1 установлено успешно! - + Connection to %1 could not be established. Please check again. Не удалось соединиться с %1. Попробуйте снова. - + Folder rename failed Ошибка переименования каталога - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Невозможно удалить каталог и создать его резервную копию, каталог или файл в ней открыт в другой программе. Закройте каталог или файл и нажмите "Повторить попытку", либо прервите мастер настройки. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальный каталог синхронизации %1 успешно создан!</b></font> @@ -2637,12 +2637,12 @@ It is not advisable to use it. Users and Groups - + Пользователи и группы Public Links - + Общедоступные ссылки @@ -2690,7 +2690,7 @@ It is not advisable to use it. Show file listing - + Показать список файлов @@ -2751,7 +2751,7 @@ It is not advisable to use it. Send link by email - + Отправить ссылку по email @@ -2761,7 +2761,7 @@ It is not advisable to use it. Public link - + Общедоступная ссылка @@ -2809,7 +2809,7 @@ It is not advisable to use it. Send link by email - + Отправить ссылку по email @@ -2827,42 +2827,42 @@ It is not advisable to use it. Form - + Форма TextLabel - + TextLabel can edit - + можно редактировать can share - + можно поделиться ... - + ... create - + создать change - + изменить delete - + удалить @@ -3802,7 +3802,7 @@ It is not advisable to use it. Form - + Форма @@ -4162,12 +4162,12 @@ It is not advisable to use it. Could not open email client - + Не удалось открыть почтового клиента There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + При запуске почтового клиента для создания нового сообщения произошла ошибка. Возможно, почтовый клиент по умолчанию не настроен? \ No newline at end of file diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 1e061b3d9..9c6ba1a01 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Pripojenie expirovalo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Žiadny účet v ownCloude nie je nastavený - + The configured server for this client is too old Server nakonfigurovaný pre tohto klienta je príliš starý - + Please update to the latest server and restart the client. Prosím aktualizujte na najnovšiu verziu servera a reštartujte klienta. - + Authentication error: Either username or password are wrong. Chyba overenia: Používateľské meno alebo heslo nie je správne. - + timeout vypršal časový limit - + The provided credentials are not correct Poskytnuté poverenia nie sú správne @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Vložte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Formulár @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Účet @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Priečinok @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Kopírovať Time - + Čas File - + Súbor @@ -1890,7 +1890,7 @@ môžu byť vyžadované dodatočné oprávnenia. Connect to %1 - + Pripojiť sa k %1 @@ -1936,139 +1936,139 @@ Nie je vhodné ju používať. <font color="green">Úspešne pripojené k %1: %2 verzie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Zlyhalo spojenie s %1 o %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Časový limit vypršal pri pokuse o pripojenie k %1 na %2. - + Trying to connect to %1 at %2... Pokúšam sa o pripojenie k %1 na %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Overená požiadavka na server bola presmerovaná na '%1'. URL je zlá, server nie je správne nakonfigurovaný. - + There was an invalid response to an authenticated webdav request Neplatná odpoveď na overenú webdav požiadavku - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Prístup zamietnutý serverom. Po overení správnych prístupových práv, <a href="%1">kliknite sem</a> a otvorte službu v svojom prezerači. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokálny synchronizačný priečinok %1 už existuje, prebieha jeho nastavovanie pre synchronizáciu.<br/><br/> - + Creating local sync folder %1... Vytváranie lokálneho synchronizačného priečinka %1 ... - + ok v poriadku - + failed. neúspešné. - + Could not create local folder %1 Nemožno vytvoriť lokálny priečinok %1 - + No remote folder specified! Vzdialený priečinok nie je nastavený! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytváram priečinok v ownCloude: %1 - + Remote folder %1 created successfully. Vzdialený priečinok %1 bol úspešne vytvorený. - + The remote folder %1 already exists. Connecting it for syncing. Vzdialený priečinok %1 už existuje. Prebieha jeho pripájanie pre synchronizáciu. - - + + The folder creation resulted in HTTP error code %1 Vytváranie priečinka skončilo s HTTP chybovým kódom %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Proces vytvárania vzdialeného priečinka zlyhal, lebo použité prihlasovacie údaje nie sú správne!<br/>Prosím skontrolujte si vaše údaje a skúste to znovu.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvorenie vzdialeného priečinka pravdepodobne zlyhalo kvôli nesprávnym prihlasovacím údajom.</font><br/>Prosím choďte späť a skontrolujte ich.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytvorenie vzdialeného priečinka %1 zlyhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Synchronizačné spojenie z %1 do vzdialeného priečinka %2 bolo práve nastavené. - + Successfully connected to %1! Úspešne pripojené s %1! - + Connection to %1 could not be established. Please check again. Pripojenie k %1 nemohlo byť iniciované. Prosím skontrolujte to znovu. - + Folder rename failed Premenovanie priečinka zlyhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nemožno odstrániť a zazálohovať priečinok, pretože priečinok alebo súbor je otvorený v inom programe. Prosím zatvorte priečinok nebo súbor a skúste to znovu alebo zrušte akciu. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokálny synchronizačný priečinok %1 bol úspešne vytvorený!</b></font> @@ -2743,7 +2743,7 @@ Nie je vhodné ju používať. Send link by email - + Odoslať odkaz emailom @@ -2801,7 +2801,7 @@ Nie je vhodné ju používať. Send link by email - + Odoslať odkaz emailom @@ -2819,42 +2819,42 @@ Nie je vhodné ju používať. Form - + Formulár TextLabel - + Štítok can edit - + môže upraviť can share - + môže zdieľať ... - + ... create - + vytvoriť change - + zmeniť delete - + vymazať @@ -3794,7 +3794,7 @@ Nie je vhodné ju používať. Form - + Formulár diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 999827fb0..a3a4f05bf 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Povezava je časovno potekla - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Ni nastavljenega računa v oblaku ownCloud - + The configured server for this client is too old Nastavljen strežnik tega odjemalca je prestar. - + Please update to the latest server and restart the client. Posodobite strežnik in ponovno zaženite odjemalca. - + Authentication error: Either username or password are wrong. Napaka overitve: uporabniško ime ali geslo je napačno. - + timeout časovni zamik - + The provided credentials are not correct Podana poverila niso pravilna. @@ -1309,22 +1309,22 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vnesite geslo %1:<br><br>Uporabnik: %2<br>Račun: %3<br> - + Reading from keychain failed with error: '%1' Branje iz ključa je spodletelo z napako: '%1' - + Enter Password Vnos gesla - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Kliknite tu</a> za dodelitev gesla za program prek spletnega vmesnika. @@ -1411,7 +1411,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Form - + Obrazec @@ -1421,7 +1421,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Account - + Račun @@ -1433,7 +1433,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Folder - + Mapa @@ -1453,17 +1453,17 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Copy - + Kopiraj Time - + Čas File - + Datoteka @@ -1901,7 +1901,7 @@ zahteva skrbniška dovoljenja za dokončanje opravila. Connect to %1 - + Vzpostavi povezavo s strežnikom %1 @@ -1947,139 +1947,139 @@ Uporaba ni priporočljiva. <font color="green">Uspešno vzpostavljena povezava z %1: %2 različica %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Povezava z %1 pri %2 je spodletela:<br/>%3 - + Timeout while trying to connect to %1 at %2. Prekinitev med poskusom povezave na %1 pri %2. - + Trying to connect to %1 at %2... Poteka poskus povezave z %1 na %2 ... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Zahteva za overitev s strežnikom je bila preusmerjena na '%1'. Naslov URL ni veljaven ali pa strežnik ni ustrezno nastavljen. - + There was an invalid response to an authenticated webdav request Prejet je neveljaven odziv na zahtevo overitve webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Strežnik ne dovoli dostopa. Če želite preveriti, ali imate ustrezen dostop, <a href="%1">kliknite tu</a> za dostop do te storitve z brskalnikom. - + Invalid URL Neveljaven naslov URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Krajevna mapa %1 že obstaja. Nastavljena bo za usklajevanje.<br/><br/> - + Creating local sync folder %1... Ustvarjanje mape za krajevno usklajevanje %1 ... - + ok je v redu - + failed. je spodletelo. - + Could not create local folder %1 Krajevne mape %1 ni mogoče ustvariti. - + No remote folder specified! Ni navedenega oddaljenega strežnika! - + Error: %1 Napaka: %1 - + creating folder on ownCloud: %1 ustvarjanje mape v oblaku ownCloud: %1 - + Remote folder %1 created successfully. Oddaljena mapa %1 je uspešno ustvarjena. - + The remote folder %1 already exists. Connecting it for syncing. Oddaljena mapa %1 že obstaja. Vzpostavljena bo povezava za usklajevanje. - - + + The folder creation resulted in HTTP error code %1 Ustvarjanje mape je povzročilo napako HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ustvarjanje mape na oddaljenem naslovu je spodletelo zaradi napačnih poveril. <br/>Vrnite se in preverite zahtevana gesla.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Ustvarjanje oddaljene mape je spodletelo. Najverjetneje je vzrok v neustreznih poverilih.</font><br/>Vrnite se na predhodno stran in jih preverite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Ustvarjanje oddaljene mape %1 je spodletelo z napako <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Povezava za usklajevanje med %1 in oddaljeno mapo %2 je vzpostavljena. - + Successfully connected to %1! Povezava z %1 je uspešno vzpostavljena! - + Connection to %1 could not be established. Please check again. Povezave z %1 ni mogoče vzpostaviti. Preveriti je treba nastavitve. - + Folder rename failed Preimenovanje mape je spodletelo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Mape ni mogoče odstraniti niti ni mogoče ustvariti varnostne kopije, saj je mapa oziroma dokument v njej odprt z drugim programom. Zaprite mapo/dokument ali prekinite namestitev. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Krajevno usklajena mapa %1 je uspešno ustvarjena!</b></font> @@ -2640,12 +2640,12 @@ Uporaba ni priporočljiva. Users and Groups - + Uporabnik in skupine Public Links - + Javne povezave @@ -2693,7 +2693,7 @@ Uporaba ni priporočljiva. Show file listing - + Pokaži izpis datoteke @@ -2754,7 +2754,7 @@ Uporaba ni priporočljiva. Send link by email - + Pošlji povezavo po elektronski pošti @@ -2764,7 +2764,7 @@ Uporaba ni priporočljiva. Public link - + Javna povezava @@ -2812,7 +2812,7 @@ Uporaba ni priporočljiva. Send link by email - + Pošlji povezavo po elektronski pošti @@ -2830,42 +2830,42 @@ Uporaba ni priporočljiva. Form - + Obrazec TextLabel - + Besedilna oznaka can edit - + lahko ureja can share - + lahko omogoči souporabo ... - + ... create - + ustvari change - + spremeni delete - + izbriši @@ -3805,7 +3805,7 @@ Uporaba ni priporočljiva. Form - + Obrazec @@ -4165,12 +4165,12 @@ Uporaba ni priporočljiva. Could not open email client - + Ni mogoče odpreti odjemalca elektronske pošte There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Prišlo je do napake med zaganjanjem odjemalca elektronske pošte za ustvarjanje novega sporočila. Najverjetneje ni nastavljen privzet programski paket. \ No newline at end of file diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 29f8ec585..28abcf4cc 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Време повезивања истекло - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Нема подешеног оунКлауд налога - + The configured server for this client is too old Подешени сервер је сувише стар за ову верзију клијента - + Please update to the latest server and restart the client. Ажурирајте сервер и поново покрените клијента. - + Authentication error: Either username or password are wrong. Грешка аутентификације: лозинка или корисничко име су погрешни. - + timeout истек времена - + The provided credentials are not correct Дати акредитиви нису исправни @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Унесите лозинку - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Образац @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Налог @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + фасцикла @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Копирај Time - + време File - + фајл @@ -1890,7 +1890,7 @@ for additional privileges during the process. Connect to %1 - + Повежи %1 @@ -1936,139 +1936,139 @@ It is not advisable to use it. <font color="green">Успешно повезан са %1: %2 верзија %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Неуспешно повезивање са %1 на %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Време је истекло у покушају повезивања са %1 на %2. - + Trying to connect to %1 at %2... Покушавам да се повежем са %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Аутентификован захтев серверу је преусмерен на %1. УРЛ је лош, сервер је лоше подешен. - + There was an invalid response to an authenticated webdav request Добијен је неисправан одговор на аутентификовани ВебДАВ захтев - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Сервер није дозволио приступ. Да проверите имате ли исправан приступ, <a href="%1">кликните овде</a> да бисте приступили услузи из прегледача. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локална фасцикла %1 већ постоји. Одређујем је за синхронизацију.<br/><br/> - + Creating local sync folder %1... Правим локалну фасциклу синхронизације %1... - + ok у реду - + failed. неуспешно - + Could not create local folder %1 Не могу да направим локалну фасциклу %1 - + No remote folder specified! Није наведена удаљена фасцикла! - + Error: %1 Грешка: %1 - + creating folder on ownCloud: %1 правим фасциклу у облаку: % 1 - + Remote folder %1 created successfully. Удаљена фасцикла %1 је успешно направљена. - + The remote folder %1 already exists. Connecting it for syncing. Удаљена фасцикла %1 већ постоји. Повезујем се ради синхронизовања. - - + + The folder creation resulted in HTTP error code %1 Прављење фасцикле довело је до ХТТП грешке са кодом %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Прављење удаљене фасцикле није успело због погрешних акредитива!<br/>Идите назад и проверите ваше акредитиве.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Прављење удаљене фасцикле није успело због погрешних акредитива.</font><br/>Идите назад и проверите ваше акредитиве.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Прављење удаљене фасцикле %1 није успело због грешке <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Веза за синхронизацију %1 до удаљеног директоријума %2 је подешена. - + Successfully connected to %1! Успешно повезан са %1! - + Connection to %1 could not be established. Please check again. Не може се успоставити веза са %1. Проверите поново. - + Folder rename failed Преименовање није успело - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Не могу да уклоним и направим резервну копију фасцикле јер су фасцикла или фајл отворени у другом програму. Затворите фасциклу или фајл и покушајте поново или одустаните од подешавања. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локална фасцикла за синхронизовање %1 је успешно направљена!</b></font> @@ -2743,7 +2743,7 @@ It is not advisable to use it. Send link by email - + Пошаљи везу е-поштом @@ -2801,7 +2801,7 @@ It is not advisable to use it. Send link by email - + Пошаљи везу е-поштом @@ -2819,42 +2819,42 @@ It is not advisable to use it. Form - + Образац TextLabel - + Текст ознака can edit - + може да мења can share - + може да дели ... - + ... create - + направи change - + измени delete - + обриши @@ -3794,7 +3794,7 @@ It is not advisable to use it. Form - + Образац diff --git a/translations/client_sv.ts b/translations/client_sv.ts index b295891cc..3a77efaec 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Tidsgräns för anslutningen överskreds - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Inget ownCloud konto konfigurerat - + The configured server for this client is too old Den konfigurerade servern är för den här klienten är för gammal - + Please update to the latest server and restart the client. Uppgradera servern och starta sedan om klienten. - + Authentication error: Either username or password are wrong. Autentiseringsfel: Användarnamn eller lösenord är felaktigt - + timeout timeout - + The provided credentials are not correct De angivna uppgifterna stämmer ej @@ -1302,22 +1302,22 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> Vänligen ange %1 lösenord:<br><br>Användare: %2<br>Konto: %3<br> - + Reading from keychain failed with error: '%1' Avläsning från kedjan misslyckades med felkod: '%1' - + Enter Password Ange lösenord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicka här</a> för att begära ett app-lösenord från webbgränssnittet. @@ -1404,7 +1404,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Form - + Form @@ -1414,7 +1414,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Account - + Konto @@ -1426,7 +1426,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Folder - + Mapp @@ -1446,17 +1446,17 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Copy - + Kopiera Time - + Tid File - + Fil @@ -1894,7 +1894,7 @@ ytterligare rättigheter under processen. Connect to %1 - + Anslut till %1 @@ -1940,139 +1940,139 @@ Det är inte lämpligt använda den. <font color="green">Lyckades ansluta till %1: %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Misslyckades att ansluta till %1 vid %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Försök att ansluta till %1 på %2 tog för lång tid. - + Trying to connect to %1 at %2... Försöker ansluta till %1 på %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Den autentiserade begäran till servern omdirigerades till '%1'. Den URLen är ogiltig, server är felkonfigurerad. - + There was an invalid response to an authenticated webdav request Det kom ett ogiltigt svar på en autentiserad webdav-begäran - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Åtkomst förbjuden av servern. För att bekräfta att du har korrekta rättigheter, <a href="%1">klicka här</a> för att ansluta till tjänsten med din webb-läsare. - + Invalid URL Ogiltig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkmapp %1 finns redan, aktiverar den för synk.<br/><br/> - + Creating local sync folder %1... Skapar lokal synk-mapp %1... - + ok ok - + failed. misslyckades. - + Could not create local folder %1 Kunde inte skapa lokal mapp %1 - + No remote folder specified! Ingen fjärrmapp specificerad! - + Error: %1 Fel: %1 - + creating folder on ownCloud: %1 skapar mapp på ownCloud: %1 - + Remote folder %1 created successfully. Fjärrmapp %1 har skapats. - + The remote folder %1 already exists. Connecting it for syncing. Fjärrmappen %1 finns redan. Ansluter den för synkronisering. - - + + The folder creation resulted in HTTP error code %1 Skapande av mapp resulterade i HTTP felkod %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Det gick inte att skapa mappen efter som du inte har tillräckliga rättigheter!<br/>Vänligen återvänd och kontrollera dina rättigheter. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Misslyckades skapa fjärrmappen, troligen p.g.a felaktiga inloggningsuppgifter.</font><br/>Kontrollera dina inloggningsuppgifter.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Misslyckades skapa fjärrmapp %1 med fel <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsanslutning från %1 till fjärrmappen %2 har skapats. - + Successfully connected to %1! Ansluten till %1! - + Connection to %1 could not be established. Please check again. Anslutningen till %1 kunde inte etableras. Var god kontrollera och försök igen. - + Folder rename failed Omdöpning av mapp misslyckades - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan inte ta bort och göra en säkerhetskopia av mappen på grund av att mappen eller en fil i den används av ett annat program. Vänligen stäng mappen eller filen och försök igen eller avbryt installationen. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokal synkmapp %1 skapad!</b></font> @@ -2633,12 +2633,12 @@ Det är inte lämpligt använda den. Users and Groups - + Användare och grupper Public Links - + Publika länkar @@ -2686,7 +2686,7 @@ Det är inte lämpligt använda den. Show file listing - + Visa fillistning @@ -2747,7 +2747,7 @@ Det är inte lämpligt använda den. Send link by email - + Skicka länk via e-post @@ -2805,7 +2805,7 @@ Det är inte lämpligt använda den. Send link by email - + Skicka länk via e-post @@ -2823,42 +2823,42 @@ Det är inte lämpligt använda den. Form - + Form TextLabel - + Textetikett can edit - + kan redigera can share - + får dela ... - + ... create - + skapa change - + ändra delete - + radera @@ -3798,7 +3798,7 @@ Det är inte lämpligt använda den. Form - + Form @@ -4158,12 +4158,12 @@ Det är inte lämpligt använda den. Could not open email client - + Kunde inte öppna e-postklient There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Det uppstod ett fel när e-postklienten skulle startas för att skapa ett nytt meddelande. Kanske är ingen standard-e-postklient konfigurerad? \ No newline at end of file diff --git a/translations/client_th.ts b/translations/client_th.ts index 3a3c6be62..db07d91f2 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + หมดเวลาการเชื่อมต่อ - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ ไม่มีการกำหนดค่าบัญชี ownCloud - + The configured server for this client is too old การกำหนดค่าเซิร์ฟเวอร์สำหรับไคลเอ็นต์นี้เก่าเกินไป - + Please update to the latest server and restart the client. กรุณาอัพเดทเซิร์ฟเวอร์ใหม่ใหม่ที่สุดและรีสตาร์ทไคลเอนต์ - + Authentication error: Either username or password are wrong. ข้อผิดพลาดในการตรวจสอบ: ทั้งชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง - + timeout หมดเวลา - + The provided credentials are not correct ระบุข้อมูลประจำตัวไม่ถูกต้อง @@ -1311,22 +1311,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> กรุณากรอกรหัสผ่าน %1:<br><br>ผู้ใช้: %2<br>บัญชี: %3<br> - + Reading from keychain failed with error: '%1' อ่านจาก Keychain ล้มเหลวด้วยข้อผิดพลาด: '%1' - + Enter Password ป้อนรหัสผ่าน - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">คลิกที่นี่</a> เพื่อขอรหัสผ่านแอพฯ จากเว็บอินเตอร์เฟส @@ -1413,7 +1413,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + แบบฟอร์ม @@ -1423,7 +1423,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + บัญชี @@ -1435,7 +1435,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + แฟ้มเอกสาร @@ -1455,17 +1455,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + คัดลอก Time - + เวลา File - + ไฟล์ @@ -1902,7 +1902,7 @@ for additional privileges during the process. Connect to %1 - + เชื่อมต่อไปยัง %1 @@ -1948,139 +1948,139 @@ It is not advisable to use it. <font color="green">เชื่อมต่อกับ %1: %2 รุ่น %3 (%4) เสร็จเรียบร้อยแล้ว</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ล้มเหลวในการเชื่อมต่อไปยัง %1 ที่ %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. หมดเวลาขณะที่พยายามเชื่อมต่อไปยัง %1 ที่ %2 - + Trying to connect to %1 at %2... กำลังพยายามเชื่อมต่อไปที่ %1 ที่ %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. คำขอการรับรองความถูกต้องไปยังเซิร์ฟเวอร์ที่ถูกเปลี่ยนเส้นทางไปยัง - + There was an invalid response to an authenticated webdav request มีการตอบสนองที่ไม่ถูกต้องที่จะร้องขอการรับรองความถูกต้องของ WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. การเข้าถึงถูกระงับโดยเซิร์ฟเวอร์ เพื่อตรวจสอบว่าคุณมีการเข้าถึงที่เหมาะสม <a href="%1">คลิกที่นี่</a> เพื่อรเข้าถึงบริการกับเบราว์เซอร์ของคุณ - + Invalid URL URL ไม่ถูกต้อง - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ประสานข้อมูลโฟลเดอร์ต้นทาง %1 มีอยู่แล้ว กรุณาตั้งค่าเพื่อถ่ายข้อมูล <br/<br/> - + Creating local sync folder %1... สร้างประสานข้อมูลโฟลเดอร์ต้นทาง %1... - + ok ตกลง - + failed. ล้มเหลว - + Could not create local folder %1 ไม่สามารถสร้างผสานข้อมูลโฟลเดอร์ต้นทาง %1... - + No remote folder specified! ไม่มีโฟลเดอร์รีโมทที่ระบุ! - + Error: %1 ข้อผิดพลาด: %1 - + creating folder on ownCloud: %1 กำลังสร้างโฟลเดอร์ใหม่บน ownCloud: %1 - + Remote folder %1 created successfully. โฟลเดอร์รีโมท %1 ถูกสร้างเรียบร้อยแล้ว - + The remote folder %1 already exists. Connecting it for syncing. โฟลเดอร์รีโมทมี %1 อยู่แล้ว กำลังเชื่อมต่อเพื่อถ่ายโอนข้อมูล - - + + The folder creation resulted in HTTP error code %1 การสร้างโฟลเดอร์ดังกล่าวส่งผลให้เกิดรหัสข้อผิดพลาด HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> สร้างโฟลเดอร์ระยะไกลล้มเหลวเนื่องจากมีข้อมูลผิดพลาด! - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">การสร้างโฟลเดอร์รีโมทล้มเหลว ซึ่งอาจมีสาเหตุมาจากการกรอกข้อมูลส่วนตัวเพื่อเข้าใช้งานไม่ถูกต้อง.</font><br/>กรุณาย้อนกลับไปแล้วตรวจสอบข้อมูลส่วนตัวของคุณอีกครั้ง.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. การสร้างโฟลเดอร์ระยะไกล %1 ล้มเหลวเนื่องข้อผิดพลาด <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. การเชื่อมต่อเผื่อประสานข้อมูลจาก %1 ไปที่ไดเร็กทอรี่ระยะไกล %2 ได้ถูกติดตั้งแล้ว - + Successfully connected to %1! เชื่อมต่อไปที่ %1! สำเร็จ - + Connection to %1 could not be established. Please check again. การเชื่อมต่อกับ %1 ไม่สามารถดำเนินการได้ กรุณาตรวจสอบอีกครั้ง - + Folder rename failed เปลี่ยนชื่อโฟลเดอร์ล้มเหลว - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. ไม่สามารถลบและสำรองข้อมูลโฟลเดอร์เพราะโฟลเดอร์หรือไฟล์ในนั้นจะเปิดในโปรแกรมอื่นอยู่ กรุณาปิดโฟลเดอร์หรือไฟล์และกดลองใหม่อีกครั้งหรือยกเลิกการติดตั้ง - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ประสานข้อมูลโฟลเดอร์ต้นทาง %1 ได้ถูกสร้างขึ้นเรียบร้อยแล้ว!</b></font> @@ -2641,12 +2641,12 @@ It is not advisable to use it. Users and Groups - + ผู้ใช้และกลุ่ม Public Links - + ลิงก์สาธารณะ @@ -2694,7 +2694,7 @@ It is not advisable to use it. Show file listing - + แสดงรายชื่อไฟล์ @@ -2755,7 +2755,7 @@ It is not advisable to use it. Send link by email - + ส่งลิงค์ทางอีเมล @@ -2765,7 +2765,7 @@ It is not advisable to use it. Public link - + ลิงก์สาธารณะ @@ -2813,7 +2813,7 @@ It is not advisable to use it. Send link by email - + ส่งลิงค์ทางอีเมล @@ -2831,42 +2831,42 @@ It is not advisable to use it. Form - + แบบฟอร์ม TextLabel - + ป้ายข้อความ can edit - + สามารถแก้ไข can share - + สามารถแชร์ได้ ... - + ... create - + สร้าง change - + เปลี่ยนแปลง delete - + ลบ @@ -3804,7 +3804,7 @@ It is not advisable to use it. Form - + แบบฟอร์ม @@ -4164,12 +4164,12 @@ It is not advisable to use it. Could not open email client - + ไม่สามารถเปิดไคลเอนต์อีเมล There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + เกิดข้อผิดพลาดเมื่อเปิดไคลเอ็นต์อีเมลเพื่อสร้างข้อความใหม่ บางทีไคลเอ็นต์อีเมลอาจยังไม่ได้ตั้งค่า? \ No newline at end of file diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 9d0efe3fa..8ce3f7259 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Bağlantı zaman aşımına uğradı - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Hiçbir ownCloud hesabı yapılandırılmamış - + The configured server for this client is too old Yapılandırılmış sunucu, bu istemci için çok eski - + Please update to the latest server and restart the client. Lütfen en son sunucuya güncelleyin veya istemciyi yeniden başlatın - + Authentication error: Either username or password are wrong. Giriş hatası: Kullanıcı adı veya parola hatalı. - + timeout zaman aşımı - + The provided credentials are not correct Sağlanan kimlik bilgileri doğru değil @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' Anahtar zinciri okuması hatayla sonuçlandı: '%1' - + Enter Password Parolayı Girin - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1402,7 +1402,7 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Form - + Form @@ -1412,7 +1412,7 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Account - + Hesap @@ -1424,7 +1424,7 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Folder - + Klasör @@ -1444,17 +1444,17 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Copy - + Kopyala Time - + Zaman File - + Dosya @@ -1891,7 +1891,7 @@ for additional privileges during the process. Connect to %1 - + %1 bağlantısını yap @@ -1937,139 +1937,139 @@ Kullanmanız önerilmez. <font color="green">%1 bağlantısı başarılı: %2 sürüm %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 üzerinde %1 adresine bağlanılamadı:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 üzerinde %1 bağlantısı yapılırken zaman aşımı. - + Trying to connect to %1 at %2... %2 üzerinde %1 bağlantısı deneniyor... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Sunucuda giriş sırasında istek '%1' adresine yönlendirilmiş. Adres hatalı veya sunucu yanlış ayarlanmış. - + There was an invalid response to an authenticated webdav request Yetkilendirilmiş webdav isteği geçersiz bir cevap alındı - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Erişim sunucu tarafından yasaklandı. Geçerli erişime sahip olup olmadığınızı doğrulamak için hizmete web tarayıcınızla erişmek üzere <a href="%1">buraya tıklayın</a>. - + Invalid URL Geçersiz URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Yerel eşitleme klasörü %1 zaten mevcut, eşitlemek için ayarlanıyor.<br/><br/> - + Creating local sync folder %1... Yerel eşitleme klasörü %1 oluşturuluyor... - + ok tamam - + failed. başarısız. - + Could not create local folder %1 %1 yerel klasörü oluşturulamadı - + No remote folder specified! Uzak klasör belirtilmemiş! - + Error: %1 Hata: %1 - + creating folder on ownCloud: %1 ownCloud üzerinde klasör oluşturuluyor: %1 - + Remote folder %1 created successfully. %1 uzak klasörü başarıyla oluşturuldu. - + The remote folder %1 already exists. Connecting it for syncing. Uzak klasör %1 zaten mevcut. Eşitlemek için bağlanılıyor. - - + + The folder creation resulted in HTTP error code %1 Klasör oluşturma %1 HTTP hata kodu ile sonuçlandı - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Uzak klasör oluşturması, geçersiz kimlik bilgileri nedeniyle başarısız!<br/>Lütfen geri gidin ve bilgileri denetleyin.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Uzak klasör oluşturma muhtemelen hatalı kimlik bilgilerinden dolayı başarısız oldu.</font><br/>Lütfen geri gidip kimlik bilgilerini doğrulayın.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Uzak klasör %1 oluşturma işlemi <tt>%2</tt> hatası ile başarısız oldu. - + A sync connection from %1 to remote directory %2 was set up. %1 kaynaklı %2 uzak dizinine bir eşitleme bağlantısı ayarlandı. - + Successfully connected to %1! %1 bağlantısı başarılı! - + Connection to %1 could not be established. Please check again. %1 bağlantısı kurulamadı. Lütfen tekrar denetleyin. - + Folder rename failed Klasör adlandırma başarısız - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Klasör veya içerisindeki bir dosya farklı bir program içerisinde açık olduğundan, kaldırma ve yedekleme işlemi yapılamıyor. Lütfen klasör veya dosyayı kapatıp yeniden deneyin veya kurulumu iptal edin. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Yerel eşitleme klasörü %1 başarıyla oluşturuldu!</b></font> @@ -2630,12 +2630,12 @@ Kullanmanız önerilmez. Users and Groups - + Kullanıcılar ve Gruplar Public Links - + Herkese açık bağlantılar @@ -2683,7 +2683,7 @@ Kullanmanız önerilmez. Show file listing - + Dosya listesini göster @@ -2744,7 +2744,7 @@ Kullanmanız önerilmez. Send link by email - + Bağlantıyı e-posta ile gönder @@ -2802,7 +2802,7 @@ Kullanmanız önerilmez. Send link by email - + Bağlantıyı e-posta ile gönder @@ -2820,42 +2820,42 @@ Kullanmanız önerilmez. Form - + Form TextLabel - + MetinEtiketi can edit - + düzenleyebilir can share - + paylaşabilir ... - + ... create - + oluştur change - + değiştir delete - + sil @@ -3795,7 +3795,7 @@ Kullanmanız önerilmez. Form - + Form @@ -4155,12 +4155,12 @@ Kullanmanız önerilmez. Could not open email client - + E posta istemcisi açılamadı There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + Yeni mesaj oluşturmak için eposta istemcisini çalıştırıken bir hata oluştu. Belki varsayılan eposta istemcisi ayarlanmamıştır? \ No newline at end of file diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 4749c5165..9ecbaa696 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Час очікування з'єднання вичерпано - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ Обліковий запис ownCloud не налаштовано - + The configured server for this client is too old Налаштований сервер застарий для цього клієнта - + Please update to the latest server and restart the client. Будь ласка, оновіть сервер до останньої версії та перезавантажте клієнт. - + Authentication error: Either username or password are wrong. Помилка автентифікації: ім'я користувача або пароль невірні. - + timeout час вичерпано - + The provided credentials are not correct Введені дані не вірні @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' - + Enter Password Введіть Пароль - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1400,7 +1400,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + Форма @@ -1410,7 +1410,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + Обліковий запис @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + Тека @@ -1442,17 +1442,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + Копіювати Time - + Час File - + Файл @@ -1889,7 +1889,7 @@ for additional privileges during the process. Connect to %1 - + З'єднати з %1 @@ -1935,139 +1935,139 @@ It is not advisable to use it. <font color="green">Успішно підключено до %1: %2 версія %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не вдалося з'єднатися з %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Перевищено час очікування з'єднання до %1 на %2. - + Trying to connect to %1 at %2... Спроба підключення до %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Запит аутентифікації до серверу було переадресовано до '%1'. Поганий URL, сервер сконфігуровано неправильно. - + There was an invalid response to an authenticated webdav request Неправильна відповідь на автентифікований запит webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Доступ заборонений сервером. Щоб довести, що у Вас є права доступу, <a href="%1">клікніть тут</a> для входу через Ваш браузер. - + Invalid URL Невірний URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальна тека синхронізації %1 вже існує, налаштування її для синхронізації.<br/><br/> - + Creating local sync folder %1... Створення локальної теки для синхронізації %1... - + ok ok - + failed. не вдалося. - + Could not create local folder %1 Не вдалося створити локальну теку $1 - + No remote folder specified! Не вказано віддалену теку! - + Error: %1 Помилка: %1 - + creating folder on ownCloud: %1 створення теки на ownCloud: %1 - + Remote folder %1 created successfully. Віддалена тека %1 успішно створена. - + The remote folder %1 already exists. Connecting it for syncing. Віддалена тека %1 вже існує. Під'єднання для синхронізації. - - + + The folder creation resulted in HTTP error code %1 Створення теки завершилось HTTP помилкою %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Створити віддалену теку не вдалося через невірно вказані облікові дані.<br/>Поверніться назад та перевірте облікові дані.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Створити віддалену теку не вдалося, можливо, через невірно вказані облікові дані.</font><br/>Будь ласка, поверніться назад та перевірте облікові дані.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Не вдалося створити віддалену теку %1 через помилку <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. З'єднання для синхронізації %1 з віддаленою текою %2 було встановлено. - + Successfully connected to %1! Успішно під'єднано до %1! - + Connection to %1 could not be established. Please check again. Підключення до %1 встановити не вдалося. Будь ласка, перевірте ще раз. - + Folder rename failed Не вдалося перейменувати теку - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Неможливо видалити теку та створити її резервну копію, оскільки тека або файли, що в ній розташовані, використовуються. Будь ласка, закрийте всі програми, що можуть використовувати цю теку та спробуйте ще раз, або скасуйте встановлення. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальна тека синхронізації %1 успішно створена!</b></font> @@ -2628,7 +2628,7 @@ It is not advisable to use it. Users and Groups - + Користувачі та групи @@ -2681,7 +2681,7 @@ It is not advisable to use it. Show file listing - + Показати список файлів @@ -2742,7 +2742,7 @@ It is not advisable to use it. Send link by email - + Надіслати посилання по електронній пошті @@ -2800,7 +2800,7 @@ It is not advisable to use it. Send link by email - + Надіслати посилання по електронній пошті @@ -2818,42 +2818,42 @@ It is not advisable to use it. Form - + Форма TextLabel - + Мітка can edit - + може редагувати can share - + може ділитися з іншими ... - + ... create - + створити change - + змінити delete - + видалити @@ -3793,7 +3793,7 @@ It is not advisable to use it. Form - + Форма diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 252a1b024..fca0dd6c1 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + 连接超时 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ 没有已经配置的 ownCloud 帐号 - + The configured server for this client is too old 此客户端连接到的服务器版本过旧 - + Please update to the latest server and restart the client. 请更新到最新的服务器版本然后重启客户端。 - + Authentication error: Either username or password are wrong. 认证失败:用户名或密码错误 - + timeout 超时 - + The provided credentials are not correct 提供的证书不正确 @@ -1309,22 +1309,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> 请输入 %1 密码:<br><br>用户:%2<br>账户:%3<br> - + Reading from keychain failed with error: '%1' 获取密钥链失败,错误: '%1' - + Enter Password 输入密码 - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">点击这里</a>从 web 界面请求一个 app 密码。 @@ -1411,7 +1411,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + 窗体 @@ -1421,7 +1421,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + 账户 @@ -1433,7 +1433,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + 文件夹 @@ -1453,17 +1453,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + 复制 Time - + 时间 File - + 文件 @@ -1901,7 +1901,7 @@ for additional privileges during the process. Connect to %1 - + 连接到 %1 @@ -1946,139 +1946,139 @@ It is not advisable to use it. <font color="green">成功连接到 %1:%2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 连接到 %1 (%2)失败:<br />%3 - + Timeout while trying to connect to %1 at %2. 连接到 %1 (%2) 时超时。 - + Trying to connect to %1 at %2... 尝试连接位于 %2 的 %1... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. 被发送到服务器的认证请求被重定向到'%1'。此URL无效,服务器配置错误。 - + There was an invalid response to an authenticated webdav request 对于一个验证的 webdav 请求,有一个无效的响应 - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. 服务器拒绝了访问。<a href="%1">点击这里打开浏览器</a> 来确认您是否有权访问。 - + Invalid URL 无效URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步文件夹 %1 已存在,将使用它来同步。<br/><br/> - + Creating local sync folder %1... 创建本地同步目录%1 - + ok 成功 - + failed. 失败 - + Could not create local folder %1 不能创建本地文件夹 %1 - + No remote folder specified! 未指定远程文件夹! - + Error: %1 错误:%1 - + creating folder on ownCloud: %1 在 ownCloud 创建文件夹:%1 - + Remote folder %1 created successfully. 远程目录%1成功创建。 - + The remote folder %1 already exists. Connecting it for syncing. 远程文件夹 %1 已存在。连接它以供同步。 - - + + The folder creation resulted in HTTP error code %1 创建文件夹出现 HTTP 错误代码 %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 远程文件夹创建失败,因为提供的凭证有误!<br/>请返回并检查您的凭证。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">远程文件夹创建失败,可能是由于提供的用户名密码不正确。</font><br/>请返回并检查它们。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 创建远程文件夹 %1 失败,错误为 <tt>%2</tt>。 - + A sync connection from %1 to remote directory %2 was set up. 已经设置了一个 %1 到远程文件夹 %2 的同步连接 - + Successfully connected to %1! 成功连接到了 %1! - + Connection to %1 could not be established. Please check again. 无法建立到 %1的链接,请稍后重试(这里“稍后”用对了,赞!)。 - + Folder rename failed 文件夹更名失败 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 无法移除和备份文件夹,由于文件夹或文件正在被另一程序占用。请关闭程序后重试,或取消安装。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步目录 %1 已成功创建</b></font> @@ -2639,12 +2639,12 @@ It is not advisable to use it. Users and Groups - + 用户和组 Public Links - + 公共链接 @@ -2692,7 +2692,7 @@ It is not advisable to use it. Show file listing - + 显示文件列表 @@ -2753,7 +2753,7 @@ It is not advisable to use it. Send link by email - + 通过邮件发送链接 @@ -2811,7 +2811,7 @@ It is not advisable to use it. Send link by email - + 通过邮件发送链接 @@ -2829,42 +2829,42 @@ It is not advisable to use it. Form - + 窗体 TextLabel - + 文本标签 can edit - + 可编辑 can share - + 可共享 ... - + ... create - + 创建 change - + 更改 delete - + 删除 @@ -3804,7 +3804,7 @@ It is not advisable to use it. Form - + 窗体 @@ -4164,12 +4164,12 @@ It is not advisable to use it. Could not open email client - + 无法打开邮件客户端 There was an error when launching the email client to create a new message. Maybe no default email client is configured? - + 启动email客户端并创建新消息时发生错误。是不是没有设定默认的email客户端? \ No newline at end of file diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index e9fb5b5cc..d4d49b030 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + 連線逾時 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -617,27 +617,27 @@ 沒有設置 ownCloud 帳號 - + The configured server for this client is too old 設置的伺服器對這個客戶端來說太舊了 - + Please update to the latest server and restart the client. 請將伺服器端更新到最新版並重新啟動客戶端 - + Authentication error: Either username or password are wrong. 驗證錯誤︰使用者名稱或是密碼錯誤 - + timeout 逾時 - + The provided credentials are not correct 提供的憑證不正確 @@ -1300,22 +1300,22 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::HttpCredentialsGui - + Please enter %1 password:<br><br>User: %2<br>Account: %3<br> - + Reading from keychain failed with error: '%1' 從授權碼讀取資料時失敗,錯誤: '%1' - + Enter Password 輸入密碼 - + <a href="%1">Click here</a> to request an app password from the web interface. @@ -1402,7 +1402,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Form - + 表單 @@ -1412,7 +1412,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Account - + 帳號 @@ -1424,7 +1424,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Folder - + 資料夾 @@ -1444,17 +1444,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy - + 複製 Time - + 時間 File - + 檔案 @@ -1892,7 +1892,7 @@ for additional privileges during the process. Connect to %1 - + 連線到 %1 @@ -1938,139 +1938,139 @@ It is not advisable to use it. <font color="green">成功連線到 %1: %2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 從 %2 連線到 %1 失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. 從 %2 嘗試連線到 %1 逾時。 - + Trying to connect to %1 at %2... 嘗試連線到%1從%2 - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. 伺服器要求的認證請求被導向 '%1',這個URL可能不安全,此伺服器可能設定有錯。 - + There was an invalid response to an authenticated webdav request 從webdav的認證要求中有無效的回傳值 - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. 從伺服器存取被拒絕。為了正確驗證您的存取資訊 <a href="%1">請點選這裡</a> 透過瀏覽器來存取服務 - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步資料夾%1已存在, 將其設置為同步<br/><br/> - + Creating local sync folder %1... 建立本地同步資料夾 %1... - + ok ok - + failed. 失敗 - + Could not create local folder %1 無法建立本地資料夾 %1 - + No remote folder specified! 沒有指定遠端資料夾! - + Error: %1 錯誤: %1 - + creating folder on ownCloud: %1 在 ownCloud 建立資料夾: %1 - + Remote folder %1 created successfully. 遠端資料夾%1建立成功! - + The remote folder %1 already exists. Connecting it for syncing. 遠端資料夾%1已存在,連線同步中 - - + + The folder creation resulted in HTTP error code %1 在HTTP建立資料夾失敗, error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 由於帳號或密碼錯誤,遠端資料夾建立失敗<br/>請檢查您的帳號密碼。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">遠端資料夾建立失敗,也許是因為所提供的帳號密碼錯誤</font><br/>請重新檢查您的帳號密碼</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 建立遠端資料夾%1發生錯誤<tt>%2</tt>失敗 - + A sync connection from %1 to remote directory %2 was set up. 從%1到遠端資料夾%2的連線已建立 - + Successfully connected to %1! 成功連接到 %1 ! - + Connection to %1 could not be established. Please check again. 無法建立連線%1, 請重新檢查 - + Folder rename failed 重新命名資料夾失敗 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 無法移除與備份此資料夾,因為有其他的程式正在使用其中的資料夾或者檔案。請關閉使用中的資料夾或檔案並重試或者取消設定。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步資料夾 %1 建立成功!</b></font> @@ -2745,7 +2745,7 @@ It is not advisable to use it. Send link by email - + 使用電子郵件傳送連結 @@ -2803,7 +2803,7 @@ It is not advisable to use it. Send link by email - + 使用電子郵件傳送連結 @@ -2821,42 +2821,42 @@ It is not advisable to use it. Form - + 表單 TextLabel - + 文字標籤 can edit - + 可編輯 can share - + 可分享 ... - + ... create - + 建立 change - + 更動 delete - + 刪除 @@ -3796,7 +3796,7 @@ It is not advisable to use it. Form - + 表單 From 66415831ea747ad990096624cadde60af795bbff Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 12 Sep 2017 13:02:00 +0200 Subject: [PATCH 034/166] Folder: Check etag again after active sync #4116 Maybe more things were happening on the server? --- src/gui/folder.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 6446a06ed..ee1a84869 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -817,6 +817,17 @@ void Folder::slotSyncFinished(bool success) void Folder::slotEmitFinishedDelayed() { emit syncFinished(_syncResult); + + // Immediately check the etag again if there was some sync activity. + if ((_syncResult.status() == SyncResult::Success + || _syncResult.status() == SyncResult::Problem) + && (_syncResult.firstItemDeleted() + || _syncResult.firstItemNew() + || _syncResult.firstItemRenamed() + || _syncResult.firstItemUpdated() + || _syncResult.firstNewConflictItem())) { + slotRunEtagJob(); + } } // the progress comes without a folder and the valid path set. Add that here From 70aafd74a836597d16799f39c423c0185f08cf5a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 12 Sep 2017 13:39:45 +0200 Subject: [PATCH 035/166] Journal: Fall back to DELETE on IO error #5723 Also add logging of extended error codes for this IO error, maybe we can become more specific about which situations should trigger a journal mode switch. --- src/libsync/ownsql.cpp | 6 ++++++ src/libsync/syncjournaldb.cpp | 21 ++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/libsync/ownsql.cpp b/src/libsync/ownsql.cpp index 759f1981d..e66fdfb3e 100644 --- a/src/libsync/ownsql.cpp +++ b/src/libsync/ownsql.cpp @@ -280,6 +280,12 @@ bool SqlQuery::exec() if (_errId != SQLITE_DONE && _errId != SQLITE_ROW) { _error = QString::fromUtf8(sqlite3_errmsg(_db)); qCWarning(lcSql) << "Sqlite exec statement error:" << _errId << _error << "in" << _sql; + if (_errId == SQLITE_IOERR) { + qCWarning(lcSql) << "IOERR extended errcode: " << sqlite3_extended_errcode(_db); +#if SQLITE_VERSION_NUMBER >= 3012000 + qCWarning(lcSql) << "IOERR system errno: " << sqlite3_system_errno(_db); +#endif + } } else { qCDebug(lcSql) << "Last exec affected" << numRowsAffected() << "rows."; } diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index 6706fb65e..f4d3510dd 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -323,7 +323,26 @@ bool SyncJournalDb::checkConnect() ");"); if (!createQuery.exec()) { - return sqlFail("Create table metadata", createQuery); + bool fail = true; + + // In certain situations the io error can be avoided by switching + // to the DELETE journal mode, see #5723 + if (createQuery.errorId() == SQLITE_IOERR) { + qCWarning(lcDb) << "IO error on table creation, attempting with DELETE journal mode"; + + pragma1.prepare(QString("PRAGMA journal_mode=DELETE;")); + if (!pragma1.exec()) { + return sqlFail("Set PRAGMA journal_mode", pragma1); + } + pragma1.next(); + qCInfo(lcDb) << "sqlite3 journal_mode=" << pragma1.stringValue(0); + + if (createQuery.exec()) { + fail = false; + } + } + if (fail) + return sqlFail("Create table metadata", createQuery); } createQuery.prepare("CREATE TABLE IF NOT EXISTS downloadinfo(" From 3d120983da11cf5daefe9e94a86fcb02795b0b62 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 12 Sep 2017 17:07:19 +0200 Subject: [PATCH 036/166] ChunkingNgTest: CI debuggability #6015 --- test/syncenginetestutils.h | 1 + 1 file changed, 1 insertion(+) diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 2feacd11f..c2a0c0c8b 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -810,6 +810,7 @@ public: OCC::Logger::instance()->setLogFile("-"); QDir rootDir{_tempDir.path()}; + qDebug() << "FakeFolder operating on" << rootDir; toDisk(rootDir, fileTemplate); _fakeQnam = new FakeQNAM(fileTemplate); From 4ced7e9c809af9c2e2eeef1982a1ab20636a7868 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 13 Sep 2017 02:18:31 +0200 Subject: [PATCH 037/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_ca.ts | 24 ++++++------ translations/client_cs.ts | 24 ++++++------ translations/client_de.ts | 24 ++++++------ translations/client_el.ts | 24 ++++++------ translations/client_en.ts | 24 ++++++------ translations/client_es.ts | 24 ++++++------ translations/client_es_AR.ts | 24 ++++++------ translations/client_et.ts | 24 ++++++------ translations/client_eu.ts | 24 ++++++------ translations/client_fa.ts | 24 ++++++------ translations/client_fi.ts | 24 ++++++------ translations/client_fr.ts | 24 ++++++------ translations/client_gl.ts | 24 ++++++------ translations/client_hu.ts | 24 ++++++------ translations/client_it.ts | 24 ++++++------ translations/client_ja.ts | 24 ++++++------ translations/client_nb_NO.ts | 24 ++++++------ translations/client_nl.ts | 24 ++++++------ translations/client_pl.ts | 24 ++++++------ translations/client_pt.ts | 24 ++++++------ translations/client_pt_BR.ts | 24 ++++++------ translations/client_ru.ts | 74 ++++++++++++++++++------------------ translations/client_sk.ts | 24 ++++++------ translations/client_sl.ts | 24 ++++++------ translations/client_sr.ts | 24 ++++++------ translations/client_sv.ts | 24 ++++++------ translations/client_th.ts | 24 ++++++------ translations/client_tr.ts | 24 ++++++------ translations/client_uk.ts | 24 ++++++------ translations/client_zh_CN.ts | 24 ++++++------ translations/client_zh_TW.ts | 24 ++++++------ 32 files changed, 400 insertions(+), 397 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index ebbba0347..144ae04ad 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -114,6 +114,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index cf6859480..b082d58b6 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -754,26 +754,26 @@ Consulteu el registre per obtenir més informació. No s'ha pogut llegir el fitxer d'exclusió del sistema - + A new folder larger than %1 MB has been added: %2. S'ha afegit una carpeta de més de %1 MB: %2. - + A folder from an external storage has been added. S'ha afegit una carpeta d'una font d'emmagatzematge extern. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -781,46 +781,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Esborra tots els fitxers? - + Remove all files Esborra tots els fitxers - + Keep files Mantén els fitxers - + This sync would reset the files to an earlier 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? - + Backup detected Copia de seguretat detectada - + Normal Synchronisation Sincronització normal - + Keep Local Files as Conflict Manté els fitxers locals com a conflicte diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 071dda21e..c47bf25fb 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -752,25 +752,25 @@ Nezdařilo se přečtení systémového exclude souboru - + A new folder larger than %1 MB has been added: %2. Nová složka větší než %1 MB byla přidána: %2. - + A folder from an external storage has been added. Byla přidána složka z externího úložiště. - + Please go in the settings to select it if you wish to download it. Pokud to chcete stáhnout, běžte do nastavení a vyberte to. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -780,7 +780,7 @@ Tyto soubory budou smazány i ve vaší místní synchronizované složce a nebu Rozhodnete-li se soubory smazat, budou vám nedostupné, nejste-li jejich vlastníkem. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -789,22 +789,22 @@ Jste si jisti, že chcete tyto akce synchronizovat se serverem? Pokud to byl omyl a chcete si soubory ponechat, budou opět synchronizovány ze serveru. - + Remove All Files? Odstranit všechny soubory? - + Remove all files Odstranit všechny soubory - + Keep files Ponechat soubory - + This sync would reset the files to an earlier 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? @@ -813,17 +813,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? - + Backup detected Záloha nalezena - + Normal Synchronisation Normální synchronizace - + Keep Local Files as Conflict Ponechat místní soubory jako konflikt diff --git a/translations/client_de.ts b/translations/client_de.ts index a4faa6a47..ffa53a311 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -752,26 +752,26 @@ Systemeigene Ausschlussdatei kann nicht gelesen werden - + A new folder larger than %1 MB has been added: %2. Ein neues Verzeichnis größer als %1 MB wurde hinzugefügt: %2. - + A folder from an external storage has been added. Ein Verzeichnis, von einem externen Speicher wurde hinzugefügt. - + Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie das Verzeichnis herunterladen möchten. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder s Wenn Sie sich zum Löschen der Dateien entscheiden, sind diese nicht mehr verfügbar, außer Sie sind der Eigentümer. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Sind Sie sich sicher, dass Sie diese Aktion mit Ihrem Server synchronisieren mö Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheiden, werden diese wieder vom Server synchronisiert. - + Remove All Files? Alle Dateien löschen? - + Remove all files Lösche alle Dateien - + Keep files Dateien behalten - + This sync would reset the files to an earlier 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? @@ -815,17 +815,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 lokalen Dateien als Konflikt-Dateien behalten? - + Backup detected Backup erkannt - + Normal Synchronisation Normale Synchronisation - + Keep Local Files as Conflict Lokale Konfliktdateien behalten diff --git a/translations/client_el.ts b/translations/client_el.ts index 76ab785a7..3e01738b6 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -752,26 +752,26 @@ Αδυναμία ανάγνωσης αρχείου αποκλεισμού συστήματος - + A new folder larger than %1 MB has been added: %2. Προστέθηκε ένας νέος φάκελος μεγαλύτερος από %1 MB: %2 - + A folder from an external storage has been added. Προστέθηκε ένας φάκελος από εξωτερικό αποθηκευτικό χώρο. - + Please go in the settings to select it if you wish to download it. Μεταβείτε στις ρυθμίσεις για να το επιλέξετε εάν επιθυμείτε να το κατεβάσετε. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Εφόσον επιλέξετε να διαγράψετε τα αρχεία, δε θα είναι διαθέσιμα σε εσάς, εκτός εάν είστε ο ιδιοκτήτης τους. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Αν αυτό ήταν ένα ατύχημα και αποφασίσατε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν εκ νέου από το διακομιστή. - + Remove All Files? Αφαίρεση Όλων των Αρχείων; - + Remove all files Αφαίρεση όλων των αρχείων - + Keep files Διατήρηση αρχείων - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an Η συνέχιση του συγχρονισμού κανονικά θα προκαλέσει την αντικατάσταση όλων των αρχείων σας από παλιότερο αρχείο σε προηγούμενη κατάσταση. Θέλετε να διατηρήσετε τα τοπικά σας πιο πρόσφατα αρχεία ως αρχεία σύγκρουσης; - + Backup detected Ανιχνεύθηκε αντίγραφο ασφαλείας - + Normal Synchronisation Κανονικός συγχρονισμός - + Keep Local Files as Conflict Διατήρηση τοπικών αρχείων ως Διένεξη diff --git a/translations/client_en.ts b/translations/client_en.ts index f04d5c7b4..96ab14a87 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -781,24 +781,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -806,46 +806,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? - + Remove all files - + Keep files - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_es.ts b/translations/client_es.ts index 26c874477..60e007514 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -752,26 +752,26 @@ No se ha podido leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. - + A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - + Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Si decide mantener estos archivos, serán re-sincronizados con el servidor si Vd Si decide borrarlos, no serán visibles para Vd. a menos que sea usted el propietario. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Si ha sido un accidente, y decide mantener los archivos, serán re-sincronizados con el servidor. - + Remove All Files? ¿Eliminar todos los archivos? - + Remove all files Eliminar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Esto puede deberse a que una copia de seguridad fue restaurada en el servidor. Si continua con la sincronización todos los archivos serán remplazados por su versión previa. ¿Desea mantener los archivos locales en su versión actual como archivos en conflicto? - + Backup detected Backup detectado - + Normal Synchronisation Sincronización Normal - + Keep Local Files as Conflict Mantener los archivos locales en caso de conflicto diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index eecbfc77d..1de26cf91 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? ¿Borrar todos los archivos? - + Remove all files Borrar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_et.ts b/translations/client_et.ts index abe871e8a..419c7afb5 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -752,24 +752,24 @@ Süsteemi väljajätmiste faili lugemine ebaõnnestus - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Kustutada kõik failid? - + Remove all files Kustutada kõik failid - + Keep files Säilita failid - + This sync would reset the files to an earlier 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? - + Backup detected Leiti varukoopia - + Normal Synchronisation Tavaline sünkroonimine - + Keep Local Files as Conflict diff --git a/translations/client_eu.ts b/translations/client_eu.ts index a2732ea7f..6728a398c 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -752,24 +752,24 @@ Ezin izan da sistemako baztertutakoen fitxategia irakurri - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ezabatu Fitxategi Guztiak? - + Remove all files Ezabatu fitxategi guztiak - + Keep files Mantendu fitxategiak - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 935ca1cf7..7f7b3e714 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? حذف تمام فایل ها؟ - + Remove all files حذف تمام فایل ها - + Keep files نگه داشتن فایل ها - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 736e2c26f..9fb5aba4c 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Poistetaanko kaikki tiedostot? - + Remove all files Poista kaikki tiedostot - + Keep files Säilytä tiedostot - + This sync would reset the files to an earlier 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? - + Backup detected Varmuuskopio poistettu - + Normal Synchronisation Normaali synkronointi - + Keep Local Files as Conflict diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 8ad4876d1..e29c5d273 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -752,14 +752,14 @@ Impossible de lire le fichier d'exclusion du système - + A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - + A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. @@ -767,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -783,7 +783,7 @@ Si vous décidez de garder ces fichiers, ils seront synchronisés à nouveau ave Si vous décidez de supprimer ces fichiers, ils vous seront inaccessibles, sauf si vous en êtes le propriétaire. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -792,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce S'il s'agissait d'un accident et que vous choisissiez de garder vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - + Remove All Files? Supprimer tous les fichiers ? - + Remove all files Supprimer tous les fichiers - + Keep files Garder les fichiers - + This sync would reset the files to an earlier 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? @@ -816,17 +816,17 @@ Cela peut être dû à une copie de sauvegarde restaurée sur le serveur. Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? - + Backup detected Sauvegarde détectée - + Normal Synchronisation Synchronisation normale - + Keep Local Files as Conflict Garder les fichiers locaux comme Conflits diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 63d449d96..c7818df1f 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -752,24 +752,24 @@ Non foi posíbel ler o ficheiro de exclusión do sistema - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Retirar todos os ficheiros? - + Remove all files Retirar todos os ficheiros - + Keep files Manter os ficheiros - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 9959e61a2..3c94c7d96 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Törli az összes fájlt? - + Remove all files Összes fájl eltávolítása - + Keep files Fájlok megtartása - + This sync would reset the files to an earlier 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? - + Backup detected Biztonsági mentés észlelve - + Normal Synchronisation Normal szinkronizáció - + Keep Local Files as Conflict Helyi file-ok megtartása konfliktusként diff --git a/translations/client_it.ts b/translations/client_it.ts index 43e7113ca..e70d0a7a9 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -752,14 +752,14 @@ Impossibile leggere il file di esclusione di sistema - + A new folder larger than %1 MB has been added: %2. Una nuova cartella più grande di %1 MB è stata aggiunta: %2. - + A folder from an external storage has been added. Una nuova cartella da un'archiviazione esterna è stata aggiunta. @@ -767,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Vai nelle impostazioni e selezionala se vuoi scaricarla. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -780,29 +780,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Vuoi rimuovere tutti i file? - + Remove all files Rimuovi tutti i file - + Keep files Mantieni i file - + This sync would reset the files to an earlier 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? @@ -811,17 +811,17 @@ Ciò potrebbe verificarsi in seguito al ripristino di un backup sul server. Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tutti i tuoi file con file più datati in uno stato precedente. Vuoi mantenere i tuoi file locali più recenti come file di conflitto? - + Backup detected Backup rilevato - + Normal Synchronisation Sincronizzazione normale - + Keep Local Files as Conflict Mantieni i file locali come conflitto diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 2f684cd76..7f8d56192 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -752,26 +752,26 @@ システム上の除外ファイルを読み込めません - + A new folder larger than %1 MB has been added: %2. %1 MB より大きな新しいフォルダーが追加されました: %2 - + A folder from an external storage has been added. 外部ストレージからフォルダーが追加されました。 - + Please go in the settings to select it if you wish to download it. このフォルダーをダウンロードするには設定画面で選択してください。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 「すべてのファイルを削除」を選択すると、あなたが所有者でない限り、ファイルは使用できなくなります。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce 「ファイルを残す」を選択した場合、ファイルはサーバーから再同期されます。 - + Remove All Files? すべてのファイルを削除しますか? - + Remove all files すべてのファイルを削除 - + Keep files ファイルを残す - + This sync would reset the files to an earlier 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? この同期により同期フォルダー '%1' のファイルが以前のものに戻されます。 これは、バックアップがサーバー上に復元されたためです。 通常と同じように同期を続けると、すべてのファイルが以前の状態の古いファイルによって上書きされます。最新のローカルファイルを競合ファイルとして保存しますか? - + Backup detected バックアップが検出されました - + Normal Synchronisation 正常同期 - + Keep Local Files as Conflict コンフリクト時にローカルファイルを保持 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 11d84ff8e..dbdf85958 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -752,25 +752,25 @@ Klarte ikke å lese systemets ekskluderingsfil - + A new folder larger than %1 MB has been added: %2. En ny mappe større enn %1 MB er blitt lagt til: %2. - + A folder from an external storage has been added. En mappe fra et eksternt lager er blitt lagt til. - + Please go in the settings to select it if you wish to download it. Gå til Innstillinger og velg den hvis du ønsker å laste den ned. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -781,7 +781,7 @@ Hvis du velger å beholde filene, vil de bli synkronisert tilbake til serveren h Hvis du velger å slette filene, blir de utilgjengelige for deg hvis du ikke er eieren av filen. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -790,22 +790,22 @@ Er du sikker på at du ønsker å synkronisere denne handlingen med serveren? Hvis det var et uhell og du velger å beholde filene, vil de bli synkronisert tilbake fra serveren. - + Remove All Files? Fjerne alle filer? - + Remove all files Fjern alle filer - + Keep files Behold filer - + This sync would reset the files to an earlier 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? @@ -814,17 +814,17 @@ Dette kan være fordi en backup ble gjenopprettet på serveren. Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrevet av en eldre fil i en tidligere tilstand. Ønsker du å beholde dine ferskeste lokale filer som konflikt-filer? - + Backup detected Backup oppdaget - + Normal Synchronisation Normal synkronisering - + Keep Local Files as Conflict Behold lokale filer som konflikt diff --git a/translations/client_nl.ts b/translations/client_nl.ts index cad9f3150..a0e649cce 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -752,26 +752,26 @@ Kon het systeem-uitsluitingsbestand niet lezen - + A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. - + Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Als u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de serv Als u de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij u de eigenaar bent. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -790,22 +790,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Als dit een ongelukje was en u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - + Remove All Files? Verwijder alle bestanden? - + Remove all files Verwijder alle bestanden - + Keep files Bewaar bestanden - + This sync would reset the files to an earlier 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? @@ -814,17 +814,17 @@ Dit kan komen doordat een backup is hersteld op de server. Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere versie. Wilt u uw lokale meer recente bestanden behouden als conflict bestanden? - + Backup detected Backup gedetecteerd - + Normal Synchronisation Normale synchronisatie - + Keep Local Files as Conflict Behoud lokale bestanden als conflict diff --git a/translations/client_pl.ts b/translations/client_pl.ts index fd5cb76aa..08469b890 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -752,26 +752,26 @@ Nie można przeczytać pliku wyłączeń - + A new folder larger than %1 MB has been added: %2. Nowy folder większy niż %1MB został dodany: %2 - + A folder from an external storage has been added. Folder z pamięci zewnętrznej został dodany . - + Please go in the settings to select it if you wish to download it. Przejdź do ustawień żeby go zaznaczyć i pobrać. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -779,46 +779,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Usunąć wszystkie pliki? - + Remove all files Usuń wszystkie pliki - + Keep files Pozostaw pliki - + This sync would reset the files to an earlier 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? - + Backup detected Wykryto kopię zapasową. - + Normal Synchronisation Normalna synchronizacja. - + Keep Local Files as Conflict Zatrzymaj pliki lokalne i ustaw status konfliktu. diff --git a/translations/client_pt.ts b/translations/client_pt.ts index cd0131b33..cb6743a26 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -752,26 +752,26 @@ Não foi possível ler o ficheiro excluir do sistema - + A new folder larger than %1 MB has been added: %2. Foi adicionada uma nova pasta maior que %1 MB: %2. - + A folder from an external storage has been added. Foi adicionada uma pasta vinda de armazenamento externo. - + Please go in the settings to select it if you wish to download it. Por favor, vá às configurações para a selecionar se a desejar transferir. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Se decidir manter os ficheiros, eles serão sincronizados novamento para o servi Se decidir apagar os ficheiros, eles ficaram indisponíveis para si, a não ser que seja o seu proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Tem a certeza que deseja sincronizar essas ações com o servidor? Se foi acidental e decidir manter os seus ficheiros, eles serão sincronizados novamente apartir do servidor. - + Remove All Files? Remover todos os ficheiros? - + Remove all files Remover todos os ficheiros - + Keep files Manter ficheiros - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Isto pode ser porque um backup foi restaurado no servidor. Continuando a sincronização fará com que todos os seus ficheiros sejam substituídos por um ficheiro mais velho num estado anterior. Deseja manter os seus ficheiros locais mais recentes como ficheiros de conflito? - + Backup detected Detetada cópia de segurança - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Ficheiros Locais como Conflito diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 3019fabb8..e8b0c7ac6 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -752,26 +752,26 @@ Não foi possível ler o sistema de arquivo de exclusão - + A new folder larger than %1 MB has been added: %2. Uma nova pasta maior que %1 MB foi adicionada: %2 - + A folder from an external storage has been added. Uma pasta de um armazenamento externo foi adicionada. - + Please go in the settings to select it if you wish to download it. Por favor, vá nas configurações para selecioná-lo se você deseja baixá-lo. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,29 +782,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a Se você decidir excluir os arquivos, eles não estarão disponíveis para você, a menos que você seja o proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. Todos os arquivos na pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com o servidor, tornando tais arquivos indisponíveis, a menos que restaurados.Tem certeza de que deseja sincronizar essas ações com o servidor?Se isso foi um acidente e você decidir manter seus arquivos, eles serão re-sincronizados a partir do servidor. - + Remove All Files? Deseja Remover Todos os Arquivos? - + Remove all files Remover todos os arquivos - + Keep files Manter arquivos - + This sync would reset the files to an earlier 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? @@ -813,17 +813,17 @@ Isso pode ser porque um backup foi restaurado no servidor. Continuar a sincronização como normal fará com que todos os seus arquivos sejam substituídos por um arquivo antigo em um estado anterior. Deseja manter seus arquivos mais recentes locais como arquivos de conflito? - + Backup detected Backup detectado - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Arquivos Locais como Conflito diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 5edbb53ff..bc551bcd3 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -96,7 +96,7 @@ Server replied "%1 %2" to "%3 %4" - + Сервер ответил от "%1 %2" до "%3 %4" @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + Сервер %1 в настоящее время находится в режиме технического обслуживания. @@ -261,12 +261,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Получение авторизации из браузера. <a href='%1'>Нажмите здесь</a>, чтобы повторно открыть браузер. Connecting to %1... - + Соединение с %1... @@ -381,7 +381,7 @@ Maintenance mode - + Режим технического обслуживания. @@ -396,7 +396,7 @@ Asking Credentials - + Запросить учётных данных @@ -752,26 +752,26 @@ Невозможно прочесть системный файл исключений - + A new folder larger than %1 MB has been added: %2. Был добавлен новый каталог размером более %1 МБ: %2. - + A folder from an external storage has been added. Добавлен каталог из внешнего хранилища. - + Please go in the settings to select it if you wish to download it. Пожалуйста, перейдите в настройки, чтобы выбрать его, если вы хотите его скачать. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Если вы решили удалить файлы, они станут вам недоступны, крмое случая, когда вы сам владелец. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce Если это произошло случайно и вы решите сохранить файлы, они будут перезакачаны с сервера. - + Remove All Files? Удалить все файлы? - + Remove all files Удалить все файлы - + Keep files Сохранить файлы - + This sync would reset the files to an earlier 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? Эта синхронизация собирается сбросить файлы в катлоге '%1' в более ранее состояние. Такое может случиться, если на сервере восстановлена резервная копия. Если продолжать синхронизацию как обычно, то ваши файлы будут перетёрты более старыми версиями. Хотите сохранить ваши локальные свежие файлы в качестве конфликтных? - + Backup detected Обнаружена резервная копия - + Normal Synchronisation Обычная синхронизация - + Keep Local Files as Conflict Сохранить локальные файлы как конфликтующие @@ -1001,7 +1001,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an There are unresolved conflicts. Click for details. - + Есть неразрешенные конфликты. Нажми для просмотра подробностей. @@ -1011,7 +1011,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Reconciling changes - + Согласование изменений @@ -1435,12 +1435,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from Show warnings - + Показать предупреждения Show ignored files - + Показать игнорируемые файлы @@ -1903,7 +1903,7 @@ for additional privileges during the process. Login in your browser - + Вход в ваш браузер @@ -2670,7 +2670,7 @@ It is not advisable to use it. &Create new - + &Создать новый @@ -2685,7 +2685,7 @@ It is not advisable to use it. Link properties: - + Свойства ссылки: @@ -2731,17 +2731,17 @@ It is not advisable to use it. Create public link share - + Создать ссылку общего доступа Open link in browser - + Открыть ссылку в браузере Copy link to clipboard - + Копировать ссылку в буфер обмена @@ -2799,12 +2799,12 @@ It is not advisable to use it. Open link in browser - + Открыть ссылку в браузере Copy link to clipboard - + Копировать ссылку в буфер обмена @@ -2819,7 +2819,7 @@ It is not advisable to use it. I shared something with you - + Я поделился с тобой @@ -2912,22 +2912,22 @@ It is not advisable to use it. I shared something with you - + Я поделился с тобой Share... - + Поделиться... Copy private link to clipboard - + Копировать приватную ссылку в буфер обмена... Send private link by email... - + Отправить приватную ссылку по email... @@ -3817,7 +3817,7 @@ It is not advisable to use it. Re-open Browser - + Повторно открыть браузер @@ -4152,7 +4152,7 @@ It is not advisable to use it. Could not open browser - + Невозможно открыть браузер diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 9c6ba1a01..02d15008f 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -752,24 +752,24 @@ Nemožno čítať systémový exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Odstrániť všetky súbory? - + Remove all files Odstrániť všetky súbory - + Keep files Ponechať súbory - + This sync would reset the files to an earlier 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? - + Backup detected Záloha je dostupná - + Normal Synchronisation Bežná synchronizácia - + Keep Local Files as Conflict Ponechať lokálne súbory ako konfliktné diff --git a/translations/client_sl.ts b/translations/client_sl.ts index a3a4f05bf..cb09d13a3 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -752,26 +752,26 @@ Ni mogoče prebrati sistemske izločitvene datoteke - + A new folder larger than %1 MB has been added: %2. Dodana je nova mapa, ki presega %1 MB: %2. - + A folder from an external storage has been added. Dodana je mapa iz zunanje shrambe. - + Please go in the settings to select it if you wish to download it. Med nastavitvami jo lahko izberete in označite za prejem. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več na voljo. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Ali ste prepričani, da želite posodobiti spremembe s strežnikom? Če je prišlo do napake in se odločite datoteke ohraniti, bodo te ponovno usklajene s strežnika. - + Remove All Files? Ali naj bodo odstranjene vse datoteke? - + Remove all files Odstrani vse datoteke - + Keep files Ohrani datoteke - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ To se lahko zgodi, če je na strežniku na primer obnovljena varnostna kopija. Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi različicami. Ali želite ohraniti trenutne krajevne datoteke kot preimenovane datoteke v usklajevalnem sporu? - + Backup detected Varnostna kopija je zaznana - + Normal Synchronisation Običajno usklajevanje - + Keep Local Files as Conflict Ohrani krajevne datoteke kot datoteke v sporu diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 28abcf4cc..6257c45a9 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -752,24 +752,24 @@ Не могу да прочитам системски списак за игнорисање - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Уклонити све фајлове? - + Remove all files Уклони све фајлове - + Keep files Остави фајлове - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 3a77efaec..80ec7b6f6 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -752,24 +752,24 @@ Kunde inte läsa systemets exkluderings-fil - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,29 +777,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ta bort alla filer? - + Remove all files Ta bort alla filer - + Keep files Behåll filer - + This sync would reset the files to an earlier 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? @@ -808,17 +808,17 @@ Detta kan vara för att en säkerhetskopia har återställts på servern. Om du fortsätter synkningen kommer alla dina filer återställas med en äldre version av filen. Vill du behålla dina nyare lokala filer som konfliktfiler? - + Backup detected Backup upptäckt - + Normal Synchronisation Normal synkronisation - + Keep Local Files as Conflict Behåll lokala filer som konflikt diff --git a/translations/client_th.ts b/translations/client_th.ts index db07d91f2..cd5061da1 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -752,26 +752,26 @@ ไม่สามารถอ่าน ยกเว้นไฟล์ระบบ - + A new folder larger than %1 MB has been added: %2. โฟลเดอร์ใหม่มีขนาดใหญ่กว่า %1 เมกะไบต์ ได้ถูกเพิ่ม: %2 - + A folder from an external storage has been added. โฟลเดอร์ที่มีพื้นที่จัดเก็บข้อมูลภายนอกได้ถูกเพิ่ม - + Please go in the settings to select it if you wish to download it. กรุณาไปในส่วนของการตั้งค่าเพื่อเลือก ถ้าคุณต้องการจะดาวน์โหลด - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a หากคุณตัดสินใจที่จะลบไฟล์ก็จะทำให้ไม่มีใครสามารถใช้งานโฟลเดอร์นี้ได้เพราะคุณเป็นเจ้าของ - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -792,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce ถ้าเรื่องนี้เป็นอุบัติเหตุและคุณตัดสินใจที่จะเก็บไฟล์ของคุณ ไฟล์ของคุณก็จะถูกประสานข้อมูลใหม่อีกครั้ง - + Remove All Files? ลบไฟล์ทั้งหมด? - + Remove all files ลบไฟล์ทั้งหมด - + Keep files เก็บไฟล์เอาไว้ - + This sync would reset the files to an earlier 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? @@ -816,17 +816,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an ไฟล์ปัจจุบันของคุณทั้งหมดจะถูกเขียนทับด้วยไฟล์เก่า คุณต้องการเก็บไฟล์ไว้? - + Backup detected ตรวจพบการสำรองข้อมูล - + Normal Synchronisation ประสานข้อมูลปกติ - + Keep Local Files as Conflict เก็บไฟล์ต้นทางเป็นไฟล์ที่มีปัญหา diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 8ce3f7259..601ff8f46 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -752,24 +752,24 @@ Sistem hariç tutulma dosyası okunamadı - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Tüm Dosyalar Kaldırılsın mı? - + Remove all files Tüm dosyaları kaldır - + Keep files Dosyaları koru - + This sync would reset the files to an earlier 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? - + Backup detected Yedek bulundu - + Normal Synchronisation Normal Eşitleme - + Keep Local Files as Conflict Çakışma Durumunda Yerel Dosyaları Tut diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 9ecbaa696..4b3b67f54 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -752,24 +752,24 @@ Неможливо прочитати виключений системний файл - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Видалити усі файли? - + Remove all files Видалити усі файли - + Keep files Зберегти файли - + This sync would reset the files to an earlier 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? - + Backup detected Резервну копію знайдено - + Normal Synchronisation - + Keep Local Files as Conflict diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index fca0dd6c1..d94280562 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -752,26 +752,26 @@ 无法读取系统排除的文件 - + A new folder larger than %1 MB has been added: %2. 一个大于 %1 MB 的新文件夹 %2 已被添加。 - + A folder from an external storage has been added. 一个来自外部存储的文件夹已被添加。 - + Please go in the settings to select it if you wish to download it. 如果您想下载,请到设置页面选择它。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 如果您决定删除这些文件,它们将不再可用,除非您是其所有者。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce 如果这是一个意外而您想要保留这些文件,他们会被重新从服务器同步过来。 - + Remove All Files? 删除所有文件? - + Remove all files 删除所有文件 - + Keep files 保持所有文件 - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an 继续正常同步将导致您全部文件被更早状态的旧文件覆盖。您想要保留冲突文件的本地最新版本吗? - + Backup detected 备份已删除 - + Normal Synchronisation 正常同步 - + Keep Local Files as Conflict 保留本地文件为冲突文件 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index d4d49b030..1c1d33006 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -752,24 +752,24 @@ 無法讀取系統的排除檔案 - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? 移除所有檔案? - + Remove all files 移除所有檔案 - + Keep files 保留檔案 - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict From 8392d6c13626f7a357018d38b37a28ccf95e40a8 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 14 Sep 2017 02:18:30 +0200 Subject: [PATCH 038/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_de.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 144ae04ad..8a552cbc6 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -117,6 +117,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_de.ts b/translations/client_de.ts index ffa53a311..23bee4c34 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -2919,7 +2919,7 @@ Es ist nicht ratsam, diese zu benutzen. Share... - + Teilen… From 0b7ad2c804b86f8623fb6e53a185c0f54d7fe7d7 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 13 Sep 2017 13:03:40 +0200 Subject: [PATCH 039/166] Excludes: Allow escaping # #6012 Otherwise adding patterns that start with # are impossible to add, since they get treated as comments. Also add this escaping for patterns added in the ui. --- src/csync/csync_exclude.cpp | 1 + src/gui/ignorelisteditor.cpp | 2 ++ sync-exclude.lst | 2 ++ test/csync/csync_tests/check_csync_exclude.cpp | 4 ++-- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 7517ee218..7a177b840 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -84,6 +84,7 @@ static const char *csync_exclude_expand_escapes(const char * input) case '"': out[o++] = '"'; break; case '?': out[o++] = '?'; break; case '\\': out[o++] = '\\'; break; + case '#': out[o++] = '#'; break; case 'a': out[o++] = '\a'; break; case 'b': out[o++] = '\b'; break; case 'f': out[o++] = '\f'; break; diff --git a/src/gui/ignorelisteditor.cpp b/src/gui/ignorelisteditor.cpp index 64c39c48f..3253b2b1e 100644 --- a/src/gui/ignorelisteditor.cpp +++ b/src/gui/ignorelisteditor.cpp @@ -107,6 +107,8 @@ void IgnoreListEditor::slotUpdateLocalIgnoreList() QByteArray prepend; if (deletableItem->checkState() == Qt::Checked) { prepend = "]"; + } else if (patternItem->text().startsWith('#')) { + prepend = "\\"; } ignores.write(prepend + patternItem->text().toUtf8() + '\n'); } diff --git a/sync-exclude.lst b/sync-exclude.lst index bdf6c3441..fe5cbee10 100644 --- a/sync-exclude.lst +++ b/sync-exclude.lst @@ -1,3 +1,5 @@ +# This file contains fixed global exclude patterns + *~ ~$* .~lock.* diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 99a771266..0525942ac 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -387,9 +387,9 @@ static void check_csync_exclude_expand_escapes(void **state) (void)state; const char *str = csync_exclude_expand_escapes( - "keep \\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v \\z"); + "keep \\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v \\z \\#"); assert_true(0 == strcmp( - str, "keep ' \" ? \\ \a \b \f \n \r \t \v \\z")); + str, "keep ' \" ? \\ \a \b \f \n \r \t \v \\z #")); SAFE_FREE(str); str = csync_exclude_expand_escapes(""); From 46b3d41b20b02c96d4d3afcdd66a5f0cb73fa4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Fri, 15 Sep 2017 00:37:12 +0200 Subject: [PATCH 040/166] Update release_template.md --- .github/release_template.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/release_template.md b/.github/release_template.md index 31e827fcb..7ff3a4d93 100644 --- a/.github/release_template.md +++ b/.github/release_template.md @@ -88,6 +88,9 @@ On Release Day (for final release): * [ ] Win: Perform smoke test (Install, make sure it does not explode, and check if all version indicators are correct) * [ ] Linux: Smoke test * [ ] Linux: Re-enable OBS publishing + * Let obs build and publish exactly once. then + * [ ] disable publishing and rebuild for the owncloud-client package and all its dependencies. + * [ ] double-check that there are no _aggregatepac from other projects, if so disable rebuilding there too. * [ ] Update ASCII Changelog on http://download.owncloud.com/download/changelog-client * [ ] Announce on https://central.owncloud.org * [ ] Announce on announcements@owncloud.org From 5b01d634915dbdab1d79e17f6af043a9031bd283 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 15 Sep 2017 02:18:32 +0200 Subject: [PATCH 041/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_ca.ts | 8 ++-- translations/client_cs.ts | 8 ++-- translations/client_de.ts | 8 ++-- translations/client_el.ts | 8 ++-- translations/client_en.ts | 8 ++-- translations/client_es.ts | 8 ++-- translations/client_es_AR.ts | 8 ++-- translations/client_et.ts | 8 ++-- translations/client_eu.ts | 8 ++-- translations/client_fa.ts | 8 ++-- translations/client_fi.ts | 8 ++-- translations/client_fr.ts | 8 ++-- translations/client_gl.ts | 8 ++-- translations/client_hu.ts | 8 ++-- translations/client_it.ts | 8 ++-- translations/client_ja.ts | 8 ++-- translations/client_nb_NO.ts | 8 ++-- translations/client_nl.ts | 8 ++-- translations/client_pl.ts | 8 ++-- translations/client_pt.ts | 8 ++-- translations/client_pt_BR.ts | 8 ++-- translations/client_ru.ts | 8 ++-- translations/client_sk.ts | 8 ++-- translations/client_sl.ts | 8 ++-- translations/client_sr.ts | 8 ++-- translations/client_sv.ts | 8 ++-- translations/client_th.ts | 90 ++++++++++++++++++------------------ translations/client_tr.ts | 8 ++-- translations/client_uk.ts | 8 ++-- translations/client_zh_CN.ts | 8 ++-- translations/client_zh_TW.ts | 8 ++-- 32 files changed, 168 insertions(+), 165 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 8a552cbc6..b94200add 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -120,6 +120,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index b082d58b6..a717e2efd 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -1376,22 +1376,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Els elements que poden ser eliminats s'eliminaran si impedeixen que una carpeta sigui eliminada. Això és útil per les metadades. - + Could not open file No s'ha pogut obrir el fitxer - + Cannot write changes to '%1'. No es poden desar els canvis a '%1'. - + Add Ignore Pattern Afegeix una plantilla per ignorar - + Add a new ignore pattern: Afegeix una nova plantilla d'ignorats: diff --git a/translations/client_cs.ts b/translations/client_cs.ts index c47bf25fb..591d239e1 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -1379,22 +1379,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Položky u kterých je povoleno smazání budou vymazány, pokud by bránily odstranění adresáře. Toto je užitečné pro metadata. - + Could not open file Nepodařilo se otevřít soubor - + Cannot write changes to '%1'. Nelze zapsat změny do '%1'. - + Add Ignore Pattern Přidat masku ignorovaných - + Add a new ignore pattern: Přidat novou masku ignorovaných souborů: diff --git a/translations/client_de.ts b/translations/client_de.ts index 23bee4c34..c181dbbac 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschung eines Ordners verhindern würden. Das ist für Metadaten nützlich. - + Could not open file Datei konnte nicht geöffnet werden - + Cannot write changes to '%1'. Konnte Änderungen nicht in '%1' schreiben. - + Add Ignore Pattern Ignoriermuster hinzufügen - + Add a new ignore pattern: Neues Ignoriermuster hinzufügen: diff --git a/translations/client_el.ts b/translations/client_el.ts index 3e01738b6..80eec1d0e 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Τα στοιχεία όπου επιτρέπεται η διαγραφή θα διαγράφονται εάν εμποδίζουν την αφαίρεση ενός φακέλου αρχείων. Αυτό είναι χρήσιμο για μετα-δεδομένα. - + Could not open file Αδυναμία ανοίγματος αρχείου - + Cannot write changes to '%1'. Αδυναμία εγγραφής αλλαγών στο '%1'. - + Add Ignore Pattern Προσθήκη Προτύπου Αγνόησης - + Add a new ignore pattern: Προσθήκη νέου προτύπου αγνόησης: diff --git a/translations/client_en.ts b/translations/client_en.ts index 96ab14a87..5ca8defa1 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1402,22 +1402,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file - + Cannot write changes to '%1'. - + Add Ignore Pattern - + Add a new ignore pattern: diff --git a/translations/client_es.ts b/translations/client_es.ts index 60e007514..63608fec6 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Los elementos cuya eliminación está permitida serán eliminados si impiden que un directorio sea eliminado. Esto es útil para sus metadatos. - + Could not open file No se ha podido abrir el archivo - + Cannot write changes to '%1'. No se pueden guardar cambios en '%1'. - + Add Ignore Pattern Añadir patrón para ignorar - + Add a new ignore pattern: Añadir nuevo patrón para ignorar: diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 1de26cf91..46abebb41 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file No se pudo abrir el archivo - + Cannot write changes to '%1'. No se pueden guardar cambios en '%1'. - + Add Ignore Pattern Agregar patrón a ignorar - + Add a new ignore pattern: Añadir nuevo patrón a ignorar: diff --git a/translations/client_et.ts b/translations/client_et.ts index 419c7afb5..3b4fa9d55 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Ei suutunud avada faili - + Cannot write changes to '%1'. Ei saa kirjutada muudatusi '%1'. - + Add Ignore Pattern Lisa ignoreerimise muster - + Add a new ignore pattern: Lisa uus ignoreerimise muster: diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 6728a398c..db73dff6b 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -1372,22 +1372,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten ez badute. Hau meta datuentzat interesgarria da. - + Could not open file Ezin izan da fitxategia ireki - + Cannot write changes to '%1'. Ezin izan dira aldaketa idatzi hemen '%1'. - + Add Ignore Pattern Gehitu Baztertzeko Eredua - + Add a new ignore pattern: Gehitu baztertzeko eredu berria: diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 7f7b3e714..b91b066c6 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file امکان باز کردن فایل وجود ندارد - + Cannot write changes to '%1'. - + Add Ignore Pattern - + Add a new ignore pattern: diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 9fb5aba4c..e37ba353d 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -1372,22 +1372,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistamisen. Tämä on hyödyllistä metatietojen osalta. - + Could not open file Tiedoston avaaminen ei onnistunut - + Cannot write changes to '%1'. Muutoksien kirjoittaminen kohteeseen '%1' epäonnistui. - + Add Ignore Pattern Lisää ohituskaava - + Add a new ignore pattern: Lisää uusi ohituskaava: diff --git a/translations/client_fr.ts b/translations/client_fr.ts index e29c5d273..617773e27 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1382,22 +1382,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from L'option "Autoriser suppression" permet de ne pas bloquer la suppression d'un dossier. C'est utile pour les fichiers de méta-données. - + Could not open file Impossible d'ouvrir le fichier - + Cannot write changes to '%1'. Impossible d'écrire les modifications sur '%1'. - + Add Ignore Pattern Ajouter un motif d'exclusion - + Add a new ignore pattern: Ajoutez un nouveau motif d'exclusion : diff --git a/translations/client_gl.ts b/translations/client_gl.ts index c7818df1f..55dfc8553 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Non foi posíbel abrir o ficheiro - + Cannot write changes to '%1'. Non é posíbel escribir os cambios en «%1». - + Add Ignore Pattern Engadir o patrón a ignorar - + Add a new ignore pattern: Engadir un novo patrón a ignorar: diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 3c94c7d96..abb757ff4 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Nem sikerült a fájl megnyitása - + Cannot write changes to '%1'. - + Add Ignore Pattern - + Add a new ignore pattern: diff --git a/translations/client_it.ts b/translations/client_it.ts index e70d0a7a9..32477b609 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -1377,22 +1377,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se impediscono la rimozione di una cartella. Utile per i metadati. - + Could not open file Impossibile aprire il file - + Cannot write changes to '%1'. Impossibile scrivere le modifiche in '%1'. - + Add Ignore Pattern Aggiungi modello Ignora - + Add a new ignore pattern: Aggiungi un nuovo modello di esclusione: diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 7f8d56192..25ca904a5 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -1379,22 +1379,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from パターンによってディレクトリを削除から除外する場合は,パターンに含まれた項目も削除されます。例えばメタデータファイルに有用です。 - + Could not open file ファイルが開けませんでした - + Cannot write changes to '%1'. '%1'を更新できません。 - + Add Ignore Pattern 除外するファイルパターンを追加 - + Add a new ignore pattern: 除外するファイルパターンを新しく追加: diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index dbdf85958..e20c579d1 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -1380,22 +1380,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning av en mappe. Dette er hendig for metadata. - + Could not open file Klarte ikke å åpne fil - + Cannot write changes to '%1'. Kan ikke skrive endringer til '%1'. - + Add Ignore Pattern Nytt mønster - + Add a new ignore pattern: Legg til ignoreringsmønster: diff --git a/translations/client_nl.ts b/translations/client_nl.ts index a0e649cce..f236dbe1d 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1385,22 +1385,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een map verdwijnt. Dit is nuttig voor metadata. - + Could not open file Kon het bestand niet openen - + Cannot write changes to '%1'. Er kunnen geen wijzigingen worden geschreven naar %1 - + Add Ignore Pattern Toevoegen negeerpatroon - + Add a new ignore pattern: Voeg nieuw negeerpatroon toe: diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 08469b890..765f86adf 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -1374,22 +1374,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawnienia katalogu dopuszczają usuwanie. - + Could not open file Nie można otworzyć plików - + Cannot write changes to '%1'. Nie mogę zapisać zmian do '%1'. - + Add Ignore Pattern Dodaj ignorowany - + Add a new ignore pattern: Dodaj nowy ignorowany: diff --git a/translations/client_pt.ts b/translations/client_pt.ts index cb6743a26..347ce30e5 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Os itens onde é permitido a eliminação serão eliminados se estes impedirem a remoção de uma diretoria. Isto é útil para os metadados. - + Could not open file Não foi possível abrir o ficheiro - + Cannot write changes to '%1'. Não foi possível gravar as alterações para '%1' - + Add Ignore Pattern Adicione Padrão de ignorar - + Add a new ignore pattern: Adicione um novo padrão de ignorar: diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index e8b0c7ac6..ce0af73ce 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -1380,22 +1380,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Itens onde a eliminação é permitida serão excluídos se eles evitarem que um diretório seja removido. Isso é útil para metadados. - + Could not open file Não foi possível abrir o arquivo - + Cannot write changes to '%1'. Não é possível gravar as alterações em '%1'. - + Add Ignore Pattern Adicionar Ignorar Padrão - + Add a new ignore pattern: Adicionar um novo padrão ignorar: diff --git a/translations/client_ru.ts b/translations/client_ru.ts index bc551bcd3..43e999735 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -1378,22 +1378,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Элементы, где это разрешается, будут удалены, в случае если они помешают удалению папки. Используется для метаданных. - + Could not open file Невозможно открыть файл - + Cannot write changes to '%1'. Невозможно записать изменения в '%1'. - + Add Ignore Pattern Добавить шаблон игнорирования - + Add a new ignore pattern: Добавить новый шаблон игнорирования: diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 02d15008f..7b0b8d621 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Nemožno otvoriť súbor - + Cannot write changes to '%1'. Nemožno zapísať zmeny do '%1'. - + Add Ignore Pattern Pridať vzor ignorovaného súboru - + Add a new ignore pattern: Pridať nový vzor ignorovaného súboru: diff --git a/translations/client_sl.ts b/translations/client_sl.ts index cb09d13a3..78a95f096 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi njih brisanje mape ni mogoče. Možnost je uporabna pri metapodatkih. - + Could not open file Datoteke ni mogoče odpreti - + Cannot write changes to '%1'. Ni mogoče zapisati sprememb v '%1'. - + Add Ignore Pattern Dodaj vzorec za izpuščanje - + Add a new ignore pattern: Dodaj nov vzorec za izpuščanje: diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 6257c45a9..15abed0f9 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Не могу да отворим фајл - + Cannot write changes to '%1'. Не могу да упишем измене у „%1“ - + Add Ignore Pattern Додавање шаблона за игнорисање - + Add a new ignore pattern: Додајте нови шаблон за игнорисање: diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 80ec7b6f6..bf5cad5fb 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -1374,22 +1374,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas bort. Det är användbart för meta-data. - + Could not open file Kunde inte öppna fil - + Cannot write changes to '%1'. Kan inte skriva förändringar till '%1'. - + Add Ignore Pattern Lägg till synk-filter - + Add a new ignore pattern: Lägg till ett nytt synk-filter: diff --git a/translations/client_th.ts b/translations/client_th.ts index cd5061da1..79c1bd1b3 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -91,12 +91,12 @@ Unknown error: network reply was deleted - + ข้อผิดพลาดที่ไม่รู้จัก: การตอบกลับของเครือข่ายถูกลบแล้ว Server replied "%1 %2" to "%3 %4" - + เซิร์ฟเวอร์ตอบกลับ "%1 %2" ถึง "%3 %4" @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + เซิร์ฟเวอร์ %1 กำลังอยู่ในโหมดการบำรุงรักษา @@ -266,7 +266,7 @@ Connecting to %1... - + กำลังเชื่อมต่อไปยัง %1... @@ -381,7 +381,7 @@ Maintenance mode - + โหมดบำรุงรักษา @@ -396,7 +396,7 @@ Asking Credentials - + กำลังขอข้อมูลการรับรอง @@ -1005,7 +1005,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an There are unresolved conflicts. Click for details. - + มีข้อขัดแย้งที่ยังไม่ได้รับการแก้ไข คลิกเพื่อดูรายละเอียด @@ -1383,22 +1383,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from รายการที่ลบจะถูกอนุญาตให้ลบถ้าพวกเขาป้องกันไม่ให้ไดเรกทอรีถูกลบออก นี้จะเป็นประโยชน์สำหรับข้อมูล meta - + Could not open file ไม่สามารถเปิดไฟล์ - + Cannot write changes to '%1'. ไม่สามารถเขียนเปลี่ยนเป็น '%1' - + Add Ignore Pattern เพิ่มการละเว้นรูปแบบ - + Add a new ignore pattern: เพิ่มการละเว้นรูปแบบใหม่: @@ -1418,7 +1418,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from List of issues - + รายการปัญหา @@ -1429,7 +1429,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from <no filter> - + <no filter> @@ -1440,17 +1440,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Show warnings - + แสดงคำเตือน Show ignored files - + แสดงไฟล์ที่ถูกเพิกเฉย Copy the issues list to the clipboard. - + คัดลอกรายการปัญหาไปยังคลิปบอร์ด @@ -1470,7 +1470,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Issue - + ปัญหา @@ -1493,7 +1493,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from &Capture debug messages - + และจับภาพข้อความการแก้ปัญหา @@ -1907,7 +1907,7 @@ for additional privileges during the process. Login in your browser - + เข้าสู่ระบบในเบราเซอร์ของคุณ @@ -2646,7 +2646,7 @@ It is not advisable to use it. Public Links - ลิงก์สาธารณะ + ลิงค์สาธารณะ @@ -2669,12 +2669,12 @@ It is not advisable to use it. Enter a name to create a new public link... - + ป้อนชื่อเพื่อสร้างลิงค์สาธารณะใหม่... &Create new - + และสร้างใหม่ @@ -2689,7 +2689,7 @@ It is not advisable to use it. Link properties: - + คุณสมบัติของลิงค์: @@ -2704,7 +2704,7 @@ It is not advisable to use it. Anyone with the link has access to the file/folder - ทุกคนที่มีลิงก์สามารถเข้าถึงไฟล์หรือโฟลเดอร์ได้ + ทุกคนที่มีลิงค์สามารถเข้าถึงไฟล์หรือโฟลเดอร์ได้ @@ -2725,32 +2725,32 @@ It is not advisable to use it. %1 link - + %1 ลิงค์ Link shares have been disabled - + แชร์ลิงค์แล้วถูกปิดใช้งาน Create public link share - + สร้างแชร์ลิงค์สาธารณะ Open link in browser - + เปิดลิงค์ในเบราว์เซอร์ Copy link to clipboard - + คัดลอกลิงค์ไปยังคลิปบอร์ด Copy link to clipboard (direct download) - + คัดลอกลิงค์ทางอีเมล (ดาวน์โหลดโดยตรง) @@ -2760,12 +2760,12 @@ It is not advisable to use it. Send link by email (direct download) - + ส่งลิงค์ทางอีเมล (ดาวน์โหลดโดยตรง) Public link - ลิงก์สาธารณะ + ลิงค์สาธารณะ @@ -2798,17 +2798,17 @@ It is not advisable to use it. The item is not shared with any users or groups - + รายการนี้ไม่ได้แชร์กับผู้ใช้หรือกลุ่มใดๆ Open link in browser - + คัดลอกลิงก์ไปยังคลิปบอร์ด Copy link to clipboard - + คัดลอกลิงก์ไปยังคลิปบอร์ด @@ -2823,7 +2823,7 @@ It is not advisable to use it. I shared something with you - + ฉันแชร์บางอย่างกับคุณ @@ -2916,22 +2916,22 @@ It is not advisable to use it. I shared something with you - + ฉันแชร์บางอย่างกับคุณ Share... - + แชร์... Copy private link to clipboard - + คัดลอกลิงค์ส่วนตัวไปยังคลิปบอร์ด Send private link by email... - + ส่งลิงค์ส่วนตัวทางอีเมล... @@ -3227,7 +3227,7 @@ It is not advisable to use it. Folder hierarchy is too deep - + โฟลเดอร์มีโฟลเดอร์ย่อยเกินไป @@ -3809,17 +3809,17 @@ It is not advisable to use it. Please switch to your browser to proceed. - + โปรดเปลี่ยนไปใช้เบราว์เซอร์เพื่อดำเนินการต่อ An error occured while connecting. Please try again. - + เกิดข้อผิดพลาดขณะเชื่อมต่อ กรุณาลองอีกครั้ง Re-open Browser - + เปิดเบราเซอร์อีกครั้ง @@ -4154,7 +4154,7 @@ It is not advisable to use it. Could not open browser - + ไม่สามารถเปิดเบราเซอร์ diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 601ff8f46..902a68b48 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -1372,22 +1372,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler silinecektir. Bu ham veriler için kullanışlıdır. - + Could not open file Dosya açılamadı - + Cannot write changes to '%1'. Değişiklikler '%1' üzerine yazılamıyor. - + Add Ignore Pattern Yoksayma Deseni Ekle - + Add a new ignore pattern: Yeni bir yoksayma deseni ekle: diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 4b3b67f54..05b137f90 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -1370,22 +1370,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Could not open file Не вдалося відкрити файл - + Cannot write changes to '%1'. Неможливо запиасати зміни до '%1'. - + Add Ignore Pattern Додати шаблон ігнорування - + Add a new ignore pattern: Додати новий шаблон ігнорування: diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index d94280562..ec9b3afe0 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -1381,22 +1381,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from 如果选中的项目正在阻止文件夹的删除,它们也会被删除。这对于元数据很有用。 - + Could not open file 不能打开文件 - + Cannot write changes to '%1'. 无法向 %1 中写入修改。 - + Add Ignore Pattern 增加忽略模式 - + Add a new ignore pattern: 增加新的忽略模式: diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 1c1d33006..0543c1b13 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -1372,22 +1372,22 @@ Items where deletion is allowed will be deleted if they prevent a directory from 當資料夾被移除時,會根據清單裡的允許刪除選項來避免那些檔案會被移除。而這對元資料是有用的。 - + Could not open file 無法開啟檔案 - + Cannot write changes to '%1'. %1 無法寫入變更。 - + Add Ignore Pattern 增加忽略格式 - + Add a new ignore pattern: 增加一個新的忽略格式: From 709aa27031f07ffbc21e0478ae0da220885a4cf3 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Wed, 13 Sep 2017 00:26:56 -0400 Subject: [PATCH 042/166] remove qt4 code --- src/cmd/cmd.cpp | 4 -- src/common/utility.cpp | 45 +------------------ src/common/utility_unix.cpp | 10 ----- src/gui/accountsettings.cpp | 10 ++--- src/gui/activitylistmodel.cpp | 4 -- src/gui/activitywidget.cpp | 4 -- src/gui/application.cpp | 17 ------- src/gui/folder.cpp | 2 - src/gui/folderstatusdelegate.cpp | 11 +---- src/gui/folderstatusmodel.cpp | 8 +--- src/gui/folderstatusmodel.h | 8 ---- src/gui/folderwizard.cpp | 2 - src/gui/generalsettings.cpp | 5 --- src/gui/issueswidget.cpp | 2 - src/gui/main.cpp | 10 +---- src/gui/networksettings.cpp | 21 --------- src/gui/protocolwidget.cpp | 2 - src/gui/selectivesyncdialog.cpp | 4 -- src/gui/settingsdialog.cpp | 2 - src/gui/socketapi.cpp | 12 ----- src/gui/sslbutton.cpp | 11 +---- src/gui/sslerrordialog.cpp | 4 -- src/gui/updater/ocupdater.cpp | 2 - .../wizard/owncloudconnectionmethoddialog.cpp | 13 +----- src/gui/wizard/owncloudsetuppage.cpp | 8 ---- src/libsync/abstractnetworkjob.cpp | 10 +---- src/libsync/accessmanager.cpp | 2 +- src/libsync/account.cpp | 2 - src/libsync/creds/httpcredentials.cpp | 3 -- src/libsync/filesystem.cpp | 8 ---- src/libsync/logger.cpp | 28 ------------ src/libsync/networkjobs.cpp | 4 -- src/libsync/owncloudpropagator.h | 11 ----- src/libsync/propagateupload.h | 11 ----- src/libsync/propagateuploadng.cpp | 11 ----- src/libsync/propagateuploadv1.cpp | 10 ----- src/libsync/propagatorjobs.cpp | 4 -- src/libsync/syncengine.cpp | 18 ++------ src/libsync/theme.cpp | 2 - test/testchecksumvalidator.cpp | 14 ------ test/testfolderman.cpp | 10 ----- test/testutility.cpp | 6 --- test/testxmlparse.cpp | 10 ----- 43 files changed, 16 insertions(+), 369 deletions(-) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 8fa1f3ba4..60d54a1c4 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -510,12 +510,8 @@ restart_sync: SyncEngine engine(account, options.source_dir, folder, &db); engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles); engine.setNetworkLimits(options.uplimit, options.downlimit); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QObject::connect(&engine, &SyncEngine::finished, [&app](bool result) { app.exit(result ? EXIT_SUCCESS : EXIT_FAILURE); }); -#else - QObject::connect(&engine, SIGNAL(finished(bool)), &app, SLOT(quit())); -#endif QObject::connect(&engine, SIGNAL(transmissionProgress(ProgressInfo)), &cmd, SLOT(transmissionProgressSlot())); diff --git a/src/common/utility.cpp b/src/common/utility.cpp index f55fbea4e..b3b7df19e 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -33,17 +33,9 @@ #include #include #include -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -#include -#else #include -#endif -#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) #include -#endif -#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) #include -#endif #ifdef Q_OS_UNIX @@ -248,23 +240,9 @@ QString Utility::compactFormatDouble(double value, int prec, const QString &unit QString Utility::escape(const QString &in) { -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - return Qt::escape(in); -#else return in.toHtmlEscaped(); -#endif } -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -// In Qt 4, QThread::sleep functions are protected. -// This is a hack to make them visible in this namespace. -struct QThread : ::QThread -{ - using ::QThread::sleep; - using ::QThread::usleep; -}; -#endif - void Utility::sleep(int sec) { QThread::sleep(sec); @@ -408,22 +386,7 @@ bool Utility::hasDarkSystray() QString Utility::platformName() { - QString re("Windows"); - -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0) - if (isMac()) { - re = QLatin1String("MacOSX"); - } else if (isLinux()) { - re = QLatin1String("Linux"); - } else if (isBSD()) { - re = QLatin1String("BSD"); - } else if (isUnix()) { - re = QLatin1String("Unix"); - } -#else - re = QSysInfo::prettyProductName(); -#endif - return re; + return QSysInfo::prettyProductName(); } void Utility::crash() @@ -553,16 +516,10 @@ quint64 Utility::StopWatch::durationOfLap(const QString &lapName) const 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); -#elif QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - fileNames.sort(Qt::CaseInsensitive); -#else - fileNames.sort(); -#endif } QUrl Utility::concatUrlPath(const QUrl &url, const QString &concatPath, diff --git a/src/common/utility_unix.cpp b/src/common/utility_unix.cpp index eecef1778..2ccc88b9c 100644 --- a/src/common/utility_unix.cpp +++ b/src/common/utility_unix.cpp @@ -17,9 +17,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif namespace OCC { @@ -42,15 +40,7 @@ static void setupFavLink_private(const QString &folder) // and respects the XDG_CONFIG_HOME env variable QString getUserAutostartDir_private() { -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) QString config = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); -#else - QString config = QFile::decodeName(qgetenv("XDG_CONFIG_HOME")); - - if (config.isEmpty()) { - config = QDir::homePath() + QLatin1String("/.config"); - } -#endif config += QLatin1String("/autostart/"); return config; } diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 453ace412..f40a38889 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -221,13 +221,9 @@ QString AccountSettings::selectedFolderAlias() const 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()) { + // We can't call isSystemTrayAvailable with appmenu-qt5 because it breaks the systemtray + // (issue #4693, #4944) + if (qgetenv("QT_QPA_PLATFORMTHEME") == "appmenu-qt5" || QSystemTrayIcon::isSystemTrayAvailable()) { topLevelWidget()->close(); } #ifdef Q_OS_MAC diff --git a/src/gui/activitylistmodel.cpp b/src/gui/activitylistmodel.cpp index 05af4a8e3..f03153483 100644 --- a/src/gui/activitylistmodel.cpp +++ b/src/gui/activitylistmodel.cpp @@ -29,10 +29,6 @@ #include "activitydata.h" #include "activitylistmodel.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -Q_DECLARE_METATYPE(QPointer) -#endif - namespace OCC { Q_LOGGING_CATEGORY(lcActivity, "gui.activity", QtInfoMsg) diff --git a/src/gui/activitywidget.cpp b/src/gui/activitywidget.cpp index d9acc999f..3d1b9047a 100644 --- a/src/gui/activitywidget.cpp +++ b/src/gui/activitywidget.cpp @@ -13,9 +13,7 @@ */ #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif #include "activitylistmodel.h" #include "activitywidget.h" @@ -269,9 +267,7 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList &list) _notificationsLayout->addWidget(widget); // _ui->_notifyScroll->setMinimumHeight( widget->height()); -#if QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) _ui->_notifyScroll->setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContentsOnFirstShow); -#endif _widgetForNotifId[activity.ident()] = widget; newNotificationShown = true; } diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 37d24cec7..c3521a9b6 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -122,9 +122,7 @@ Application::Application(int &argc, char **argv) setOrganizationDomain(QLatin1String(APPLICATION_REV_DOMAIN)); setApplicationName(_theme->appNameGUI()); setWindowIcon(_theme->applicationIcon()); -#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) setAttribute(Qt::AA_UseHighDpiPixmaps, true); -#endif parseOptions(arguments()); //no need to waste time; @@ -134,15 +132,6 @@ Application::Application(int &argc, char **argv) if (isRunning()) return; -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) && QT_VERSION < QT_VERSION_CHECK(5, 4, 2) - // Workaround for QTBUG-44576: Make sure a stale QSettings lock file - // is deleted. (Introduced in Qt 5.4.0 and fixed in Qt 5.4.2) - { - QString lockFilePath = ConfigFile().configFile() + QLatin1String(".lock"); - QLockFile(lockFilePath).removeStaleLockFile(); - } -#endif - #if defined(WITH_CRASHREPORTER) if (ConfigFile().crashReporter()) _crashHandler.reset(new CrashReporter::Handler(QDir::tempPath(), true, CRASHREPORTER_EXECUTABLE)); @@ -507,9 +496,7 @@ void Application::showVersion() stream << "Git revision " << GIT_SHA1 << endl; #endif stream << "Using Qt " << qVersion() << ", built against Qt " << QT_VERSION_STR << endl; -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) stream << "Using '" << QSslSocket::sslLibraryVersionString() << "'" << endl; -#endif displayHelpText(helpText); } @@ -604,10 +591,6 @@ void Application::setupTranslations() if (property("ui_lang").isNull()) setProperty("ui_lang", "C"); } -// Work around Qt 5 < 5.5.0 regression, see https://bugreports.qt.io/browse/QTBUG-43447 -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) && QT_VERSION < QT_VERSION_CHECK(5, 5, 0) - setLayoutDirection(QApplication::tr("QT_LAYOUT_DIRECTION") == QLatin1String("RTL") ? Qt::RightToLeft : Qt::LeftToRight); -#endif } bool Application::giveHelp() diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index ee1a84869..f5374b257 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -739,9 +739,7 @@ void Folder::slotSyncFinished(bool success) { qCInfo(lcFolder) << "Client version" << qPrintable(Theme::instance()->version()) << " Qt" << qVersion() -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) << " SSL " << QSslSocket::sslLibraryVersionString().toUtf8().data() -#endif ; bool syncError = !_syncResult.errorStrings().isEmpty(); diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp index cf5bc171d..be3f7d9d9 100644 --- a/src/gui/folderstatusdelegate.cpp +++ b/src/gui/folderstatusdelegate.cpp @@ -138,12 +138,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & opt.rect.setWidth(qMin(opt.rect.width(), hint.width())); opt.rect.adjust(0, aliasMargin, 0, -aliasMargin); opt.rect = QStyle::visualRect(option.direction, option.rect, opt.rect); - QApplication::style()->drawControl(QStyle::CE_PushButton, &opt, painter -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - , - option.widget -#endif - ); + QApplication::style()->drawControl(QStyle::CE_PushButton, &opt, painter, option.widget); return; } @@ -308,11 +303,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem & pBRect.setHeight(barHeight); pBRect.setWidth(overallWidth - 2 * margin); -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - QStyleOptionProgressBarV2 pBarOpt; -#else QStyleOptionProgressBar pBarOpt; -#endif pBarOpt.state = option.state | QStyle::State_Horizontal; pBarOpt.minimum = 0; diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index 59ad76589..16e2ab0e0 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -110,9 +110,7 @@ Qt::ItemFlags FolderStatusModel::flags(const QModelIndex &index) const switch (classify(index)) { case AddButton: { Qt::ItemFlags ret; -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) ret = Qt::ItemNeverHasChildren; -#endif if (!_accountState->isConnected()) { return ret; } else if (_folders.count() == 1) { @@ -125,11 +123,7 @@ Qt::ItemFlags FolderStatusModel::flags(const QModelIndex &index) const return Qt::ItemIsEnabled | ret; } case FetchLabel: - return Qt::ItemIsEnabled -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) - | Qt::ItemNeverHasChildren -#endif - ; + return Qt::ItemIsEnabled | Qt::ItemNeverHasChildren; case RootFolder: return Qt::ItemIsEnabled; case SubFolder: diff --git a/src/gui/folderstatusmodel.h b/src/gui/folderstatusmodel.h index 02bb09618..7cdf49c7f 100644 --- a/src/gui/folderstatusmodel.h +++ b/src/gui/folderstatusmodel.h @@ -163,14 +163,6 @@ private: */ QMap _fetchingItems; -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - //the roles argument was added in Qt5 - void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles = QVector()) - { - emit QAbstractItemModel::dataChanged(topLeft, bottomRight); - } -#endif - signals: void dirtyChanged(); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 168f60d88..26ce66dfd 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -161,11 +161,9 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) _lscolTimer.setSingleShot(true); connect(&_lscolTimer, SIGNAL(timeout()), SLOT(slotLsColFolderEntry())); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); // Make sure that there will be a scrollbar when the contents is too wide _ui.folderTreeWidget->header()->setStretchLastSection(false); -#endif } void FolderWizardRemotePath::slotAddRemoteFolder() diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index a79036771..d298b6cae 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -103,12 +103,7 @@ QSize GeneralSettings::sizeHint() const void GeneralSettings::loadMiscSettings() { -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0) - QScopedValueRollback scope(_currentlyLoading); - _currentlyLoading = true; -#else QScopedValueRollback scope(_currentlyLoading, true); -#endif ConfigFile cfgFile; _ui->monoIconsCheckBox->setChecked(cfgFile.monoIcons()); _ui->desktopNotificationsCheckBox->setChecked(cfgFile.optionalDesktopNotifications()); diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index f434f3cd2..19e69c014 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -13,9 +13,7 @@ */ #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif #include "issueswidget.h" #include "configfile.h" diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 4ee4201ab..ba3947f14 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -56,11 +56,7 @@ int main(int argc, char **argv) // 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"); -#else - qputenv("QT_DEVICE_PIXEL_RATIO", "auto"); // See #4840, #4994 -#endif #endif // !Q_OS_WIN #ifdef Q_OS_MAC @@ -132,11 +128,9 @@ int main(int argc, char **argv) } return 0; } -#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) + // We can't call isSystemTrayAvailable with appmenu-qt5 begause it hides the systemtray + // (issue #4693) if (qgetenv("QT_QPA_PLATFORMTHEME") != "appmenu-qt5") -// We can't call isSystemTrayAvailable with appmenu-qt5 begause it hides the systemtray -// (issue #4693) -#endif { if (!QSystemTrayIcon::isSystemTrayAvailable()) { // If the systemtray is not there, we will wait one second for it to maybe start diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index 2f35614a1..b135bbea2 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -125,27 +125,6 @@ void NetworkSettings::loadBWLimitSettings() { ConfigFile cfgFile; -#if QT_VERSION < QT_VERSION_CHECK(5, 3, 3) - // QNAM bandwidth limiting only works with versions of Qt greater or equal to 5.3.3 - // (It needs Qt commits 097b641 and b99fa32) - - const char *v = qVersion(); // "x.y.z"; - if (QLatin1String(v) < QLatin1String("5.3.3")) { - QString tooltip = tr("Qt >= 5.4 is required in order to use the bandwidth limit"); - _ui->downloadBox->setEnabled(false); - _ui->uploadBox->setEnabled(false); - _ui->downloadBox->setToolTip(tooltip); - _ui->uploadBox->setToolTip(tooltip); - _ui->noDownloadLimitRadioButton->setChecked(true); - _ui->noUploadLimitRadioButton->setChecked(true); - if (cfgFile.useUploadLimit() != 0 || cfgFile.useDownloadLimit() != 0) { - // Update from old mirall that was using neon propagator jobs. - saveBWLimitSettings(); - } - return; - } - -#endif int useDownloadLimit = cfgFile.useDownloadLimit(); if (useDownloadLimit >= 1) { _ui->downloadLimitRadioButton->setChecked(true); diff --git a/src/gui/protocolwidget.cpp b/src/gui/protocolwidget.cpp index c55ab6789..b2c82ce3c 100644 --- a/src/gui/protocolwidget.cpp +++ b/src/gui/protocolwidget.cpp @@ -13,9 +13,7 @@ */ #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif #include "protocolwidget.h" #include "configfile.h" diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 1663ca481..a9c96cb77 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -90,12 +90,8 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) _folderTree->setSortingEnabled(true); _folderTree->sortByColumn(0, Qt::AscendingOrder); _folderTree->setColumnCount(2); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) _folderTree->header()->setSectionResizeMode(0, QHeaderView::QHeaderView::ResizeToContents); _folderTree->header()->setSectionResizeMode(1, QHeaderView::QHeaderView::ResizeToContents); -#else - _folderTree->header()->resizeSection(0, sizeHint().width() / 2); -#endif _folderTree->header()->setStretchLastSection(true); _folderTree->headerItem()->setText(0, tr("Name")); _folderTree->headerItem()->setText(1, tr("Size")); diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index f21ecd5f8..2ea52e921 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -179,9 +179,7 @@ void SettingsDialog::changeEvent(QEvent *e) switch (e->type()) { case QEvent::StyleChange: case QEvent::PaletteChange: -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) case QEvent::ThemeChange: -#endif customizeStyle(); break; default: diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 11a971128..fe7ca5f4d 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -50,10 +50,7 @@ #include - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif // This is the version that is returned when the client asks for the VERSION. @@ -188,16 +185,7 @@ SocketApi::SocketApi(QObject *parent) socketPath = SOCKETAPI_TEAM_IDENTIFIER_PREFIX APPLICATION_REV_DOMAIN ".socketApi"; } else if (Utility::isLinux() || Utility::isBSD()) { QString runtimeDir; -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation); -#else - runtimeDir = QFile::decodeName(qgetenv("XDG_RUNTIME_DIR")); - if (runtimeDir.isEmpty()) { - runtimeDir = QDir::tempPath() + QLatin1String("/runtime-") - + QString::fromLocal8Bit(qgetenv("USER")); - QDir().mkdir(runtimeDir); - } -#endif socketPath = runtimeDir + "/" + Theme::instance()->appName() + "/socket"; } else { qCWarning(lcSocketApi) << "An unexpected system detected, this probably won't work."; diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index cf6a2af7d..e6c87e1f3 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -84,15 +84,11 @@ QMenu *SslButton::buildCertMenu(QMenu *parent, const QSslCertificate &cert, if (issuer.isEmpty()) issuer = QStringList(cert.issuerInfo(QSslCertificate::OrganizationalUnitName)).join(QChar(';')); QString sha1 = Utility::formatFingerprint(cert.digest(QCryptographicHash::Sha1).toHex(), false); -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - QString md5 = Utility::formatFingerprint(cert.digest(QCryptographicHash::Md5).toHex(), false); -#else QByteArray sha265hash = cert.digest(QCryptographicHash::Sha256).toHex(); QString sha256escaped = Utility::escape(Utility::formatFingerprint(sha265hash.left(sha265hash.length() / 2), false)) + QLatin1String("
") + Utility::escape(Utility::formatFingerprint(sha265hash.mid(sha265hash.length() / 2), false)); -#endif QString serial = QString::fromUtf8(cert.serialNumber()); QString effectiveDate = cert.effectiveDate().date().toString(); QString expiryDate = cert.expiryDate().date().toString(); @@ -126,11 +122,8 @@ QMenu *SslButton::buildCertMenu(QMenu *parent, const QSslCertificate &cert, stream << tr("

Fingerprints

"); stream << QLatin1String(""); -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - stream << addCertDetailsField(tr("MD 5:"), Utility::escape(md5)); -#else + stream << addCertDetailsField(tr("SHA-256:"), sha256escaped); -#endif stream << addCertDetailsField(tr("SHA-1:"), Utility::escape(sha1)); stream << QLatin1String("
"); @@ -218,11 +211,9 @@ void SslButton::slotUpdateMenu() + ", " + account->_sessionCipher.encryptionMethod(); _menu->addAction(sslVersion)->setEnabled(false); -#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0) if (account->_sessionTicket.isEmpty()) { _menu->addAction(tr("No support for SSL session tickets/identifiers"))->setEnabled(false); } -#endif QList chain = account->_peerCertificateChain; diff --git a/src/gui/sslerrordialog.cpp b/src/gui/sslerrordialog.cpp index 809be80aa..83ebcffe8 100644 --- a/src/gui/sslerrordialog.cpp +++ b/src/gui/sslerrordialog.cpp @@ -16,9 +16,7 @@ #include #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif #include "ui_sslerrordialog.h" @@ -27,12 +25,10 @@ namespace OCC { Q_LOGGING_CATEGORY(lcSslErrorDialog, "gui.sslerrordialog", QtInfoMsg) -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) namespace Utility { // Used for QSSLCertificate::subjectInfo which returns a QStringList in Qt5, but a QString in Qt4 QString escape(const QStringList &l) { return escape(l.join(';')); } } -#endif bool SslDialogErrorHandler::handleErrors(QList errors, const QSslConfiguration &conf, QList *certs, AccountPtr account) { diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index b904ed189..f1b3e1efd 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -23,9 +23,7 @@ #include #include #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include -#endif #include diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp index 6bb865ffe..3e40f1546 100644 --- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp +++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp @@ -27,22 +27,11 @@ OwncloudConnectionMethodDialog::OwncloudConnectionMethodDialog(QWidget *parent) connect(ui->btnNoTLS, SIGNAL(clicked(bool)), this, SLOT(returnNoTLS())); connect(ui->btnClientSideTLS, SIGNAL(clicked(bool)), this, SLOT(returnClientSideTLS())); connect(ui->btnBack, SIGNAL(clicked(bool)), this, SLOT(returnBack())); - - -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 0) - // We support only from Qt 5.4.x because of https://doc.qt.io/qt-5/qsslcertificate.html#importPkcs12 - ui->btnClientSideTLS->hide(); -#endif } void OwncloudConnectionMethodDialog::setUrl(const QUrl &url) { - ui->label->setText(tr("

Failed to connect to the secure server address %1. How do you wish to proceed?

") -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - .arg(OCC::Utility::escape(url.toString()))); -#else - .arg(url.toDisplayString().toHtmlEscaped())); -#endif + ui->label->setText(tr("

Failed to connect to the secure server address %1. How do you wish to proceed?

").arg(url.toDisplayString().toHtmlEscaped())); } diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 39afeecfc..31a3bbc8e 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -267,10 +267,8 @@ void OwncloudSetupPage::setErrorString(const QString &err, bool retryHTTPonly) wizard()->next(); } break; case OwncloudConnectionMethodDialog::Client_Side_TLS: -#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) addCertDial->show(); connect(addCertDial, SIGNAL(accepted()), this, SLOT(slotCertificateAccepted())); -#endif break; case OwncloudConnectionMethodDialog::Closed: case OwncloudConnectionMethodDialog::Back: @@ -305,17 +303,12 @@ void OwncloudSetupPage::stopSpinner() QString subjectInfoHelper(const QSslCertificate &cert, const QByteArray &qa) { -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - return cert.subjectInfo(qa); -#else return cert.subjectInfo(qa).join(QLatin1Char('/')); -#endif } //called during the validation of the client certificate. void OwncloudSetupPage::slotCertificateAccepted() { -#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) QList clientCaCertificates; QFile certFile(addCertDial->getCertificatePath()); certFile.open(QFile::ReadOnly); @@ -344,7 +337,6 @@ void OwncloudSetupPage::slotCertificateAccepted() addCertDial->showErrorMessage("Could not load certificate"); addCertDial->show(); } -#endif } OwncloudSetupPage::~OwncloudSetupPage() diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 9c60da8f9..070a0e689 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -103,9 +103,7 @@ void AbstractNetworkJob::setPath(const QString &path) void AbstractNetworkJob::setupConnections(QNetworkReply *reply) { connect(reply, SIGNAL(finished()), SLOT(slotFinished())); -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) connect(reply, SIGNAL(encrypted()), SIGNAL(networkActivity())); -#endif connect(reply->manager(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *)), SIGNAL(networkActivity())); connect(reply, SIGNAL(sslErrors(QList)), SIGNAL(networkActivity())); connect(reply, SIGNAL(metaDataChanged()), SIGNAL(networkActivity())); @@ -364,13 +362,7 @@ QString networkReplyErrorString(const QNetworkReply &reply) return base; } - return AbstractNetworkJob::tr("Server replied \"%1 %2\" to \"%3 %4\"").arg(QString::number(httpStatus), httpReason, requestVerb(reply), -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - reply.request().url().toString() -#else - reply.request().url().toDisplayString() -#endif - ); + return AbstractNetworkJob::tr("Server replied \"%1 %2\" to \"%3 %4\"").arg(QString::number(httpStatus), httpReason, requestVerb(reply), reply.request().url().toDisplayString()); } } // namespace OCC diff --git a/src/libsync/accessmanager.cpp b/src/libsync/accessmanager.cpp index 67603f623..fdfa6758a 100644 --- a/src/libsync/accessmanager.cpp +++ b/src/libsync/accessmanager.cpp @@ -34,7 +34,7 @@ Q_LOGGING_CATEGORY(lcAccessManager, "sync.accessmanager", QtInfoMsg) AccessManager::AccessManager(QObject *parent) : QNetworkAccessManager(parent) { -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) && defined(Q_OS_MAC) +#if defined(Q_OS_MAC) // FIXME Workaround http://stackoverflow.com/a/15707366/2941 https://bugreports.qt-project.org/browse/QTBUG-30434 QNetworkProxy proxy = this->proxy(); proxy.setHostName(" "); diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 45168033f..2caa58713 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -261,12 +261,10 @@ QSslConfiguration Account::getOrCreateSslConfig() // "An internal error number 1060 happened. SSL handshake failed, client certificate was requested: SSL error: sslv3 alert handshake failure" QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); -#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0) // Try hard to re-use session for different requests sslConfig.setSslOption(QSsl::SslOptionDisableSessionTickets, false); sslConfig.setSslOption(QSsl::SslOptionDisableSessionSharing, false); sslConfig.setSslOption(QSsl::SslOptionDisableSessionPersistence, false); -#endif return sslConfig; } diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index b82588f84..82c0c768d 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -226,12 +226,9 @@ void HttpCredentials::slotReadClientKeyPEMJobDone(QKeychain::Job *incoming) if (_clientSslKey.isNull()) { _clientSslKey = QSslKey(clientKeyPEM, QSsl::Dsa); } -#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0) - // ec keys are Qt 5.5 if (_clientSslKey.isNull()) { _clientSslKey = QSslKey(clientKeyPEM, QSsl::Ec); } -#endif if (_clientSslKey.isNull()) { qCWarning(lcHttpCredentials) << "Could not load SSL key into Qt!"; } diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index 2e365c608..b027db4d7 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -25,10 +25,6 @@ #include #endif -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -#include -#endif - #ifdef Q_OS_WIN #include #include @@ -300,9 +296,6 @@ bool FileSystem::uncheckedRenameReplace(const QString &originFileName, #ifndef Q_OS_WIN bool success; QFile orig(originFileName); -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - success = orig.fileEngine()->rename(destinationFileName); -#else // We want a rename that also overwites. QFile::rename does not overwite. // Qt 5.1 has QSaveFile::renameOverwrite we could use. // ### FIXME @@ -316,7 +309,6 @@ bool FileSystem::uncheckedRenameReplace(const QString &originFileName, if (success) { success = orig.rename(destinationFileName); } -#endif if (!success) { *errorString = orig.errorString(); qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString; diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index 46c2e95ba..a0fe727e8 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -26,27 +26,6 @@ namespace OCC { Q_LOGGING_CATEGORY(lcCsync, "sync.csync", QtInfoMsg) -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -// logging handler. -static void mirallLogCatcher(QtMsgType type, const char *msg) -{ - Q_UNUSED(type) - // qDebug() exports to local8Bit, which is not always UTF-8 - Logger::instance()->mirallLog(QString::fromLocal8Bit(msg)); -} -static void qInstallMessageHandler(QtMsgHandler h) -{ - qInstallMsgHandler(h); -} -#elif QT_VERSION < QT_VERSION_CHECK(5, 4, 0) -static void mirallLogCatcher(QtMsgType, const QMessageLogContext &ctx, const QString &message) -{ - QByteArray file = ctx.file; - file = file.mid(file.lastIndexOf('/') + 1); - Logger::instance()->mirallLog(QString::fromLocal8Bit(file) + QLatin1Char(':') + QString::number(ctx.line) - + QLatin1Char(' ') + message); -} -#else static void mirallLogCatcher(QtMsgType type, const QMessageLogContext &ctx, const QString &message) { auto logger = Logger::instance(); @@ -54,7 +33,6 @@ static void mirallLogCatcher(QtMsgType type, const QMessageLogContext &ctx, cons logger->doLog(qFormatLogMessage(type, ctx, message)); } } -#endif static void csyncLogCatcher(int verbosity, const char *function, @@ -91,9 +69,7 @@ Logger::Logger(QObject *parent) , _logExpire(0) , _logDebug(false) { -#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) qSetMessagePattern("%{time MM-dd hh:mm:ss:zzz} [ %{type} %{category} ]%{if-debug}\t[ %{function} ]%{endif}:\t%{message}"); -#endif #ifndef NO_MSG_HANDLER qInstallMessageHandler(mirallLogCatcher); #else @@ -154,12 +130,8 @@ void Logger::log(Log log) */ bool Logger::isNoop() const { -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - return false; -#else QMutexLocker lock(const_cast(&_mutex)); return !_logstream && !_logWindowActivated; -#endif } diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index c92936e3a..37fd1b71a 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -447,11 +447,9 @@ static void mergeSslConfigurationForSslButton(const QSslConfiguration &config, A if (!config.sessionCipher().isNull()) { account->_sessionCipher = config.sessionCipher(); } -#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0) if (config.sessionTicket().length() > 0) { account->_sessionTicket = config.sessionTicket(); } -#endif } void CheckServerJob::encryptedSlot() @@ -486,13 +484,11 @@ void CheckServerJob::metaDataChangedSlot() bool CheckServerJob::finished() { -#if QT_VERSION > QT_VERSION_CHECK(5, 2, 0) if (reply()->request().url().scheme() == QLatin1String("https") && reply()->sslConfiguration().sessionTicket().isEmpty() && reply()->error() == QNetworkReply::NoError) { qCWarning(lcCheckServerJob) << "No SSL session identifier / session ticket is used, this might impact sync performance negatively."; } -#endif mergeSslConfigurationForSslButton(reply()->sslConfiguration(), account()); diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index b9b60034f..21da3d72c 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -450,17 +450,6 @@ private: AccountPtr _account; QScopedPointer _rootJob; SyncOptions _syncOptions; - -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - // access to signals which are protected in Qt4 - friend class PropagateDownloadFile; - friend class PropagateItemJob; - friend class PropagateLocalMkdir; - friend class PropagateLocalRename; - friend class PropagateRemoteMove; - friend class PropagateUploadFileV1; - friend class PropagateUploadFileNG; -#endif }; diff --git a/src/libsync/propagateupload.h b/src/libsync/propagateupload.h index dd7550925..a43048eb6 100644 --- a/src/libsync/propagateupload.h +++ b/src/libsync/propagateupload.h @@ -50,14 +50,6 @@ public: bool isSequential() const Q_DECL_OVERRIDE; bool seek(qint64 pos) Q_DECL_OVERRIDE; -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 2) - bool reset() Q_DECL_OVERRIDE - { - emit wasReset(); - return QIODevice::reset(); - } -#endif - void setBandwidthLimited(bool); bool isBandwidthLimited() { return _bandwidthLimited; } void setChoked(bool); @@ -65,9 +57,6 @@ public: void giveBandwidthQuota(qint64 bwq); signals: -#if QT_VERSION < 0x050402 - void wasReset(); -#endif private: // The file data diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 00e3d0524..edeb43516 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -351,17 +351,6 @@ void PropagateUploadFileNG::slotPutFinished() QNetworkReply::NetworkError err = job->reply()->error(); -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 2) - if (err == QNetworkReply::OperationCanceledError && job->reply()->property("owncloud-should-soft-cancel").isValid()) { - // Abort the job and try again later. - // This works around a bug in QNAM wich might reuse a non-empty buffer for the next request. - qCWarning(lcPropagateUpload) << "Forcing job abort on HTTP connection reset with Qt < 5.4.2."; - propagator()->_anotherSyncNeeded = true; - abortWithError(SyncFileItem::SoftError, tr("Forcing job abort on HTTP connection reset with Qt < 5.4.2.")); - return; - } -#endif - if (err != QNetworkReply::NoError) { _item->_httpErrorCode = job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); commonErrorHandling(job); diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index c1182bb70..a5396c700 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -185,16 +185,6 @@ void PropagateUploadFileV1::slotPutFinished() QNetworkReply::NetworkError err = job->reply()->error(); -#if QT_VERSION < QT_VERSION_CHECK(5, 4, 2) - if (err == QNetworkReply::OperationCanceledError && job->reply()->property("owncloud-should-soft-cancel").isValid()) { // Abort the job and try again later. - // This works around a bug in QNAM wich might reuse a non-empty buffer for the next request. - qCWarning(lcPropagateUpload) << "Forcing job abort on HTTP connection reset with Qt < 5.4.2."; - propagator()->_anotherSyncNeeded = true; - abortWithError(SyncFileItem::SoftError, tr("Forcing job abort on HTTP connection reset with Qt < 5.4.2.")); - return; - } -#endif - if (err != QNetworkReply::NoError) { _item->_httpErrorCode = job->reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (checkForProblemsWithShared(_item->_httpErrorCode, diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 1bdee68ae..769408dfb 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -24,11 +24,7 @@ #include #include #include -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -#include -#else #include -#endif #include #include #include diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 6483ca435..a6599751e 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -594,7 +594,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, // the file system in the DB, this is to avoid spurious upload on the next sync item->_modtime = other->modtime; // same for the size - item->_size = other->size; + item->_size = other->size; } // If the 'W' remote permission changed, update the local filesystem @@ -676,7 +676,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, item->log._other_fileId = other->file_id; item->log._other_instruction = other->instruction; item->log._other_modtime = other->modtime; - item->log._other_size = other->size; + item->log._other_size = other->size; } _syncItemMap.insert(key, item); @@ -795,9 +795,7 @@ void SyncEngine::startSync() QString verStr("Using Qt "); verStr.append(qVersion()); -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) verStr.append(" SSL library ").append(QSslSocket::sslLibraryVersionString().toUtf8().data()); -#endif verStr.append(" on ").append(Utility::platformName()); qCInfo(lcEngine) << verStr; @@ -1091,16 +1089,8 @@ void SyncEngine::setNetworkLimits(int upload, int download) _propagator->_uploadLimit = upload; _propagator->_downloadLimit = download; - int propDownloadLimit = _propagator->_downloadLimit -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - .load() -#endif - ; - int propUploadLimit = _propagator->_uploadLimit -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) - .load() -#endif - ; + int propDownloadLimit = _propagator->_downloadLimit.load(); + int propUploadLimit = _propagator->_uploadLimit.load(); if (propDownloadLimit != 0 || propUploadLimit != 0) { qCInfo(lcEngine) << "Network Limits (down/up) " << propDownloadLimit << propUploadLimit; diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 978efc9cb..828bbf45e 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -173,7 +173,6 @@ QIcon Theme::themeIcon(const QString &name, bool sysTray, bool sysTrayMenuVisibl QString Theme::hidpiFileName(const QString &fileName, QPaintDevice *dev) { -#if QT_VERSION > QT_VERSION_CHECK(5, 0, 0) qreal devicePixelRatio = dev ? dev->devicePixelRatio() : qApp->primaryScreen()->devicePixelRatio(); if (devicePixelRatio <= 1.0) { return fileName; @@ -189,7 +188,6 @@ QString Theme::hidpiFileName(const QString &fileName, QPaintDevice *dev) return at2xfileName; } } -#endif return fileName; } diff --git a/test/testchecksumvalidator.cpp b/test/testchecksumvalidator.cpp index fd1988eab..d2d10096d 100644 --- a/test/testchecksumvalidator.cpp +++ b/test/testchecksumvalidator.cpp @@ -15,10 +15,6 @@ #include "filesystem.h" #include "propagatorjobs.h" -#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) -// poor man QTRY_VERIFY when Qt5 is not available. -#define QTRY_VERIFY(Cond) QTest::qWait(1000); QVERIFY(Cond) -#endif using namespace OCC; @@ -155,16 +151,6 @@ 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); -} -#else QTEST_GUILESS_MAIN(TestChecksumValidator) -#endif #include "testchecksumvalidator.moc" diff --git a/test/testfolderman.cpp b/test/testfolderman.cpp index 78a2dd71a..39c657a05 100644 --- a/test/testfolderman.cpp +++ b/test/testfolderman.cpp @@ -6,9 +6,7 @@ */ #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) #include -#endif #include #include "common/utility.h" @@ -49,7 +47,6 @@ class TestFolderMan: public QObject private slots: void testCheckPathValidityForNewFolder() { -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) QTemporaryDir dir; ConfigFile::setConfDir(dir.path()); // we don't want to pollute the user's config file QVERIFY(dir.isValid()); @@ -149,14 +146,10 @@ private slots: // Should not have the rights QVERIFY(!folderman->checkPathValidityForNewFolder("/").isNull()); QVERIFY(!folderman->checkPathValidityForNewFolder("/usr/bin/somefolder").isNull()); -#else - QSKIP("Test not supported with Qt4", SkipSingle); -#endif } void testFindGoodPathForNewSyncFolder() { -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) // SETUP QTemporaryDir dir; @@ -197,9 +190,6 @@ private slots: QString(dirPath + "/ownCloud2/bar")); QCOMPARE(folderman->findGoodPathForNewSyncFolder(dirPath + "/sub", url), QString(dirPath + "/sub2")); -#else - QSKIP("Test not supported with Qt4", SkipSingle); -#endif } }; diff --git a/test/testutility.cpp b/test/testutility.cpp index 5e86a336e..c83b14199 100644 --- a/test/testutility.cpp +++ b/test/testutility.cpp @@ -5,9 +5,7 @@ */ #include -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) #include -#endif #include "common/utility.h" @@ -156,15 +154,12 @@ private slots: QVERIFY(fsCasePreserving()); qputenv("OWNCLOUD_TEST_CASE_PRESERVING", "0"); QVERIFY(! fsCasePreserving()); -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) qunsetenv("OWNCLOUD_TEST_CASE_PRESERVING"); QVERIFY(isMac() || isWindows() ? fsCasePreserving() : ! fsCasePreserving()); -#endif } void testFileNamesEqual() { -#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) QTemporaryDir dir; QVERIFY(dir.isValid()); QDir dir2(dir.path()); @@ -190,7 +185,6 @@ private slots: dir.remove(); qunsetenv("OWNCLOUD_TEST_CASE_PRESERVING"); -#endif } diff --git a/test/testxmlparse.cpp b/test/testxmlparse.cpp index 4b7f7bd69..9ec675f47 100644 --- a/test/testxmlparse.cpp +++ b/test/testxmlparse.cpp @@ -441,16 +441,6 @@ 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); -} -#else QTEST_GUILESS_MAIN(TestXmlParse) -#endif #include "testxmlparse.moc" From 0c996735813940d8a888192d104fac069fd9a1dd Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 12 Jul 2017 12:38:53 +0200 Subject: [PATCH 043/166] Make DetailError different from BlacklistedError It's quite different in regard to blacklist handling and overall sync failure changes. --- src/gui/protocolwidget.cpp | 1 + src/libsync/owncloudpropagator.cpp | 15 +++++++-------- src/libsync/progressdispatcher.cpp | 2 +- src/libsync/propagatedownload.cpp | 4 ++-- src/libsync/propagateupload.cpp | 3 +-- src/libsync/syncfileitem.h | 20 ++++++++++++++++---- src/libsync/syncfilestatustracker.cpp | 1 + 7 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/gui/protocolwidget.cpp b/src/gui/protocolwidget.cpp index b2c82ce3c..75b8aaa52 100644 --- a/src/gui/protocolwidget.cpp +++ b/src/gui/protocolwidget.cpp @@ -147,6 +147,7 @@ QTreeWidgetItem *ProtocolWidget::createCompletedTreewidgetItem(const QString &fo QIcon icon; if (item._status == SyncFileItem::NormalError || item._status == SyncFileItem::FatalError + || item._status == SyncFileItem::DetailError || item._status == SyncFileItem::BlacklistedError) { icon = Theme::instance()->syncStateIcon(SyncResult::Error); } else if (Progress::isWarningKind(item._status)) { diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 2dcc7a26d..65fd70264 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -172,7 +172,8 @@ static void blacklistUpdate(SyncJournalDb *journal, SyncFileItem &item) bool mayBlacklist = item._errorMayBeBlacklisted // explicitly flagged for blacklisting || ((item._status == SyncFileItem::NormalError - || item._status == SyncFileItem::SoftError) + || item._status == SyncFileItem::SoftError + || item._status == SyncFileItem::DetailError) && item._httpErrorCode != 0 // or non-local error ); @@ -239,13 +240,9 @@ void PropagateItemJob::done(SyncFileItem::Status statusArg, const QString &error case SyncFileItem::SoftError: case SyncFileItem::FatalError: case SyncFileItem::NormalError: - case SyncFileItem::BlacklistedError: + case SyncFileItem::DetailError: // Check the blacklist, possibly adjusting the item (including its status) - // but not if this status comes from blacklisting in the first place - if (!(_item->_status == SyncFileItem::BlacklistedError - && _item->_instruction == CSYNC_INSTRUCTION_IGNORE)) { - blacklistUpdate(propagator()->_journal, *_item); - } + blacklistUpdate(propagator()->_journal, *_item); break; case SyncFileItem::Success: case SyncFileItem::Restoration: @@ -261,6 +258,7 @@ void PropagateItemJob::done(SyncFileItem::Status statusArg, const QString &error case SyncFileItem::Conflict: case SyncFileItem::FileIgnored: case SyncFileItem::NoStatus: + case SyncFileItem::BlacklistedError: // nothing break; } @@ -805,7 +803,8 @@ void PropagatorCompositeJob::slotSubJobFinished(SyncFileItem::Status status) if (status == SyncFileItem::FatalError || status == SyncFileItem::NormalError - || status == SyncFileItem::SoftError) { + || status == SyncFileItem::SoftError + || status == SyncFileItem::DetailError) { _hasError = status; } diff --git a/src/libsync/progressdispatcher.cpp b/src/libsync/progressdispatcher.cpp index d5b3f20f5..df6417e4a 100644 --- a/src/libsync/progressdispatcher.cpp +++ b/src/libsync/progressdispatcher.cpp @@ -91,7 +91,7 @@ bool Progress::isWarningKind(SyncFileItem::Status kind) return kind == SyncFileItem::SoftError || kind == SyncFileItem::NormalError || kind == SyncFileItem::FatalError || kind == SyncFileItem::FileIgnored || kind == SyncFileItem::Conflict || kind == SyncFileItem::Restoration - || kind == SyncFileItem::BlacklistedError; + || kind == SyncFileItem::DetailError || kind == SyncFileItem::BlacklistedError; } bool Progress::isIgnoredKind(SyncFileItem::Status kind) diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index f5b199024..e98278e0c 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -429,10 +429,10 @@ void PropagateDownloadFile::startDownload() const auto diskSpaceResult = propagator()->diskSpaceCheck(); if (diskSpaceResult != OwncloudPropagator::DiskSpaceOk) { if (diskSpaceResult == OwncloudPropagator::DiskSpaceFailure) { - // Using BlacklistedError here will make the error not pop up in the account + // Using DetailError here will make the error not pop up in the account // tab: instead we'll generate a general "disk space low" message and show // these detail errors only in the error view. - done(SyncFileItem::BlacklistedError, + done(SyncFileItem::DetailError, tr("The download would reduce free local disk space below the limit")); emit propagator()->insufficientLocalStorage(); } else if (diskSpaceResult == OwncloudPropagator::DiskSpaceCritical) { diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index ac6c68259..73002c427 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -524,8 +524,7 @@ void PropagateUploadFileCommon::commonErrorHandling(AbstractNetworkJob *job) if (_item->_httpErrorCode == 507) { // Insufficient remote storage. - _item->_errorMayBeBlacklisted = true; - status = SyncFileItem::BlacklistedError; + status = SyncFileItem::DetailError; errorString = tr("Upload of %1 exceeds the quota for the folder").arg(Utility::octetsToString(_item->_size)); emit propagator()->insufficientRemoteStorage(); } diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index 571eabc19..45660f83f 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -64,12 +64,24 @@ public: FileIgnored, ///< The file is in the ignored list (or blacklisted with no retries left) Restoration, ///< The file was restored because what should have been done was not allowed - /** For files whose errors were blacklisted. + /** For errors that should only appear in the error view. * - * If _instruction == IGNORE, the file wasn't even reattempted. + * Some errors also produce a summary message. Usually displaying that message is + * sufficient, but the individual errors should still appear in the issues tab. * - * These errors should usually be shown as NormalErrors, but not be as loud - * as them. + * These errors do cause the sync to fail. + * + * A NormalError that isn't as prominent. + */ + DetailError, + + /** For files whose errors were blacklisted + * + * If an file is blacklisted due to an error it isn't even reattempted. These + * errors should appear in the issues tab, but not on the account settings and + * should not cause the sync run to fail. + * + * A DetailError that doesn't cause sync failure. */ BlacklistedError }; diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 32e3ccb00..c0b315372 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -94,6 +94,7 @@ static inline bool showErrorInSocketApi(const SyncFileItem &item) return item._instruction == CSYNC_INSTRUCTION_ERROR || status == SyncFileItem::NormalError || status == SyncFileItem::FatalError + || status == SyncFileItem::DetailError || status == SyncFileItem::BlacklistedError || item._hasBlacklistEntry; } From b5b055e1ae2e2f08f99403811e9e1996cf0805e5 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 12 Jul 2017 13:19:58 +0200 Subject: [PATCH 044/166] SyncOptions/Propagator: Parallelism as an option Very useful for changing it on a per-test basis. --- src/libsync/discoveryphase.h | 4 ++++ src/libsync/owncloudpropagator.cpp | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index 4404e76ea..4a09c3462 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -44,6 +44,7 @@ struct SyncOptions , _minChunkSize(1 * 1000 * 1000) // 1 MB , _maxChunkSize(100 * 1000 * 1000) // 100 MB , _targetChunkUploadDuration(60 * 1000) // 1 minute + , _parallelNetworkJobs(true) { } @@ -74,6 +75,9 @@ struct SyncOptions * Set to 0 it will disable dynamic chunk sizing. */ quint64 _targetChunkUploadDuration; + + /** Whether parallel network jobs are allowed. */ + bool _parallelNetworkJobs; }; diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 65fd70264..7550838e7 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -80,7 +80,9 @@ OwncloudPropagator::~OwncloudPropagator() int OwncloudPropagator::maximumActiveTransferJob() { - if (_downloadLimit.fetchAndAddAcquire(0) != 0 || _uploadLimit.fetchAndAddAcquire(0) != 0) { + if (_downloadLimit.fetchAndAddAcquire(0) != 0 + || _uploadLimit.fetchAndAddAcquire(0) != 0 + || !_syncOptions._parallelNetworkJobs) { // disable parallelism when there is a network limit. return 1; } @@ -90,6 +92,8 @@ int OwncloudPropagator::maximumActiveTransferJob() /* The maximum number of active jobs in parallel */ int OwncloudPropagator::hardMaximumActiveJob() { + if (!_syncOptions._parallelNetworkJobs) + return 1; static int max = qgetenv("OWNCLOUD_MAX_PARALLEL").toUInt(); if (max) return max; From 3a55ff2119f47cb84196d964e3eadc7cc7797989 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 12 Jul 2017 09:58:15 +0200 Subject: [PATCH 045/166] PropagateUpload: Model of remote quota, avoid some uploads #5537 When we see a 507 error, assume that quota is < uploaded size. --- src/libsync/owncloudpropagator.h | 13 +++++++++ src/libsync/propagateupload.cpp | 30 +++++++++++++++++++- test/testsyncengine.cpp | 48 ++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index 21da3d72c..093fd8aac 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -350,6 +350,19 @@ public: /** We detected that another sync is required after this one */ bool _anotherSyncNeeded; + /** Per-folder quota guesses. + * + * This starts out empty. When an upload in a folder fails due to insufficent + * remote quota, the quota guess is updated to be attempted_size-1 at maximum. + * + * Note that it will usually just an upper limit for the actual quota - but + * since the quota on the server might change at any time it can sometimes be + * wrong in the other direction as well. + * + * This allows skipping of uploads that have a very high likelihood of failure. + */ + QHash _folderQuota; + /* the maximum number of jobs using bandwidth (uploads or downloads, in parallel) */ int maximumActiveTransferJob(); diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index 73002c427..f72d36ca7 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -176,6 +176,17 @@ void PropagateUploadFileCommon::start() return; } + // Check if we believe that the upload will fail due to remote quota limits + const quint64 quotaGuess = propagator()->_folderQuota.value( + QFileInfo(_item->_file).path(), std::numeric_limits::max()); + if (_item->_size > quotaGuess) { + // Necessary for blacklisting logic + _item->_httpErrorCode = 507; + emit propagator()->insufficientRemoteStorage(); + done(SyncFileItem::DetailError, tr("Upload of %1 exceeds the quota for the folder").arg(Utility::octetsToString(_item->_size))); + return; + } + propagator()->_activeJobList.append(this); if (!_deleteExisting) { @@ -522,8 +533,18 @@ void PropagateUploadFileCommon::commonErrorHandling(AbstractNetworkJob *job) SyncFileItem::Status status = classifyError(job->reply()->error(), _item->_httpErrorCode, &propagator()->_anotherSyncNeeded); + // Insufficient remote storage. if (_item->_httpErrorCode == 507) { - // Insufficient remote storage. + // Update the quota expectation + const auto path = QFileInfo(_item->_file).path(); + auto quotaIt = propagator()->_folderQuota.find(path); + if (quotaIt != propagator()->_folderQuota.end()) { + quotaIt.value() = qMin(quotaIt.value(), _item->_size - 1); + } else { + propagator()->_folderQuota[path] = _item->_size - 1; + } + + // Set up the error status = SyncFileItem::DetailError; errorString = tr("Upload of %1 exceeds the quota for the folder").arg(Utility::octetsToString(_item->_size)); emit propagator()->insufficientRemoteStorage(); @@ -587,10 +608,17 @@ void PropagateUploadFileCommon::finalize() { _finished = true; + // Update the quota, if known + auto quotaIt = propagator()->_folderQuota.find(QFileInfo(_item->_file).path()); + if (quotaIt != propagator()->_folderQuota.end()) + quotaIt.value() -= _item->_size; + + // Update the database entry if (!propagator()->_journal->setFileRecord(SyncJournalFileRecord(*_item, propagator()->getFilePath(_item->_file)))) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; } + // Remove from the progress database: propagator()->_journal->setUploadInfo(_item->_file, SyncJournalDb::UploadInfo()); propagator()->_journal->commit("upload file start"); diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index cfac432f9..716bc5329 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -465,6 +465,54 @@ private slots: QVERIFY(fakeFolder.syncOnce()); } + + /** + * Checks whether subsequent large uploads are skipped after a 507 error + */ + void testInsufficientRemoteStorage() + { + FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; + + // Disable parallel uploads + SyncOptions syncOptions; + syncOptions._parallelNetworkJobs = false; + fakeFolder.syncEngine().setSyncOptions(syncOptions); + + // Produce an error based on upload size + int remoteQuota = 1000; + int n507 = 0, nPUT = 0; + auto parent = new QObject; + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request) -> QNetworkReply * { + if (op == QNetworkAccessManager::PutOperation) { + nPUT++; + if (request.rawHeader("OC-Total-Length").toInt() > remoteQuota) { + n507++; + return new FakeErrorReply(op, request, parent, 507); + } + } + return nullptr; + }); + + fakeFolder.localModifier().insert("A/big", 800); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(nPUT, 1); + QCOMPARE(n507, 0); + + nPUT = 0; + fakeFolder.localModifier().insert("A/big1", 500); // ok + fakeFolder.localModifier().insert("A/big2", 1200); // 507 (quota guess now 1199) + fakeFolder.localModifier().insert("A/big3", 1200); // skipped + fakeFolder.localModifier().insert("A/big4", 1500); // skipped + fakeFolder.localModifier().insert("A/big5", 1100); // 507 (quota guess now 1099) + fakeFolder.localModifier().insert("A/big6", 900); // ok (quota guess now 199) + fakeFolder.localModifier().insert("A/big7", 200); // skipped + fakeFolder.localModifier().insert("A/big8", 199); // ok (quota guess now 0) + + fakeFolder.localModifier().insert("B/big8", 1150); // 507 + QVERIFY(!fakeFolder.syncOnce()); + QCOMPARE(nPUT, 6); + QCOMPARE(n507, 3); + } }; QTEST_GUILESS_MAIN(TestSyncEngine) From 7d075cdcb74d727e413e0d08e4a28fae9ca732f3 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 8 Sep 2017 16:43:59 +0200 Subject: [PATCH 046/166] OAuth: Use redirectable jobs for oauth token management --- src/gui/creds/oauth.cpp | 6 +++--- src/libsync/abstractnetworkjob.cpp | 9 +++++++-- src/libsync/abstractnetworkjob.h | 7 +++++++ src/libsync/account.cpp | 9 ++++++++- src/libsync/account.h | 18 ++++++++++++++++-- src/libsync/creds/httpcredentials.cpp | 6 ++---- src/libsync/networkjobs.cpp | 19 +++++++++++++++++++ src/libsync/networkjobs.h | 22 ++++++++++++++++++++++ 8 files changed, 84 insertions(+), 12 deletions(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index e711755b5..9926700f7 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -20,6 +20,7 @@ #include #include #include "theme.h" +#include "networkjobs.h" namespace OCC { @@ -82,9 +83,8 @@ void OAuth::start() requestToken.setPassword(Theme::instance()->oauthClientSecret()); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - auto reply = _account->sendRequest("POST", requestToken, req); - QTimer::singleShot(30 * 1000, reply, &QNetworkReply::abort); - QObject::connect(reply, &QNetworkReply::finished, this, [this, reply, socket] { + auto job = _account->sendRequest("POST", requestToken, req); + QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this, socket](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; QJsonObject json = QJsonDocument::fromJson(jsonData, &jsonParseError).object(); diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 070a0e689..55bbb0a72 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -120,15 +120,20 @@ QNetworkReply *AbstractNetworkJob::addTimer(QNetworkReply *reply) QNetworkReply *AbstractNetworkJob::sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *requestBody) { - auto reply = _account->sendRequest(verb, url, req, requestBody); + auto reply = _account->sendRawRequest(verb, url, req, requestBody); _requestBody = requestBody; if (_requestBody) { _requestBody->setParent(reply); } + adoptRequest(reply); + return reply; +} + +void AbstractNetworkJob::adoptRequest(QNetworkReply *reply) +{ addTimer(reply); setReply(reply); setupConnections(reply); - return reply; } QUrl AbstractNetworkJob::makeAccountUrl(const QString &relativePath) const diff --git a/src/libsync/abstractnetworkjob.h b/src/libsync/abstractnetworkjob.h index 03de2d458..ae61e0c58 100644 --- a/src/libsync/abstractnetworkjob.h +++ b/src/libsync/abstractnetworkjob.h @@ -126,6 +126,13 @@ protected: QNetworkRequest req = QNetworkRequest(), QIODevice *requestBody = 0); + /** Makes this job drive a pre-made QNetworkReply + * + * This reply cannot have a QIODevice request body because we can't get + * at it and thus not resend it in case of redirects. + */ + void adoptRequest(QNetworkReply *reply); + /// Creates a url for the account from a relative path QUrl makeAccountUrl(const QString &relativePath) const; diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 2caa58713..d70e7ac9e 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -226,7 +226,7 @@ QSharedPointer Account::sharedNetworkAccessManager() return _am; } -QNetworkReply *Account::sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data) +QNetworkReply *Account::sendRawRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data) { req.setUrl(url); req.setSslConfiguration(this->getOrCreateSslConfig()); @@ -244,6 +244,13 @@ QNetworkReply *Account::sendRequest(const QByteArray &verb, const QUrl &url, QNe return _am->sendCustomRequest(req, verb, data); } +SimpleNetworkJob *Account::sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req, QIODevice *data) +{ + auto job = new SimpleNetworkJob(sharedFromThis(), this); + job->startRequest(verb, url, req, data); + return job; +} + void Account::setSslConfiguration(const QSslConfiguration &config) { _sslConfiguration = config; diff --git a/src/libsync/account.h b/src/libsync/account.h index fa2ccb8f9..c9f361feb 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -44,6 +44,7 @@ class Account; typedef QSharedPointer AccountPtr; class QuotaInfo; class AccessManager; +class SimpleNetworkJob; /** @@ -114,9 +115,22 @@ public: AbstractCredentials *credentials() const; void setCredentials(AbstractCredentials *cred); + /** Create a network request on the account's QNAM. + * + * Network requests in AbstractNetworkJobs are created through + * this function. Other places should prefer to use jobs or + * sendRequest(). + */ + QNetworkReply *sendRawRequest(const QByteArray &verb, + const QUrl &url, + QNetworkRequest req = QNetworkRequest(), + QIODevice *data = 0); - // For creating various network requests - QNetworkReply *sendRequest(const QByteArray &verb, + /** Create and start network job for a simple one-off request. + * + * More complicated requests typically create their own job types. + */ + SimpleNetworkJob *sendRequest(const QByteArray &verb, const QUrl &url, QNetworkRequest req = QNetworkRequest(), QIODevice *data = 0); diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 82c0c768d..53f4b89ce 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -303,10 +303,8 @@ bool HttpCredentials::refreshAccessToken() requestToken.setPassword(Theme::instance()->oauthClientSecret()); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - auto reply = _account->sendRequest("POST", requestToken, req); - QTimer::singleShot(30 * 1000, reply, &QNetworkReply::abort); - QObject::connect(reply, &QNetworkReply::finished, this, [this, reply] { - reply->deleteLater(); + auto job = _account->sendRequest("POST", requestToken, req); + QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; QJsonObject json = QJsonDocument::fromJson(jsonData, &jsonParseError).object(); diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 37fd1b71a..3a87571cf 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -886,4 +886,23 @@ void DetermineAuthTypeJob::send(const QUrl &url) sendRequest("GET", url, req); } +SimpleNetworkJob::SimpleNetworkJob(AccountPtr account, QObject *parent) + : AbstractNetworkJob(account, QString(), parent) +{ +} + +QNetworkReply *SimpleNetworkJob::startRequest(const QByteArray &verb, const QUrl &url, + QNetworkRequest req, QIODevice *requestBody) +{ + auto reply = sendRequest(verb, url, req, requestBody); + start(); + return reply; +} + +bool SimpleNetworkJob::finished() +{ + emit finishedSignal(reply()); + return true; +} + } // namespace OCC diff --git a/src/libsync/networkjobs.h b/src/libsync/networkjobs.h index 7992be25a..2965d5ae3 100644 --- a/src/libsync/networkjobs.h +++ b/src/libsync/networkjobs.h @@ -377,6 +377,28 @@ private: int _redirects; }; +/** + * @brief A basic job around a network request without extra funtionality + * @ingroup libsync + * + * Primarily adds timeout and redirection handling. + */ +class OWNCLOUDSYNC_EXPORT SimpleNetworkJob : public AbstractNetworkJob +{ + Q_OBJECT +public: + explicit SimpleNetworkJob(AccountPtr account, QObject *parent = 0); + + QNetworkReply *startRequest(const QByteArray &verb, const QUrl &url, + QNetworkRequest req = QNetworkRequest(), + QIODevice *requestBody = 0); + +signals: + void finishedSignal(QNetworkReply *reply); +private slots: + bool finished() Q_DECL_OVERRIDE; +}; + } // namespace OCC #endif // NETWORKJOBS_H From da6250fc1f3c522062a85547792d0057eef353d5 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 11 Sep 2017 12:23:52 +0200 Subject: [PATCH 047/166] OAuth: Pass client auth in header instead of url To play more nicely with redirects. --- src/gui/creds/oauth.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index 9926700f7..4f0b72a9f 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -79,10 +79,11 @@ void OAuth::start() + QLatin1String("/index.php/apps/oauth2/api/v1/token?grant_type=authorization_code&code=") + code + QLatin1String("&redirect_uri=http://localhost:") + QString::number(_server.serverPort())); - requestToken.setUserName(Theme::instance()->oauthClientId()); - requestToken.setPassword(Theme::instance()->oauthClientSecret()); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + QString basicAuth = QString("%1:%2").arg( + Theme::instance()->oauthClientId(), Theme::instance()->oauthClientSecret()); + req.setRawHeader("Authorization", "Basic " + basicAuth.toUtf8().toBase64()); auto job = _account->sendRequest("POST", requestToken, req); QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this, socket](QNetworkReply *reply) { auto jsonData = reply->readAll(); From e05f5fc50dbd52abf8206f78d0dac996e7c74273 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 11 Sep 2017 12:24:29 +0200 Subject: [PATCH 048/166] OAuth: Don't use implicit POST bodies The query args of POST requests become the request body. If there's a redirect, the redirected url will therefore not contain the query arguments. Use an explicit request body to make the redirection work. --- src/gui/creds/oauth.cpp | 16 +++++++++++----- src/libsync/abstractnetworkjob.cpp | 11 +++++++++++ src/libsync/creds/httpcredentials.cpp | 18 ++++++++++++------ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index 4f0b72a9f..386f90190 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "account.h" #include "creds/oauth.h" #include @@ -75,16 +76,21 @@ void OAuth::start() QString code = rx.cap(1); // The 'code' is the first capture of the regexp - QUrl requestToken(_account->url().toString() - + QLatin1String("/index.php/apps/oauth2/api/v1/token?grant_type=authorization_code&code=") - + code - + QLatin1String("&redirect_uri=http://localhost:") + QString::number(_server.serverPort())); + QUrl requestToken(_account->url().toString() + QLatin1String("/index.php/apps/oauth2/api/v1/token")); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); + QString basicAuth = QString("%1:%2").arg( Theme::instance()->oauthClientId(), Theme::instance()->oauthClientSecret()); req.setRawHeader("Authorization", "Basic " + basicAuth.toUtf8().toBase64()); - auto job = _account->sendRequest("POST", requestToken, req); + + auto requestBody = new QBuffer; + QUrlQuery arguments(QString( + "grant_type=authorization_code&code=%1&redirect_uri=http://localhost:%2") + .arg(code, QString::number(_server.serverPort()))); + requestBody->setData(arguments.query(QUrl::FullyEncoded).toLatin1()); + + auto job = _account->sendRequest("POST", requestToken, req, requestBody); QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this, socket](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 55bbb0a72..de68182ef 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -173,6 +173,17 @@ void AbstractNetworkJob::slotFinished() if (_followRedirects && !redirectUrl.isEmpty()) { _redirectCount++; + // For POST requests where the target url has query arguments, Qt automatically + // moves these arguments to the body if no explicit body is specified. + // This can cause problems with redirected requests, because the redirect url + // will no longer contain these query arguments. + if (reply()->operation() == QNetworkAccessManager::PostOperation + && requestedUrl.hasQuery() + && !redirectUrl.hasQuery() + && !_requestBody) { + qCWarning(lcNetworkJob) << "Redirecting a POST request with an implicit body loses that body"; + } + // ### some of the qWarnings here should be exported via displayErrors() so they // ### can be presented to the user if the job executor has a GUI QByteArray verb = requestVerb(*reply()); diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 53f4b89ce..d88791d72 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -296,14 +297,19 @@ bool HttpCredentials::refreshAccessToken() if (_refreshToken.isEmpty()) return false; - QUrl requestToken(_account->url().toString() - + QLatin1String("/index.php/apps/oauth2/api/v1/token?grant_type=refresh_token&refresh_token=") - + _refreshToken); - requestToken.setUserName(Theme::instance()->oauthClientId()); - requestToken.setPassword(Theme::instance()->oauthClientSecret()); + QUrl requestToken(_account->url().toString() + QLatin1String("/index.php/apps/oauth2/api/v1/token")); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); - auto job = _account->sendRequest("POST", requestToken, req); + + QString basicAuth = QString("%1:%2").arg( + Theme::instance()->oauthClientId(), Theme::instance()->oauthClientSecret()); + req.setRawHeader("Authorization", "Basic " + basicAuth.toUtf8().toBase64()); + + auto requestBody = new QBuffer; + QUrlQuery arguments(QString("grant_type=refresh_token&refresh_token=%1").arg(_refreshToken)); + requestBody->setData(arguments.query(QUrl::FullyEncoded).toLatin1()); + + auto job = _account->sendRequest("POST", requestToken, req, requestBody); QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; From 0b4fd52d63414fb656baa6ba8fcf10b7cdb168f2 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 13 Sep 2017 09:27:07 +0200 Subject: [PATCH 049/166] Journal: Second attempt at journal mode fallback #5723 Some filesystems, vms or other limitations make using the WAL journal mode impossible. We are notified of this problem through an sqlite IOERR for SHMMAP. In that case We want to attempt to fall back to the DELETE journal mode. --- src/libsync/syncjournaldb.cpp | 76 +++++++++++++++++------------------ src/libsync/syncjournaldb.h | 7 ++++ 2 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index f4d3510dd..d963b8667 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -35,11 +35,34 @@ namespace OCC { Q_LOGGING_CATEGORY(lcDb, "sync.database", QtInfoMsg) +static QString defaultJournalMode(const QString &dbPath) +{ +#ifdef Q_OS_WIN + // See #2693: Some exFAT file systems seem unable to cope with the + // WAL journaling mode. They work fine with DELETE. + QString fileSystem = FileSystem::fileSystemForPath(dbPath); + qCInfo(lcDb) << "Detected filesystem" << fileSystem << "for" << dbPath; + if (fileSystem.contains("FAT")) { + qCInfo(lcDb) << "Filesystem contains FAT - using DELETE journal mode"; + return "DELETE"; + } +#else + Q_UNUSED(dbPath) +#endif + return "WAL"; +} + SyncJournalDb::SyncJournalDb(const QString &dbFilePath, QObject *parent) : QObject(parent) , _dbFile(dbFilePath) , _transaction(0) { + // Allow forcing the journal mode for debugging + static QString envJournalMode = QString::fromLocal8Bit(qgetenv("OWNCLOUD_SQLITE_JOURNAL_MODE")); + _journalMode = envJournalMode; + if (_journalMode.isEmpty()) { + _journalMode = defaultJournalMode(_dbFile); + } } QString SyncJournalDb::makeDbName(const QString &localPath, @@ -215,23 +238,6 @@ bool SyncJournalDb::sqlFail(const QString &log, const SqlQuery &query) return false; } -static QString defaultJournalMode(const QString &dbPath) -{ -#ifdef Q_OS_WIN - // See #2693: Some exFAT file systems seem unable to cope with the - // WAL journaling mode. They work fine with DELETE. - QString fileSystem = FileSystem::fileSystemForPath(dbPath); - qCInfo(lcDb) << "Detected filesystem" << fileSystem << "for" << dbPath; - if (fileSystem.contains("FAT")) { - qCInfo(lcDb) << "Filesystem contains FAT - using DELETE journal mode"; - return "DELETE"; - } -#else - Q_UNUSED(dbPath) -#endif - return "WAL"; -} - bool SyncJournalDb::checkConnect() { if (_db.isOpen()) { @@ -264,13 +270,7 @@ bool SyncJournalDb::checkConnect() qCInfo(lcDb) << "sqlite3 version" << pragma1.stringValue(0); } - // Allow forcing the journal mode for debugging - static QString env_journal_mode = QString::fromLocal8Bit(qgetenv("OWNCLOUD_SQLITE_JOURNAL_MODE")); - QString journal_mode = env_journal_mode; - if (journal_mode.isEmpty()) { - journal_mode = defaultJournalMode(_dbFile); - } - pragma1.prepare(QString("PRAGMA journal_mode=%1;").arg(journal_mode)); + pragma1.prepare(QString("PRAGMA journal_mode=%1;").arg(_journalMode)); if (!pragma1.exec()) { return sqlFail("Set PRAGMA journal_mode", pragma1); } else { @@ -323,26 +323,22 @@ bool SyncJournalDb::checkConnect() ");"); if (!createQuery.exec()) { - bool fail = true; - // In certain situations the io error can be avoided by switching // to the DELETE journal mode, see #5723 - if (createQuery.errorId() == SQLITE_IOERR) { - qCWarning(lcDb) << "IO error on table creation, attempting with DELETE journal mode"; + if (_journalMode != "DELETE" + && createQuery.errorId() == SQLITE_IOERR + && sqlite3_extended_errcode(_db.sqliteDb()) == SQLITE_IOERR_SHMMAP) { + qCWarning(lcDb) << "IO error SHMMAP on table creation, attempting with DELETE journal mode"; - pragma1.prepare(QString("PRAGMA journal_mode=DELETE;")); - if (!pragma1.exec()) { - return sqlFail("Set PRAGMA journal_mode", pragma1); - } - pragma1.next(); - qCInfo(lcDb) << "sqlite3 journal_mode=" << pragma1.stringValue(0); - - if (createQuery.exec()) { - fail = false; - } + _journalMode = "DELETE"; + createQuery.finish(); + pragma1.finish(); + commitTransaction(); + _db.close(); + return checkConnect(); } - if (fail) - return sqlFail("Create table metadata", createQuery); + + return sqlFail("Create table metadata", createQuery); } createQuery.prepare("CREATE TABLE IF NOT EXISTS downloadinfo(" diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h index 931588dfa..da8054109 100644 --- a/src/libsync/syncjournaldb.h +++ b/src/libsync/syncjournaldb.h @@ -256,6 +256,13 @@ private: * that would write the etag and would void the purpose of avoidReadFromDbOnNextSync */ QList _avoidReadFromDbOnNextSyncFilter; + + /** The journal mode to use for the db. + * + * Typically WAL initially, but may be set to other modes via environment + * variable, for specific filesystems, or when WAL fails in a particular way. + */ + QString _journalMode; }; bool OWNCLOUDSYNC_EXPORT From 671599c8b265ab44ae13a3a11478340c37bc25fb Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 12 Sep 2017 17:15:22 +0200 Subject: [PATCH 050/166] Credentials: Use per-account keychain entries #5830 This requires a lot of migration code: the old entries need to be read, saved to the new locations and then deleted. --- src/gui/creds/shibbolethcredentials.cpp | 49 ++++++++++--- src/gui/creds/shibbolethcredentials.h | 5 ++ src/libsync/creds/abstractcredentials.cpp | 5 +- src/libsync/creds/abstractcredentials.h | 2 +- src/libsync/creds/httpcredentials.cpp | 88 +++++++++++++++++------ src/libsync/creds/httpcredentials.h | 13 ++++ 6 files changed, 130 insertions(+), 32 deletions(-) diff --git a/src/gui/creds/shibbolethcredentials.cpp b/src/gui/creds/shibbolethcredentials.cpp index 44c0e217a..6f5641b35 100644 --- a/src/gui/creds/shibbolethcredentials.cpp +++ b/src/gui/creds/shibbolethcredentials.cpp @@ -54,6 +54,7 @@ ShibbolethCredentials::ShibbolethCredentials() , _ready(false) , _stillValid(false) , _browser(0) + , _keychainMigration(false) { } @@ -62,6 +63,7 @@ ShibbolethCredentials::ShibbolethCredentials(const QNetworkCookie &cookie) , _stillValid(true) , _browser(0) , _shibCookie(cookie) + , _keychainMigration(false) { } @@ -131,15 +133,22 @@ void ShibbolethCredentials::fetchFromKeychain() Q_EMIT fetched(); } else { _url = _account->url(); - ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); - job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); - job->setInsecureFallback(false); - job->setKey(keychainKey(_account->url().toString(), user())); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); - job->start(); + _keychainMigration = false; + fetchFromKeychainHelper(); } } +void ShibbolethCredentials::fetchFromKeychainHelper() +{ + ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setInsecureFallback(false); + job->setKey(keychainKey(_url.toString(), user(), + _keychainMigration ? QString() : _account->id())); + connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); + job->start(); +} + void ShibbolethCredentials::askFromUser() { showLoginWindow(); @@ -242,6 +251,16 @@ void ShibbolethCredentials::slotBrowserRejected() void ShibbolethCredentials::slotReadJobDone(QKeychain::Job *job) { + // If we can't find the credentials at the keys that include the account id, + // try to read them from the legacy locations that don't have a account id. + if (!_keychainMigration && job->error() == QKeychain::EntryNotFound) { + qCWarning(lcShibboleth) + << "Could not find keychain entry, attempting to read from legacy location"; + _keychainMigration = true; + fetchFromKeychainHelper(); + return; + } + if (job->error() == QKeychain::NoError) { ReadPasswordJob *readJob = static_cast(job); delete readJob->settings(); @@ -260,6 +279,19 @@ void ShibbolethCredentials::slotReadJobDone(QKeychain::Job *job) _ready = false; Q_EMIT fetched(); } + + + // If keychain data was read from legacy location, wipe these entries and store new ones + if (_keychainMigration && _ready) { + persist(); + + DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName()); + job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); + job->setKey(keychainKey(_account->url().toString(), user(), QString())); + job->start(); + + qCWarning(lcShibboleth) << "Migrated old keychain entries"; + } } void ShibbolethCredentials::showLoginWindow() @@ -313,7 +345,7 @@ void ShibbolethCredentials::storeShibCookie(const QNetworkCookie &cookie) job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); // we don't really care if it works... //connect(job, SIGNAL(finished(QKeychain::Job*)), SLOT(slotWriteJobDone(QKeychain::Job*))); - job->setKey(keychainKey(_account->url().toString(), user())); + job->setKey(keychainKey(_account->url().toString(), user(), _account->id())); job->setTextData(QString::fromUtf8(cookie.toRawForm())); job->start(); } @@ -322,7 +354,7 @@ void ShibbolethCredentials::removeShibCookie() { DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName()); job->setSettings(ConfigFile::settingsWithGroup(Theme::instance()->appName(), job).release()); - job->setKey(keychainKey(_account->url().toString(), user())); + job->setKey(keychainKey(_account->url().toString(), user(), _account->id())); job->start(); } @@ -336,5 +368,4 @@ void ShibbolethCredentials::addToCookieJar(const QNetworkCookie &cookie) jar->blockSignals(false); } - } // namespace OCC diff --git a/src/gui/creds/shibbolethcredentials.h b/src/gui/creds/shibbolethcredentials.h index a4909ed74..3ff519a29 100644 --- a/src/gui/creds/shibbolethcredentials.h +++ b/src/gui/creds/shibbolethcredentials.h @@ -84,6 +84,10 @@ private: void storeShibCookie(const QNetworkCookie &cookie); void removeShibCookie(); void addToCookieJar(const QNetworkCookie &cookie); + + /// Reads data from keychain, progressing to slotReadJobDone + void fetchFromKeychainHelper(); + QUrl _url; QByteArray prepareCookieData() const; @@ -92,6 +96,7 @@ private: QPointer _browser; QNetworkCookie _shibCookie; QString _user; + bool _keychainMigration; }; } // namespace OCC diff --git a/src/libsync/creds/abstractcredentials.cpp b/src/libsync/creds/abstractcredentials.cpp index 2aca3a0f8..2dadc0793 100644 --- a/src/libsync/creds/abstractcredentials.cpp +++ b/src/libsync/creds/abstractcredentials.cpp @@ -34,7 +34,7 @@ void AbstractCredentials::setAccount(Account *account) _account = account; } -QString AbstractCredentials::keychainKey(const QString &url, const QString &user) +QString AbstractCredentials::keychainKey(const QString &url, const QString &user, const QString &accountId) { QString u(url); if (u.isEmpty()) { @@ -51,6 +51,9 @@ QString AbstractCredentials::keychainKey(const QString &url, const QString &user } QString key = user + QLatin1Char(':') + u; + if (!accountId.isEmpty()) { + key += QLatin1Char(':') + accountId; + } return key; } } // namespace OCC diff --git a/src/libsync/creds/abstractcredentials.h b/src/libsync/creds/abstractcredentials.h index 9958b5666..41807c419 100644 --- a/src/libsync/creds/abstractcredentials.h +++ b/src/libsync/creds/abstractcredentials.h @@ -85,7 +85,7 @@ public: */ virtual void forgetSensitiveData() = 0; - static QString keychainKey(const QString &url, const QString &user); + static QString keychainKey(const QString &url, const QString &user, const QString &accountId); Q_SIGNALS: /** Emitted when fetchFromKeychain() is done. diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index d88791d72..262ad9309 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -104,6 +104,7 @@ static void addSettingsToJob(Account *account, QKeychain::Job *job) HttpCredentials::HttpCredentials() : _ready(false) + , _keychainMigration(false) { } @@ -114,6 +115,7 @@ HttpCredentials::HttpCredentials(const QString &user, const QString &password, c , _ready(true) , _clientSslKey(key) , _clientSslCertificate(certificate) + , _keychainMigration(false) { } @@ -175,23 +177,45 @@ void HttpCredentials::fetchFromKeychain() return; } - const QString kck = keychainKey(_account->url().toString(), _user); - if (_ready) { Q_EMIT fetched(); } else { - // Read client cert from keychain - const QString kck = keychainKey(_account->url().toString(), _user + clientCertificatePEMC); - ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); - addSettingsToJob(_account, job); - job->setInsecureFallback(false); - job->setKey(kck); - - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadClientCertPEMJobDone(QKeychain::Job *))); - job->start(); + _keychainMigration = false; + fetchFromKeychainHelper(); } } +void HttpCredentials::fetchFromKeychainHelper() +{ + // Read client cert from keychain + const QString kck = keychainKey( + _account->url().toString(), + _user + clientCertificatePEMC, + _keychainMigration ? QString() : _account->id()); + + ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); + addSettingsToJob(_account, job); + job->setInsecureFallback(false); + job->setKey(kck); + connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadClientCertPEMJobDone(QKeychain::Job *))); + job->start(); +} + +void HttpCredentials::deleteOldKeychainEntries() +{ + auto startDeleteJob = [this](QString user) { + DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName()); + addSettingsToJob(_account, job); + job->setInsecureFallback(true); + job->setKey(keychainKey(_account->url().toString(), user, QString())); + job->start(); + }; + + startDeleteJob(_user); + startDeleteJob(_user + clientKeyPEMC); + startDeleteJob(_user + clientCertificatePEMC); +} + void HttpCredentials::slotReadClientCertPEMJobDone(QKeychain::Job *incoming) { // Store PEM in memory @@ -204,12 +228,15 @@ void HttpCredentials::slotReadClientCertPEMJobDone(QKeychain::Job *incoming) } // Load key too - const QString kck = keychainKey(_account->url().toString(), _user + clientKeyPEMC); + const QString kck = keychainKey( + _account->url().toString(), + _user + clientKeyPEMC, + _keychainMigration ? QString() : _account->id()); + ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadClientKeyPEMJobDone(QKeychain::Job *))); job->start(); } @@ -236,12 +263,15 @@ void HttpCredentials::slotReadClientKeyPEMJobDone(QKeychain::Job *incoming) } // Now fetch the actual server password - const QString kck = keychainKey(_account->url().toString(), _user); + const QString kck = keychainKey( + _account->url().toString(), + _user, + _keychainMigration ? QString() : _account->id()); + ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); job->start(); } @@ -258,6 +288,17 @@ bool HttpCredentials::stillValid(QNetworkReply *reply) void HttpCredentials::slotReadJobDone(QKeychain::Job *incomingJob) { QKeychain::ReadPasswordJob *job = static_cast(incomingJob); + QKeychain::Error error = job->error(); + + // If we can't find the credentials at the keys that include the account id, + // try to read them from the legacy locations that don't have a account id. + if (!_keychainMigration && error == QKeychain::EntryNotFound) { + qCWarning(lcHttpCredentials) + << "Could not find keychain entries, attempting to read from legacy locations"; + _keychainMigration = true; + fetchFromKeychainHelper(); + return; + } bool isOauth = _account->credentialSetting(QLatin1String(isOAuthC)).toBool(); if (isOauth) { @@ -270,8 +311,6 @@ void HttpCredentials::slotReadJobDone(QKeychain::Job *incomingJob) qCWarning(lcHttpCredentials) << "Strange: User is empty!"; } - QKeychain::Error error = job->error(); - if (!_refreshToken.isEmpty() && error == NoError) { refreshAccessToken(); } else if (!_password.isEmpty() && error == NoError) { @@ -290,6 +329,13 @@ void HttpCredentials::slotReadJobDone(QKeychain::Job *incomingJob) _ready = false; emit fetched(); } + + // If keychain data was read from legacy location, wipe these entries and store new ones + if (_keychainMigration && _ready) { + persist(); + deleteOldKeychainEntries(); + qCWarning(lcHttpCredentials) << "Migrated old keychain entries"; + } } bool HttpCredentials::refreshAccessToken() @@ -345,7 +391,7 @@ void HttpCredentials::invalidateToken() // User must be fetched from config file to generate a valid key fetchUser(); - const QString kck = keychainKey(_account->url().toString(), _user); + const QString kck = keychainKey(_account->url().toString(), _user, _account->id()); if (kck.isEmpty()) { qCWarning(lcHttpCredentials) << "InvalidateToken: User is empty, bailing out!"; return; @@ -407,7 +453,7 @@ void HttpCredentials::persist() addSettingsToJob(_account, job); job->setInsecureFallback(false); connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteClientCertPEMJobDone(QKeychain::Job *))); - job->setKey(keychainKey(_account->url().toString(), _user + clientCertificatePEMC)); + job->setKey(keychainKey(_account->url().toString(), _user + clientCertificatePEMC, _account->id())); job->setBinaryData(_clientSslCertificate.toPem()); job->start(); } @@ -420,7 +466,7 @@ void HttpCredentials::slotWriteClientCertPEMJobDone(Job *incomingJob) addSettingsToJob(_account, job); job->setInsecureFallback(false); connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteClientKeyPEMJobDone(QKeychain::Job *))); - job->setKey(keychainKey(_account->url().toString(), _user + clientKeyPEMC)); + job->setKey(keychainKey(_account->url().toString(), _user + clientKeyPEMC, _account->id())); job->setBinaryData(_clientSslKey.toPem()); job->start(); } @@ -432,7 +478,7 @@ void HttpCredentials::slotWriteClientKeyPEMJobDone(Job *incomingJob) addSettingsToJob(_account, job); job->setInsecureFallback(false); connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteJobDone(QKeychain::Job *))); - job->setKey(keychainKey(_account->url().toString(), _user)); + job->setKey(keychainKey(_account->url().toString(), _user, _account->id())); job->setTextData(isUsingOAuth() ? _refreshToken : _password); job->start(); } diff --git a/src/libsync/creds/httpcredentials.h b/src/libsync/creds/httpcredentials.h index 0dc7ad732..9814f9630 100644 --- a/src/libsync/creds/httpcredentials.h +++ b/src/libsync/creds/httpcredentials.h @@ -119,6 +119,18 @@ private Q_SLOTS: void slotWriteJobDone(QKeychain::Job *); protected: + /** Reads data from keychain locations + * + * Goes through + * slotReadClientCertPEMJobDone to + * slotReadClientCertPEMJobDone to + * slotReadJobDone + */ + void fetchFromKeychainHelper(); + + /// Wipes legacy keychain locations + void deleteOldKeychainEntries(); + QString _user; QString _password; // user's password, or access_token for OAuth QString _refreshToken; // OAuth _refreshToken, set if OAuth is used. @@ -128,6 +140,7 @@ protected: bool _ready; QSslKey _clientSslKey; QSslCertificate _clientSslCertificate; + bool _keychainMigration; }; From 1f57fd0407643ef7c3d4056aa2de040b7da620aa Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 14 Sep 2017 14:45:46 +0200 Subject: [PATCH 051/166] HttpCreds: Remove migration code from 1.7 --- src/libsync/creds/httpcredentials.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 262ad9309..a183ff5fb 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -412,14 +412,6 @@ void HttpCredentials::invalidateToken() job->setKey(kck); job->start(); - // Also ensure the password is deleted from the deprecated place - // otherwise we'd possibly read and use it again and again. - DeletePasswordJob *job2 = new DeletePasswordJob(Theme::instance()->appName()); - // no job2->setSettings() call here, to make it use the deprecated location. - job2->setInsecureFallback(true); - job2->setKey(kck); - job2->start(); - // let QNAM forget about the password // This needs to be done later in the event loop because we might be called (directly or // indirectly) from QNetworkAccessManagerPrivate::authenticationRequired, which itself From d1b8370a4ad21c741da507f64a5dbfe82a3fad05 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 11 Sep 2017 13:45:01 +0200 Subject: [PATCH 052/166] Wizard: Handle url-shortener redirects #5954 Grab any permanent redirects from the base url the user entered before attempting to connect to a modified url (with status.php added). --- src/gui/owncloudsetupwizard.cpp | 38 +++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 9e6853db8..3dd3bb117 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -173,13 +173,37 @@ void OwncloudSetupWizard::slotContinueDetermineAuth() // Set fake credentials before we check what credential it actually is. account->setCredentials(CredentialsFactory::create("dummy")); - CheckServerJob *job = new CheckServerJob(_ocWizard->account(), this); - job->setIgnoreCredentialFailure(true); - connect(job, SIGNAL(instanceFound(QUrl, QJsonObject)), SLOT(slotOwnCloudFoundAuth(QUrl, QJsonObject))); - connect(job, SIGNAL(instanceNotFound(QNetworkReply *)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply *))); - connect(job, SIGNAL(timeout(const QUrl &)), SLOT(slotNoOwnCloudFoundAuthTimeout(const QUrl &))); - job->setTimeout((account->url().scheme() == "https") ? 30 * 1000 : 10 * 1000); - job->start(); + + // Before we check the auth type, resolve any permanent redirect + // chain there might be. We cannot do this only on url/status.php + // in CheckServerJob, because things like url shorteners don't + // redirect subpaths. + auto redirectCheckJob = account->sendRequest("GET", account->url()); + + // Grab the chain of permanent redirects and adjust the account url + // accordingly + auto permanentRedirects = std::make_shared(0); + connect(redirectCheckJob, &AbstractNetworkJob::redirected, this, + [permanentRedirects, account](QNetworkReply *reply, const QUrl &targetUrl, int count) { + int httpCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + if (count == *permanentRedirects && (httpCode == 301 || httpCode == 308)) { + qCInfo(lcWizard) << account->url() << " was redirected to" << targetUrl; + account->setUrl(targetUrl); + *permanentRedirects += 1; + } + }); + + // When done, start checking status.php. + connect(redirectCheckJob, &SimpleNetworkJob::finishedSignal, this, + [this, account]() { + CheckServerJob *job = new CheckServerJob(account, this); + job->setIgnoreCredentialFailure(true); + connect(job, SIGNAL(instanceFound(QUrl, QJsonObject)), SLOT(slotOwnCloudFoundAuth(QUrl, QJsonObject))); + connect(job, SIGNAL(instanceNotFound(QNetworkReply *)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply *))); + connect(job, SIGNAL(timeout(const QUrl &)), SLOT(slotNoOwnCloudFoundAuthTimeout(const QUrl &))); + job->setTimeout((account->url().scheme() == "https") ? 30 * 1000 : 10 * 1000); + job->start(); + }); } void OwncloudSetupWizard::slotOwnCloudFoundAuth(const QUrl &url, const QJsonObject &info) From 8635b8ac848364b323f5daa35eae32027ffb0578 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 15 Sep 2017 09:11:52 +0200 Subject: [PATCH 053/166] Reduce timeout for some admin jobs The oauth token jobs and the wizard redirect check job shouldn't have 5min timeouts. --- src/gui/creds/oauth.cpp | 1 + src/gui/owncloudsetupwizard.cpp | 4 ++++ src/libsync/creds/httpcredentials.cpp | 1 + 3 files changed, 6 insertions(+) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index 386f90190..0155b0810 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -91,6 +91,7 @@ void OAuth::start() requestBody->setData(arguments.query(QUrl::FullyEncoded).toLatin1()); auto job = _account->sendRequest("POST", requestToken, req, requestBody); + job->setTimeout(qMin(30 * 1000ll, job->timeoutMsec())); QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this, socket](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 3dd3bb117..33e55cb14 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -180,6 +180,10 @@ void OwncloudSetupWizard::slotContinueDetermineAuth() // redirect subpaths. auto redirectCheckJob = account->sendRequest("GET", account->url()); + // Use a significantly reduced timeout for this redirect check: + // the 5-minute default is inappropriate. + redirectCheckJob->setTimeout(qMin(2000ll, redirectCheckJob->timeoutMsec())); + // Grab the chain of permanent redirects and adjust the account url // accordingly auto permanentRedirects = std::make_shared(0); diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index a183ff5fb..54a73fbf2 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -356,6 +356,7 @@ bool HttpCredentials::refreshAccessToken() requestBody->setData(arguments.query(QUrl::FullyEncoded).toLatin1()); auto job = _account->sendRequest("POST", requestToken, req, requestBody); + job->setTimeout(qMin(30 * 1000ll, job->timeoutMsec())); QObject::connect(job, &SimpleNetworkJob::finishedSignal, this, [this](QNetworkReply *reply) { auto jsonData = reply->readAll(); QJsonParseError jsonParseError; From be5d5aea6d137df7a371ca3b7f8b12473903a722 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 15 Sep 2017 09:24:56 +0200 Subject: [PATCH 054/166] AbstractNetworkJob: Allow relative redirect Previously all redirects were considered absolute. --- src/libsync/abstractnetworkjob.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index de68182ef..f5f4b9d62 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -173,6 +173,10 @@ void AbstractNetworkJob::slotFinished() if (_followRedirects && !redirectUrl.isEmpty()) { _redirectCount++; + // Redirects may be relative + if (redirectUrl.isRelative()) + redirectUrl = requestedUrl.resolved(redirectUrl); + // For POST requests where the target url has query arguments, Qt automatically // moves these arguments to the body if no explicit body is specified. // This can cause problems with redirected requests, because the redirect url From 1a4a5bfc579d8e0d4d771166a8efab0b513c4bbb Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 16 Sep 2017 02:18:35 +0200 Subject: [PATCH 055/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 645 +++++++++++++++++------------------ translations/client_cs.ts | 645 +++++++++++++++++------------------ translations/client_de.ts | 645 +++++++++++++++++------------------ translations/client_el.ts | 645 +++++++++++++++++------------------ translations/client_en.ts | 645 +++++++++++++++++------------------ translations/client_es.ts | 645 +++++++++++++++++------------------ translations/client_es_AR.ts | 645 +++++++++++++++++------------------ translations/client_et.ts | 645 +++++++++++++++++------------------ translations/client_eu.ts | 645 +++++++++++++++++------------------ translations/client_fa.ts | 645 +++++++++++++++++------------------ translations/client_fi.ts | 645 +++++++++++++++++------------------ translations/client_fr.ts | 645 +++++++++++++++++------------------ translations/client_gl.ts | 645 +++++++++++++++++------------------ translations/client_hu.ts | 645 +++++++++++++++++------------------ translations/client_it.ts | 645 +++++++++++++++++------------------ translations/client_ja.ts | 645 +++++++++++++++++------------------ translations/client_nb_NO.ts | 645 +++++++++++++++++------------------ translations/client_nl.ts | 645 +++++++++++++++++------------------ translations/client_pl.ts | 645 +++++++++++++++++------------------ translations/client_pt.ts | 645 +++++++++++++++++------------------ translations/client_pt_BR.ts | 645 +++++++++++++++++------------------ translations/client_ru.ts | 645 +++++++++++++++++------------------ translations/client_sk.ts | 645 +++++++++++++++++------------------ translations/client_sl.ts | 645 +++++++++++++++++------------------ translations/client_sr.ts | 645 +++++++++++++++++------------------ translations/client_sv.ts | 645 +++++++++++++++++------------------ translations/client_th.ts | 645 +++++++++++++++++------------------ translations/client_tr.ts | 645 +++++++++++++++++------------------ translations/client_uk.ts | 645 +++++++++++++++++------------------ translations/client_zh_CN.ts | 645 +++++++++++++++++------------------ translations/client_zh_TW.ts | 645 +++++++++++++++++------------------ 32 files changed, 9582 insertions(+), 10416 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index b94200add..223e22c11 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -123,6 +123,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index a717e2efd..85cc07f06 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El fitxer de destinació té una mida o data de modificació inesperada @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Temps d'espera de la connexió esgotat. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancel·la @@ -174,184 +174,184 @@ Compte - + Choose what to sync Trieu què sincronitzar - + Force sync now Força la sincronització ara - + Restart sync Reinicia la sincronització - + Remove folder sync connection Elimina la connexió de la carpeta sincronitzada - + Folder creation failed Ha fallat la creació de la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No s'ha pogut crear la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirma l'eliminació de la connexió de la carpeta sincronitzada - + Remove Folder Sync Connection Elimina la connexió de la carpeta sincronitzada - + Sync Running S'està sincronitzant - + The syncing operation is running.<br/>Do you want to terminate it? S'està sincronitzant.<br/>Voleu parar-la? - + %1 in use %1 en ús - + %1 as <i>%2</i> %1 com a <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versió del servidor %1 és antiga i fora de suport! Continua sota la teva responsabilitat. - + Connected to %1. Connectat a %1 - + Server %1 is temporarily unavailable. El servidor %1 no està disponible temporalment - + Server %1 is currently in maintenance mode. - + Signed out from %1. S'ha desconnectat de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. No hi ha connexió amb %1 a %2. - + Log in Inici de sessió - + There are folders that were not synchronized because they are too big: Hi ha carpetes que no s'han sincronitzat perquè són massa grans: - + There are folders that were not synchronized because they are external storages: Hi ha carpetes que no s'han sincronitzat perquè són fonts d'emmagatzematge externes: - + There are folders that were not synchronized because they are too big or external storages: Hi ha carpetes que no s'han sincronitzat perquè són massa grans o són fonts d'emmagatzematge externes: - + Confirm Account Removal Confirmeu l'eliminació del compte - + <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> <p>Segur que voleu eliminar la connexió al compte <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> esborrarà cap fitxer.</p> - + Remove connection Elimina la connexió - - + + Open folder Obre la carpeta - + Log out Surt - + Resume sync Continua la sincronització - + Pause sync Pausa la sincronització - + <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> <p>Segur que voleu aturar la sincronització de la carpeta <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> esborrarà cap fitxer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en ús. Algunes carpetes, incloent les carpetes muntades a través de xarxa o les compartides, poden tenir límits diferents. - + %1 of %2 in use %1 de %2 en ús - + Currently there is no storage usage information available. Actualment no hi ha informació disponible de l'ús d'emmagatzemament. - + No %1 connection configured. La connexió %1 no està configurada. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Activitat del servidor - + Sync Protocol Protocol de sincronització - + Not Synced No sincronitzat - + Not Synced (%1) %1 is the number of not synced files. No sincronitzat (%1) - + The server activity list has been copied to the clipboard. La llista de l'activitat del servidor s'ha copiat al porta-retalls. - + The sync activity list has been copied to the clipboard. La llista d'activitat de sincronització s'ha copiat al porta-retalls - + The list of unsynced items has been copied to the clipboard. S'ha copiat una llista d'elements no sincronitzats al porta-retalls. - + Copied to clipboard S'ha copiat al porta-retalls @@ -477,47 +477,47 @@ TextLabel - + Server Activities Activitats del servidor - + Copy Còpia - + Copy the activity list to the clipboard. Copia la llista d'activitats al porta-retalls. - + Action Required: Notifications Es requereix una acció: Notificacions - + <br/>Account %1 does not have activities enabled. <br/>El compte %1 no té les activitats habilitades. - + You received %n new notification(s) from %2. Heu rebut %n nova notificació de %2.Heu rebut %n noves notificacions de %2. - + You received %n new notification(s) from %1 and %2. Heu rebut %n nova notificació de %1 i %2.Heu rebut %n noves notificacions de %1 i %2. - + You received new notifications from %1, %2 and other accounts. Heu rebut noves notificacions de %1, %2 i altres comptes. - + %1 Notifications - Action Required %1 notificacions - Es requereix una acció @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file S'ha produït un error en accedir al fitxer de configuració - + There was an error while accessing the configuration file at %1. Hi ha hagut un error en accedir al fitxer de configuració a %1. - + Quit ownCloud Surt de l'ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -754,26 +754,26 @@ Consulteu el registre per obtenir més informació. No s'ha pogut llegir el fitxer d'exclusió del sistema - + A new folder larger than %1 MB has been added: %2. S'ha afegit una carpeta de més de %1 MB: %2. - + A folder from an external storage has been added. S'ha afegit una carpeta d'una font d'emmagatzematge extern. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -781,46 +781,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Esborra tots els fitxers? - + Remove all files Esborra tots els fitxers - + Keep files Mantén els fitxers - + This sync would reset the files to an earlier 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? - + Backup detected Copia de seguretat detectada - + Normal Synchronisation Sincronització normal - + Keep Local Files as Conflict Manté els fitxers locals com a conflicte @@ -946,12 +946,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Afegeix connexions de carpetes sincronitzades - + Synchronizing with local folder S'està sincronitzant amb les carpetes locals - + File Fitxer @@ -959,144 +959,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Cal que tingueu connexió per afegir una carpeta - + Click this button to add a folder to synchronize. Cliqueu aquest botó per afegir una carpeta per sincronitzar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error en carregar la llista de carpetes del servidor. - + Signed out S'ha desconnectat - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. No es pot afegir carpetes perquè ja esteu sincronitzant tots els vostres fitxers. Si voleu sincronitzar múltiples carpetes, elimineu la carpeta arrel actualment configurada. - + Fetching folder list from server... Obtenint la llista de carpetes del servidor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" S'està sincronitzant %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descarrega %1/s - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pujada %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 pendent, %1 de %2, fitxer %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, fitxer %3 de %4 - + file %1 of %2 fitxer %1 de %2 - + Waiting... S'està esperant... - + Waiting for %n other folder(s)... S'està esperant %n altra carpeta...S'està esperant %n altres carpetes - + Preparing to sync... S'està preparant per sincronitzar... @@ -1104,12 +1104,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Afegeix connexions de carpetes sincronitzades - + Add Sync Connection Afegir una connexió de sincronització @@ -1135,52 +1135,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Crea una carpeta remota - + Enter the name of the new folder to be created below '%1': Introduïu el nom de la carpeta nova que es crearà a sota '%1': - + Folder was successfully created on %1. La carpeta s'ha creat correctament a %1. - + Authentication failed accessing %1 Autentificació fallida en accedir %1 - + Failed to create the folder on %1. Please check manually. No s'ha pogut crear el directori en %1. Si us plau, comproveu-lo manualment. - + Failed to list a folder. Error: %1 Ha fallat en llistar una carpeta. Error: %1 - + Choose this to sync the entire account Escolliu-ho per sincronitzar el compte sencer - + This folder is already being synced. Ja s'està sincronitzant aquest directori. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ja esteu sincronitzant <i>%1</i>, que és una carpeta dins de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Ja esteu sincronitzant tots els vostres fitxers. Sincronitzar una altra carpeta <b>no</b> està permes. Si voleu sincronitzar múltiples carpetes, elimineu la configuració de sincronització de la carpeta arrel. @@ -1426,7 +1426,7 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car - + Folder Carpeta @@ -1451,17 +1451,17 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car Copiar - + Time Hora - + File Fitxer - + Issue @@ -1527,12 +1527,12 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El fitxer '%1'<br/>no es pot obrir en mode escriptura.<br/><br/>La sortida del registre <b>no</b> es pot desar!</nobr> @@ -1540,27 +1540,27 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::NSISUpdater - + New Version Available Versió nova disponible - + <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> <p>Hi ha una nova versió del client %1 disponible.</p><p><b>%2</b> està disponible per a la baixada. La versió instal·lada és la %3.</p> - + Skip this version Omet aquesta versió - + Skip this time Omet aquesta vegada - + Get update Obtingueu l'actualització @@ -1672,11 +1672,6 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car SOCKS5 proxy proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1706,32 +1701,32 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1739,59 +1734,59 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::OCUpdater - + New %1 Update Ready Nova actualització de %1 preparada - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. S'instal·lara un nova actualització per %1. L'actualitzador pot demanar privilegis addicionals durant el procés. - + Downloading version %1. Please wait... Descarregat la versió %1. Espeu si us play... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. No s'ha pogut decarregar l'actualització. Si us plau, cliqueu <a href='%1'>aqui</a>per descarregar l'actualització manualment. - + Could not check for new updates. No s'ha pogut comprovar si hi ha actualitzacions. - + %1 version %2 available. Restart application to start the update. Versió %2 de %1 disponible. Reinicieu l'aplicació per començar l'actualització. - + New %1 version %2 available. Please use the system's update tool to install it. Nova versió %1 de %2 disponible. Utilitzeu l'eina d'actualització del sistema per instal·lar-la. - + Checking update server... Comprovació d'actualitzacions al servidor - + Update status is unknown: Did not check for new updates. Es desconeix l'estat de les actualitzacions: no s'ha comprovat si hi ha actualitzacions noves. - + No updates available. Your installation is at the latest version. No hi ha actualitzacions disponibles. La instal·lació ja es troba en la versió més recent. - + Update Check Comprova les actualitzacions @@ -1868,7 +1863,7 @@ privilegis addicionals durant el procés. Configureu el certificat TLS de la banda del client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Ha fallat en connectar a l'adreça segura del servidor <em>%1</em>. Com voleu procedir?</p></body></html> @@ -1937,144 +1932,144 @@ No és aconsellada usar-la. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">S'ha connectat correctament amb %1: %2 versió %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ha fallat la connexió amb %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. S'ha esgotat el temps d'espera mentres es conectava a %1 a les %2. - + Trying to connect to %1 at %2... Intentant connectar amb %1 a %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. El servidor ha prohibit l'accés. Per verificar que teniu permisos, <a href="%1">cliqueu aquí</a> per accedir al servei amb el vostre navegador. - + Invalid URL URL incorrecte - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta local %1 ja existeix, s'està configurant per sincronitzar.<br/><br/> - + Creating local sync folder %1... S'està creant la carpeta de sincronització local %1... - + ok correcte - + failed. ha fallat. - + Could not create local folder %1 No s'ha pogut crear la carpeta local %1 - + No remote folder specified! No heu especificat cap carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creant la carpeta a ownCloud: %1 - + Remote folder %1 created successfully. La carpeta remota %1 s'ha creat correctament. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ja existeix. S'hi està connectant per sincronitzar-les. - - + + The folder creation resulted in HTTP error code %1 La creació de la carpeta ha resultat en el codi d'error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ha fallat la creació de la carpeta perquè les credencials proporcionades són incorrectes!<br/>Aneu enrera i comproveu les credencials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creació de la carpeta remota ha fallat, probablement perquè les credencials facilitades són incorrectes.</font><br/>Comproveu les vostres credencials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La creació de la carpeta remota %1 ha fallat amb l'error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. S'ha establert una connexió de sincronització des de %1 a la carpeta remota %2. - + Successfully connected to %1! Connectat amb èxit a %1! - + Connection to %1 could not be established. Please check again. No s'ha pogut establir la connexió amb %1. Comproveu-ho de nou. - + Folder rename failed Ha fallat en canviar el nom de la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No es pot esborrar i restaurar la carpeta perquè una carpeta o un fitxer de dins està obert en un altre programa. Tanqueu la carpeta o el fitxer i intenteu-ho de nou o cancel·leu la configuració. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>la carpeta de sincronització %1 s'ha creat correctament!</b></font> @@ -2121,7 +2116,7 @@ No és aconsellada usar-la. OCC::PropagateDirectory - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2177,12 +2172,12 @@ No és aconsellada usar-la. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ha fallat la restauració: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2190,22 +2185,22 @@ No és aconsellada usar-la. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 no s'ha pogut esborrar el fitxer %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atenció, possible xoc entre majúscules i minúscules amb %1 - + could not create folder %1 no s'ha pogut crear la carpeta %1 - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2213,17 +2208,17 @@ No és aconsellada usar-la. OCC::PropagateLocalRemove - + Error removing '%1': %2; Error en eliminar '%1': %2; - + Could not remove folder '%1' No s'ha pogut eliminar la carpeta '%1' - + Could not remove %1 because of a local file name clash No es pot eliminar %1 perquè hi ha un xoc amb el nom d'un fitxer local @@ -2231,13 +2226,13 @@ No és aconsellada usar-la. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash El fitxer %1 no es pot reanomenar a %2 perquè hi ha un xoc amb el nom d'un fitxer local - - + + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2305,27 +2300,28 @@ No és aconsellada usar-la. - + File Removed Fitxer eliminat - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2333,32 +2329,27 @@ No és aconsellada usar-la. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. El fitxer local s'ha eliminat durant la sincronització. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2366,32 +2357,27 @@ No és aconsellada usar-la. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. El fitxer s'ha editat localment però és part d'una compartició només de lectura. S'ha restaurat i la vostra edició és en el fitxer en conflicte. - + Poll URL missing - + The local file was removed during sync. El fitxer local s'ha eliminat durant la sincronització. - + Local file changed during sync. El fitxer local ha canviat durant la sincronització. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2409,42 +2395,42 @@ No és aconsellada usar-la. TextLabel - + Time Hora - + File Fitxer - + Folder Carpeta - + Action Acció - + Size Mida - + Local sync protocol Protocol de sincronització local - + Copy Copia - + Copy the activity list to the clipboard. Copia la llista d'activitats al porta-retalls. @@ -2485,7 +2471,7 @@ No és aconsellada usar-la. OCC::SelectiveSyncDialog - + Choose What to Sync Trieu què sincronitzar @@ -2503,23 +2489,23 @@ No és aconsellada usar-la. - + Name Nom - + Size Mida - - + + No subfolders currently on the server. Actualment no hi ha subcarpetes al servidor. - + An error occurred while loading the list of sub folders. S'ha produit un error en carregar la llista de subcarpetes. @@ -2547,7 +2533,7 @@ No és aconsellada usar-la. Xarxa - + Account Compte @@ -2866,12 +2852,12 @@ No és aconsellada usar-la. OCC::ShibbolethCredentials - + Login Error Error d'accés - + You must sign in as user %1 Cal identificar-se com a usuari %1 @@ -2902,28 +2888,28 @@ No és aconsellada usar-la. OCC::SocketApi - + Share with %1 parameter is ownCloud Comparteix amb %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2931,119 +2917,114 @@ No és aconsellada usar-la. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalls del certificat</h3> - + Common Name (CN): Nom comú (NC): - + Subject Alternative Names: Noms alternatius de concepte: - + Organization (O): Organització (O): - + Organizational Unit (OU): Unitat organitzativa (UO): - + State/Province: Estat o província - + Country: País: - + Serial: Serial: - + <h3>Issuer</h3> <h3>Emissor</h3> - + Issuer: Emissor: - + Issued on: Enviat el: - + Expires on: Expira el: - + <h3>Fingerprints</h3> <h3>Empremtes</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256 - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Nota:</b> Aquest certificat es va aprovar manualment</p> - + %1 (self-signed) %1 (auto-signat) - + %1 %1 - + This connection is encrypted using %1 bit %2. Aquesta connexió és encriptada usant %1 bit %2. - + No support for SSL session tickets/identifiers Els tiquets/identificadors de sessió SSL no estan implementats - + Certificate information: Informació del certificat: - + This connection is NOT secure as it is not encrypted. Aquesta connexió NO és segura , ja que no està xifrada. @@ -3063,67 +3044,67 @@ No és aconsellada usar-la. Confia en aquest certificat igualment - + Untrusted Certificate Certificat no fiable - + Cannot connect securely to <i>%1</i>: No es pot connectar de forma segura a <i>%1</i>: - + with Certificate %1 amb certificat %1 + + - - &lt;not specified&gt; &lt;no especificat&gt; - - + + Organization: %1 Organització %1 - - + + Unit: %1 Unitat: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Empremta digital (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Empremta digital (SHA1): <tt>%1</tt> - + Effective Date: %1 Data d'efecte: %1 - + Expiration Date: %1 Data de venciment: %1 - + Issuer: %1 Emissor: %1 @@ -3237,27 +3218,27 @@ No és aconsellada usar-la. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3362,69 +3343,69 @@ No és aconsellada usar-la. Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen @@ -3448,17 +3429,17 @@ No és aconsellada usar-la. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versió %1. Per més informació visiteu <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuït per %1 i amb llicència GNU General Public License (GPL) Versió 2.0.<br/>%2 i el %2 logo són marques registrades de %1 als Estats Units, altres països, o ambdós.</p> @@ -3871,48 +3852,40 @@ No és aconsellada usar-la. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future al futur - + %n day(s) ago fa %n diafa %n dies - + %n hour(s) ago fa %n horafa %n hores - + now ara - + Less than a minute ago Fa menys d'un minut - + %n minute(s) ago fa %n minutfa %n minuts - + Some time ago Fa una estona @@ -3926,57 +3899,57 @@ No és aconsellada usar-la. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n any%n anys - + %n month(s) %n mes%n mesos - + %n day(s) %n dia%n dies - + %n hour(s) %n hora%n hores - + %n minute(s) %n minut%n minuts - + %n second(s) %n segon%n segons - + %1 %2 %1 %2 @@ -3997,7 +3970,7 @@ No és aconsellada usar-la. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construït de la revisió de Git <a href="%1">%2</a> el %4 de %3 usant Qt %5, %6</small></p> diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 591d239e1..edb8b01ec 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Cílový soubor má neočekávanou velikost nebo čas změny @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Připojení vypršelo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Zrušit @@ -174,184 +174,184 @@ Účet - + Choose what to sync Vybrat co sesynchronizovat - + Force sync now Vynutit synchronizaci nyní - + Restart sync Restartovat synchronizaci - + Remove folder sync connection Odstranit připojení synchronizace adresáře - + Folder creation failed Vytvoření adresáře selhalo - + <p>Could not create local folder <i>%1</i>. <p>Nelze vytvořit místní adresář <i>%1</i>. - + Confirm Folder Sync Connection Removal Potvrdit odstranění připojení synchronizace adresáře - + Remove Folder Sync Connection Odstranit připojení synchronizace adresáře - + Sync Running Synchronizace probíhá - + The syncing operation is running.<br/>Do you want to terminate it? Operace synchronizace právě probíhá.<br/>Přejete si ji ukončit? - + %1 in use %1 používaný - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server verze %1 je zastaralý a nepodporovaný! Pokračujte na vlastní riziko. - + Connected to %1. Připojeno k %1. - + Server %1 is temporarily unavailable. Server %1 je dočasně nedostupný. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Odhlášeno z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Bez připojení k %1 na %2. - + Log in Přihlásit - + There are folders that were not synchronized because they are too big: Tyto složky nebyly synchronizovány, protože jsou příšliš velké: - + There are folders that were not synchronized because they are external storages: Tyto složky nebyly synchronizovány, protože se nachází na externím úložišti: - + There are folders that were not synchronized because they are too big or external storages: Tyto složky nebyly synchronizovány, protože jsou příliš velké, nebo se nachází na externím úložišti: - + Confirm Account Removal Potvrdit odstranění účtu - + <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> <p>Opravdu chcete odstranit připojení k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + Remove connection Odstranit připojení - - + + Open folder Otevřít adresář - + Log out Odhlásit se - + Resume sync Pokračovat v synchronizaci - + Pause sync Pozastavit synchronizaci - + <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> <p>Opravdu chcete zastavit synchronizaci adresáře <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. 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. - + %1 of %2 in use Používaných %1 z %2 - + Currently there is no storage usage information available. Momentálně nejsou k dispozici žádné informace o využití úložiště. - + No %1 connection configured. Žádné spojení s %1 nenastaveno. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita serveru - + Sync Protocol Protokol synchronizace - + Not Synced Nesesynchronizováno - + Not Synced (%1) %1 is the number of not synced files. Nesesynchronizováno (%1) - + The server activity list has been copied to the clipboard. Výpis aktivity serveru byl zkopírován do schránky. - + The sync activity list has been copied to the clipboard. Výpis aktivity synchronizace byl zkopírován do schránky. - + The list of unsynced items has been copied to the clipboard. Seznam nesynchronizovaných položek byl zkopírován do schránky. - + Copied to clipboard Zkopírováno do schránky @@ -477,47 +477,47 @@ Textový popisek - + Server Activities Aktivity serveru - + Copy Kopie - + Copy the activity list to the clipboard. Kopírovat záznam aktivity do schránky. - + Action Required: Notifications Vyžadována akce: Upozornění - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. Dostali jste %n nové upozornění od %2.Dostali jste %n nové upozornění od %2.Dostali jste %n nových upozornění od %2. - + You received %n new notification(s) from %1 and %2. Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nových upozornění od %1 a %2. - + You received new notifications from %1, %2 and other accounts. Dostali jste nové upozornění od %1, %2 a dalších uživatelů. - + %1 Notifications - Action Required %1 Upozornění - Vyžadována akce @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Chyba přístupu ke konfiguračnímu souboru - + There was an error while accessing the configuration file at %1. Došlo k chybě při přístupu ke konfigurační soubor %1. - + Quit ownCloud Ukončit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -752,25 +752,25 @@ Nezdařilo se přečtení systémového exclude souboru - + A new folder larger than %1 MB has been added: %2. Nová složka větší než %1 MB byla přidána: %2. - + A folder from an external storage has been added. Byla přidána složka z externího úložiště. - + Please go in the settings to select it if you wish to download it. Pokud to chcete stáhnout, běžte do nastavení a vyberte to. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -780,7 +780,7 @@ Tyto soubory budou smazány i ve vaší místní synchronizované složce a nebu Rozhodnete-li se soubory smazat, budou vám nedostupné, nejste-li jejich vlastníkem. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -789,22 +789,22 @@ Jste si jisti, že chcete tyto akce synchronizovat se serverem? Pokud to byl omyl a chcete si soubory ponechat, budou opět synchronizovány ze serveru. - + Remove All Files? Odstranit všechny soubory? - + Remove all files Odstranit všechny soubory - + Keep files Ponechat soubory - + This sync would reset the files to an earlier 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? @@ -813,17 +813,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? - + Backup detected Záloha nalezena - + Normal Synchronisation Normální synchronizace - + Keep Local Files as Conflict Ponechat místní soubory jako konflikt @@ -949,12 +949,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Přidat synchronizaci adresáře - + Synchronizing with local folder Synchronizace s místním adresářem - + File Soubor @@ -962,144 +962,144 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderStatusModel - + You need to be connected to add a folder Pro přidání adresáře musíte být připojeni - + Click this button to add a folder to synchronize. Stisknutím tlačítka přidáte adresář k synchronizaci. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Chyba při načítání seznamu adresářů ze serveru. - + Signed out Odhlášeno - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Přidání adresáře je vypnuto, protože již synchronizujete všechny své soubory. Pokud chcete synchronizovat pouze některé adresáře, odstraňte aktuálně nastavený kořenový adresář. - + Fetching folder list from server... Načítání seznamu adresářů ze serveru... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrola změn v '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuji %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stahování %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrávání %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ze %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 zbývá, %1 ze %2, soubor %3 z %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, soubor %3 z %4 - + file %1 of %2 soubor %1 z %2 - + Waiting... Chvíli strpení... - + Waiting for %n other folder(s)... Čeká se na %n další adresář...Čeká se na %n další adresáře...Čeká se na %n dalších adresářů... - + Preparing to sync... Synchronizace se připravuje... @@ -1107,12 +1107,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderWizard - + Add Folder Sync Connection Přidat synchronizaci adresáře - + Add Sync Connection Přidat synchronizační připojení @@ -1138,52 +1138,52 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderWizardRemotePath - + Create Remote Folder Vytvořit vzdálený adresář - + Enter the name of the new folder to be created below '%1': Zadejte název nově vytvářeného adresáře níže '%1': - + Folder was successfully created on %1. Adresář byl úspěšně vytvořen na %1. - + Authentication failed accessing %1 Ověření selhalo při připojení %1 - + Failed to create the folder on %1. Please check manually. Na %1 selhalo vytvoření adresáře. Zkontrolujte to prosím ručně. - + Failed to list a folder. Error: %1 Chyba při vypsání adresáře. Chyba: %1 - + Choose this to sync the entire account Zvolte toto k provedení synchronizace celého účtu - + This folder is already being synced. Tento adresář je již synchronizován. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Již synchronizujete adresář <i>%1</i>, který je adresáři <i>%2</i> nadřazený. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Již synchronizujete všechny své soubory. Synchronizování dalšího adresáře <b>není</b> podporováno. Pokud chcete synchronizovat více adresářů, odstraňte prosím synchronizaci aktuálního kořenového adresáře. @@ -1429,7 +1429,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods - + Folder Adresář @@ -1454,17 +1454,17 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Kopie - + Time Čas - + File Soubor - + Issue @@ -1530,12 +1530,12 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::Logger - + Error Chyba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Soubor '%1'<br/>nelze otevřít pro zápis.<br/><br/>Výstup záznamu <b>nelze</b> uložit.</nobr> @@ -1543,27 +1543,27 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::NSISUpdater - + New Version Available Je dostupná nová verze - + <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> <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> - + Skip this version Přeskoč tuto verzi - + Skip this time Tentokrát přeskočit - + Get update Získat aktualizaci @@ -1675,11 +1675,6 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Pro možnost omezení rychlosti připojení je vyžadována verze knihovny Qt >= 5.4 - OCC::NotificationWidget @@ -1709,32 +1704,32 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1742,59 +1737,59 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::OCUpdater - + New %1 Update Ready Je připravena nová aktualizace %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Bude instalována nová aktualizace pro %1. V průběhu aktualizace můžete být požádáni o dodatečná oprávnění. - + Downloading version %1. Please wait... Stahuji verzi %1. Počkejte prosím ... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nemohu stáhnout aktualizaci. Klikněte prosím na <a href='%1'>tento odkaz</a> pro ruční stažení aktualizace. - + Could not check for new updates. Nemohu zkontrolovat aktualizace. - + %1 version %2 available. Restart application to start the update. Je dostupná %1 verze %2. Restartujte aplikaci pro spuštění aktualizace. - + New %1 version %2 available. Please use the system's update tool to install it. Je dostupná nová %1 verze %2. Pro instalaci prosím použijte systémového správce aktualizací. - + Checking update server... Kontroluji aktualizační server... - + Update status is unknown: Did not check for new updates. Stav aktualizace neznámý: Nové aktualizace nebyly zkontrolovány. - + No updates available. Your installation is at the latest version. Žádne aktualizace nejsou k dispozici. Používáte aktuální verzi. - + Update Check Ověřit aktualizace @@ -1871,7 +1866,7 @@ můžete být požádáni o dodatečná oprávnění. Nakonfigurovat klientský TLS certifikát - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nezdařilo se připojení k zabezpečenému serveru <em>%1</em>. Jak si přejete dále postupovat?</p></body></html> @@ -1940,144 +1935,144 @@ Nedoporučuje se jí používat. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Úspěšně připojeno k %1: %2 verze %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Selhalo spojení s %1 v %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Vypršení časového limitu při pokusu o připojení k %1 na %2. - + Trying to connect to %1 at %2... Pokouším se připojit k %1 na %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Ověřený požadavek na server byl přesměrován na '%1'. URL je špatně, server není správně nakonfigurován. - + There was an invalid response to an authenticated webdav request Byla obdržena nesprávná odpověď na ověřený webdav požadavek - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Přístup zamítnut serverem. Pro ověření správných přístupových práv <a href="%1">klikněte sem</a> a otevřete službu ve svém prohlížeči. - + Invalid URL Neplatná URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Místní synchronizovaný adresář %1 již existuje, nastavuji jej pro synchronizaci.<br/><br/> - + Creating local sync folder %1... Vytvářím místní adresář pro synchronizaci %1... - + ok OK - + failed. selhalo. - + Could not create local folder %1 Nelze vytvořit místní adresář %1 - + No remote folder specified! Není nastaven žádný vzdálený adresář! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytvářím adresář na ownCloudu: %1 - + Remote folder %1 created successfully. Vzdálený adresář %1 byl úspěšně vytvořen. - + The remote folder %1 already exists. Connecting it for syncing. Vzdálený adresář %1 již existuje. Spojuji jej pro synchronizaci. - - + + The folder creation resulted in HTTP error code %1 Vytvoření adresáře selhalo s HTTP chybou %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.<br/>Vraťte se prosím zpět a zkontrolujte je.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvoření vzdáleného adresáře selhalo, pravděpodobně z důvodu neplatných přihlašovacích údajů.</font><br/>Vraťte se prosím zpět a zkontrolujte je.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytváření vzdáleného adresáře %1 selhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Bylo nastaveno synchronizované spojení z %1 do vzdáleného adresáře %2. - + Successfully connected to %1! Úspěšně spojeno s %1. - + Connection to %1 could not be established. Please check again. Spojení s %1 nelze navázat. Prosím zkuste to znovu. - + Folder rename failed Přejmenování adresáře selhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nelze odstranit a zazálohovat adresář, protože adresář nebo soubor v něm je otevřen v jiném programu. Prosím zavřete adresář nebo soubor a zkuste znovu nebo zrušte akci. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Místní synchronizovaný adresář %1 byl úspěšně vytvořen!</b></font> @@ -2124,7 +2119,7 @@ Nedoporučuje se jí používat. OCC::PropagateDirectory - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2180,12 +2175,12 @@ Nedoporučuje se jí používat. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovení selhalo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Soubor nebo adresář by odebrán ze sdílení pouze pro čtení, ale jeho obnovení selhalo: %1 @@ -2193,22 +2188,22 @@ Nedoporučuje se jí používat. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 smazání souboru %1 se nezdařilo, chyba: %2 - + Attention, possible case sensitivity clash with %1 Pozor, možná kolize z důvodu velikosti písmen s %1 - + could not create folder %1 nepodařilo se vytvořit adresář %1 - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2216,17 +2211,17 @@ Nedoporučuje se jí používat. OCC::PropagateLocalRemove - + Error removing '%1': %2; Chyba při odstraňování '%1': %2; - + Could not remove folder '%1' Nezdařilo se odstranění adresáře '%1' - + Could not remove %1 because of a local file name clash Nelze odstranit %1 z důvodu kolize názvu se souborem v místním systému @@ -2234,13 +2229,13 @@ Nedoporučuje se jí používat. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Soubor %1 nemohl být přejmenován na %2 z důvodu kolize názvu se souborem v místním systému - - + + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2308,27 +2303,28 @@ Nedoporučuje se jí používat. Soubor %1 nelze nahrát, protože existuje jiný soubor se stejným názvem, lišící se pouze velikostí písmen - + File Removed Soubor odebrán - + Local file changed during syncing. It will be resumed. Místní soubor se během synchronizace změnil. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2336,32 +2332,27 @@ Nedoporučuje se jí používat. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2. - - - + The local file was removed during sync. Místní soubor byl odstraněn během synchronizace. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + Unexpected return code from server (%1) Neočekávaný návratový kód ze serveru (%1) - + Missing File ID from server Chybějící souborové ID ze serveru - + Missing ETag from server Chybějící ETag ze serveru @@ -2369,32 +2360,27 @@ Nedoporučuje se jí používat. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vynucené ukončení procesu při resetu HTTP připojení s Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 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. - + Poll URL missing Chybí adresa URL - + The local file was removed during sync. Místní soubor byl odstraněn během synchronizace. - + Local file changed during sync. Místní soubor byl změněn během synchronizace. - + The server did not acknowledge the last chunk. (No e-tag was present) Server nepotvrdil poslední část dat. (Nebyl nalezen e-tag) @@ -2412,42 +2398,42 @@ Nedoporučuje se jí používat. Textový popisek - + Time Čas - + File Soubor - + Folder Adresář - + Action Akce - + Size Velikost - + Local sync protocol Místní protokol synchronizace - + Copy Kopie - + Copy the activity list to the clipboard. Kopírovat záznam aktivity do schránky. @@ -2488,7 +2474,7 @@ Nedoporučuje se jí používat. OCC::SelectiveSyncDialog - + Choose What to Sync Vybrat co synchronizovat @@ -2506,23 +2492,23 @@ Nedoporučuje se jí používat. Zrušte výběr vzdálených složek, které nechcete synchronizovat. - + Name Název - + Size Velikost - - + + No subfolders currently on the server. Na serveru nejsou momentálně žádné podadresáře. - + An error occurred while loading the list of sub folders. Došlo k chybě v průběhu načítání seznamu podadresářů. @@ -2550,7 +2536,7 @@ Nedoporučuje se jí používat. Síť - + Account Účet @@ -2869,12 +2855,12 @@ Nedoporučuje se jí používat. OCC::ShibbolethCredentials - + Login Error Chyba přihlášení - + You must sign in as user %1 Musíte se přihlásit jako uživatel %1 @@ -2905,28 +2891,28 @@ Nedoporučuje se jí používat. OCC::SocketApi - + Share with %1 parameter is ownCloud Sdílet s %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2934,119 +2920,114 @@ Nedoporučuje se jí používat. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detaily certifikátu</h3> - + Common Name (CN): Běžný název (CN): - + Subject Alternative Names: Alternativní jména subjektu: - + Organization (O): Organizace (O): - + Organizational Unit (OU): Organizační jednotka (OU): - + State/Province: Stát/provincie: - + Country: Země: - + Serial: Sériové číslo: - + <h3>Issuer</h3> <h3>Vydavatel</h3> - + Issuer: Vydavatel: - + Issued on: Vydáno: - + Expires on: Platný do: - + <h3>Fingerprints</h3> <h3>Otisky</h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Poznámka:</b> Tento certifikát byl schválen ručně</p> - + %1 (self-signed) %1 (podepsaný sám sebou) - + %1 %1 - + This connection is encrypted using %1 bit %2. Toto spojení je šifrováno pomocí %1 bitové šifry %2 - + No support for SSL session tickets/identifiers Podpora tiketů/identifikátorů SSL sezení není dostupná - + Certificate information: Informace o certifikátu: - + This connection is NOT secure as it is not encrypted. Toto spojení NENÍ bezpečné, protože není šifrované. @@ -3066,67 +3047,67 @@ Nedoporučuje se jí používat. Přesto tomuto certifikátu důvěřovat - + Untrusted Certificate Nedůvěryhodný certifikát - + Cannot connect securely to <i>%1</i>: Nelze se bezpečně připojit k <i>%1</i>: - + with Certificate %1 s certifikátem %1 + + - - &lt;not specified&gt; &lt;nespecifikováno&gt; - - + + Organization: %1 Organizace: %1 - - + + Unit: %1 Jednotka: %1 - - + + Country: %1 Země: %1 - + Fingerprint (MD5): <tt>%1</tt> Otisk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Otisk (SHA1): <tt>%1</tt> - + Effective Date: %1 Datum účinnosti: %1 - + Expiration Date: %1 Datum vypršení: %1 - + Issuer: %1 Vydavatel: %1 @@ -3240,27 +3221,27 @@ Nedoporučuje se jí používat. Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3365,69 +3346,69 @@ Nedoporučuje se jí používat. Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj @@ -3451,17 +3432,17 @@ Nedoporučuje se jí používat. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Verze %1. Více informací na <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Šíří %1 pod licencí GNU General Public License (GPL) Verze 2.0.<br/>%2 a %2 logo jsou registrované známky %1 ve Spojených Státech, ostatních zemích, nebo obojí.</p> @@ -3874,48 +3855,40 @@ Nedoporučuje se jí používat. Tlačítko - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future V budoucnosti - + %n day(s) ago před %n dnempřed %n dnypřed %n dny - + %n hour(s) ago před %n hodinoupřed %n hodinamipřed %n hodinami - + now nyní - + Less than a minute ago Méně než před minutou - + %n minute(s) ago před %n minutoupřed %n minutamipřed %n minutami - + Some time ago Před nějakým časem @@ -3929,57 +3902,57 @@ Nedoporučuje se jí používat. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n let - + %n month(s) %n měsíc%n měsíce%n měsíců - + %n day(s) %n den%n dny%n dní - + %n hour(s) %n hodina%n hodiny%n hodin - + %n minute(s) %n minuta%n minuty%n minut - + %n second(s) %n sekunda%n sekundy%n sekund - + %1 %2 %1 %2 @@ -4000,7 +3973,7 @@ Nedoporučuje se jí používat. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Sestaveno na Git revizi <a href="%1">%2</a> na %3, %4 s použitím Qt %5, %6</small></p> diff --git a/translations/client_de.ts b/translations/client_de.ts index c181dbbac..09a812723 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Die Zieldatei hat eine unerwartete Größe oder ein unerwartetes Änderungsdatum @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Zeitüberschreitung bei der Verbindung - + Unknown error: network reply was deleted Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht - + Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet @@ -143,8 +143,8 @@ - - + + Cancel Abbrechen @@ -174,184 +174,184 @@ Benutzerkonto - + Choose what to sync Zu synchronisierende Elemente auswählen - + Force sync now Synchronisation jetzt erzwingen - + Restart sync Synchronisation neustarten - + Remove folder sync connection Ordner-Synchronisation entfernen - + Folder creation failed Anlegen des Ordners fehlgeschlagen - + <p>Could not create local folder <i>%1</i>. <p>Konnte lokalen Ordner <i>%1</i> nicht anlegen. - + Confirm Folder Sync Connection Removal Bestätigen Sie die Löschung der Ordner-Synchronisation - + Remove Folder Sync Connection Ordner-Synchronisation entfernen - + Sync Running Synchronisation läuft - + The syncing operation is running.<br/>Do you want to terminate it? Die Synchronisation läuft gerade.<br/>Wollen Sie sie beenden? - + %1 in use %1 wird verwendet - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Die Serververision %1 ist alt und nicht unterstützt! Fortfahren auf eigenes Risiko. - + Connected to %1. Verbunden mit %1. - + Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. - + Server %1 is currently in maintenance mode. Server %1 befindet sich im Wartungsmodus. - + Signed out from %1. Abgemeldet von %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Berechtigung vom Browser einholen. <a href='%1'> Hier klicken </a> zum nochmaligen Öffnen des Browsers. - + Connecting to %1... Verbinde mit %1... - + No connection to %1 at %2. Keine Verbindung zu %1 auf %2 - + Log in Einloggen - + There are folders that were not synchronized because they are too big: Einige Verzeichnisse konnten nicht synchronisiert werden, da sie zu groß sind: - + There are folders that were not synchronized because they are external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese externe Speicher sind: - + There are folders that were not synchronized because they are too big or external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese zu groß oder externe Speicher sind: - + Confirm Account Removal Konto wirklich entfernen? - + <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> <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> - + Remove connection Verbindung entfernen - - + + Open folder Ordner öffnen - + Log out Abmelden - + Resume sync Synchronisation fortsetzen - + Pause sync Synchronisation pausieren - + <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> <p>Möchten Sie den Ordner <i>%1</i> wirklich nicht mehr synchronisieren?</p><p><b>Anmerkung:</b> Dies wird <b>keine</b> Dateien löschen.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %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. - + %1 of %2 in use %1 von %2 Serverkapazität verwendet - + Currently there is no storage usage information available. Derzeit sind keine Speichernutzungsinformationen verfügbar. - + No %1 connection configured. Keine %1-Verbindung konfiguriert. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveraktivität - + Sync Protocol Synchronisationsprotokoll - + Not Synced nicht synchronisiert - + Not Synced (%1) %1 is the number of not synced files. nicht synchronisiert (%1) - + The server activity list has been copied to the clipboard. Die Server-Aktivitätsliste wurde in die Zwischenablage kopiert. - + The sync activity list has been copied to the clipboard. Die Synchronisationsliste wurde in die Zwischenablage kopiert. - + The list of unsynced items has been copied to the clipboard. Die Liste der unsynchronisierten Dateien wurde in die Zwischenablage kopiert. - + Copied to clipboard In die Zwischenablage kopiert @@ -477,47 +477,47 @@ TextLabel - + Server Activities Server Aktivitäten - + Copy Kopieren - + Copy the activity list to the clipboard. Aktivitätsliste in die Zwischenablage kopieren. - + Action Required: Notifications Handlung erforderlich: Benachrichtigungen - + <br/>Account %1 does not have activities enabled. <br/>Für Konto %1 sind serverseitig keine Aktivitäten aktiviert. - + You received %n new notification(s) from %2. Sie haben %n neue Benachrichtigung von %2 erhalten.Sie haben %n neue Benachrichtigungen von %2 erhalten. - + You received %n new notification(s) from %1 and %2. Sie haben %n neue Benachrichtigung von %1 und %2 erhalten.Sie haben %n neue Benachrichtigungen von %1 und %2 erhalten. - + You received new notifications from %1, %2 and other accounts. Sieh haben %n neue Benachrichtigungen von %1, %2 und anderen Konten erhalten. - + %1 Notifications - Action Required %1 Benachrichtigungen - Handlung notwendig @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Fehler beim Zugriff auf die Konfigurationsdatei - + There was an error while accessing the configuration file at %1. Es ist ein Fehler beim Zugriff auf die Konfigurationsdatei unter %1 aufgetreten. - + Quit ownCloud ownCloud verlassen @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -752,26 +752,26 @@ Systemeigene Ausschlussdatei kann nicht gelesen werden - + A new folder larger than %1 MB has been added: %2. Ein neues Verzeichnis größer als %1 MB wurde hinzugefügt: %2. - + A folder from an external storage has been added. Ein Verzeichnis, von einem externen Speicher wurde hinzugefügt. - + Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie das Verzeichnis herunterladen möchten. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder s Wenn Sie sich zum Löschen der Dateien entscheiden, sind diese nicht mehr verfügbar, außer Sie sind der Eigentümer. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Sind Sie sich sicher, dass Sie diese Aktion mit Ihrem Server synchronisieren mö Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheiden, werden diese wieder vom Server synchronisiert. - + Remove All Files? Alle Dateien löschen? - + Remove all files Lösche alle Dateien - + Keep files Dateien behalten - + This sync would reset the files to an earlier 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? @@ -815,17 +815,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 lokalen Dateien als Konflikt-Dateien behalten? - + Backup detected Backup erkannt - + Normal Synchronisation Normale Synchronisation - + Keep Local Files as Conflict Lokale Konfliktdateien behalten @@ -951,12 +951,12 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Ordner-Synchronisation hinzufügen - + Synchronizing with local folder Synchronisiere mit lokalem Verzeichnis - + File Datei @@ -964,144 +964,144 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderStatusModel - + You need to be connected to add a folder Sie müssen verbunden sein, um einen Ordner hinzuzufügen - + Click this button to add a folder to synchronize. Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fehler beim Empfang der Ordnerliste vom Server. - + Signed out Abgemeldet - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Sie können keinen weiteren Ordner hinzufügen, da Sie bereits alle Dateien synchronisieren. Falls sie mehrere Ordner synchronisieren wollen, entferen Sie zunächst den konfigurierten Wurzel-Ordner. - + Fetching folder list from server... Empfange Orderliste vom Server... - + There are unresolved conflicts. Click for details. Es existieren ungelöste Konflikte. Für Details klicken. - + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + Reconciling changes Änderungen zusammenführen - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisiere %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 von %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 übrig, %1 von %2, Datei %3 von %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, Datei %3 von %4 - + file %1 of %2 Datei %1 von %2 - + Waiting... Warte... - + Waiting for %n other folder(s)... Warte auf einen anderen OrdnerWarte auf %n andere Ordner - + Preparing to sync... Bereite Synchronisation vor... @@ -1109,12 +1109,12 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderWizard - + Add Folder Sync Connection Ordner-Synchronisation hinzufügen - + Add Sync Connection Ordner-Synchronisation hinzufügen @@ -1140,52 +1140,52 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderWizardRemotePath - + Create Remote Folder Entfernten Ordner erstellen - + Enter the name of the new folder to be created below '%1': Geben Sie den Namen des neuen, unter '%1' zu erstellenden Ordners ein: - + Folder was successfully created on %1. Order erfolgreich auf %1 erstellt. - + Authentication failed accessing %1 Beim Zugriff auf %1 ist die Authentifizierung fehlgeschlagen - + Failed to create the folder on %1. Please check manually. Die Erstellung des Ordners auf %1 ist fehlgeschlagen. Bitte prüfen Sie dies manuell. - + Failed to list a folder. Error: %1 Konnte Ordner nicht listen. Fehler: %1 - + Choose this to sync the entire account Wählen Sie dies, um das gesamte Konto zu synchronisieren - + This folder is already being synced. Dieser Ordner wird bereits synchronisiert. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sie synchronisieren bereits <i>%1</i>, das ein übergeordneten Ordner von <i>%2</i> ist. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Sie synchronisieren bereits alle Ihre Dateien. Die Synchronisation anderer Verzeichnisse wird <b>nicht</b> unterstützt. Wenn Sie mehrere Ordner synchronisieren möchten, entfernen Sie bitte das aktuell konfigurierte Wurzelverzeichnis zur Synchronisation. @@ -1431,7 +1431,7 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun - + Folder Ordner @@ -1456,17 +1456,17 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun Kopieren - + Time Zeit - + File Datei - + Issue Fehler @@ -1532,12 +1532,12 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::Logger - + Error Fehler - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Datei »%1«<br/>kann nicht zum Schreiben geöffnet werden.<br/><br/>Die Protokolldatei kann <b>nicht</b> gespeichert werden!</nobr> @@ -1545,27 +1545,27 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::NSISUpdater - + New Version Available Eine neue Version ist verfügbar. - + <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> <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> - + Skip this version Diese Version auslassen - + Skip this time Dieses Mal überspringen - + Get update Update durchführen @@ -1677,11 +1677,6 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun SOCKS5 proxy SOCKS5-Proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Bandbreiten-Limitierung ist nur mit Qt >= 5.4 verfügbar. - OCC::NotificationWidget @@ -1711,32 +1706,32 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::OAuth - + Error returned from the server: <em>%1</em> Fehler vom Server zurückgegeben: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1744,58 +1739,58 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::OCUpdater - + New %1 Update Ready Neues %1 Update verfügbar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Ein neues Update für %1 wird installiert. Während des Updatevorganges werden Sie eventuell gefragt zusätzliche Rechte im Rahmen des Updatevorganges zu gewähren. - + Downloading version %1. Please wait... Version %1 wird heruntergeladen. Bitte warten … - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Aktualisierung kann nicht herunter geladen werden. Bitte klicken Sie <a href='%1'>hier</a> um die Aktualisierung manuell herunter zu laden. - + Could not check for new updates. Auf neue Aktualisierungen kann nicht geprüft werden. - + %1 version %2 available. Restart application to start the update. %1-Version %2 verfügbar. Anwendung zum Start der Aktualisierung neustarten. - + New %1 version %2 available. Please use the system's update tool to install it. Neue %1-Version %2 verfügbar. Bitte nutzen Sie das System-Updatetool zur Installation. - + Checking update server... Aktualisierungsserver wird überprüft … - + Update status is unknown: Did not check for new updates. Updatestatus unbekannt: Auf neue Updates wurde nicht geprüft. - + No updates available. Your installation is at the latest version. Keine Aktualisierungen verfügbar. Ihre Installation ist die aktuelle Version. - + Update Check Aktualitätsprüfung @@ -1872,7 +1867,7 @@ for additional privileges during the process. Clientseitiges TLS-Zertifikat konfigurieren. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Sichere Verbindung zur Server-Adresse <em>%1</em> fehlgeschlagen. Wie wollen Sie fortfahren?</p></body></html> @@ -1941,144 +1936,144 @@ Es ist nicht ratsam, diese zu benutzen. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Erfolgreich mit %1 verbunden: %2 Version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Die Verbindung zu %1 auf %2:<br/>%3 konnte nicht hergestellt werden - + Timeout while trying to connect to %1 at %2. Zeitüberschreitung beim Verbindungsversuch mit %1 unter %2. - + Trying to connect to %1 at %2... Verbindungsversuch mit %1 unter %2… - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Die Authentifizierungs-Anfrage an den Server wurde weitergeleitet an '%1'. Diese Adresse ist ungültig, der Server ist falsch konfiguriert. - + There was an invalid response to an authenticated webdav request Es gab eine ungültige Reaktion auf eine WebDav-Authentifizeriungs-Anfrage - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Zugang vom Server nicht erlaubt. <a href="%1">Klicken Sie hier</a> zum Zugriff auf den Dienst mithilfe Ihres Browsers, so dass Sie sicherstellen können, dass Ihr Zugang ordnungsgemäß funktioniert. - + Invalid URL Ungültige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokaler Sync-Ordner %1 existiert bereits, aktiviere Synchronistation.<br/><br/> - + Creating local sync folder %1... Lokaler Synchronisations-Ordner %1 wird erstellt ... - + ok ok - + failed. fehlgeschlagen. - + Could not create local folder %1 Der lokale Ordner %1 konnte nicht angelegt werden - + No remote folder specified! Keinen entfernten Ordner angegeben! - + Error: %1 Fehler: %1 - + creating folder on ownCloud: %1 erstelle Ordner auf ownCloud: %1 - + Remote folder %1 created successfully. Remoteordner %1 erfolgreich erstellt. - + The remote folder %1 already exists. Connecting it for syncing. Der Ordner %1 ist auf dem Server bereits vorhanden. Verbinde zur Synchronisation. - - + + The folder creation resulted in HTTP error code %1 Das Erstellen des Verzeichnisses erzeugte den HTTP-Fehler-Code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Die Remote-Ordner-Erstellung ist fehlgeschlagen, weil die angegebenen Zugangsdaten falsch sind. Bitte gehen Sie zurück und überprüfen Sie die Zugangsdaten. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Die Remote-Ordner-Erstellung ist fehlgeschlagen, vermutlich sind die angegebenen Zugangsdaten falsch.</font><br/>Bitte gehen Sie zurück und überprüfen Sie Ihre Zugangsdaten.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Remote-Ordner %1 konnte mit folgendem Fehler nicht erstellt werden: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Eine Synchronisationsverbindung für Ordner %1 zum entfernten Ordner %2 wurde eingerichtet. - + Successfully connected to %1! Erfolgreich verbunden mit %1! - + Connection to %1 could not be established. Please check again. Die Verbindung zu %1 konnte nicht hergestellt werden. Bitte prüfen Sie die Einstellungen erneut. - + Folder rename failed Ordner umbenennen fehlgeschlagen. - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Der Ordner kann nicht entfernt und gesichert werden, da der Ordner oder einer seiner Dateien in einem anderen Programm geöffnet ist. Bitte schließen Sie den Ordner oder die Datei oder beenden Sie die Installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokaler Sync-Ordner %1 erfolgreich erstellt!</b></font> @@ -2125,7 +2120,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateDirectory - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2181,12 +2176,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Wiederherstellung fehlgeschlagen: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1 @@ -2194,22 +2189,22 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Konnte Datei %1 nicht löschen. Fehler: %2 - + Attention, possible case sensitivity clash with %1 Achtung, es könnte ein Problem mit der Groß- und Kleinschreibung für %1 auftreten - + could not create folder %1 Ordner %1 konnte nicht angelegt werden - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2217,17 +2212,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fehler beim Entfernen '%1': %2; - + Could not remove folder '%1' Der Ordner konnte nicht gelöscht werden '%1' - + Could not remove %1 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht gelöscht werden @@ -2235,13 +2230,13 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash %1 kann aufgrund eines Konfliktes mit dem lokalen Dateinamen nicht zu %2 umbenannt werden - - + + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2309,27 +2304,28 @@ Es ist nicht ratsam, diese zu benutzen. Die Datei %1 kann nicht hochgeladen werden, da eine andere Datei mit dem selben Namen, nur unterschiedlicher Großschreibung, existiert - + File Removed Datei gelöscht - + Local file changed during syncing. It will be resumed. Lokale Datei hat sich während der Synchronisation geändert. Die Synchronisation wird wiederaufgenommen. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2337,32 +2333,27 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen. - - - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisation gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + Unexpected return code from server (%1) Unerwarteter Rückgabe-Code Antwort vom Server (%1) - + Missing File ID from server Fehlende Datei-ID vom Server - + Missing ETag from server Fehlender ETag vom Server @@ -2370,32 +2361,27 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Auftragsabbruch beim Rücksetzen der HTTP-Verbindung mit QT < 5.4.2 wird erzwungen. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Die Datei wurde von einer Nur-Lese-Freigabe lokal bearbeitet. Die Datei wurde wiederhergestellt und Ihre Bearbeitung ist in der Konflikte-Datei. - + Poll URL missing Poll-URL fehlt - + The local file was removed during sync. Die lokale Datei wurde während der Synchronisation gelöscht. - + Local file changed during sync. Eine lokale Datei wurde während der Synchronisation geändert. - + The server did not acknowledge the last chunk. (No e-tag was present) Der Server hat den letzten Block nicht bestätigt. (Der E-Tag war nicht vorhanden) @@ -2413,42 +2399,42 @@ Es ist nicht ratsam, diese zu benutzen. TextLabel - + Time Zeit - + File Datei - + Folder Ordner - + Action Aktion - + Size Größe - + Local sync protocol Lokales Sychronisationsprotokoll - + Copy Kopieren - + Copy the activity list to the clipboard. Aktivitätsliste in die Zwischenablage kopieren. @@ -2489,7 +2475,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SelectiveSyncDialog - + Choose What to Sync Zu synchronisierende Elemente auswählen @@ -2507,23 +2493,23 @@ Es ist nicht ratsam, diese zu benutzen. Entfernte Ordner abwählen, die nicht synchronisiert werden sollen. - + Name Name - + Size Größe - - + + No subfolders currently on the server. Aktuell befinden sich keine Unterordner auf dem Server. - + An error occurred while loading the list of sub folders. Ein Fehler ist aufgetreten, während die Liste der Unterordner geladen wurde. @@ -2551,7 +2537,7 @@ Es ist nicht ratsam, diese zu benutzen. Netzwerk - + Account Benutzerkonto @@ -2870,12 +2856,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ShibbolethCredentials - + Login Error Log-In Fehler - + You must sign in as user %1 Sie müssen sich als %1 einloggen @@ -2906,28 +2892,28 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SocketApi - + Share with %1 parameter is ownCloud Via %1 teilen - + I shared something with you - + Share... Teilen… - + Copy private link to clipboard - + Send private link by email... @@ -2935,119 +2921,114 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Zertifikatdetails</h3> - + Common Name (CN): Gemeinsamer Name (CN): - + Subject Alternative Names: Subject Alternative Names: - + Organization (O): Organisation (O): - + Organizational Unit (OU): Organisationseinheit (OU): - + State/Province: Staat/Provinz: - + Country: Land: - + Serial: Seriennummer: - + <h3>Issuer</h3> <h3>Aussteller</h3> - + Issuer: Aussteller: - + Issued on: Ausgestellt am: - + Expires on: Ablaufdatum: - + <h3>Fingerprints</h3> <h3>Fingerabdrücke</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Hinweis:</b> Dieses Zertifikat wurde manuell bestätigt</p> - + %1 (self-signed) %1 (selbst signiert) - + %1 %1 - + This connection is encrypted using %1 bit %2. Diese Verbindung ist verschlüsselt mit %1 Bit %2. - + No support for SSL session tickets/identifiers Keine Unterstützung für SSL session tickets - + Certificate information: Zertifikatsinformation: - + This connection is NOT secure as it is not encrypted. Diese Verbindung ist NICHT sicher, da diese nicht verschlüsselt ist. @@ -3067,67 +3048,67 @@ Es ist nicht ratsam, diese zu benutzen. Diesem Zertifikat trotzdem vertrauen - + Untrusted Certificate Nicht vertrauenswürdiges Zertifikat - + Cannot connect securely to <i>%1</i>: Kann keine sichere Verbindung zu <i>%1</i> herstellen: - + with Certificate %1 mit Zertifikat %1 + + - - &lt;not specified&gt; &lt;nicht angegeben&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Einheit: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerabdruck (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerabdruck (SHA1): <tt>%1</tt> - + Effective Date: %1 Aktuelles Datum: %1 - + Expiration Date: %1 Ablaufdatum: %1 - + Issuer: %1 Aussteller: %1 @@ -3241,27 +3222,27 @@ Es ist nicht ratsam, diese zu benutzen. Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3366,69 +3347,69 @@ Es ist nicht ratsam, diese zu benutzen. Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle @@ -3452,17 +3433,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. Für weitere Informationen besuchen Sie bitte <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Zur Verfügung gestellt durch %1 und lizenziert unter der GNU General Public License (GPL) Version 2.0.<br>%2 und das %2 Logo sind eingetragene Warenzeichen von %1 in den Vereinigten Staaten, anderen Ländern oder beides.</p> @@ -3875,48 +3856,40 @@ Es ist nicht ratsam, diese zu benutzen. Schaltfläche - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future in der Zukunft - + %n day(s) ago vor %n Tage(n)vor %n Tage(n) - + %n hour(s) ago vor %n Stunde(n)vor %n Stunde(n) - + now jetzt - + Less than a minute ago vor weniger als einer Minute - + %n minute(s) ago vor %n Minute(n)vor %n Minute(n) - + Some time ago vor einiger Zeit @@ -3930,57 +3903,57 @@ Es ist nicht ratsam, diese zu benutzen. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n Jahr%n Jahre - + %n month(s) %n Monat%n Monate - + %n day(s) %n Tag%n Tage - + %n hour(s) %n Stunde%n Stunden - + %n minute(s) %n Minute%n Minuten - + %n second(s) %n Sekunde%n Sekunden - + %1 %2 %1 %2 @@ -4001,7 +3974,7 @@ Es ist nicht ratsam, diese zu benutzen. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebaut von der GIT-Revision <a href="%1">%2</a> auf %3, %4 verwendet Qt %5, %6</small></p> diff --git a/translations/client_el.ts b/translations/client_el.ts index 80eec1d0e..7d017bb27 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Το αρχείο προορισμού έχει μη αναμενόμενο μέγεθος ή ημερομηνία τροποποίησης @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Η σύνδεση έληξε. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Άκυρο @@ -174,184 +174,184 @@ Λογαριασμός - + Choose what to sync Επιλέξτε τι θα συγχρονιστεί - + Force sync now Εξαναγκασμός συγχρονισμού τώρα - + Restart sync Επανεκκίνηση συγχρονισμού - + Remove folder sync connection Αφαίρεση σύνδεσης συγχρονισμού φακέλου - + Folder creation failed Αποτυχία αφαίρεσης φακέλου - + <p>Could not create local folder <i>%1</i>. <p>Αδυναμία δημιουργίας τοπικού φακέλου <i>%1</i>. - + Confirm Folder Sync Connection Removal Επιβεβαίωση αφαίρεσης σύνδεσης συγχρονισμού φακέλου - + Remove Folder Sync Connection Αφαίρεση σύνδεσης συγχρονισμού φακέλου - + Sync Running Εκτελείται Συγχρονισμός - + The syncing operation is running.<br/>Do you want to terminate it? Η λειτουργία συγχρονισμού εκτελείται.<br/> Θέλετε να την τερματίσετε; - + %1 in use %1 σε χρήση - + %1 as <i>%2</i> %1 ως <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Η έκδοση του διακομιστή %1 είναι παλιά και δεν υποστηρίζεται! Προχωρείστε με δική σας ευθύνη. - + Connected to %1. Συνδεδεμένο με %1. - + Server %1 is temporarily unavailable. Ο διακομιστής %1 δεν είναι διαθέσιμος προσωρινά. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Αποσυνδέθηκε από %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Δεν υπάρχει σύνδεση με το %1 στο %2. - + Log in Είσοδος - + There are folders that were not synchronized because they are too big: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι: - + There are folders that were not synchronized because they are external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι εξωτερικοί αποθηκευτικοί χώροι: - + There are folders that were not synchronized because they are too big or external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι ή αποθηκευτικοί χώροι: - + Confirm Account Removal Επιβεβαίωση Αφαίρεσης Λογαριασμού - + <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> <p>Θέλετε πραγματικά να αφαιρέσετε τη σύνδεση με το λογαριασμό <i>%1</i>;</p><p><b>Σημείωση:</b> Αυτό <b>δεν</b> θα διαγράψει κανένα αρχείο.</p> - + Remove connection Αφαίρεση σύνδεσης - - + + Open folder Άνοιγμα φακέλου - + Log out Αποσύνδεση - + Resume sync Συνέχιση συγχρονισμού - + Pause sync Παύση συγχρονισμού - + <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> <p>Θέλετε πραγματικά να σταματήσετε το συγχρονισμό του φακέλου <i>%1</i>;</p><p><b>Σημείωση:</b> Αυτό <b>δεν</b> θα διαγράψει κανένα αρχείο.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) από %2 σε χρήση. Μερικοί φάκελοι, συμπεριλαμβανομένων των δικτυακών ή των κοινόχρηστων μπορεί να έχουν διαφορετικά όρια. - + %1 of %2 in use %1 από %2 σε χρήση - + Currently there is no storage usage information available. Προς το παρόν δεν υπάρχουν πληροφορίες χρήσης χώρου αποθήκευσης διαθέσιμες. - + No %1 connection configured. Δεν έχει ρυθμιστεί σύνδεση με το %1. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Δραστηριότητα διακομιστή - + Sync Protocol Προτοκολο συγχρονισμου - + Not Synced Δεν είναι συγχρονισμένα - + Not Synced (%1) %1 is the number of not synced files. Δεν είναι συγχρονισμένα (%1) - + The server activity list has been copied to the clipboard. Ο κατάλογος δραστηριοτήτων του διακομιστή έχει αντιγραφθεί στο Πρόχειρο - + The sync activity list has been copied to the clipboard. Ο κατάλογος της δραστηριότητας συγχρονισμού έχει αντιγραφθεί στο Πρόχειρο - + The list of unsynced items has been copied to the clipboard. Η λίστα των μη συγχρονισμένων αντικειμένων έχει αντιγραφεί στο πρόχειρο - + Copied to clipboard Αντιγράφηκε στο πρόχειρο @@ -477,47 +477,47 @@ TextLabel - + Server Activities Δραστηριότητες διακομιστή - + Copy Αντιγραφή - + Copy the activity list to the clipboard. Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. - + Action Required: Notifications Απαιτείται ενέργεια: Ειδοποιήσεις - + <br/>Account %1 does not have activities enabled. <br/>Ο λογαριασμός %1 δεν έχει ενεργοποιήσει τις δραστηριότητες. - + You received %n new notification(s) from %2. Λάβατε %n νέα ειδοποίηση(σεις) από %2.Λάβατε %n νέα ειδοποίηση(σεις) από %2. - + You received %n new notification(s) from %1 and %2. Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2.Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2. - + You received new notifications from %1, %2 and other accounts. Λάβατε νέες ανακοινώσεις από %1, %2 και άλλους λογαριασμούς. - + %1 Notifications - Action Required %1 Ειδοποιήσεις - Απαιτείται ενέργεια @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Σφάλμα πρόσβασης στο αρχείο ρυθμίσεων - + There was an error while accessing the configuration file at %1. Υπήρξε σφάλμα κατά την πρόσβαση του αρχείου ρυθμίσεων στο %1 - + Quit ownCloud Έξοδος ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -752,26 +752,26 @@ Αδυναμία ανάγνωσης αρχείου αποκλεισμού συστήματος - + A new folder larger than %1 MB has been added: %2. Προστέθηκε ένας νέος φάκελος μεγαλύτερος από %1 MB: %2 - + A folder from an external storage has been added. Προστέθηκε ένας φάκελος από εξωτερικό αποθηκευτικό χώρο. - + Please go in the settings to select it if you wish to download it. Μεταβείτε στις ρυθμίσεις για να το επιλέξετε εάν επιθυμείτε να το κατεβάσετε. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Εφόσον επιλέξετε να διαγράψετε τα αρχεία, δε θα είναι διαθέσιμα σε εσάς, εκτός εάν είστε ο ιδιοκτήτης τους. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Αν αυτό ήταν ένα ατύχημα και αποφασίσατε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν εκ νέου από το διακομιστή. - + Remove All Files? Αφαίρεση Όλων των Αρχείων; - + Remove all files Αφαίρεση όλων των αρχείων - + Keep files Διατήρηση αρχείων - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an Η συνέχιση του συγχρονισμού κανονικά θα προκαλέσει την αντικατάσταση όλων των αρχείων σας από παλιότερο αρχείο σε προηγούμενη κατάσταση. Θέλετε να διατηρήσετε τα τοπικά σας πιο πρόσφατα αρχεία ως αρχεία σύγκρουσης; - + Backup detected Ανιχνεύθηκε αντίγραφο ασφαλείας - + Normal Synchronisation Κανονικός συγχρονισμός - + Keep Local Files as Conflict Διατήρηση τοπικών αρχείων ως Διένεξη @@ -951,12 +951,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Προσθήκη σύνδεσης συγχρονισμού φακέλου - + Synchronizing with local folder Συγχρονισμός με τοπικό φάκελο - + File Αρχείο @@ -964,144 +964,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Πρέπει να έχετε συνδεθεί για να προσθέσετε φάκελο - + Click this button to add a folder to synchronize. Κάντε κλικ σε αυτό το κουμπί για να προσθέσετε ένα φάκελο προς συγχρονισμό. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Σφάλμα κατά τη φόρτωση της λίστας φακέλων από το διακομιστή. - + Signed out Αποσύνδεση - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Η επιλογή προσθήκης φακέλου δεν είναι διαθέσιμη καθώς συγχρονίζονται ήδη όλα τα αρχεία. Για να επιλέξετε συγχρονισμό φακέλων, αφαιρέστε τον αρχικό φάκελο που έχει ρυθμιστεί. - + Fetching folder list from server... Λήψη λίστας φακέλων από το διακομιστή... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Συγχρονισμός %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) λήψη %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) μεταφόρτωση %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 από %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Απομένει %5, %1 από %2, αρχείο %3 από %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 από %2, αρχείο %3 από %4 - + file %1 of %2 αρχείο %1 από %2 - + Waiting... Αναμονή... - + Waiting for %n other folder(s)... Αναμονή για %n άλλο φάκελο...Αναμονή για %n άλλους φακέλους... - + Preparing to sync... Προετοιμασία για συγχρονισμό... @@ -1109,12 +1109,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού Φακέλου - + Add Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού @@ -1140,52 +1140,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Δημιουργία Απομακρυσμένου Φακέλου - + Enter the name of the new folder to be created below '%1': Εισάγετε το όνομα του νέου φακέλου που θα δημιουργηθεί παρακάτω '%1': - + Folder was successfully created on %1. Επιτυχής δημιουργία φακέλου στο %1. - + Authentication failed accessing %1 Η πιστοποίηση απέτυχε κατά την πρόσβαση %1 - + Failed to create the folder on %1. Please check manually. Αποτυχία δημιουργίας φακέλου στο %1. Παρακαλώ ελέγξτε χειροκίνητα. - + Failed to list a folder. Error: %1 Αδυναμία εμφάνισης ενός φακέλου. Σφάλμα: %1 - + Choose this to sync the entire account Επιλέξτε να συγχρονίσετε ολόκληρο το λογαριασμό - + This folder is already being synced. Αυτός ο φάκελος συγχρονίζεται ήδη. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ο φάκελος <i>%1</i>, ο οποίος είναι γονεϊκός φάκελος του <i>%2</i>, συγχρονίζεται ήδη. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Συγχρονίζετε ήδη όλα σας τα αρχεία. Ο συγχρονισμός ενός ακόμα φακέλου <b>δεν</b> υποστηρίζεται. Εάν θέλετε να συγχρονίσετε πολλαπλούς φακέλους, παρακαλώ αφαιρέστε την τρέχουσα ρύθμιση συχρονισμού του βασικού φακέλου. @@ -1431,7 +1431,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Φάκελος @@ -1456,17 +1456,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Αντιγραφή - + Time Ώρα - + File Αρχείο - + Issue @@ -1532,12 +1532,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Σφάλμα - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Το αρχείο '%1'<br/>δεν μπορεί να ανοιχθεί για εγγραφή.<br/><br/>Το αρχείο καταγραφής <b>δεν</b> μπορεί να αποθηκευτεί!</nobr> @@ -1545,27 +1545,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Νέα Έκδοση Διαθέσιμη - + <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> <p>Μια νέα έκδοση του %1 Δέκτη είναι διαθέσιμη.</p><p><b>%2</b> είναι διαθέσιμη για λήψη. Η εγκατεστημένη έκδοση είναι %3.</p> - + Skip this version Παράλειψη αυτής της έκδοσης - + Skip this time Παράλειψη αυτή τη φορά - + Get update Λήψη ενημέρωσης @@ -1677,11 +1677,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy Ενδιάμεσος SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Απαιτείται έκδοση Qt 5.4 ή νεώτερη, για να χρησιμοποιηθεί το όριο bandwidth - OCC::NotificationWidget @@ -1711,32 +1706,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1744,59 +1739,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Νέα %1 Ενημέρωση Έτοιμη - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Μια νέα ενημέρωση για %1 πρόκειται να εγκατασταθεί. Ο βοηθός ενημέρωσης μπορεί να ζητήσει επιπλέον παραχωρήσεις δικαιωμάτων κατά τη διαδικασία. - + Downloading version %1. Please wait... Λήψη έκδοσης %1. Παρακαλώ περιμένετε... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Αδυναμία λήψης της ενημέρωσης. Παρακαλώ κλικάρετε <a href='%1'>εδώ</a> για να κατεβάσετε την ενημέρωση χειροκίνητα. - + Could not check for new updates. Αδυναμία ελέγχου για νέες ενημερώσεις. - + %1 version %2 available. Restart application to start the update. Είναι διαθέσιμη η έκδοση %1 %2. Επανεκκινήστε την εφαρμογή για να ξεκινήσει η αναβάθμιση. - + New %1 version %2 available. Please use the system's update tool to install it. Είναι διαθέσιμη η έκδοση %1 %2. Χρησιμοποιήστε το εργαλείο αναβάθμισης του συστήματός σας για να την εγκαταστήσετε. - + Checking update server... Έλεγχος διακομιστή ενημερώσεων... - + Update status is unknown: Did not check for new updates. Η κατάσταση ενημέρωσης είναι άγνωστη: Δεν έγινε έλεγχος για για νέες ενημερώσεις. - + No updates available. Your installation is at the latest version. Δεν υπάρχουν ενημερώσεις διαθέσιμες. Η εγκατάστασή σας βρίσκεται στην τελευταία έκδοση. - + Update Check Έλεγχος για ενημερώσεις @@ -1873,7 +1868,7 @@ for additional privileges during the process. Διαμόρφωση πιστοποιητικού TLS του δέκτη - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p> Αποτυχία σύνδεσης με ασφαλή διεύθυνση του διακομιστή <em>%1</em>. Πώς θέλετε να συνεχίσετε;</p></body></html> @@ -1942,144 +1937,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Επιτυχής σύνδεση στο %1: %2 έκδοση %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Αποτυχία σύνδεσης με το %1 στο %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Λήξη χρονικού ορίου κατά τη σύνδεση σε %1 σε %2. - + Trying to connect to %1 at %2... Προσπάθεια σύνδεσης στο %1 για %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Η πιστοποιημένη αίτηση στον διακομιστή ανακατευθύνθηκε σε '%1'. Το URL είναι εσφαλμένο, ο διακομιστής δεν έχει διαμορφωθεί σωστά. - + There was an invalid response to an authenticated webdav request Υπήρξε μια άκυρη απόκριση σε μια πιστοποιημένη αίτηση - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Απαγόρευση πρόσβασης από τον διακομιστή. Για να επιβεβαιώσετε ότι έχετε δικαιώματα πρόσβασης, <a href="%1">πατήστε εδώ</a> για να προσπελάσετε την υπηρεσία με το πρόγραμμα πλοήγησής σας. - + Invalid URL Μη έγκυρη URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Ο τοπικός φάκελος συγχρονισμού %1 υπάρχει ήδη, ρύθμιση για συγχρονισμό.<br/><br/> - + Creating local sync folder %1... Δημιουργία τοπικού φακέλου συγχρονισμού %1... - + ok οκ - + failed. απέτυχε. - + Could not create local folder %1 Αδυναμία δημιουργίας τοπικού φακέλου %1 - + No remote folder specified! Δεν προσδιορίστηκε κανένας απομακρυσμένος φάκελος! - + Error: %1 Σφάλμα: %1 - + creating folder on ownCloud: %1 δημιουργία φακέλου στο ownCloud: %1 - + Remote folder %1 created successfully. Ο απομακρυσμένος φάκελος %1 δημιουργήθηκε με επιτυχία. - + The remote folder %1 already exists. Connecting it for syncing. Ο απομακρυσμένος φάκελος %1 υπάρχει ήδη. Θα συνδεθεί για συγχρονισμό. - - + + The folder creation resulted in HTTP error code %1 Η δημιουργία φακέλου είχε ως αποτέλεσμα τον κωδικό σφάλματος HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Η δημιουργία απομακρυσμένου φακέλλου απέτυχε επειδή τα διαπιστευτήρια είναι λάθος!<br/>Παρακαλώ επιστρέψετε και ελέγξετε τα διαπιστευτήριά σας.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Η δημιουργία απομακρυσμένου φακέλου απέτυχε, πιθανώς επειδή τα διαπιστευτήρια που δόθηκαν είναι λάθος.</font><br/>Παρακαλώ επιστρέψτε πίσω και ελέγξτε τα διαπιστευτήρια σας.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Η δημιουργία απομακρυσμένου φακέλου %1 απέτυχε με σφάλμα <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Μια σύνδεση συγχρονισμού από τον απομακρυσμένο κατάλογο %1 σε %2 έχει ρυθμιστεί. - + Successfully connected to %1! Επιτυχής σύνδεση με %1! - + Connection to %1 could not be established. Please check again. Αδυναμία σύνδεσης στον %1. Παρακαλώ ελέξτε ξανά. - + Folder rename failed Αποτυχία μετονομασίας φακέλου - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Αδυναμία αφαίρεσης και δημιουργίας αντιγράφου ασφαλείας του φακέλου διότι ο φάκελος ή ένα αρχείο του είναι ανοικτό από άλλο πρόγραμμα. Παρακαλώ κλείστε τον φάκελο ή το αρχείο και πατήστε επανάληψη ή ακυρώστε την ρύθμιση. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Επιτυχής δημιουργία τοπικού φακέλου %1 για συγχρονισμό!</b></font> @@ -2126,7 +2121,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2182,12 +2177,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Η Αποκατάσταση Απέτυχε: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Ένα αρχείο ή ένας κατάλογος αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση, αλλά η επαναφορά απέτυχε: %1 @@ -2195,22 +2190,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 αδυναμία διαγραφής αρχείου %1, σφάλμα: %2 - + Attention, possible case sensitivity clash with %1 Προσοχή, πιθανή διένεξη κεφαλαίων-πεζών γραμμάτων με το %1 - + could not create folder %1 αδυναμία δημιουργίας φακέλου %1 - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2218,17 +2213,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Σφάλμα κατά την αφαίρεση '%1': %2; - + Could not remove folder '%1' Αδυναμία διαγραφής του φακέλου '%1' - + Could not remove %1 because of a local file name clash Δεν ήταν δυνατή η αφαίρεση του %1 λόγω διένεξης με το όνομα ενός τοπικού αρχείου @@ -2236,13 +2231,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Το αρχείο %1 δεν είναι δυνατό να μετονομαστεί σε %2 λόγω μιας διένεξης με το όνομα ενός τοπικού αρχείου - - + + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2310,27 +2305,28 @@ It is not advisable to use it. Το αρχείο % 1 δεν μπορεί να ανέβει επειδή υπάρχει ένα άλλο αρχείο με το ίδιο όνομα, που διαφέρει μόνο στη περίπτωση, - + File Removed Το αρχείο αφαιρέθηκε - + Local file changed during syncing. It will be resumed. Το τοπικό αρχείο τροποποιήθηκε κατά τη διάρκεια του συγχρονισμού. Θα συγχρονιστεί πάλι. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2338,32 +2334,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2 - - - + The local file was removed during sync. Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + Unexpected return code from server (%1) Ο διακομιστής επέστρεψε απροσδόκητο κωδικό (%1) - + Missing File ID from server Απουσία ID αρχείου από τον διακομιστή - + Missing ETag from server Απουσία ETag από τον διακομιστή @@ -2371,32 +2362,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Εξαναγκασμός ακύρωσης εργασίας στην επαναφορά σύνδεσης HTTP με Qt < 5.4.2 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Το αρχείο υπέστη επεξεργασία τοπικά αλλά είναι τμήμα ενός διαμοιρασμένου καταλόγου μόνο για ανάγνωση. Επαναφέρθηκε και το επεξεργασμένο βρίσκεται στο αρχείο συγκρούσεων. - + Poll URL missing Η διεύθυνση poll URL λείπει - + The local file was removed during sync. Το τοπικό αρχείο αφαιρέθηκε κατά το συγχρονισμό. - + Local file changed during sync. Το τοπικό αρχείο τροποποιήθηκε κατά τον συγχρονισμό. - + The server did not acknowledge the last chunk. (No e-tag was present) Ο διακομιστής δεν αναγνώρισε το τελευταίο τμήμα. (Δεν υπήρχε e-tag) @@ -2414,42 +2400,42 @@ It is not advisable to use it. TextLabel - + Time Ώρα - + File Αρχείο - + Folder Φάκελος - + Action Ενέργεια - + Size Μέγεθος - + Local sync protocol Πρωτόκολλο τοπικού συγχρονισμού - + Copy Αντιγραφή - + Copy the activity list to the clipboard. Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. @@ -2490,7 +2476,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Επιλέξτε Τι θα Συγχρονιστεί @@ -2508,23 +2494,23 @@ It is not advisable to use it. Απορρίψτε τους απομακρυσμένους φακέλους που δεν θέλετε να συγχρονιστούν. - + Name Όνομα - + Size Μέγεθος - - + + No subfolders currently on the server. Δεν υπάρχουν υποφάκελοι αυτή τη στιγμή στον διακομιστή. - + An error occurred while loading the list of sub folders. Παρουσιάστηκε σφάλμα κατά την φόρτωση της λίστας των υπο-φακέλων @@ -2552,7 +2538,7 @@ It is not advisable to use it. Δίκτυο - + Account Λογαριασμός @@ -2871,12 +2857,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Σφάλμα Σύνδεσης - + You must sign in as user %1 Πρέπει να εισέλθετε σαν χρήστης %1 @@ -2907,28 +2893,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Διαμοιρασμός με %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2936,119 +2922,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Λεπτομέρειες Πιστοποιητικού</h3> - + Common Name (CN): Κοινό Όνομα (ΚΟ): - + Subject Alternative Names: Εναλλακτικά Ονόματα Υποκειμένου: - + Organization (O): Οργανισμός (Ο): - + Organizational Unit (OU): Μονάδα Οργανισμού (ΜΟ): - + State/Province: Νομός/Περιφέρεια: - + Country: Χώρα: - + Serial: Σειριακός αριθμός: - + <h3>Issuer</h3> <h3>Εκδότης</h3> - + Issuer: Εκδότης: - + Issued on: Εκδόθηκε στις: - + Expires on: Λήγει στις: - + <h3>Fingerprints</h3> <h3>Αποτυπώματα</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> p><b>Σημείωση:</b> Αυτό το πιστοποιητικό εγκρίθηκε χειροκίνητα</p> - + %1 (self-signed) %1 (αυτό-πιστοποιημένο) - + %1 %1 - + This connection is encrypted using %1 bit %2. Η σύνδεση είναι κρυπτογραφημένη με %1 bit %2 - + No support for SSL session tickets/identifiers Χωρίς υποστήριξη για ταυτοποιητές συνεδρίας SSL - + Certificate information: Πληροφορίες πιστοποιητικού: - + This connection is NOT secure as it is not encrypted. Αυτή η σύνδεση δεν είναι ασφαλής καθώς δεν είναι κρυπτογραφημένη. @@ -3068,67 +3049,67 @@ It is not advisable to use it. Προσθήκη αυτού του πιστοποιητικού στα έμπιστα παρ'όλα αυτά - + Untrusted Certificate Μη έμπιστο πιστοποιητικό - + Cannot connect securely to <i>%1</i>: Αδυναμία ασφαλούς σύνδεσης σε <i>%1</i>: - + with Certificate %1 με Πιστοποιητικό: %1 + + - - &lt;not specified&gt; &lt;δεν κατονομάζονται&gt; - - + + Organization: %1 Οργανισμός: %1 - - + + Unit: %1 Μονάδα: %1 - - + + Country: %1 Χώρα: %1 - + Fingerprint (MD5): <tt>%1</tt> Αποτύπωμα (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Αποτύπωμα (SHA1): <tt>%1</tt> - + Effective Date: %1 Ημερομηνία Έναρξης: 1% - + Expiration Date: %1 Ημερομηνία Λήξης: %1 - + Issuer: %1 Εκδότης: %1 @@ -3242,27 +3223,27 @@ It is not advisable to use it. Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3367,69 +3348,69 @@ It is not advisable to use it. Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση @@ -3453,17 +3434,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Έκδοση %1. Για περισσότερες πληροφορίες δείτε <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Πνευματικά δικαιώματα ownCloud, GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Διανέμεται από 1% και υπό την άδεια GNU General Public License (GPL) έκδοση 2.0.<br/>% 2 και το 2% το λογότυπο είναι σήματα κατατεθέντα της 1% στις Ηνωμένες Πολιτείες, άλλες χώρες, ή και τα δύο.</ p> @@ -3876,48 +3857,40 @@ It is not advisable to use it. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future στο μέλλον - + %n day(s) ago %n μέρα(ες) πριν%n μέρα(ες) πριν - + %n hour(s) ago %n ώρα(ες) πριν%n ώρα(ες) πριν - + now τώρα - + Less than a minute ago Λιγότερο από ένα λεπτό πριν - + %n minute(s) ago %n λεπτό(ά) πριν%n λεπτό(ά) πριν - + Some time ago Λίγη ώρα πριν @@ -3931,57 +3904,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n χρόνος%n χρόνια - + %n month(s) %n μήνας(ες)%n μήνας(ες) - + %n day(s) %n ημέρα(ες)%n ημέρα(ες) - + %n hour(s) %n ώρα(ες)%n ώρα(ες) - + %n minute(s) %n λεπτό(ά)%n λεπτό(ά) - + %n second(s) %n δευτερόλεπτο(α)%n δευτερόλεπτο(α) - + %1 %2 %1 %2 @@ -4002,7 +3975,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Δημιουργήθηκε από την διασκευή Git <a href="%1">%2</a> στο %3, %4 χρησιμοποιώντας Qt %5, %6</small></p> diff --git a/translations/client_en.ts b/translations/client_en.ts index 5ca8defa1..c24fa61ca 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -4,7 +4,7 @@ FileSystem - + The destination file has an unexpected size or modification time @@ -86,17 +86,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -145,8 +145,8 @@ - - + + Cancel @@ -176,184 +176,184 @@ - + Choose what to sync - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running - + The syncing operation is running.<br/>Do you want to terminate it? - + %1 in use - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. - + Server %1 is temporarily unavailable. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal - + <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> - + Remove connection - - + + Open folder - + Log out - + Resume sync - + Pause sync - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. - + No %1 connection configured. @@ -422,44 +422,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard @@ -479,32 +479,32 @@ - + Server Activities - + Copy - + Copy the activity list to the clipboard. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. @@ -512,7 +512,7 @@ - + You received %n new notification(s) from %1 and %2. @@ -520,12 +520,12 @@ - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -571,17 +571,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -612,7 +612,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -781,24 +781,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -806,46 +806,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? - + Remove all files - + Keep files - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -971,12 +971,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File @@ -984,139 +984,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 - + Waiting... - + Waiting for %n other folder(s)... @@ -1124,7 +1124,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Preparing to sync... @@ -1132,12 +1132,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1163,52 +1163,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1452,7 +1452,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder @@ -1477,17 +1477,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Time - + File - + Issue @@ -1553,12 +1553,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> @@ -1566,27 +1566,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available - + <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> - + Skip this version - + Skip this time - + Get update @@ -1698,11 +1698,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1732,32 +1727,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1765,58 +1760,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. - + Update Check @@ -1893,7 +1888,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1961,144 +1956,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> - + Creating local sync folder %1... - + ok - + failed. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. - + The remote folder %1 already exists. Connecting it for syncing. - - + + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. - + Successfully connected to %1! - + Connection to %1 could not be established. Please check again. - + Folder rename failed - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> @@ -2145,7 +2140,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2201,12 +2196,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2214,22 +2209,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2237,17 +2232,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2255,13 +2250,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2329,27 +2324,28 @@ It is not advisable to use it. - + File Removed - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2357,32 +2353,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2390,32 +2381,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2433,42 +2419,42 @@ It is not advisable to use it. - + Time - + File - + Folder - + Action - + Size - + Local sync protocol - + Copy - + Copy the activity list to the clipboard. @@ -2509,7 +2495,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync @@ -2527,23 +2513,23 @@ It is not advisable to use it. - + Name - + Size - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2571,7 +2557,7 @@ It is not advisable to use it. - + Account @@ -2890,12 +2876,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error - + You must sign in as user %1 @@ -2926,28 +2912,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2955,118 +2941,113 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> - + Common Name (CN): - + Subject Alternative Names: - + Organization (O): - + Organizational Unit (OU): - + State/Province: - + Country: - + Serial: - + <h3>Issuer</h3> - + Issuer: - + Issued on: - + Expires on: - + <h3>Fingerprints</h3> - - MD 5: - - - - + SHA-256: - + SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> - + %1 (self-signed) - + %1 - + This connection is encrypted using %1 bit %2. - + No support for SSL session tickets/identifiers - + Certificate information: - + This connection is NOT secure as it is not encrypted. @@ -3085,67 +3066,67 @@ It is not advisable to use it. - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 + + - - &lt;not specified&gt; - - + + Organization: %1 - - + + Unit: %1 - - + + Country: %1 - + Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 - + Expiration Date: %1 - + Issuer: %1 @@ -3259,27 +3240,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3384,69 +3365,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3470,17 +3451,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3893,23 +3874,15 @@ It is not advisable to use it. - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago @@ -3917,7 +3890,7 @@ It is not advisable to use it. - + %n hour(s) ago @@ -3925,17 +3898,17 @@ It is not advisable to use it. - + now - + Less than a minute ago - + %n minute(s) ago @@ -3943,7 +3916,7 @@ It is not advisable to use it. - + Some time ago @@ -3957,27 +3930,27 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B - + %n year(s) @@ -3985,7 +3958,7 @@ It is not advisable to use it. - + %n month(s) @@ -3993,7 +3966,7 @@ It is not advisable to use it. - + %n day(s) @@ -4001,7 +3974,7 @@ It is not advisable to use it. - + %n hour(s) @@ -4009,7 +3982,7 @@ It is not advisable to use it. - + %n minute(s) @@ -4017,7 +3990,7 @@ It is not advisable to use it. - + %n second(s) @@ -4025,7 +3998,7 @@ It is not advisable to use it. - + %1 %2 @@ -4046,7 +4019,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff --git a/translations/client_es.ts b/translations/client_es.ts index 63608fec6..f044f30fb 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El archivo destino tiene un tamaño o fecha/hora de modificación no esperado. @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancelar @@ -174,184 +174,184 @@ Cuenta - + Choose what to sync Elija qué sincronizar - + Force sync now Forzar la sincronización ahora - + Restart sync Reiniciar sync - + Remove folder sync connection Eliminar la sincronización de carpetas conectadas - + Folder creation failed Hubo un fallo al crear la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No se pudo crear la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirme la sincronización para la eliminación de la carpeta conectada - + Remove Folder Sync Connection Eliminar carpeta de sincronización conectada - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Desea interrumpirla? - + %1 in use %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versión del servidor %1 es antigua, ¡y no está soportada! Si continúas, lo haces bajo tu propio riesgo. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Cerró sesión desde %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Sin conexión a %1 en %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: Hay carpetas que no fueron sincronizadas porque son demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hay carpetas que no fueron sincronizadas porque residen en almacenamiento externo: - + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no fueron sincronizadas porque son demasiado grandes o residen en almacenes externos: - + Confirm Account Removal Confirmar eliminación de cuenta - + <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> <p>¿De verdad quiere eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> eliminará los archivos.</p> - + Remove connection Eliminar conexión - - + + Open folder Abrir carpeta - + Log out Cerrar sesión - + Resume sync Continuar sincronización - + Pause sync Pausar sincronización - + <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> <p>¿De verdad quiere dejar de sincronizar la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> elminará los archivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algunas carpetas, como carpetas de red o compartidas, podrían tener límites diferentes. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible sobre el uso de almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Actividad del servidor - + Sync Protocol Protocolo de Sincronización - + Not Synced No sincronizado - + Not Synced (%1) %1 is the number of not synced files. No Sincronizado (%1) - + The server activity list has been copied to the clipboard. La lista de la actividad del servidor se ha copiado en el portapapeles. - + The sync activity list has been copied to the clipboard. La lista de actividades de sincronización se ha copiado en el portapapeles. - + The list of unsynced items has been copied to the clipboard. La lista de elementos sin sincronizar, ha sido copiada al portapapeles. - + Copied to clipboard Copiado al portapapeles @@ -477,47 +477,47 @@ Etiqueta de texto - + Server Activities Actividades del servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copie la lista de actividades al portapapeles - + Action Required: Notifications Acción a realizar: Notificaciones - + <br/>Account %1 does not have activities enabled. <br/>La cuenta %1 no tiene actividades habilitadas. - + You received %n new notification(s) from %2. Ha recibido %n nueva notificación de %2.Ha recibido %n nueva notificacióne(s) de %2. - + You received %n new notification(s) from %1 and %2. Ha recibido %n nueva notificación de %1 y de %2.Ha recibido %n nuevas notificacióne(s) de %1 y de %2. - + You received new notifications from %1, %2 and other accounts. Ha recibido nuevas notificaciónes de %1, %2 y otras cuentas. - + %1 Notifications - Action Required %1 Notificaciones - Acción requerida @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Error al acceder al archivo de configuración - + There was an error while accessing the configuration file at %1. Ha ocurrido un error al acceder al archivo de configuración %1. - + Quit ownCloud Salir de OwnCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -752,26 +752,26 @@ No se ha podido leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. - + A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - + Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Si decide mantener estos archivos, serán re-sincronizados con el servidor si Vd Si decide borrarlos, no serán visibles para Vd. a menos que sea usted el propietario. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Si ha sido un accidente, y decide mantener los archivos, serán re-sincronizados con el servidor. - + Remove All Files? ¿Eliminar todos los archivos? - + Remove all files Eliminar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Esto puede deberse a que una copia de seguridad fue restaurada en el servidor. Si continua con la sincronización todos los archivos serán remplazados por su versión previa. ¿Desea mantener los archivos locales en su versión actual como archivos en conflicto? - + Backup detected Backup detectado - + Normal Synchronisation Sincronización Normal - + Keep Local Files as Conflict Mantener los archivos locales en caso de conflicto @@ -951,12 +951,12 @@ Si continua con la sincronización todos los archivos serán remplazados por su Añadir Conexión para el Directorio de Sincronización - + Synchronizing with local folder Sincronizando con carpeta local - + File Archivo @@ -964,144 +964,144 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderStatusModel - + You need to be connected to add a folder Necesita estar conectado para añadir una carpeta - + Click this button to add a folder to synchronize. Haga clic en este botón para añadir una carpeta a sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error mientras se cargaba la lista de carpetas desde el servidor. - + Signed out Cerrar sesión - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Añadir carpetas está deshabilitado debido a que ya están sincronizándose todos sus archivos. Si desea sincronizar múltiples carpeta, elimine la carpeta raíz actualmente configurada. - + Fetching folder list from server... Obtención de lista de carpetas del servidor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Buscando cambios en '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargando: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) cargar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 de %2, archivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n carpeta...Esperando por %n otras carpetas... - + Preparing to sync... Preparando para sincronizar... @@ -1109,12 +1109,12 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderWizard - + Add Folder Sync Connection Añadir Conexión para el Directorio de Sincronización - + Add Sync Connection Añadir Sincronización de Conexión @@ -1140,52 +1140,52 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderWizardRemotePath - + Create Remote Folder Crear carpeta remota - + Enter the name of the new folder to be created below '%1': Introduzca más abajo el nombre de la nueva carpeta que crear '%1': - + Folder was successfully created on %1. La carpeta fue creada con éxito en %1. - + Authentication failed accessing %1 Falló la autenticación al acceder a %1 - + Failed to create the folder on %1. Please check manually. Fallo al crear la carpeta %1. Por favor, revíselo manualmente. - + Failed to list a folder. Error: %1 Falló al listar una carpeta. Error: %1 - + Choose this to sync the entire account Elija esto para sincronizar la cuenta entera - + This folder is already being synced. Este directorio ya se ha sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya ha sincronizado <i>%1</i>, el cual es la carpeta de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Todavía se están sincronizando ficheros. <b>No</b> se admite la sincronización de otras carpetas. Si quiere sincronizar múltiples carpetas, por favor revise la carpeta raíz configurada. @@ -1431,7 +1431,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que - + Folder Carpeta @@ -1456,17 +1456,17 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Copiar - + Time Hora - + File Archivo - + Issue @@ -1532,12 +1532,12 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El archivo '%1'<br/>no se puede abrir para escritura.<br/><br/>¡El archivo de registro <b>no</b> se puede guardar!</nobr> @@ -1545,27 +1545,27 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::NSISUpdater - + New Version Available Nueva versión disponible - + <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> <p>Una nueva versión del programa cliente de %1 está disponible.</p><p><b>%2</b> está disponible para descargar. La versión instalada es la %3.</p> - + Skip this version Saltarse esta versión - + Skip this time Omitir esta vez - + Get update Actualizar @@ -1677,11 +1677,6 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que SOCKS5 proxy Proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 necesario para utilizar el límite de ancho de banda - OCC::NotificationWidget @@ -1711,32 +1706,32 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1744,58 +1739,58 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::OCUpdater - + New %1 Update Ready Nueva %1 actualización está lista - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Se instalará una nueva actualización de %1. Durante esta actualización puede que se soliciten privilegios adicionales. - + Downloading version %1. Please wait... Descargando la versión %1. Espere... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. No se puede descargar la actualización. Por favor, haga clic <a href='%1'>aquí</a> para iniciar una descarga manual. - + Could not check for new updates. No se puede comprobar si hay actualizaciones. - + %1 version %2 available. Restart application to start the update. %1 versión %2 disponible. Reiniciar aplicación para comenzar la actualización. - + New %1 version %2 available. Please use the system's update tool to install it. Nueva %1 versión %2 está disponible. Use la herramienta de actualización de su sistema para instalarla. - + Checking update server... Consultando al servidor de actualizaciones... - + Update status is unknown: Did not check for new updates. Estado de actualización desconocido: no se buscaron nuevas actualizaciones. - + No updates available. Your installation is at the latest version. No hay actualizaciones disponibles. Tiene la última versión. - + Update Check Comprobar si hay actualizaciones @@ -1872,7 +1867,7 @@ for additional privileges during the process. Configurar certificado TLS del Cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Fallo al conectar con la dirección del servidor seguro <em>%1</em>. ¿Cómo desea proceder</p></body></html> @@ -1941,144 +1936,144 @@ No se recomienda usarla. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado con éxito a %1: versión %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Fallo al conectar %1 a %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo de espera agotado mientras se intentaba conectar a %1 en %2 - + Trying to connect to %1 at %2... Intentando conectar a %1 desde %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La petición autenticada al servidor ha sido redirigida a '%1'. La dirección URL es errónea, el servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Ha habido una respuesta no válida a una solicitud autenticada de webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso denegado por el servidor. Para verificar que usted tiene acceso, <a href="%1">haga clic aquí</a> para acceder al servicio con su navegador. - + Invalid URL URL inválida. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La carpeta de sincronización local %1 ya existe, configurándola para la sincronización.<br/><br/> - + Creating local sync folder %1... Creando carpeta de sincronización local %1 - + ok bien - + failed. ha fallado. - + Could not create local folder %1 No se ha podido crear la carpeta local %1 - + No remote folder specified! ¡No se ha especificado ninguna carpeta remota! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. Carpeta remota %1 creado correctamente. - + The remote folder %1 already exists. Connecting it for syncing. La carpeta remota %1 ya existe. Conectándola para sincronizacion. - - + + The folder creation resulted in HTTP error code %1 La creación de la carpeta ha producido el código de error HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ¡La creación de la carpeta remota ha fallado debido a que las credenciales proporcionadas son incorrectas!<br/>Por favor, vuelva atrás y compruebe sus credenciales</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creación de la carpeta remota ha fallado, probablemente porque las credenciales proporcionadas son incorrectas.</font><br/>Por favor, vuelva atrás y compruebe sus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creación %1 de carpeta remota ha fallado con el error <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Se ha configarado una conexión de sincronización desde %1 al directorio remoto %2 - + Successfully connected to %1! ¡Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No se ha podido establecer la conexión con %1. Por favor, compruébelo de nuevo. - + Folder rename failed Error al renombrar la carpeta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. No se puede eliminar y respaldar la carpeta porque la misma o un fichero en ella está abierto por otro programa. Por favor, cierre la carpeta o el fichero y reintente, o cancele la instalación. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Carpeta de sincronización local %1 creada con éxito</b></font> @@ -2125,7 +2120,7 @@ No se recomienda usarla. OCC::PropagateDirectory - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2181,12 +2176,12 @@ No se recomienda usarla. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falló la restauración: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio fue eliminado de una carpeta de compartida de solo lectura pero la recuperación falló: %1 @@ -2194,22 +2189,22 @@ No se recomienda usarla. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 no pudo borrar el archivo %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atención, posible error de mayúsculas/minúsculas en %1 - + could not create folder %1 No se ha podido crear el directorio %1 - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2217,17 +2212,17 @@ No se recomienda usarla. OCC::PropagateLocalRemove - + Error removing '%1': %2; Error al borrar '%1': %2; - + Could not remove folder '%1' No se pudo eliminar la carpeta '%1' - + Could not remove %1 because of a local file name clash No se ha podido eliminar %1 por causa de un conflicto con el nombre de un archivo local @@ -2235,13 +2230,13 @@ No se recomienda usarla. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash El archivo %1 no se puede renombrar a %2 por causa de un conflicto con el nombre de un archivo local - - + + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2309,27 +2304,28 @@ No se recomienda usarla. El archivo %1 No puede ser subido porque ya existe otro con el mismo nombre, puede haber diferencias en mayusculas o minusculas - + File Removed Archivo eliminado - + Local file changed during syncing. It will be resumed. Archivo local cambió durante la sincronización. Será actualizado. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2337,32 +2333,27 @@ No se recomienda usarla. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2. - - - + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + Unexpected return code from server (%1) Respuesta inesperada del servidor (%1) - + Missing File ID from server Perdido archivo ID del servidor - + Missing ETag from server Perdido ETag del servidor @@ -2370,32 +2361,27 @@ No se recomienda usarla. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzar el trabajo en una conexión HTTP, causará un Reset si Qt< 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. El archivo fue modificado localmente; pero es parte de una carpeta compartida en modo de sólo lectura. Ha sido recuperado y su modificación está en el archivo de conflicto. - + Poll URL missing Falta la URL de la encuesta - + The local file was removed during sync. El archivo local ha sido eliminado durante la sincronización. - + Local file changed during sync. Un archivo local fue modificado durante la sincronización. - + The server did not acknowledge the last chunk. (No e-tag was present) El servidor no reconoció la última parte. (No había una e-tag presente) @@ -2413,42 +2399,42 @@ No se recomienda usarla. Etiqueta de texto - + Time Hora - + File Archivo - + Folder Carpeta - + Action Acción - + Size Tamaño - + Local sync protocol Protocolo de sincronización local - + Copy Copiar - + Copy the activity list to the clipboard. Copie la lista de actividades al portapapeles @@ -2489,7 +2475,7 @@ No se recomienda usarla. OCC::SelectiveSyncDialog - + Choose What to Sync Escoja qué sincronizar @@ -2507,23 +2493,23 @@ No se recomienda usarla. Deseleccione las carpetas remotas que no desea sincronizar. - + Name Nombre - + Size Tamaño - - + + No subfolders currently on the server. No hay subcarpetas actualmente en el servidor. - + An error occurred while loading the list of sub folders. Ha ocurrido un error mientras cargaba la lista de carpetas. @@ -2551,7 +2537,7 @@ No se recomienda usarla. Red - + Account Cuenta @@ -2870,12 +2856,12 @@ No se recomienda usarla. OCC::ShibbolethCredentials - + Login Error Error al iniciar sesión - + You must sign in as user %1 Debe iniciar sesión como el usuario %1 @@ -2906,28 +2892,28 @@ No se recomienda usarla. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartir con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2935,119 +2921,114 @@ No se recomienda usarla. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalles del certificado</h3> - + Common Name (CN): Nombre común (NC): - + Subject Alternative Names: Nombres alternativos del sujeto: - + Organization (O): Organización (O): - + Organizational Unit (OU): Unidad organizacional (UO): - + State/Province: Estado/provincia: - + Country: País: - + Serial: Nº de serie: - + <h3>Issuer</h3> <h3>Emisor</h3> - + Issuer: Emisor: - + Issued on: Emitido en: - + Expires on: Expira en: - + <h3>Fingerprints</h3> <h3>Firma</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Notificación:</b> Este certificado fue aprobado manualmente</p> - + %1 (self-signed) %1 (autofirmado) - + %1 %1 - + This connection is encrypted using %1 bit %2. Esta conexión está cifrada con %1 bit %2. - + No support for SSL session tickets/identifiers No admite tickets de sesión/dentificadores SSL - + Certificate information: Información del certificado: - + This connection is NOT secure as it is not encrypted. Esta conexión NO ES SEGURA, pues no está cifrada. @@ -3067,67 +3048,67 @@ No se recomienda usarla. Confiar en este certificado de todas maneras - + Untrusted Certificate Certificado sin verificar - + Cannot connect securely to <i>%1</i>: No puedo conectar de forma segura a <i>%1</i>: - + with Certificate %1 con certificado %1 + + - - &lt;not specified&gt; &lt;no especificado&gt; - - + + Organization: %1 Organización: %1 - - + + Unit: %1 Unidad: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Huella (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Huella dactilar (SHA1): <tt>%1</tt> - + Effective Date: %1 Fecha de vigencia: %1 - + Expiration Date: %1 Fecha de caducidad: %1 - + Issuer: %1 Emisor: %1 @@ -3241,27 +3222,27 @@ No se recomienda usarla. Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3366,69 +3347,69 @@ No se recomienda usarla. Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen @@ -3452,17 +3433,17 @@ No se recomienda usarla. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>La versión %1. Para obtener más información, visite<a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuido por %1 y bajo la licencia GNU General Public License (GPL) versión 2.0.<br/>%2 y el logotipo de %2 son marcas registradas de %1 en los Estados Unidos y otros países, o ambos.</p> @@ -3875,48 +3856,40 @@ No se recomienda usarla. BotonEmpuje - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future en el futuro - + %n day(s) ago Hace %n día(s)Hace %n día(s) - + %n hour(s) ago Hace %n hora(s)Hace %n hora(s) - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute(s) ago Hace %n minutos(s)Hace %n minutos(s) - + Some time ago Hace unos momentos @@ -3930,57 +3903,57 @@ No se recomienda usarla. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año%n año(s) - + %n month(s) %n Mes%n Mese(s) - + %n day(s) %n dia%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 @@ -4001,7 +3974,7 @@ No se recomienda usarla. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Revisión Git <a href="%1">%2</a> en %3, %4 compilada usando Qt %5, %6</small></p> diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 46abebb41..cbfacde06 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time El archivo de destino tiene un tamaño o fecha de modificación inesperado @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancelar @@ -174,184 +174,184 @@ Cuenta - + Choose what to sync - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Falló la creacion de la carpeta - + <p>Could not create local folder <i>%1</i>. <p>No pudó ser creada la carpeta local <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Sincronización en curso - + The syncing operation is running.<br/>Do you want to terminate it? La sincronización está en curso.<br/>¿Querés interrumpirla? - + %1 in use - + %1 as <i>%2</i> %1 de <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Conectado a %1 - + Server %1 is temporarily unavailable. El servidor %1 esta temporalmente sin conexión - + Server %1 is currently in maintenance mode. - + Signed out from %1. Registrado desde %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Sin conexión a %1 desde %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Confirmar la eliminación de la cuenta - + <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> - + Remove connection Eliminar conexión - - + + Open folder Abrir carpeta - + Log out Cerrar la sesión - + Resume sync Reanudar sincronización - + Pause sync Pausar sincronización - + <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> <p>Realmente quieres detener la sincronización de la carpeta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> eliminara ningun archivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente no hay información disponible acerca del uso del almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol Protocolo de Sincronización - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Copiado al portapapeles @@ -477,47 +477,47 @@ EtiquetaDeTexto - + Server Activities - + Copy Copiar - + Copy the activity list to the clipboard. Copiar la lista de actividades al portapapeles. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? ¿Borrar todos los archivos? - + Remove all files Borrar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File Archivo @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out Desautentificado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Cargado %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 Archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... - + Preparing to sync... Preparando para sincronizar... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Crear carpeta remota - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. El directorio fue creado con éxito en %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. Fallo al crear el directorio en %1. Por favor chequee manualmente. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Seleccioná acá para sincronizar la cuenta completa - + This folder is already being synced. Este folder ya está siendo sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, el cual es el directorio de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Carpeta @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copiar - + Time Hora - + File Archivo - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Error - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>El archivo '%1'<br/>no puede ser abierto para escritura.<br/><br/>¡El archivo de log <b>no</b> puede ser guardado!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Nueva versión disponible - + <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> - + Skip this version - + Skip this time Saltear esta vez - + Get update Obtener actualización @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy Proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,58 +1728,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. - + Update Check @@ -1861,7 +1856,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1929,144 +1924,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado a %1: versión de %2 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falló al conectarse a %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tiempo excedido mientras se intentaba conectar a %1 desde %2. - + Trying to connect to %1 at %2... Intentando conectar a %1 en %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> El directorio de sincronización local %1 ya existe, configurándolo para la sincronización.<br/><br/> - + Creating local sync folder %1... - + ok aceptar - + failed. Error. - + Could not create local folder %1 No fue posible crear el directorio local %1 - + No remote folder specified! ¡No se ha especificado un directorio remoto! - + Error: %1 Error: %1 - + creating folder on ownCloud: %1 Creando carpeta en ownCloud: %1 - + Remote folder %1 created successfully. El directorio remoto %1 fue creado con éxito. - + The remote folder %1 already exists. Connecting it for syncing. El directorio remoto %1 ya existe. Estableciendo conexión para sincronizar. - - + + The folder creation resulted in HTTP error code %1 La creación del directorio resultó en un error HTTP con código de error %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Error al crear el directorio remoto, probablemente porque las credenciales provistas son incorrectas.</font><br/>Por favor, volvé atrás y verificá tus credenciales.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Se prtodujo un error <tt>%2</tt> al crear el directorio remoto %1. - + A sync connection from %1 to remote directory %2 was set up. Fue creada una conexión de sincronización desde %1 al directorio remoto %2. - + Successfully connected to %1! Conectado con éxito a %1! - + Connection to %1 could not be established. Please check again. No fue posible establecer la conexión a %1. Por favor, intentalo nuevamente. - + Folder rename failed Error Al Renombrar Directorio - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Directorio local %1 creado</b></font> @@ -2113,7 +2108,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2169,12 +2164,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2182,22 +2177,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2205,17 +2200,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2223,13 +2218,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2297,27 +2292,28 @@ It is not advisable to use it. - + File Removed - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2325,32 +2321,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2358,32 +2349,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2401,42 +2387,42 @@ It is not advisable to use it. EtiquetaDeTexto - + Time Hora - + File Archivo - + Folder Carpeta - + Action Acción - + Size Tamaño - + Local sync protocol - + Copy Copiar - + Copy the activity list to the clipboard. Copiar la lista de actividades al portapapeles. @@ -2477,7 +2463,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Elige @@ -2495,23 +2481,23 @@ It is not advisable to use it. - + Name Nombre - + Size Tamaño - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2539,7 +2525,7 @@ It is not advisable to use it. Red - + Account Cuenta @@ -2858,12 +2844,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error - + You must sign in as user %1 @@ -2894,28 +2880,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2923,118 +2909,113 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> - + Common Name (CN): - + Subject Alternative Names: - + Organization (O): - + Organizational Unit (OU): - + State/Province: - + Country: Pais: - + Serial: - + <h3>Issuer</h3> - + Issuer: - + Issued on: - + Expires on: - + <h3>Fingerprints</h3> - - MD 5: - - - - + SHA-256: - + SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> - + %1 (self-signed) - + %1 %1 - + This connection is encrypted using %1 bit %2. - + No support for SSL session tickets/identifiers - + Certificate information: - + This connection is NOT secure as it is not encrypted. @@ -3053,67 +3034,67 @@ It is not advisable to use it. Confiar en este certificado de todas maneras - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 con certificado %1 + + - - &lt;not specified&gt; &lt;no especificado&gt; - - + + Organization: %1 Empresa: %1 - - + + Unit: %1 Unidad: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Huella (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Huella (SHA1): <tt>%1</tt> - + Effective Date: %1 Desde: %1 - + Expiration Date: %1 - + Issuer: %1 Generado por: %1 @@ -3227,27 +3208,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3352,69 +3333,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3438,17 +3419,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3862,48 +3843,40 @@ It is not advisable to use it. Botón - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3917,57 +3890,57 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3988,7 +3961,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff --git a/translations/client_et.ts b/translations/client_et.ts index 3b4fa9d55..a89de78aa 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Sihtkausta fail on ootamatu suuruse või muutmise ajaga @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Ühendus aegus - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Loobu @@ -174,184 +174,184 @@ Konto - + Choose what to sync Vali, mida sünkroniseerida - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Kausta loomine ebaõnnestus - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Sünkroniseerimine on käimas - + The syncing operation is running.<br/>Do you want to terminate it? Sünkroniseerimine on käimas.<br/>Kas sa soovid seda lõpetada? - + %1 in use %1 kasutusel - + %1 as <i>%2</i> %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Ühendatud %1 - + Server %1 is temporarily unavailable. Server %1 pole ajutiselt saadaval. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Logi sisse - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Kinnita konto eemaldamine - + <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> - + Remove connection Eemalda ühendus - - + + Open folder Ava kaust - + Log out Logi välja - + Resume sync Taasta sünroonimist - + Pause sync Peata sünkroonimine - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. Hetkel pole mahu kasutuse info saadaval. - + No %1 connection configured. Ühtegi %1 ühendust pole seadistatud. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveri aktiivsus - + Sync Protocol Sünkroniseerimisprotokoll - + Not Synced Pole sünkroonitud - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopeeritud lõikepuhvrisse @@ -477,47 +477,47 @@ Tekstisilt - + Server Activities Serveri tegevused - + Copy Kopeeri - + Copy the activity list to the clipboard. Kopeeri tegevuste nimistu puhvrisse. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ Süsteemi väljajätmiste faili lugemine ebaõnnestus - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Kustutada kõik failid? - + Remove all files Kustutada kõik failid - + Keep files Säilita failid - + This sync would reset the files to an earlier 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? - + Backup detected Leiti varukoopia - + Normal Synchronisation Tavaline sünkroonimine - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File Fail @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Kausta lisamiseks pead sa olema ühendatud - + Click this button to add a folder to synchronize. Sünkroniseeritava kausta lisamiseks kliki sellele nupule. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Välja logitud - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sünkroniseerimine %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) allalaadimine %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) üleslaadimine %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 / %2, fail %3 / %4 - + file %1 of %2 fail %1 / %2-st - + Waiting... Ootamine... - + Waiting for %n other folder(s)... - + Preparing to sync... Sünkroniseerimiseks valmistumine... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Loo kaugkaust - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. %1 - kaust on loodud. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. Kausta loomine ebaõnnestus - %1. Palun kontrolli käsitsi. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Vali see sünkroniseering tervele kontole - + This folder is already being synced. Seda kataloogi juba sünkroniseeritakse. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sa juba sünkroniseerid <i>%1</i>, mis on <i>%2</i> ülemkataloog. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Sa juba sünkroniseerid kõiki oma faile. Teise kataloogi sünkroniseering <b>ei ole</b> toetatud. Kui soovid sünkroniseerida mitut kataloogi, palun eemalda hektel seadistatud sünkroniseeritav juurkataloog. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Kaust @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Kopeeri - + Time Aeg - + File Fail - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Viga - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Faili '%1'<br/>ei saa kirjutamiseks avada.<br/><br/>Logi väljundit <b>ei saa</b> salvestada!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Saadaval on uuem versioon - + <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> <p>Uus versioon %1 kliendist on saadaval.</p><p><b>%2</b> on saadaval alla laadimiseks. Paigaldatud on versioon %3.<p> - + Skip this version Jäta see versioon vahele - + Skip this time Jäta seekord vahele - + Get update Hangi uuendus @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 proksi - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,58 +1728,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Uus %1 uuendus on valmis - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... Laadin alla versiooni %1. Palun oota... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Ei suutnud uuendust alla laadida. Palun klõpsa käsitsi uuenduse alla laadimiseks <a href='%1'>siia</a> %2 - + Could not check for new updates. Uuenduste kontrollimine ebaõnnestus. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Kontrollin uuendusserverit... - + Update status is unknown: Did not check for new updates. Uuenduse staatus on teadmata: Uuendusi ei kontrollitud. - + No updates available. Your installation is at the latest version. Uuendusi pole saadaval. Kasutad kõige viimast versiooni. - + Update Check Uuenduste kontrollimine @@ -1861,7 +1856,7 @@ for additional privileges during the process. Seadista kliendipoolne TLS sertifikaat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1930,144 +1925,144 @@ Selle kasutamine pole soovitatav. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Edukalt ühendatud %1: %2 versioon %3 (4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Ühendumine ebaõnnestus %1 %2-st:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Püüan ühenduda %1 kohast %2 - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Kohalik kataloog %1 on juba olemas. Valmistan selle ette sünkroniseerimiseks. - + Creating local sync folder %1... Kohaliku kausta %1 sünkroonimise loomine ... - + ok ok - + failed. ebaõnnestus. - + Could not create local folder %1 Ei suuda tekitada kohalikku kataloogi %1 - + No remote folder specified! Ühtegi võrgukataloogi pole määratletud! - + Error: %1 Viga: %1 - + creating folder on ownCloud: %1 loon uue kataloogi ownCloudi: %1 - + Remote folder %1 created successfully. Eemalolev kaust %1 on loodud. - + The remote folder %1 already exists. Connecting it for syncing. Serveris on kataloog %1 juba olemas. Ühendan selle sünkroniseerimiseks. - - + + The folder creation resulted in HTTP error code %1 Kausta tekitamine lõppes HTTP veakoodiga %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Kataloogi loomine serverisse ebaõnnestus, kuna kasutajatõendid on valed!<br/>Palun kontrolli oma kasutajatunnust ja parooli.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Serveris oleva kataloogi tekitamine ebaõnnestus tõenäoliselt valede kasutajatunnuste tõttu.</font><br/>Palun mine tagasi ning kontrolli kasutajatunnust ning parooli.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Kataloogi %1 tekitamine serverisse ebaõnnestus veaga <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. Loodi sünkroniseerimisühendus kataloogist %1 serveri kataloogi %2 - + Successfully connected to %1! Edukalt ühendatud %1! - + Connection to %1 could not be established. Please check again. Ühenduse loomine %1 ebaõnnestus. Palun kontrolli uuesti. - + Folder rename failed Kataloogi ümbernimetamine ebaõnnestus - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ei suuda eemaldada ning varundada kataloogi kuna kataloog või selles asuv fail on avatud mõne teise programmi poolt. Palun sulge kataloog või fail ning proovi uuesti või katkesta paigaldus. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Kohalik kataloog %1 edukalt loodud!</b></font> @@ -2114,7 +2109,7 @@ Selle kasutamine pole soovitatav. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2170,12 +2165,12 @@ Selle kasutamine pole soovitatav. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Taastamine ebaõnnestus: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2183,22 +2178,22 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ei saa kustutada faili %1, viga: %2 - + Attention, possible case sensitivity clash with %1 Tähelepanu, võimalik tõusutundliku nime konflikt %1-ga - + could not create folder %1 kausta %1 loomine ebaõnnestus - + Error writing metadata to the database @@ -2206,17 +2201,17 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalRemove - + Error removing '%1': %2; Viga eemaldamisel '%1': %2; - + Could not remove folder '%1' Kausta '%1' eemaldamine ebaõnnestus - + Could not remove %1 because of a local file name clash Ei saa eemaldada %1 kuna on konflikt kohaliku faili nimega @@ -2224,13 +2219,13 @@ Selle kasutamine pole soovitatav. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Faili %1 ei saa ümber nimetada %2-ks, kuna on konflikt kohaliku faili nimega - - + + Error writing metadata to the database @@ -2298,27 +2293,28 @@ Selle kasutamine pole soovitatav. - + File Removed Fail eemaldatud - + Local file changed during syncing. It will be resumed. Kohalik fail muutus sünkroniseeringu käigus. See taastakse. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2326,32 +2322,27 @@ Selle kasutamine pole soovitatav. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. Kohalik fail on eemaldatud sünkroniseeringu käigus. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2359,32 +2350,27 @@ Selle kasutamine pole soovitatav. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Faili on lokaalselt muudetud, kuid see on osa kirjutamisõiguseta jagamisest. See on taastatud ning sinu muudatus on konfliktses failis. - + Poll URL missing Küsitluse URL puudub - + The local file was removed during sync. Kohalik fail on eemaldatud sünkroniseeringu käigus. - + Local file changed during sync. Kohalik fail muutus sünkroniseeringu käigus. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2402,42 +2388,42 @@ Selle kasutamine pole soovitatav. Tekstisilt - + Time Aeg - + File Fail - + Folder Kaust - + Action Tegevus - + Size Suurus - + Local sync protocol - + Copy Kopeeri - + Copy the activity list to the clipboard. Kopeeri tegevuste nimistu puhvrisse. @@ -2478,7 +2464,7 @@ Selle kasutamine pole soovitatav. OCC::SelectiveSyncDialog - + Choose What to Sync Vali, mida sünkroniseerida @@ -2496,23 +2482,23 @@ Selle kasutamine pole soovitatav. - + Name Nimi - + Size Suurus - - + + No subfolders currently on the server. Serveris pole praegu alamkaustasid. - + An error occurred while loading the list of sub folders. @@ -2540,7 +2526,7 @@ Selle kasutamine pole soovitatav. Võrk - + Account Konto @@ -2859,12 +2845,12 @@ Selle kasutamine pole soovitatav. OCC::ShibbolethCredentials - + Login Error Sisselogimise viga - + You must sign in as user %1 Pead sisse logima kui kasutaja %1 @@ -2895,28 +2881,28 @@ Selle kasutamine pole soovitatav. OCC::SocketApi - + Share with %1 parameter is ownCloud Jagatud kasutajaga %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2924,119 +2910,114 @@ Selle kasutamine pole soovitatav. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifikaadi detailid</h3> - + Common Name (CN): Üldine nimi (CN): - + Subject Alternative Names: Subjekti Alternatiivsed Nimed: - + Organization (O): Organisatsioon (O): - + Organizational Unit (OU): Organisatsiooni üksus (OU): - + State/Province: Riik/Maakond: - + Country: Riik: - + Serial: Järjenumber: - + <h3>Issuer</h3> <h3>Väljastaja</h3> - + Issuer: Väljastaja: - + Issued on: Väljastatud: - + Expires on: Aegub: - + <h3>Fingerprints</h3> <h3>Sõrmejäljendid</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Märkus</b>See sertifikaat on käsitsi heakskiidetud</p> - + %1 (self-signed) %1 (oma-signeering) - + %1 %1 - + This connection is encrypted using %1 bit %2. Ühendus on krüpteeritud kasutades %1 bitt %2 - + No support for SSL session tickets/identifiers - + Certificate information: Seritifikaadi informatsioon: - + This connection is NOT secure as it is not encrypted. See url EI OLE turvaline, kuna see pole krüpteeritud. @@ -3056,67 +3037,67 @@ Selle kasutamine pole soovitatav. Usalda siiski seda sertifikaati - + Untrusted Certificate Tundmatu sertifikaat - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 sertifikaadiga %1 + + - - &lt;not specified&gt; &lt;pole määratud&gt; - - + + Organization: %1 Organisatsioon: %1 - - + + Unit: %1 Ühik: %1 - - + + Country: %1 Riik: %1 - + Fingerprint (MD5): <tt>%1</tt> Sõrmejälg (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Sõrmejälg (SHA1): <tt>%1</tt> - + Effective Date: %1 Efektiivne kuupäev: %1 - + Expiration Date: %1 Aegumise kuupäev: %1 - + Issuer: %1 Esitaja: %1 @@ -3230,27 +3211,27 @@ Selle kasutamine pole soovitatav. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3355,69 +3336,69 @@ Selle kasutamine pole soovitatav. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas @@ -3441,17 +3422,17 @@ Selle kasutamine pole soovitatav. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3864,48 +3845,40 @@ Selle kasutamine pole soovitatav. Nupp - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future tulevikus - + %n day(s) ago - + %n hour(s) ago - + now kohe - + Less than a minute ago Vähem kui minut tagasi - + %n minute(s) ago - + Some time ago Mõni aeg tagasi @@ -3919,57 +3892,57 @@ Selle kasutamine pole soovitatav. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3990,7 +3963,7 @@ Selle kasutamine pole soovitatav. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff --git a/translations/client_eu.ts b/translations/client_eu.ts index db73dff6b..1d1da8a86 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Helburuko fitxategiak espero ez den tamaina edo aldaketa data du @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Konexioa denboraz kanpo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Ezeztatu @@ -174,184 +174,184 @@ Kontua - + Choose what to sync Hautatu zer sinkronizatu - + Force sync now Behartu orain sinkronizatzen - + Restart sync Berrabiarazi sinkronizazioa - + Remove folder sync connection Ezabatu karpeta honen konexioa - + Folder creation failed Karpeta sortzeak huts egin du - + <p>Could not create local folder <i>%1</i>. <p>Ezin izan da <i>%1</i> bertako karpeta sortu. - + Confirm Folder Sync Connection Removal Baieztatu Karpetaren Konexioaren Ezabatzea - + Remove Folder Sync Connection Ezabatu Karpeta Honen Konexioa - + Sync Running Sinkronizazioa martxan da - + The syncing operation is running.<br/>Do you want to terminate it? Sinkronizazio martxan da.<br/>Bukatu nahi al duzu? - + %1 in use %1 erabiltzen - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Zerbitzariaren bertsioa %1 zaharra eta euskarririk gabekoa da! Zure ardurapean aritu. - + Connected to %1. %1ra konektatuta. - + Server %1 is temporarily unavailable. %1 zerbitzaria ez dago orain eskuragarri - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1etik saioa itxita. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Konexiorik ez %1-ekin %2-etan - + Log in Hasi saioa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Baieztatu Kontuaren Ezabatzea - + <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> - + Remove connection Ezabatu konexioa - - + + Open folder Ireki karpeta - + Log out Saioa bukatu - + Resume sync Berrekin sinkronizazioa - + Pause sync Gelditu sinkronizazioa - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use %2tik %1 erabilita - + Currently there is no storage usage information available. Orain ez dago eskuragarri biltegiratze erabileraren informazioa. - + No %1 connection configured. Ez dago %1 konexiorik konfiguratuta. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Zerbitzariaren Jarduera - + Sync Protocol Sinkronizazio protokoloa - + Not Synced Sinkronizatu gabekoak - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Arbelera kopiatua @@ -477,47 +477,47 @@ TestuEtiketa - + Server Activities Zerbitzariaren Jarduerak - + Copy Kopiatu - + Copy the activity list to the clipboard. Kopiatu jarduera zerrenda arbelara. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>%1 kontuak ez ditu jarduerak gaituta. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Errorea ezarpen fitxategia atzitzean - + There was an error while accessing the configuration file at %1. Errore bat gertatu da ezarpen fitxategia atzitzean %1-etan - + Quit ownCloud Irten ownCloud-etik @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -752,24 +752,24 @@ Ezin izan da sistemako baztertutakoen fitxategia irakurri - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ezabatu Fitxategi Guztiak? - + Remove all files Ezabatu fitxategi guztiak - + Keep files Mantendu fitxategiak - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Gehitu Karpeta Sinkronizatzeko Konexioa - + Synchronizing with local folder - + File Fitxategia @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. Errorea zerbitzaritik karpeten zerrenda eskuratzean. - + Signed out Saioa bukatuta - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Zerbitzaritik karpeta zerrenda eskuratzen... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 Sinkronizatzen - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Deskargatu %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) igo %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 - %3tik) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1. fitxategia %2tik - + Waiting... Itxoiten... - + Waiting for %n other folder(s)... Itxoiten beste karpeta %n...Itxoiten beste %n karpeta... - + Preparing to sync... Sinkronizatzeko prestatzen... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Gehitu Karpeta Sinkronizatzeko Konexioa - + Add Sync Connection Gehitu Sinkronizazio Konexioa @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Sortu Urruneko Karpeta - + Enter the name of the new folder to be created below '%1': Sartu behean sortuko den karpeta berriaren izena '%1': - + Folder was successfully created on %1. %1-en karpeta ongi sortu da. - + Authentication failed accessing %1 Autentikazioak huts egin du %1en sartzean - + Failed to create the folder on %1. Please check manually. Huts egin du %1-(e)an karpeta sortzen. Egiaztatu eskuz. - + Failed to list a folder. Error: %1 Karpetaren zerrenda lortzeak huts egin du: Error: %1 - + Choose this to sync the entire account Hautatu hau kontu osoa sinkronizatzeko - + This folder is already being synced. Karpeta hau dagoeneko sinkronizatzen ari da. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Dagoeneko <i>%1</i> sinkronizatzen ari zara, <i>%2</i>-ren guraso karpeta dena. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Dagoeneko fitxategi guztiak sinkronizatzen ari zara. <b>Ezin<b> da sinkronizatu beste karpeta bat. Hainbat karpeta batera sinkronizatu nahi baduzu ezaba ezazu orain konfiguratuta duzun sinkronizazio karpeta nagusia. @@ -1422,7 +1422,7 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten - + Folder Karpeta @@ -1447,17 +1447,17 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten Kopiatu - + Time Noiz - + File Fitxategia - + Issue @@ -1523,12 +1523,12 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::Logger - + Error Errorea - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' Fitxategia<br/> ezin da idazteko ireki.<br/><br/>Egunkariaren irteera <b>ezin</b> da gorde!</nobr> @@ -1536,27 +1536,27 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::NSISUpdater - + New Version Available Bertsio berria eskuragarri - + <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> <p> %1 bezeroaren bertsio berri bat eskuragarri dago.</p><p><b>%2</b>deskargatzeko prest dago. Instalatuta dagoen bersioa %3 da.</p> - + Skip this version Ez eguneratu bertsio hau - + Skip this time Utzi aldi honetan - + Get update Eskuratu eguneraketa @@ -1668,11 +1668,6 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1702,32 +1697,32 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1735,58 +1730,58 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... %1 Bertsioa deskargatzen. Mesedez itxoin... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. Ezin da eguneraketarik bilatu. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Eguneraketa zerbitzaria galdetzen... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. Ez dago eguneraketarik eskuragarri. Zure instalazioa azkenengo bertsioa da. - + Update Check Begiratu bertsio berririk ba ote den @@ -1863,7 +1858,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1932,144 +1927,144 @@ Ez da gomendagarria erabltzea. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Konexioa ongi burutu da %1 zerbitzarian: %2 bertsioa %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Denbora iraungi da %1era %2n konektatzen saiatzean. - + Trying to connect to %1 at %2... %2 zerbitzarian dagoen %1 konektatzen... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL Baliogabeko URLa - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Bertako %1 karpeta dagoeneko existitzen da, sinkronizaziorako prestatzen.<br/><br/> - + Creating local sync folder %1... Bertako %1 sinkronizazio karpeta sortzen... - + ok ados - + failed. huts egin du. - + Could not create local folder %1 Ezin da %1 karpeta lokala sortu - + No remote folder specified! Ez da urruneko karpeta zehaztu! - + Error: %1 Errorea: %1 - + creating folder on ownCloud: %1 ownClouden karpeta sortzen: %1 - + Remote folder %1 created successfully. Urruneko %1 karpeta ongi sortu da. - + The remote folder %1 already exists. Connecting it for syncing. Urruneko %1 karpeta dagoeneko existintzen da. Bertara konetatuko da sinkronizatzeko. - - + + The folder creation resulted in HTTP error code %1 Karpeta sortzeak HTTP %1 errore kodea igorri du - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Huts egin du urrutiko karpeta sortzen emandako kredintzialak ez direlako zuzenak!<br/> Egin atzera eta egiaztatu zure kredentzialak.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Urruneko karpeten sortzeak huts egin du ziuraski emandako kredentzialak gaizki daudelako.</font><br/>Mesedez atzera joan eta egiaztatu zure kredentzialak.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Urruneko %1 karpetaren sortzeak huts egin du <tt>%2</tt> errorearekin. - + A sync connection from %1 to remote directory %2 was set up. Sinkronizazio konexio bat konfiguratu da %1 karpetatik urruneko %2 karpetara. - + Successfully connected to %1! %1-era ongi konektatu da! - + Connection to %1 could not be established. Please check again. %1 konexioa ezin da ezarri. Mesedez egiaztatu berriz. - + Folder rename failed Karpetaren berrizendatzeak huts egin du - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Ezin da karpeta ezabatu eta kopia egin, karpeta edo barruko fitxategiren bat beste programa batean irekita dagoelako. Mesedez itxi karpeta edo fitxategia eta sakatu berrekin edo ezeztatu konfigurazioa. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Bertako sinkronizazio %1 karpeta ongi sortu da!</b></font> @@ -2116,7 +2111,7 @@ Ez da gomendagarria erabltzea. OCC::PropagateDirectory - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -2172,12 +2167,12 @@ Ez da gomendagarria erabltzea. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2185,22 +2180,22 @@ Ez da gomendagarria erabltzea. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 Ezin da %1 karpeta sortu - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -2208,17 +2203,17 @@ Ez da gomendagarria erabltzea. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2226,13 +2221,13 @@ Ez da gomendagarria erabltzea. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -2300,27 +2295,28 @@ Ez da gomendagarria erabltzea. - + File Removed Fitxategia Ezabatua - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -2328,32 +2324,27 @@ Ez da gomendagarria erabltzea. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. Fitxategi lokala ezabatu da sinkronizazioan. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2361,32 +2352,27 @@ Ez da gomendagarria erabltzea. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. Fitxategi lokala ezabatu da sinkronizazioan. - + Local file changed during sync. Fitxategi lokala aldatu da sinkronizazioan. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2404,42 +2390,42 @@ Ez da gomendagarria erabltzea. TestuEtiketa - + Time Noiz - + File Fitxategia - + Folder Karpeta - + Action Ekintza - + Size Tamaina - + Local sync protocol Bertako sinkronizazio protokolo - + Copy Kopiatu - + Copy the activity list to the clipboard. Kopiatu jarduera zerrenda arbelara. @@ -2480,7 +2466,7 @@ Ez da gomendagarria erabltzea. OCC::SelectiveSyncDialog - + Choose What to Sync Hautatu zer sinkronizatu @@ -2498,23 +2484,23 @@ Ez da gomendagarria erabltzea. - + Name Izena - + Size Tamaina - - + + No subfolders currently on the server. Ez dago azpikarpetarik zerbitzarian. - + An error occurred while loading the list of sub folders. @@ -2542,7 +2528,7 @@ Ez da gomendagarria erabltzea. Sarea - + Account Kontua @@ -2861,12 +2847,12 @@ Ez da gomendagarria erabltzea. OCC::ShibbolethCredentials - + Login Error Errorea sartzean - + You must sign in as user %1 @@ -2897,28 +2883,28 @@ Ez da gomendagarria erabltzea. OCC::SocketApi - + Share with %1 parameter is ownCloud - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2926,118 +2912,113 @@ Ez da gomendagarria erabltzea. OCC::SslButton - + <h3>Certificate Details</h3> <h3>>Ziurtagiriaren Zehaztapenak</h3> - + Common Name (CN): Izen Arrunta (IA): - + Subject Alternative Names: - + Organization (O): Erakundea (O): - + Organizational Unit (OU): Erakunde Atala (OU): - + State/Province: Estatua/Erkidegoa: - + Country: Herrialdea: - + Serial: - + <h3>Issuer</h3> - + Issuer: Jaulkitzailea: - + Issued on: Jaulkitze-data: - + Expires on: Iraungitze-data: - + <h3>Fingerprints</h3> <h3>Hatz-markak</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> - + %1 (self-signed) - + %1 %1 - + This connection is encrypted using %1 bit %2. - + No support for SSL session tickets/identifiers - + Certificate information: Ziurtagiriaren informazioa: - + This connection is NOT secure as it is not encrypted. @@ -3056,67 +3037,67 @@ Ez da gomendagarria erabltzea. Fidatu ziurtagiri honetaz hala ere - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 %1 ziurtagiriarekin + + - - &lt;not specified&gt; &lt;zehaztu gabe&gt; - - + + Organization: %1 Erakundea: %1 - - + + Unit: %1 Unitatea: %1 - - + + Country: %1 Herrialdea: %1 - + Fingerprint (MD5): <tt>%1</tt> Hatz-marka (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Hatz-marka (SHA1): <tt>%1</tt> - + Effective Date: %1 Balio-data: %1 - + Expiration Date: %1 - + Issuer: %1 Jaulkitzailea: %1 @@ -3230,27 +3211,27 @@ Ez da gomendagarria erabltzea. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3355,69 +3336,69 @@ Ez da gomendagarria erabltzea. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria @@ -3441,17 +3422,17 @@ Ez da gomendagarria erabltzea. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>%1 Bertsioa. Informazio gehiago eskuratzeko ikusi <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3864,48 +3845,40 @@ Ez da gomendagarria erabltzea. - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago orain dela minutu bat baino gutxiago - + %n minute(s) ago - + Some time ago @@ -3919,57 +3892,57 @@ Ez da gomendagarria erabltzea. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3990,7 +3963,7 @@ Ez da gomendagarria erabltzea. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Giteko <a href="%1">%2</a>. errebisiotik konpilatuta %3-an, %4etan Qt %5, %6 erabiliz</small></p> diff --git a/translations/client_fa.ts b/translations/client_fa.ts index b91b066c6..2d2e74e0d 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time فایل مقصد دارای سایز و یا تاریخ ویرایش غیرمتعارف است @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel منصرف شدن @@ -174,184 +174,184 @@ حساب کاربری - + Choose what to sync انتخاب موارد همگام‌سازی - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running همگام سازی در حال اجراست - + The syncing operation is running.<br/>Do you want to terminate it? عملیات همگام سازی در حال اجراست.<br/>آیا دوست دارید آن را متوقف کنید؟ - + %1 in use - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. متصل به %1. - + Server %1 is temporarily unavailable. سرور %1 بصورت موقت خارج از دسترس است. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in ورود - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal - + <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> - + Remove connection - - + + Open folder بازکردن پوشه - + Log out خروج - + Resume sync از سر‎گیری همگام‌سازی - + Pause sync توقف به‌هنگام‌سازی - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. - + %1 of %2 in use - + Currently there is no storage usage information available. - + No %1 connection configured. بدون %1 اتصال پیکربندی شده. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol پروتکل همگام سازی - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard کپی به کلیپ بورد @@ -477,47 +477,47 @@ برچسب متنی - + Server Activities - + Copy کپی کردن - + Copy the activity list to the clipboard. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? حذف تمام فایل ها؟ - + Remove all files حذف تمام فایل ها - + Keep files نگه داشتن فایل ها - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File فایل @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. برای افزودن پوشه به همگام‌سازی روی این دکمه کلیک کنید. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out خارج شد - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" همگام‌سازی %1 - - + + , رشته های ترجمه نشده - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) دانلود %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) آپلود %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 از %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 فایل %1 از %2 - + Waiting... درحال انتظار... - + Waiting for %n other folder(s)... در انتظار برای %n پوشه‌‎ی دیگر ... - + Preparing to sync... آماده‌سازی همگام‌سازی ... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. پوشه با موفقیت ایجاد شده است %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. این پوشه همگام‌سازی شده است. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder پوشه @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from کپی کردن - + Time زمان - + File فایل - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error خطا - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available نسخه جدید در دسترس است - + <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> - + Skip this version نادیده گرفتن این نسخه - + Skip this time نادیده گرفتن این زمان - + Get update به دست آوردن به روز رسانی @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy پروکسی SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,58 +1728,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. - + Could not check for new updates. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... - + Update status is unknown: Did not check for new updates. - + No updates available. Your installation is at the latest version. - + Update Check بررسی بروز‌ رسانی @@ -1861,7 +1856,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1929,144 +1924,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green"> با موفقیت متصل شده است به %1: %2 نسخه %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ارتباط ناموفق با %1 در %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... تلاش برای اتصال %1 به %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> پوشه همگام سازی محلی %1 در حال حاضر موجود است، تنظیم آن برای همگام سازی. <br/><br/> - + Creating local sync folder %1... - + ok خوب - + failed. ناموفق. - + Could not create local folder %1 نمی تواند پوشه محلی ایجاد کند %1 - + No remote folder specified! - + Error: %1 خطا: %1 - + creating folder on ownCloud: %1 ایجاد کردن پوشه بر روی ownCloud: %1 - + Remote folder %1 created successfully. پوشه از راه دور %1 با موفقیت ایجاد شده است. - + The remote folder %1 already exists. Connecting it for syncing. در حال حاضر پوشه از راه دور %1 موجود است. برای همگام سازی به آن متصل شوید. - - + + The folder creation resulted in HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> ایجاد پوشه از راه دور ناموفق بود به علت اینکه اعتبارهای ارائه شده اشتباه هستند!<br/>لطفا اعتبارهای خودتان را بررسی کنید.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red"> ایجاد پوشه از راه دور ناموفق بود، شاید به علت اعتبارهایی که ارئه شده اند، اشتباه هستند.</font><br/> لطفا باز گردید و اعتبار خود را بررسی کنید.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. ایجاد پوشه از راه دور %1 ناموفق بود با خطا <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. یک اتصال همگام سازی از %1 تا %2 پوشه از راه دور راه اندازی شد. - + Successfully connected to %1! با موفقیت به %1 اتصال یافت! - + Connection to %1 could not be established. Please check again. اتصال به %1 نمی تواند مقرر باشد. لطفا دوباره بررسی کنید. - + Folder rename failed تغییر نام پوشه ناموفق بود - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b> پوشه همگام سازی محلی %1 با موفقیت ساخته شده است!</b></font> @@ -2113,7 +2108,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2169,12 +2164,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2182,22 +2177,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 امکان ایجاد پوشه %1 وجود ندارد - + Error writing metadata to the database @@ -2205,17 +2200,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; خطا در حذف '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2223,13 +2218,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2297,27 +2292,28 @@ It is not advisable to use it. - + File Removed فایل حذف شد - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2325,32 +2321,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. فایل محلی در حین همگام‌سازی حذف شده است. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2358,32 +2349,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. فایل محلی در حین همگام‌سازی حذف شده است. - + Local file changed during sync. فایل محلی در حین همگام‌سازی تغییر کرده است. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2401,42 +2387,42 @@ It is not advisable to use it. برچسب متنی - + Time زمان - + File فایل - + Folder پوشه - + Action فعالیت - + Size اندازه - + Local sync protocol - + Copy کپی کردن - + Copy the activity list to the clipboard. @@ -2477,7 +2463,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync انتخاب موارد همگام‌سازی @@ -2495,23 +2481,23 @@ It is not advisable to use it. - + Name نام - + Size اندازه - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2539,7 +2525,7 @@ It is not advisable to use it. شبکه - + Account حساب کاربری @@ -2858,12 +2844,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error خطای ورود - + You must sign in as user %1 @@ -2894,28 +2880,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud اشتراک‌گذاری با %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2923,118 +2909,113 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>جزئیات گواهینامه s</h3> - + Common Name (CN): نام مشترک (CN): - + Subject Alternative Names: - + Organization (O): سازمان (O): - + Organizational Unit (OU): واحد سازمان (OU): - + State/Province: استان: - + Country: کشور: - + Serial: سریال: - + <h3>Issuer</h3> <h3>صادر کننده</h3> - + Issuer: صادرکننده: - + Issued on: صدور در: - + Expires on: منقضی شده در: - + <h3>Fingerprints</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> - + %1 (self-signed) %1 (self-signed) - + %1 %1 - + This connection is encrypted using %1 bit %2. - + No support for SSL session tickets/identifiers - + Certificate information: اطلاعات گواهینامه: - + This connection is NOT secure as it is not encrypted. @@ -3053,67 +3034,67 @@ It is not advisable to use it. د رهر صورت به این گواهی نامه اطمینان کن. - + Untrusted Certificate گواهینامه‎ی غیر معتبر - + Cannot connect securely to <i>%1</i>: عدم امکان اتصال امن به <i>%1</i>: - + with Certificate %1 با گواهی %1 + + - - &lt;not specified&gt; &lt؛ مشخص نشده است &gt؛ - - + + Organization: %1 سازماندهی : %1 - - + + Unit: %1 واحد: %1 - - + + Country: %1 کشور: %1 - + Fingerprint (MD5): <tt>%1</tt> اثر انگشت (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> اثرانگشت (SHA1): <tt>%1</tt> - + Effective Date: %1 تاریخ موثر: %1 - + Expiration Date: %1 تاریخ انقضا: %1 - + Issuer: %1 صادرکننده: %1 @@ -3227,27 +3208,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3352,69 +3333,69 @@ It is not advisable to use it. کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا @@ -3438,17 +3419,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>نسخه %1. برای اطلاعات بیشتر لطفا اینجا را مشاهده کنید t <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3861,48 +3842,40 @@ It is not advisable to use it. دکمه - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3916,57 +3889,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3987,7 +3960,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff --git a/translations/client_fi.ts b/translations/client_fi.ts index e37ba353d..b924fb425 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Kohdetiedostolla on odottamaton koko tai muokkausaika @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Yhteys aikakatkaistiin - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Peruuta @@ -174,184 +174,184 @@ Tili - + Choose what to sync Valitse synkronoitavat tiedot - + Force sync now Pakota synkronointi nyt - + Restart sync Käynnistä synkronointi uudelleen - + Remove folder sync connection Poista kansion synkronointiyhteys - + Folder creation failed Kansion luominen epäonnistui - + <p>Could not create local folder <i>%1</i>. <p>Paikallisen kansion <i>%1</i> luominen epäonnistui. - + Confirm Folder Sync Connection Removal Vahvista kansion synkronointiyhteyden poisto - + Remove Folder Sync Connection Poista kansion synkronointiyhteys - + Sync Running Synkronointi meneillään - + The syncing operation is running.<br/>Do you want to terminate it? Synkronointioperaatio on meneillään.<br/>Haluatko keskeyttää sen? - + %1 in use %1 käytössä - + %1 as <i>%2</i> %1 käyttäjänä <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Palvelimen versio %1 on vanha ja sen tuki on loppunut! Jatka omalla vastuulla. - + Connected to %1. Yhteys muodostettu kohteeseen %1. - + Server %1 is temporarily unavailable. Palvelin %1 ei ole juuri nyt saatavilla. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Kirjauduttu ulos kohteesta %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ei yhteyttä kohteeseen %1 osoitteessa %2. - + Log in Kirjaudu sisään - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Vahvista tilin poistaminen - + <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> <p>Haluatko varmasti poistaa tilin <i>%1</i>?</p><p><b>Huomio:</b> Tämä toimenpide <b>ei</b> poista mitään tiedostoja.</p> - + Remove connection Poista yhteys - - + + Open folder Avaa kansio - + Log out Kirjaudu ulos - + Resume sync Palauta synkronointi - + Pause sync Keskeytä synkronointi - + <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> <p>Haluatko varmasti lopettaa kansion <i>%1</i> synkronoinnin?</p><p><b>Huomio:</b> Tämä toimenpide <b>ei</b> poista mitään tiedostoja.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1/%2 (%3 %) käytössä. Jotkin kansiot, mukaan lukien verkkojaot ja jaetut kansiot, voivat sisältää eri rajoitukset. - + %1 of %2 in use %1/%2 käytössä - + Currently there is no storage usage information available. Tallennustilan käyttötietoja ei ole juuri nyt saatavilla. - + No %1 connection configured. %1-yhteyttä ei ole määritelty. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Palvelimen toimet - + Sync Protocol Synkronointiprotokolla - + Not Synced Ei synkronoitu - + Not Synced (%1) %1 is the number of not synced files. Ei synkronoitu (%1) - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopioitu leikepöydälle @@ -477,47 +477,47 @@ TekstiLeima - + Server Activities Palvelimen toimet - + Copy Kopioi - + Copy the activity list to the clipboard. Kopioi toimilista leikepöydälle. - + Action Required: Notifications Toimenpiteitä vaaditaan: ilmoitukset - + <br/>Account %1 does not have activities enabled. <br/>Tilillä %1 ei ole toimia käytössä. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Poistetaanko kaikki tiedostot? - + Remove all files Poista kaikki tiedostot - + Keep files Säilytä tiedostot - + This sync would reset the files to an earlier 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? - + Backup detected Varmuuskopio poistettu - + Normal Synchronisation Normaali synkronointi - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Lisää kansion synkronointiyhteys - + Synchronizing with local folder Synkronoidaan paikallisen kansion kanssa - + File Tiedosto @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Yhteyden tulee olla muodostettu, jotta voit lisätä kansion - + Click this button to add a folder to synchronize. Napsauta valitaksesi synkronoitavan kansion. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Virhe ladatessa kansiolistausta palvelimelta. - + Signed out Kirjauduttu ulos - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Kansion lisääminen on poistettu käytöstä, koska synkronoit jo kaikki tiedostot. Jos haluat synkronoida useita kansioita, poista nykyisen juurikansion synkronointiyhteys. - + Fetching folder list from server... Haetaan kansioluetteloa palvelimelta... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkronoidaan %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 jäljellä, %1/%2, tiedosto %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, tiedosto %3/%4 - + file %1 of %2 tiedosto %1/%2 - + Waiting... Odotetaan... - + Waiting for %n other folder(s)... Odotetaan %n muuta kansiota...Odotetaan %n muuta kansiota... - + Preparing to sync... Valmistaudutaan synkronointiin... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Lisää kansion synkronointiyhteys - + Add Sync Connection Lisää synkronointiyhteys @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Luo etäkansio - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 Kansion listaaminen epäonnistui. Virhe: %1 - + Choose this to sync the entire account Valitse tämä synkronoidaksesi koko tilin - + This folder is already being synced. Tätä kansiota synkronoidaan jo. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synkronoit jo kansiota <i>%1</i>, ja se on kansion <i>%2</i> yläkansio. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1422,7 +1422,7 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam - + Folder Kansio @@ -1447,17 +1447,17 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam Kopioi - + Time Aika - + File Tiedosto - + Issue @@ -1523,12 +1523,12 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::Logger - + Error Virhe - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Tiedostoa '%1'<br/>ei voida avata kirjoittamista varten.<br/><br/>Lokitulostusta<b>ei</b>pystytä tallentamaan!</nobr> @@ -1536,27 +1536,27 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::NSISUpdater - + New Version Available Uusi versio saatavilla - + <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> <p>Uusi versio %1-asiakasohjelmistosta on saatavilla.</p><p><b>%2</b> on ladattavissa. Asennettu versio on %3.</p> - + Skip this version Ohita tämä versio - + Skip this time Ohita tämän kerran - + Get update Päivitä @@ -1668,11 +1668,6 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam SOCKS5 proxy SOCKS5-välityspalvelin - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 vaaditaan kaistanrajoituksen käyttöä varten - OCC::NotificationWidget @@ -1702,32 +1697,32 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1735,58 +1730,58 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::OCUpdater - + New %1 Update Ready Uusi %1-päivitys valmiina - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Uusi %1-päivitys on valmiina asennettavaksi. Päivitysohjelma saattaa pyytää lisäoikeuksia päivityksen aikana. - + Downloading version %1. Please wait... Ladataan versiota %1. Odota hetki... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Päivityksen lataaminen epäonnistui. Napsauta <a href='%1'>tästä</a> ladataksesi päivityksen manuaalisesti. - + Could not check for new updates. Päivitysten tarkistus epäonnistui. - + %1 version %2 available. Restart application to start the update. %1-versio %2 saatavilla. Käynnistä sovellus uudelleen aloittaaksesi päivityksen. - + New %1 version %2 available. Please use the system's update tool to install it. Uusi %1-versio %2 on saatavilla. Käytä järjestelmän päivitystyökalua asentaaksesi sen. - + Checking update server... Tarkistetaan päivityspalvelinta... - + Update status is unknown: Did not check for new updates. Päivityksen tila on tuntematon: uusia päivityksiä ei tarkistettu. - + No updates available. Your installation is at the latest version. Päivityksiä ei ole saatavilla. Käytössäsi on uusin versio. - + Update Check Päivitystarkistus @@ -1863,7 +1858,7 @@ for additional privileges during the process. Määritä asiakaspuolen TLS-varmenteen asetukset - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Yhteys palvelimen salattuun osoitteeseen <em>%1</em> epäonnistui. Miten haluat edetä?</p></body></html> @@ -1932,144 +1927,144 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Muodostettu yhteys onnistuneesti kohteeseen %1: %2 versio %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Yhteys %1iin osoitteessa %2 epäonnistui:<br/>%3 - + Timeout while trying to connect to %1 at %2. Aikakatkaisu yrittäessä yhteyttä kohteeseen %1 osoitteessa %2. - + Trying to connect to %1 at %2... Yritetään yhdistetää palvelimeen %1 portissa %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request Todennettuun webdav-pyyntöön saatiin virheellinen vastaus - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Palvelin esti käyttämisen. Vahvista käyttöoikeutesi palvelimeen <a href="%1">napsauttamalla tästä</a> ja kirjaudu palveluun selaimella. - + Invalid URL Virheellinen verkko-osoite - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Paikallinen kansio %1 on jo olemassa, asetetaan se synkronoitavaksi.<br/><br/> - + Creating local sync folder %1... Luodaan paikallista synkronointikansiota %1... - + ok ok - + failed. epäonnistui. - + Could not create local folder %1 Paikalliskansion %1 luonti epäonnistui - + No remote folder specified! Etäkansiota ei määritelty! - + Error: %1 Virhe: %1 - + creating folder on ownCloud: %1 luodaan kansio ownCloudiin: %1 - + Remote folder %1 created successfully. Etäkansio %1 luotiin onnistuneesti. - + The remote folder %1 already exists. Connecting it for syncing. Etäkansio %1 on jo olemassa. Otetaan siihen yhteyttä tiedostojen täsmäystä varten. - - + + The folder creation resulted in HTTP error code %1 Kansion luonti aiheutti HTTP-virhekoodin %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Etäkansion luominen epäonnistui koska antamasi tunnus/salasana ei täsmää!<br/>Ole hyvä ja palaa tarkistamaan tunnus/salasana</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Pilvipalvelun etäkansion luominen ei onnistunut , koska tunnistautumistietosi ovat todennäköisesti väärin.</font><br/>Palaa takaisin ja tarkista käyttäjätunnus ja salasana.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Etäkansion %1 luonti epäonnistui, virhe <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Täsmäysyhteys kansiosta %1 etäkansioon %2 on asetettu. - + Successfully connected to %1! Yhteys kohteeseen %1 muodostettiin onnistuneesti! - + Connection to %1 could not be established. Please check again. Yhteyttä osoitteeseen %1 ei voitu muodostaa. Ole hyvä ja tarkista uudelleen. - + Folder rename failed Kansion nimen muuttaminen epäonnistui - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Paikallinen synkronointikansio %1 luotu onnistuneesti!</b></font> @@ -2116,7 +2111,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateDirectory - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2172,12 +2167,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2185,22 +2180,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 kansiota %1 ei voitu luoda - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2208,17 +2203,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalRemove - + Error removing '%1': %2; Virhe poistaessa '%1': %2; - + Could not remove folder '%1' Ei voitu poistaa kansiota '%1' - + Could not remove %1 because of a local file name clash @@ -2226,13 +2221,13 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2300,27 +2295,28 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + File Removed Tiedosto poistettu - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2328,32 +2324,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. Paikallinen tiedosto poistettiin synkronoinnin aikana. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + Unexpected return code from server (%1) Odottamaton paluukoodi palvelimelta (%1) - + Missing File ID from server - + Missing ETag from server @@ -2361,32 +2352,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. Paikallinen tiedosto poistettiin synkronoinnin aikana. - + Local file changed during sync. Paikallinen tiedosto muuttui synkronoinnin aikana. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2404,42 +2390,42 @@ Osoitteen käyttäminen ei ole suositeltavaa. TekstiLeima - + Time Aika - + File Tiedosto - + Folder Kansio - + Action Toiminto - + Size Koko - + Local sync protocol Paikallinen synkronointiprotokolla - + Copy Kopioi - + Copy the activity list to the clipboard. Kopioi toimilista leikepöydälle. @@ -2480,7 +2466,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SelectiveSyncDialog - + Choose What to Sync Valitse synkronoitavat tiedot @@ -2498,23 +2484,23 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + Name Nimi - + Size Koko - - + + No subfolders currently on the server. Palvelimella ei ole alihakemistoja juuri nyt. - + An error occurred while loading the list of sub folders. Alikansioluetteloa ladatessa tapahtui virhe. @@ -2542,7 +2528,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Verkko - + Account Tili @@ -2861,12 +2847,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ShibbolethCredentials - + Login Error Kirjautumisvirhe - + You must sign in as user %1 Sinun tulee kirjautua käyttäjänä %1 @@ -2897,28 +2883,28 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SocketApi - + Share with %1 parameter is ownCloud - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2926,119 +2912,114 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Varmenteen tiedot</h3> - + Common Name (CN): Yleinen nimi (CN): - + Subject Alternative Names: - + Organization (O): Organisaatio (O): - + Organizational Unit (OU): Organisaatioyksikkö (OU): - + State/Province: Lääni/maakunta/provinssi: - + Country: Maa: - + Serial: Sarjanumero: - + <h3>Issuer</h3> <h3>Myöntäjä</h3> - + Issuer: Myöntäjä: - + Issued on: Myönnetty: - + Expires on: Vanhenee: - + <h3>Fingerprints</h3> <h3>Sormenjäljet</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Huomio:</b> Tämä varmenne hyväksyttiin käsin</p> - + %1 (self-signed) %1 (allekirjoitettu itse) - + %1 %1 - + This connection is encrypted using %1 bit %2. Yhteys on salattu, käytössä %1-bittinen %2. - + No support for SSL session tickets/identifiers - + Certificate information: Varmenteen tiedot: - + This connection is NOT secure as it is not encrypted. Yhteys EI OLE turvallinen, koska sitä ei ole salattu. @@ -3058,67 +3039,67 @@ Osoitteen käyttäminen ei ole suositeltavaa. Luota tähän varmisteeseen silti - + Untrusted Certificate Varmenne ei ole luotettu - + Cannot connect securely to <i>%1</i>: Yhteyttä kohteeseen <i>%1</i> ei voi muodostaa turvallisesti: - + with Certificate %1 varmenteella %1 + + - - &lt;not specified&gt; &lt;ei määritelty&gt; - - + + Organization: %1 Organisaatio: %1 - - + + Unit: %1 Yksikkö: %1 - - + + Country: %1 Maa: %1 - + Fingerprint (MD5): <tt>%1</tt> Sormenjälki (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Sormenjälki (SHA1): <tt>%1</tt> - + Effective Date: %1 Voimassa oleva päivämäärä: %1 - + Expiration Date: %1 Vanhenemispäivä: %1 - + Issuer: %1 Myöntäjä: %1 @@ -3232,27 +3213,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3357,69 +3338,69 @@ Osoitteen käyttäminen ei ole suositeltavaa. Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde @@ -3443,17 +3424,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versio %1. Lisätietoja osoitteessa <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Tekijänoikeus ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3866,48 +3847,40 @@ Osoitteen käyttäminen ei ole suositeltavaa. - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future tulevaisuudessa - + %n day(s) ago %n päivä sitten%n päivää sitten - + %n hour(s) ago %n tunti sitten%n tuntia sitten - + now nyt - + Less than a minute ago Alle minuutti sitten - + %n minute(s) ago %n minuutti sitten%n minuuttia sitten - + Some time ago Jokin aika sitten @@ -3921,57 +3894,57 @@ Osoitteen käyttäminen ei ole suositeltavaa. Utility - + %L1 GB %L1 Gt - + %L1 MB %L1 Mt - + %L1 KB %L1 kt - + %L1 B %L1 t - + %n year(s) %n vuosi%n vuotta - + %n month(s) %n kuukausi%n kuukautta - + %n day(s) %n päivä%n päivää - + %n hour(s) %n tunti%n tuntia - + %n minute(s) %n minuutti%n minuuttia - + %n second(s) %n sekunti%n sekuntia - + %1 %2 %1 %2 @@ -3992,7 +3965,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Koostettu Git-revisiosta <a href="%1">%2</a> %3, %4 käyttäen Qt:n versiota %5, %6</small></p> diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 617773e27..749c3e497 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Le fichier de destination a une taille ou une date de modification inattendue @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Délai de connexion dépassé - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Annuler @@ -174,184 +174,184 @@ Compte - + Choose what to sync Sélectionner le contenu à synchroniser - + Force sync now Forcer la synchronisation maintenant - + Restart sync Redémarrer la synchronisation - + Remove folder sync connection Supprimer la synchronisation du dossier - + Folder creation failed Échec de création du dossier - + <p>Could not create local folder <i>%1</i>. <p>Impossible de créer le dossier local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmer une suppression de synchronisation de dossier - + Remove Folder Sync Connection Supprimer la synchronisation de ce dossier - + Sync Running Synchronisation en cours - + The syncing operation is running.<br/>Do you want to terminate it? La synchronisation est en cours.<br/>Voulez-vous l'arrêter ? - + %1 in use %1 utilisés - + %1 as <i>%2</i> %1 avec le compte <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La version %1 du serveur est ancienne et n'est pas prise en charge. Continuez à vos risques et périls. - + Connected to %1. Connecté au serveur %1. - + Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Session sur %1 fermée. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Aucune connexion au serveur %1 à l'adresse %2. - + Log in Se connecter - + There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - + There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - + There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés par qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - + Confirm Account Removal Confirmation de retrait du compte - + <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> <p>Êtes-vous certain de vouloir retirer <i>%1</i> des comptes synchronisés avec le serveur ?</p><p><b>Remarque :</b> cela ne supprimera pas votre compte sur le serveur et aucun fichier ne sera supprimé ni localement ni en ligne.</p> - + Remove connection Retirer le compte - - + + Open folder Ouvrir le dossier local - + Log out Se déconnecter - + Resume sync Reprendre la synchronisation - + Pause sync Mettre en pause - + <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> <p>Voulez-vous vraiment arrêter de synchroniser le dossier <i>%1</i> ?</p><p><b>Note :</b> Aucun fichier ne sera supprimé.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) utilisés sur %2. Certains dossiers, montés depuis le réseau ou partagés, peuvent avoir des limites différentes. - + %1 of %2 in use %1 utilisés sur %2 - + Currently there is no storage usage information available. Actuellement aucune information d'utilisation de stockage n'est disponible. - + No %1 connection configured. Aucune connexion à %1 configurée @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Activité serveur - + Sync Protocol Activité de synchronisation - + Not Synced Fichiers non synchronisés - + Not Synced (%1) %1 is the number of not synced files. Non Synchronisé (%1) - + The server activity list has been copied to the clipboard. L'historique des opérations sur le serveur a été copié dans le presse-papier. - + The sync activity list has been copied to the clipboard. L'historique des opérations locales a été copié dans le presse-papier. - + The list of unsynced items has been copied to the clipboard. La liste des éléments non synchronisés a été copiée dans le presse-papier. - + Copied to clipboard Copié dans le presse-papier @@ -477,47 +477,47 @@ TextLabel - + Server Activities Historique des opérations sur le serveur - + Copy Copier - + Copy the activity list to the clipboard. Copier la liste d'activités dans le presse-papier - + Action Required: Notifications Action exigée : Notifications - + <br/>Account %1 does not have activities enabled. <br/>Le compte %1 n'a aucune activité activée. - + You received %n new notification(s) from %2. Vous avez reçu %n nouvelle notification de %2.Vous avez reçu %n nouvelles notifications de %2. - + You received %n new notification(s) from %1 and %2. Vous avez reçu 1 nouvelle notification de %1 et %2.Vous avez reçu %n nouvelles notifications de %1 et %2. - + You received new notifications from %1, %2 and other accounts. Vous avez reçu de nouvelles notifications de %1, %2 et d'autres comptes. - + %1 Notifications - Action Required %1 Notifications - Action Requise @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erreur lors de l'accès au fichier de configuration - + There was an error while accessing the configuration file at %1. Une erreur s'est produite lors de l'accès au fichier de configuration situé dans %1. - + Quit ownCloud Quitter ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -752,14 +752,14 @@ Impossible de lire le fichier d'exclusion du système - + A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - + A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. @@ -767,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -783,7 +783,7 @@ Si vous décidez de garder ces fichiers, ils seront synchronisés à nouveau ave Si vous décidez de supprimer ces fichiers, ils vous seront inaccessibles, sauf si vous en êtes le propriétaire. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -792,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce S'il s'agissait d'un accident et que vous choisissiez de garder vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - + Remove All Files? Supprimer tous les fichiers ? - + Remove all files Supprimer tous les fichiers - + Keep files Garder les fichiers - + This sync would reset the files to an earlier 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? @@ -816,17 +816,17 @@ Cela peut être dû à une copie de sauvegarde restaurée sur le serveur. Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? - + Backup detected Sauvegarde détectée - + Normal Synchronisation Synchronisation normale - + Keep Local Files as Conflict Garder les fichiers locaux comme Conflits @@ -952,12 +952,12 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Ajouter une synchronisation de dossier - + Synchronizing with local folder Sélectionnez les sous-dossiers à synchroniser à partir du dossier local - + File Fichier @@ -965,144 +965,144 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderStatusModel - + You need to be connected to add a folder Vous devez être connecté pour ajouter un dossier - + Click this button to add a folder to synchronize. Cliquez ce bouton pour ajouter un dossier à synchroniser. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. - + Signed out Session fermée - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. L'ajout de dossier est désactivé car vous synchronisez déjà tous vos fichiers. Si vous voulez synchroniser plusieurs dossiers, supprimez d'abord le dossier racine configuré actuellement. - + Fetching folder list from server... Récupération de la liste des dossiers depuis le serveur... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Recherche de modifications dans '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisation de %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) réception %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) envoi %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 sur %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 sur %2, fichier %3 sur %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 sur %2, fichier %3 sur %4 - + file %1 of %2 fichier %1 sur %2 - + Waiting... En attente ... - + Waiting for %n other folder(s)... En attente de %n autre(s) dossier(s)En attente de %n autre(s) dossier(s) - + Preparing to sync... Préparation à la synchronisation @@ -1110,12 +1110,12 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderWizard - + Add Folder Sync Connection Ajouter une synchronisation de dossier - + Add Sync Connection Ajouter une Synchronisation @@ -1141,52 +1141,52 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderWizardRemotePath - + Create Remote Folder Créer un dossier distant - + Enter the name of the new folder to be created below '%1': Entrez le nom du nouveau dossier à créer dans '%1' : - + Folder was successfully created on %1. Le dossier a été créé sur %1 - + Authentication failed accessing %1 Erreur d'authentification lors de l'accès à %1 - + Failed to create the folder on %1. Please check manually. Échec à la création du dossier sur %1. Veuillez vérifier manuellement. - + Failed to list a folder. Error: %1 Impossible de lister un dossier. Erreur : %1 - + Choose this to sync the entire account Sélectionnez ceci pour synchroniser l'ensemble du compte - + This folder is already being synced. Ce dossier est déjà en cours de synchronisation. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Vous synchronisez déja <i>%1</i>, qui est un dossier parent de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Vous sychronisez déjà tous vos fichiers. Synchroniser un autre dossier n'est <b>pas</b> pris en charge. Si vous voulez synchroniser plusieurs dossiers, veuillez supprimer la synchronisation du dossier racine qui est configurée actuellement. @@ -1432,7 +1432,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp - + Folder Dossier @@ -1457,17 +1457,17 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Copier - + Time Heure - + File Fichier - + Issue @@ -1533,12 +1533,12 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::Logger - + Error Erreur - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Le fichier '%1'<br/>ne peut être ouvert en écriture.<br/><br/>Le fichier de journalisation <b>ne peut pas</b> être enregistré !</nobr> @@ -1546,27 +1546,27 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::NSISUpdater - + New Version Available Nouvelle version disponible - + <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> <p>Une nouvelle version du client %1 est disponible.</p><p><b>%2</b> est disponible au téléchargement. La version actuellement installée est %3.<p> - + Skip this version Ignorer cette version - + Skip this time Ignorer pour cette fois - + Get update Obtenir la mise à jour @@ -1678,11 +1678,6 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp SOCKS5 proxy Proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 est requis pour utiliser la limite de bande passante - OCC::NotificationWidget @@ -1712,32 +1707,32 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1745,59 +1740,59 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::OCUpdater - + New %1 Update Ready Une nouvelle mise à jour de %1 est disponible - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Une nouvelle mise à jour de %1 est sur le point d'être installée. L'assistant peut demander des privilèges additionnels durant le processus. - + Downloading version %1. Please wait... Téléchargement de la version %1. Merci de patienter... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Impossible de télécharger la mise à jour. Veuillez la <a href='%1'>télécharger manuellement</a>. - + Could not check for new updates. Impossible de vérifier la présence de nouvelles mises à jour. - + %1 version %2 available. Restart application to start the update. %1 version %2 disponible. Redémarrez l'application pour commencer la mise à jour. - + New %1 version %2 available. Please use the system's update tool to install it. Une nouvelle version (%2) de %1 est disponible. Pour l'installer, veuillez utiliser l'outil de mise à jour du système. - + Checking update server... Interrogation du serveur de mises à jour... - + Update status is unknown: Did not check for new updates. L'état du processus de mise à jour est inconnu. Impossible de vérifier la présence de mises à jour. - + No updates available. Your installation is at the latest version. Aucune mise à jour disponible. Votre installation est à jour. - + Update Check Recherche de mise à jour @@ -1874,7 +1869,7 @@ L'assistant peut demander des privilèges additionnels durant le processus. Configurer le certificat TLS client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Impossible de se connecter à l'adresse sécurisée <em>%1</em>. Que souhaitez-vous faire ?</p></body></html> @@ -1943,144 +1938,144 @@ Il est déconseillé de l'utiliser. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connecté avec succès à %1 : %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Échec de la connexion à %1 sur %2 :<br/>%3 - + Timeout while trying to connect to %1 at %2. Délai d'attente dépassé lors de la connexion à %1 sur %2. - + Trying to connect to %1 at %2... Tentative de connexion à %1 sur %2 ... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La requête d'authentification vers le serveur a été redirigée vers '%1'. L'URL est erronée, le serveur est mal configuré. - + There was an invalid response to an authenticated webdav request Une réponse non valide a été reçue suite à une requête WebDav authentifiée. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accès impossibe. Afin de vérifier l'accès au serveur, <a href="%1">cliquez ici</a> et connectez-vous au service avec votre navigateur web. - + Invalid URL URL invalide - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Le dossier de synchronisation local %1 existe déjà, configuration de la synchronisation.<br/><br/> - + Creating local sync folder %1... Création du dossier local de synchronisation %1... - + ok ok - + failed. échoué. - + Could not create local folder %1 Impossible de créer le dossier local %1 - + No remote folder specified! Aucun dossier distant spécifié ! - + Error: %1 Erreur : %1 - + creating folder on ownCloud: %1 création d'un dossier sur ownCloud : %1 - + Remote folder %1 created successfully. Le dossier distant %1 a été créé avec succès. - + The remote folder %1 already exists. Connecting it for syncing. Le dossier distant %1 existe déjà. Connexion. - - + + The folder creation resulted in HTTP error code %1 La création du dossier a généré le code d'erreur HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La création du dossier distant a échoué car les identifiants de connexion sont erronés !<br/>Veuillez revenir en arrière et vérifier ces derniers.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La création du dossier distant a échoué, probablement parce que les informations d'identification fournies sont fausses.</font><br/>Veuillez revenir en arrière et les vérifier.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. La création du dossier distant "%1" a échouée avec l'erreur <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Une synchronisation entre le dossier local %1 et le dossier distant %2 a été configurée. - + Successfully connected to %1! Connecté avec succès à %1 ! - + Connection to %1 could not be established. Please check again. La connexion à %1 n'a pu être établie. Veuillez réessayer. - + Folder rename failed Echec du renommage du dossier - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossible de supprimer et de sauvegarder le dossier parce que ce dossier ou un de ses fichiers est ouvert dans un autre programme. Veuillez fermer le dossier ou le fichier et ré-essayer, ou annuler l'installation. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Dossier de synchronisation local %1 créé avec succès !</b></font> @@ -2127,7 +2122,7 @@ Il est déconseillé de l'utiliser. OCC::PropagateDirectory - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2183,12 +2178,12 @@ Il est déconseillé de l'utiliser. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Échec de la restauration : %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1 @@ -2196,22 +2191,22 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 impossible de supprimer le fichier %1. Erreur : %2 - + Attention, possible case sensitivity clash with %1 Attention, collision possible avec %1 à cause de la casse - + could not create folder %1 Impossible de créer le dossier %1 - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2219,17 +2214,17 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erreur lors de la suppression de '%1' : %2; - + Could not remove folder '%1' Impossible de supprimer le dossier '%1' - + Could not remove %1 because of a local file name clash Impossible de supprimer %1 à cause d'un conflit local de nom de fichier @@ -2237,13 +2232,13 @@ Il est déconseillé de l'utiliser. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Le fichier %1 ne peut pas être renommé en %2 à cause d'un conflit local de nom de fichier - - + + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2311,27 +2306,28 @@ Il est déconseillé de l'utiliser. Impossible d'envoyer le fichier %1 car un autre fichier de même nom existe, différant seulement par la casse. - + File Removed Fichier supprimé - + Local file changed during syncing. It will be resumed. Fichier local modifié pendant la synchronisation. Elle va reprendre. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2339,32 +2335,27 @@ Il est déconseillé de l'utiliser. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2. - - - + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + Unexpected return code from server (%1) Le serveur a retourné un code inattendu (%1) - + Missing File ID from server L'identifiant de fichier est manquant sur le serveur - + Missing ETag from server L'information Etag de modification de fichier est manquante sur le serveur @@ -2372,32 +2363,27 @@ Il est déconseillé de l'utiliser. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Arrêt forcé du job après réinitialisation de connexion HTTP avec Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Le fichier a été modifié localement mais appartient à un partage en lecture seule. Il a été restauré et vos modifications sont présentes dans le fichiers de conflit. - + Poll URL missing URL de sondage manquante - + The local file was removed during sync. Fichier local supprimé pendant la synchronisation. - + Local file changed during sync. Fichier local modifié pendant la synchronisation. - + The server did not acknowledge the last chunk. (No e-tag was present) Le serveur n'a pas confirmé la réception du dernier morceau. (Aucun e-tag n'était présent). @@ -2415,42 +2401,42 @@ Il est déconseillé de l'utiliser. TextLabel - + Time Heure - + File Fichier - + Folder Dossier - + Action Action - + Size Taille - + Local sync protocol Historique des opérations de synchronisation locale - + Copy Copier - + Copy the activity list to the clipboard. Copier la liste d'activités dans le presse-papier @@ -2491,7 +2477,7 @@ Il est déconseillé de l'utiliser. OCC::SelectiveSyncDialog - + Choose What to Sync Sélectionner le contenu à synchroniser @@ -2509,23 +2495,23 @@ Il est déconseillé de l'utiliser. Désélectionnez les sous-dossiers distants que vous ne souhaitez pas synchroniser. - + Name Nom - + Size Taille - - + + No subfolders currently on the server. Aucun sous-dossier sur le serveur. - + An error occurred while loading the list of sub folders. Une erreur est survenue lors du chargement de la liste des sous-dossiers. @@ -2553,7 +2539,7 @@ Il est déconseillé de l'utiliser. Réseau - + Account Compte @@ -2872,12 +2858,12 @@ Il est déconseillé de l'utiliser. OCC::ShibbolethCredentials - + Login Error Erreur de connexion - + You must sign in as user %1 Vous devez vous connecter en tant qu'utilisateur %1 @@ -2908,28 +2894,28 @@ Il est déconseillé de l'utiliser. OCC::SocketApi - + Share with %1 parameter is ownCloud Partager avec %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2937,119 +2923,114 @@ Il est déconseillé de l'utiliser. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Détails du certificat</h3> - + Common Name (CN): Nom commun (CN) : - + Subject Alternative Names: Noms alternatifs du sujet : - + Organization (O): Organisation (O) : - + Organizational Unit (OU): Unité d'organisation (OU) : - + State/Province: État/Région : - + Country: Pays : - + Serial: Numéro de série : - + <h3>Issuer</h3> <h3>Émetteur</h3> - + Issuer: Émetteur : - + Issued on: Émis le : - + Expires on: Expire le : - + <h3>Fingerprints</h3> <h3>Empreintes numériques</h3> - - MD 5: - MD5 : - - - + SHA-256: SHA-256 : - + SHA-1: SHA-1 : - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Note :</b> Ce certificat a été approuvé manuellement</p> - + %1 (self-signed) %1 (auto-signé) - + %1 %1 - + This connection is encrypted using %1 bit %2. Cette connexion est chiffrée en utilisant %1 bit %2. - + No support for SSL session tickets/identifiers Identifiants/tickets de sessions SSL non pris en charge - + Certificate information: Informations du certificat : - + This connection is NOT secure as it is not encrypted. Cette connexion n'est PAS sécurisée car elle n'est pas chiffrée. @@ -3069,67 +3050,67 @@ Il est déconseillé de l'utiliser. Faire confiance à ce certificat malgré tout - + Untrusted Certificate Certificat non fiable - + Cannot connect securely to <i>%1</i>: Impossible de se connecter de manière sécurisée à <i>%1</i> : - + with Certificate %1 avec certificat %1 + + - - &lt;not specified&gt; &lt;non spécifié&gt; - - + + Organization: %1 Organisation : %1 - - + + Unit: %1 Unité : %1 - - + + Country: %1 Pays : %1 - + Fingerprint (MD5): <tt>%1</tt> Empreinte (MD5) : <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Empreinte (SHA1) : <tt>%1</tt> - + Effective Date: %1 Date de début de validité : %1 - + Expiration Date: %1 Date d'expiration : %1 - + Issuer: %1 Émetteur : %1 @@ -3243,27 +3224,27 @@ Il est déconseillé de l'utiliser. Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3368,69 +3349,69 @@ Il est déconseillé de l'utiliser. Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source @@ -3454,17 +3435,17 @@ Il est déconseillé de l'utiliser. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. Pour plus d'information, visitez <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud, Inc.</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribué par %1 et sous licence GNU General Public License (GPL) Version 2.0.<br/>%2 et le logo %2 sont des marques enregistrées de %1 aux Etats-Unis, dans d'autres pays, ou les deux.</p> @@ -3877,48 +3858,40 @@ Il est déconseillé de l'utiliser. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future Dans le futur - + %n day(s) ago HierIl y a %n jours - + %n hour(s) ago Il y a %n heureIl y a %n heures - + now maintenant - + Less than a minute ago Il y a moins d'une minute - + %n minute(s) ago Il y a %n minuteIl y a %n minutes - + Some time ago Il y a quelque temps @@ -3932,57 +3905,57 @@ Il est déconseillé de l'utiliser. Utility - + %L1 GB %L1 Go - + %L1 MB %L1 Mo - + %L1 KB %L1 Ko - + %L1 B %L1 octets - + %n year(s) %n an%n ans - + %n month(s) %n mois%n mois - + %n day(s) %n jour%n jours - + %n hour(s) %n heure%n heures - + %n minute(s) %n minute%n minutes - + %n second(s) %n seconde%n secondes - + %1 %2 %1 %2 @@ -4003,7 +3976,7 @@ Il est déconseillé de l'utiliser. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construit à partir de la révision Git <a href="%1">%2</a> du %3, %4 en utilisant Qt %5, %6.</small><p> diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 55dfc8553..9fbee9738 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O ficheiro de destino ten un tamaño ou unha hora de modificación non agardados @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Esgotouse o tempo de conexión - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancelar @@ -174,184 +174,184 @@ Conta - + Choose what to sync Escolla que sincronizar - + Force sync now Forzar a sincronización - + Restart sync Reiniciar a sincronización - + Remove folder sync connection Retirar a conexión da sincronización do cartafol - + Folder creation failed Non foi posíbel crear o cartafol - + <p>Could not create local folder <i>%1</i>. <p>Non foi posíbel crear o cartafol local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmar a retirada da conexión da sincronización do cartafol - + Remove Folder Sync Connection Retirar a conexión da sincronización do cartafol - + Sync Running Sincronización en proceso - + The syncing operation is running.<br/>Do you want to terminate it? Estase a realizar a sincronización.<br/>Quere interrompela e rematala? - + %1 in use %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Este servidor da versión %1 é vello e non ten soporte! Vostede verá o que fai. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O servidor %1 non está dispoñíbel temporalmente. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Desconectado de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Non hai conexión con %1 en %2. - + Log in Acceder - + There are folders that were not synchronized because they are too big: Hai cartafoles que non se sincronizaron por ser demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hai cartafoles que non se sincronizaron porque son almacenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Hai cartafoles que non se sincronizaron porque son demasiado grandes ou almacenamentos externos: - + Confirm Account Removal Confirme a retirada da conta - + <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> <p>De verdade quere retirar a conexión a conta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>non</b> eliminará ningún ficheiro.</p> - + Remove connection Retirar conexión - - + + Open folder Abrir o cartafol - + Log out Desconectar - + Resume sync Continuar coa sincronización - + Pause sync Por en pausa a sincronización - + <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> <p>Quere realmente deixar de sincronizar o cartafol <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>non</b> eliminará ningún ficheiro.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 en uso. Algúns cartafoles, incluíndo os compartidos e os montados en rede, poderían ter diferentes límites. - + %1 of %2 in use %1 de %2 en uso - + Currently there is no storage usage information available. Actualmente non hai dispoñíbel ningunha información sobre o uso do almacenamento. - + No %1 connection configured. Non se configurou a conexión %1. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Actividade do servidor - + Sync Protocol Protocolo de sincronización - + Not Synced Non sincronizado - + Not Synced (%1) %1 is the number of not synced files. Non sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de actividade do servidor copiouse no portapapeis. - + The sync activity list has been copied to the clipboard. A lista de actividade de sincronización foi copiada ao portapapeis. - + The list of unsynced items has been copied to the clipboard. A lista de elementos non sincronizados foi copiada ao portapapeis. - + Copied to clipboard Copiado no portapapeis. @@ -477,47 +477,47 @@ Etiqueta de texto - + Server Activities Actividades do servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista da actividade no portapapeis. - + Action Required: Notifications Acción requerida: Notificacións - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 non ten as actividades habilitadas. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ Non foi posíbel ler o ficheiro de exclusión do sistema - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Retirar todos os ficheiros? - + Remove all files Retirar todos os ficheiros - + Keep files Manter os ficheiros - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File Ficheiro @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Ten que estar conectado para engadir un cartafol - + Click this button to add a folder to synchronize. Prema nesta botón para engadir un cartafol para sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Desconectado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Crear un cartafol remoto - + Enter the name of the new folder to be created below '%1': Introduza o nome do novo cartafol que se creará a seguir «%1»: - + Folder was successfully created on %1. Creouse correctamente o cartafol en %1. - + Authentication failed accessing %1 Non foi posíbel facer a autenticación accedendo a %1 - + Failed to create the folder on %1. Please check manually. Non foi posíbel crear o cartafol en %1. Compróbeo manualmente. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Escolla isto para sincronizar toda a conta - + This folder is already being synced. Este cartafol xa está sincronizado. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Xa está a sincronizar <i>%1</i>, é o cartafol pai de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Xa se están a sincronizar todos os ficheiros. Isto <b>non</b> é compatíbel co sincronización doutro cartafol. Se quere sincronizar varios cartafoles, retire a sincronización do cartafol raíz configurado actualmente. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Cartafol @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copiar - + Time Hora - + File Ficheiro - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>O ficheiro «%1»<br/> non se pode abrir para escritura.<br/><br/>A saída do rexistro <b>non</n> se pode gardar!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Hai dispoñíbel unha nova versión - + <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> <p>Hai dispoñíbel unha nova versión do cliente %1.</p><p>Pode descargar a versión <b>%2</b>. A versión instalada é a %3</p> - + Skip this version Omitir esta versión - + Skip this time Omitir polo de agora - + Get update Obter a actualización @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy Proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,59 +1728,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Preparada a nova actualización %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Está a piques de instalarse unha nova actualización para %1. O proceso de actualización pode pedir privilexios adicionais durante o procedemento. - + Downloading version %1. Please wait... Descargando a versión %1. Agarde... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Non foi posíbel descargar a actualización. Prema <a href='%1'>aquí</a> para descargar manualmente a actualización. - + Could not check for new updates. Non foi posíbel comprobar se hai novas actualizacións. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Comprobando o servidor de actualizacións... - + Update status is unknown: Did not check for new updates. O estado da actualización é descoñecido: non se comprobaron as actualizacións. - + No updates available. Your installation is at the latest version. Non hai actualizacións dispoñíbeis. A instalación xa está na versión máis recente - + Update Check Comprobar actualizacións @@ -1862,7 +1857,7 @@ actualización pode pedir privilexios adicionais durante o procedemento.Configurar o certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Produciuse un erro ao conectar co enderezo seguro do servidor <em>%1</em>. Como quere proceder?</p></body></html> @@ -1931,144 +1926,144 @@ Recomendámoslle que non o use. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectouse correctamente a %1: %2 versión %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Non foi posíbel conectar con %1 en %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Esgotouse o tempo tentando conectarse a %1 en %2... - + Trying to connect to %1 at %2... Tentando conectarse a %1 en %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. A solicitude autenticada no servidor foi redirixida a «%1», O URL é incorrecto, o servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Deuse unha resposta incorrecta a unha solicitude de WebDAV autenticada - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acceso prohibido polo servidor. Para comprobar que dispón do acceso axeitado, <a href="%1">prema aquí</a> para acceder ao servizo co seu navegador. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> O cartafol de sincronización local %1 xa existe. Configurándoo para a sincronización.<br/><br/> - + Creating local sync folder %1... Creando un cartafol local de sincronización %1... - + ok aceptar - + failed. fallou. - + Could not create local folder %1 Non foi posíbel crear o cartafol local %1 - + No remote folder specified! Non foi especificado o cartafol remoto! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 creando o cartafol en ownCloud: %1 - + Remote folder %1 created successfully. O cartafol remoto %1 creouse correctamente. - + The remote folder %1 already exists. Connecting it for syncing. O cartafol remoto %1 xa existe. Conectándoo para a sincronización. - - + + The folder creation resulted in HTTP error code %1 A creación do cartafol resultou nun código de erro HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A creación do cartafol remoto fracasou por por de seren incorrectas as credenciais!<br/>Volva atrás e comprobe as súas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A creación do cartafol remoto fallou probabelmente debido a que as credenciais que se deron non foran as correctas.</font><br/>Volva atrás e comprobe as súas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Produciuse un fallo ao crear o cartafol remoto %1 e dou o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Estabeleceuse a conexión de sincronización de %1 ao directorio remoto %2. - + Successfully connected to %1! Conectou satisfactoriamente con %1 - + Connection to %1 could not be established. Please check again. Non foi posíbel estabelecer a conexión con %1. Compróbeo de novo. - + Folder rename failed Non foi posíbel renomear o cartafol - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Non é posíbel retirar e facer unha copia de seguranza do cartafol, xa que o cartafol ou un ficheiro está aberto noutro programa Peche o cartafol ou o ficheiro e ténteo de novo, ou cancele a acción. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>O cartafol local de sincronización %1 creouse correctamente!</b></font> @@ -2115,7 +2110,7 @@ Recomendámoslle que non o use. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2171,12 +2166,12 @@ Recomendámoslle que non o use. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Fallou a restauración: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2184,22 +2179,22 @@ Recomendámoslle que non o use. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Atención, posíbel colisión entre maiúsculas e minúsculas con %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2207,17 +2202,17 @@ Recomendámoslle que non o use. OCC::PropagateLocalRemove - + Error removing '%1': %2; Produciuse un erro ao retirar «%1»: %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Non é posíbel retirar %1 por mor dunha colisión co nome dun ficheiro local @@ -2225,13 +2220,13 @@ Recomendámoslle que non o use. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Non é posíbel renomear o ficheiro %1 como %2 por mor dunha colisión co nome dun ficheiro local - - + + Error writing metadata to the database @@ -2299,27 +2294,28 @@ Recomendámoslle que non o use. - + File Removed Ficheiro retirado - + Local file changed during syncing. It will be resumed. O ficheiro local cambiou durante a sincronización. Retomase. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2327,32 +2323,27 @@ Recomendámoslle que non o use. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2. - - - + The local file was removed during sync. O ficheiro local retirarase durante a sincronización. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2360,32 +2351,27 @@ Recomendámoslle que non o use. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzando a interrupción do traballo na conexión HTTP reiniciandoa con Qt <5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O ficheiro foi editado localmente mais é parte dunha compartición de só lectura. O ficheiro foi restaurado e a súa edición atopase no ficheiro de conflitos. - + Poll URL missing Non se atopa o URL requirido - + The local file was removed during sync. O ficheiro local retirarase durante a sincronización. - + Local file changed during sync. O ficheiro local cambiou durante a sincronización. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2403,42 +2389,42 @@ Recomendámoslle que non o use. Etiqueta de texto - + Time Hora - + File Ficheiro - + Folder Cartafol - + Action Acción - + Size Tamaño - + Local sync protocol - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista da actividade no portapapeis. @@ -2479,7 +2465,7 @@ Recomendámoslle que non o use. OCC::SelectiveSyncDialog - + Choose What to Sync Escolla que sincronizar @@ -2497,23 +2483,23 @@ Recomendámoslle que non o use. - + Name Nome - + Size Tamaño - - + + No subfolders currently on the server. Actualmente non hai subcartafoles no servidor. - + An error occurred while loading the list of sub folders. @@ -2541,7 +2527,7 @@ Recomendámoslle que non o use. Rede - + Account Conta @@ -2860,12 +2846,12 @@ Recomendámoslle que non o use. OCC::ShibbolethCredentials - + Login Error Erro de acceso - + You must sign in as user %1 Ten que rexistrarse como usuario %1 @@ -2896,28 +2882,28 @@ Recomendámoslle que non o use. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartir con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2925,119 +2911,114 @@ Recomendámoslle que non o use. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalles do certificado</h3> - + Common Name (CN): Nome común (CN): - + Subject Alternative Names: Nomes alternativos do titular: - + Organization (O): Organización (O): - + Organizational Unit (OU): Unidade organizativa (OU): - + State/Province: Estado/provincia: - + Country: País - + Serial: Serie: - + <h3>Issuer</h3> <h3>Emisor</h3> - + Issuer: Emisor: - + Issued on: Emitido o: - + Expires on: Caduca o: - + <h3>Fingerprints</h3> <h3>Pegadas dixitais</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Nota:</b> Este certificado foi aprobado manualmente</p> - + %1 (self-signed) %1 (autoasinada) - + %1 %1 - + This connection is encrypted using %1 bit %2. Esta conexión está cifrada empregando %1 a %2 bits. - + No support for SSL session tickets/identifiers - + Certificate information: Información do certificado: - + This connection is NOT secure as it is not encrypted. Esta conexión non é segura e non está cifrada. @@ -3057,67 +3038,67 @@ Recomendámoslle que non o use. Confiar igualmente neste certificado - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 co certificado %1 + + - - &lt;not specified&gt; &lt;sen especificar&gt; - - + + Organization: %1 Organización: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Pegada dixital (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Pegada dixital (SHA1): <tt>%1</tt> - + Effective Date: %1 Data de aplicación: %1 - + Expiration Date: %1 Data de caducidade: %1 - + Issuer: %1 Emisor: %1 @@ -3231,27 +3212,27 @@ Recomendámoslle que non o use. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3356,69 +3337,69 @@ Recomendámoslle que non o use. Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe @@ -3442,17 +3423,17 @@ Recomendámoslle que non o use. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versión %1. Para obter máis información visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado baixo a Licenza Pública Xeral (GPL) GNU Versión 2.0.<br/>Os logotipos %2 e %2 son marcas rexistradas de %1 nos Estados Unidos de Norte América e/ou outros países.</p> @@ -3865,48 +3846,40 @@ Recomendámoslle que non o use. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3920,57 +3893,57 @@ Recomendámoslle que non o use. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3991,7 +3964,7 @@ Recomendámoslle que non o use. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir de la revisión Git <a href="%1">%2</a> en %3, %4 usando Qt %5, %6</small></p> diff --git a/translations/client_hu.ts b/translations/client_hu.ts index abb757ff4..d4be19630 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time A cél fájl váratlan méretű vagy módosítási dátumú @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out A kapcsolat időtúllépés miatt megszakadt - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Mégsem @@ -174,184 +174,184 @@ Fiók - + Choose what to sync Szinkronizálandó elemek kiválasztása - + Force sync now - + Restart sync - + Remove folder sync connection Könyvtár szinkronizációs kapcsolat törlése - + Folder creation failed Könyvtár létrehozása nem sikerült - + <p>Could not create local folder <i>%1</i>. <p>Nem lehet helyi könyvtárat létrehozni: <i>%1</i>. - + Confirm Folder Sync Connection Removal Könyvtár szinkronizációs kapcsolat törlésének megerősítése - + Remove Folder Sync Connection Könyvtár szinkronizációs kapcsolat törlése - + Sync Running Szinkronizálás fut - + The syncing operation is running.<br/>Do you want to terminate it? A szinkronizálás folyamatban van. <br/>Szakítsuk meg? - + %1 in use %1 használatban - + %1 as <i>%2</i> %1, mint <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. %1 szerver verzió régi és már nem támogatott! Folytatás saját felelősségre. - + Connected to %1. Csatlakozva: %1. - + Server %1 is temporarily unavailable. %1 szerver jelenleg nem elérhető. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Kijelentkezve innen: %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Nincs kapcsolat ehhez: %1 ekkor: %2. - + Log in Bejelentkezés - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Fiók törlésének megerősítése - + <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> <p>Tényleg törölni szeretné a kapcsolatot <i>%1</i> fiókkal?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove connection Kapcsolat törlése - - + + Open folder Könyvtár megnyitása - + Log out Kilépés - + Resume sync Szinkronizálás folytatása - + Pause sync Szinkronizálás szüneteltetése - + <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> <p>Tényleg leszeretné állítani <i>%1</i> könyvtár szinkronizálását?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) / %2 használatban. Néhány könyvtár - beleértve a hálózati megosztásokat és a megosztott könyvtárakat - eltérő korlátozással rendelkezhet. - + %1 of %2 in use %1 / %2 használatban - + Currently there is no storage usage information available. Jelenleg nem érhető el tárhelyhasználati információ. - + No %1 connection configured. Nincs beállított kapcsolat: %1. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Szerver aktivitás - + Sync Protocol Szinkronizációs protokoll - + Not Synced Nincs szinkronizálva - + Not Synced (%1) %1 is the number of not synced files. Nincs szinkronizálva (%1) - + The server activity list has been copied to the clipboard. A szerver aktivitási lista a vágólapra másolva. - + The sync activity list has been copied to the clipboard. A szinkronizációs aktivitási lista a vágólapra másolva. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Másolva a vágólapra @@ -477,47 +477,47 @@ TextLabel - + Server Activities Szerver aktivitások - + Copy Másolás - + Copy the activity list to the clipboard. Aktivitási lista másolása a vágólapra. - + Action Required: Notifications Beavatkozás szükséges: Értesítések - + <br/>Account %1 does not have activities enabled. <br /> %1 fióknak nincsenek engedélyezve az aktivitások. - + You received %n new notification(s) from %2. %n új értesítést kapott innen: %2.%n új értesítést kapott innen: %2. - + You received %n new notification(s) from %1 and %2. %n új értesítést kapott innen: %1 és %2.%n új értesítést kapott innen: %1 és %2. - + You received new notifications from %1, %2 and other accounts. Új értesítést kapott innen: %1, %2 és további fiókoktól. - + %1 Notifications - Action Required %1 értesítések - Beavatkozás szükséges @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Törli az összes fájlt? - + Remove all files Összes fájl eltávolítása - + Keep files Fájlok megtartása - + This sync would reset the files to an earlier 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? - + Backup detected Biztonsági mentés észlelve - + Normal Synchronisation Normal szinkronizáció - + Keep Local Files as Conflict Helyi file-ok megtartása konfliktusként @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder - + File Fájl @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Kijelentkezve - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 szinkronizálása - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) letöltés: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) feltöltés: %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 maradt, %1 / %2, %3 / %4 fájl - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1 / %2 fájl - + Waiting... Várakozás... - + Waiting for %n other folder(s)... Várakozás %n további könyvtárra...Várakozás %n további könyvtárra... - + Preparing to sync... Felkészülés szinkronizálásra... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder - + Enter the name of the new folder to be created below '%1': - + Folder was successfully created on %1. A mappa sikeresen létrehozva: %1. - + Authentication failed accessing %1 - + Failed to create the folder on %1. Please check manually. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account - + This folder is already being synced. Ez a mappa már szinkronizálva van. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Mappa @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Másolás - + Time Idő - + File Fájl - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Hiba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' fájlt<br/>nem lehet írásra megnyitni.<br/><br/>A naplózás kimenete <b>nem</b> menthető!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Új verzió érhető el - + <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> <p>Egy új verzió érhető el a(z) %1 kliensből.</p><p><b>%2</b> elérhető letöltésre. A telepített verzió: %3.</p> - + Skip this version Verzió kihagyása - + Skip this time Kihagyás ezalkalommal - + Get update Frissítés beszerzése @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,58 +1728,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Elérhető új %1 frissítés - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. - + Downloading version %1. Please wait... %1 verzió letöltése. Kérjük, várjon... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nem lehetett letölteni a frissítést. Kérjük, kattints <a href='%1'>ide</a> a frissítés kézi letöltéséhez. - + Could not check for new updates. Nem lehet ellenőrzi a frissítéseket. - + %1 version %2 available. Restart application to start the update. %1 verzió %2 elérhető. Kérjük, indítsa újra az alkalmazást a frissítés elkezdéséhez. - + New %1 version %2 available. Please use the system's update tool to install it. Új %1 verzió %2 elérhető. Kérjük, a telepítéshez a rendszer frissítési eszközét használja. - + Checking update server... Frissítési szerver ellenőrzése... - + Update status is unknown: Did not check for new updates. Frissítési állapot ismeretlen: Nem lehet ellenőrizni a frissítéseket. - + No updates available. Your installation is at the latest version. Nincs újabb kiadás. Ez a legfrissebb verzió. - + Update Check Frissítés ellenőrzése @@ -1861,7 +1856,7 @@ for additional privileges during the process. - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> @@ -1929,144 +1924,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Sikeresen csatlakozott az %1-hoz: %2 verziószám %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. - + Trying to connect to %1 at %2... Próbál kapcsolódni az %1-hoz: %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. - + Invalid URL Érvénytelen URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A helyi %1 mappa már létezik, állítsa be a szinkronizálódását.<br/><br/> - + Creating local sync folder %1... - + ok ok - + failed. sikertelen. - + Could not create local folder %1 - + No remote folder specified! - + Error: %1 Hiba: %1 - + creating folder on ownCloud: %1 - + Remote folder %1 created successfully. %1 távoli nappa sikeresen létrehozva. - + The remote folder %1 already exists. Connecting it for syncing. A %1 távoli mappa már létezik. Csatlakoztassa a szinkronizációhoz. - - + + The folder creation resulted in HTTP error code %1 A könyvtár létrehozásakor keletkezett HTTP hibakód %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A távoli mappa létrehozása sikertelen, valószínűleg mivel hibásak a megdott hitelesítési adatok.</font><br/>Lépjen vissza és ellenőrizze a belépési adatokat.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A távoli %1 mappa létrehozása nem sikerült. Hibaüzenet: <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A szinkronizációs kapcsolat a %1 és a %2 távoli mappa között létrejött. - + Successfully connected to %1! Sikeresen csatlakozva: %1! - + Connection to %1 could not be established. Please check again. A kapcsolat a %1 kiszolgálóhoz sikertelen. Ellenőrizze újra. - + Folder rename failed A mappa átnevezése nem sikerült - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Helyi %1 szinkronizációs mappa sikeresen létrehozva!</b></font> @@ -2113,7 +2108,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2169,12 +2164,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2182,22 +2177,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2205,17 +2200,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash @@ -2223,13 +2218,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash - - + + Error writing metadata to the database @@ -2297,27 +2292,28 @@ It is not advisable to use it. - + File Removed Fájl törölve - + Local file changed during syncing. It will be resumed. - + Local file changed during sync. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2325,32 +2321,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. A helyi fájl el lett távolítva a szinkronizálás alatt. - + Local file changed during sync. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2358,32 +2349,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. - + Poll URL missing - + The local file was removed during sync. A helyi fájl el lett távolítva a szinkronizálás alatt. - + Local file changed during sync. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2401,42 +2387,42 @@ It is not advisable to use it. TextLabel - + Time Idő - + File Fájl - + Folder Mappa - + Action Művelet - + Size Méret - + Local sync protocol - + Copy Másolás - + Copy the activity list to the clipboard. Az aktivitási lista másolása a vágólapra. @@ -2477,7 +2463,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Szinkronizálandó elemek kiválasztása @@ -2495,23 +2481,23 @@ It is not advisable to use it. - + Name Név - + Size Méret - - + + No subfolders currently on the server. - + An error occurred while loading the list of sub folders. @@ -2539,7 +2525,7 @@ It is not advisable to use it. Hálózat - + Account Fiók @@ -2858,12 +2844,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Bejelentkezési hiba - + You must sign in as user %1 %1 felhasználóként kell belépned @@ -2894,28 +2880,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Megosztás vele: %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2923,119 +2909,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Tanúsítvány részletei</h3> - + Common Name (CN): Általános név (CN): - + Subject Alternative Names: A tárgy további nevei: - + Organization (O): Szervezet (O): - + Organizational Unit (OU): Szervezeti egység (OU): - + State/Province: Tagállam/Megye: - + Country: Ország: - + Serial: Sorozatszám: - + <h3>Issuer</h3> <h3>Kibocsátó</h3> - + Issuer: Aláíró: - + Issued on: Kibocsátva: - + Expires on: Lejárat: - + <h3>Fingerprints</h3> <h3>Ujjlenyomatok</h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Megjegyzés:</b> A tanúsítvány kézileg jóváhagyva</p> - + %1 (self-signed) %1 (önaláírt) - + %1 %1 - + This connection is encrypted using %1 bit %2. Ez a kapcsolat %1 bittel van titkosítva: %2. - + No support for SSL session tickets/identifiers - + Certificate information: Tanúsítvány adatok: - + This connection is NOT secure as it is not encrypted. @@ -3054,67 +3035,67 @@ It is not advisable to use it. Mindenképp fogadja el ezt a tanúsítványt - + Untrusted Certificate Nem megbízható tanúsítvány - + Cannot connect securely to <i>%1</i>: Nem sikerült biztonságosan csatlakozni ide: <i>%1</i>: - + with Certificate %1 %1 tanúsítvánnyal + + - - &lt;not specified&gt; &lt;nincs megadva&gt; - - + + Organization: %1 Szervezet: %1 - - + + Unit: %1 Egység: %1 - - + + Country: %1 Ország: %1 - + Fingerprint (MD5): <tt>%1</tt> Ellenőrzőkód (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Ellenőrzőkód (SHA1): <tt>%1</tt> - + Effective Date: %1 Tényleges dátum: %1 - + Expiration Date: %1 Lejárati dátum: %1 - + Issuer: %1 Kibocsátó: %1 @@ -3228,27 +3209,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3353,69 +3334,69 @@ It is not advisable to use it. Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás @@ -3439,17 +3420,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> %1 verzió elérhető. <p>További információk: <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3862,48 +3843,40 @@ It is not advisable to use it. Nyomógomb - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3917,57 +3890,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3988,7 +3961,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Fordítva a <a href="%1">%2</a> Git revizíóból, %3, %4 Qt %5, %6 felhasználásával</small></p> diff --git a/translations/client_it.ts b/translations/client_it.ts index 32477b609..ff072d3af 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Il file di destinazione ha una dimensione o un'ora di modifica inattesa @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Connessione scaduta - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Annulla @@ -174,184 +174,184 @@ Account - + Choose what to sync Scegli cosa sincronizzare - + Force sync now Forza ora la sincronizzazione - + Restart sync Riavvia sincronizzazione - + Remove folder sync connection Rimuovi connessione di sincronizzazione cartelle - + Folder creation failed Creazione della cartella non riuscita - + <p>Could not create local folder <i>%1</i>. <p>Impossibile creare la cartella locale <i>%1</i>. - + Confirm Folder Sync Connection Removal Conferma rimozione connessione di sincronizzazione cartelle - + Remove Folder Sync Connection Rimuovi connessione di sincronizzazione cartelle - + Sync Running La sincronizzazione è in corso - + The syncing operation is running.<br/>Do you want to terminate it? L'operazione di sincronizzazione è in corso.<br/>Vuoi terminarla? - + %1 in use %1 in uso - + %1 as <i>%2</i> %1 come <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versione %1 del server è datata e non supportata! Continua a tuo rischio. - + Connected to %1. Connesso a %1. - + Server %1 is temporarily unavailable. Il server %1 è temporaneamente non disponibile. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Disconnesso da %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Nessuna connessione a %1 su %2. - + Log in Accedi - + There are folders that were not synchronized because they are too big: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi: - + There are folders that were not synchronized because they are external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono archiviazioni esterne: - + There are folders that were not synchronized because they are too big or external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi o archiviazioni esterne: - + Confirm Account Removal Conferma rimozione account - + <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> <p>Vuoi davvero eliminare la connessione all'account <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + Remove connection Rimuovi connessione - - + + Open folder Apri cartella - + Log out Esci - + Resume sync Riprendi la sincronizzazione - + Pause sync Sospendi la sincronizzazione - + <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> <p>Vuoi davvero fermare la sincronizzazione della cartella <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) di %2 in uso. Alcune cartelle, incluse quelle montate in rete o le cartelle condivise, potrebbero avere limiti diversi. - + %1 of %2 in use %1% di %2 in uso - + Currently there is no storage usage information available. Non ci sono informazioni disponibili sull'utilizzo dello spazio di archiviazione. - + No %1 connection configured. Nessuna connessione di %1 configurata. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Attività del server - + Sync Protocol Protocollo di sincronizzazione - + Not Synced Non sincronizzata - + Not Synced (%1) %1 is the number of not synced files. Non sincronizzata (%1) - + The server activity list has been copied to the clipboard. L'elenco di attività del server è stato copiato negli appunti. - + The sync activity list has been copied to the clipboard. L'elenco di attività di sincronizzazione è stato copiato negli appunti. - + The list of unsynced items has been copied to the clipboard. L'elenco di elementi non sincronizzati è stato copiato negli appunti. - + Copied to clipboard Copiato negli appunti @@ -477,47 +477,47 @@ EtichettaTesto - + Server Activities Attività del server - + Copy Copia - + Copy the activity list to the clipboard. Copia l'elenco delle attività negli appunti. - + Action Required: Notifications Azione richiesta: notifiche - + <br/>Account %1 does not have activities enabled. <br/>L'account %1 non ha attività abilitate. - + You received %n new notification(s) from %2. Hai ricevuto %n nuova notifica da %2.Hai ricevuto %n nuove notifiche da %2. - + You received %n new notification(s) from %1 and %2. Hai ricevuto %n nuova notifica da %1 e %2.Hai ricevuto %n nuove notifiche da %1 e %2. - + You received new notifications from %1, %2 and other accounts. Hai ricevuto nuove notifiche da %1, %2 e altri account. - + %1 Notifications - Action Required %1 notifiche - azione richiesta @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Errore accedendo al file di configurazione - + There was an error while accessing the configuration file at %1. Si è verificato un errore durante l'accesso al file di configurazione su %1. - + Quit ownCloud Esci da ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -752,14 +752,14 @@ Impossibile leggere il file di esclusione di sistema - + A new folder larger than %1 MB has been added: %2. Una nuova cartella più grande di %1 MB è stata aggiunta: %2. - + A folder from an external storage has been added. Una nuova cartella da un'archiviazione esterna è stata aggiunta. @@ -767,12 +767,12 @@ - + Please go in the settings to select it if you wish to download it. Vai nelle impostazioni e selezionala se vuoi scaricarla. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -780,29 +780,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Vuoi rimuovere tutti i file? - + Remove all files Rimuovi tutti i file - + Keep files Mantieni i file - + This sync would reset the files to an earlier 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? @@ -811,17 +811,17 @@ Ciò potrebbe verificarsi in seguito al ripristino di un backup sul server. Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tutti i tuoi file con file più datati in uno stato precedente. Vuoi mantenere i tuoi file locali più recenti come file di conflitto? - + Backup detected Backup rilevato - + Normal Synchronisation Sincronizzazione normale - + Keep Local Files as Conflict Mantieni i file locali come conflitto @@ -947,12 +947,12 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Aggiungi connessioni di sincronizzazione cartelle - + Synchronizing with local folder Sincronizzazione con cartella locale - + File File @@ -960,144 +960,144 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderStatusModel - + You need to be connected to add a folder Devi essere connesso per aggiungere una cartella - + Click this button to add a folder to synchronize. Fai clic su questo pulsante per aggiungere una cartella da sincronizzare. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Errore durante il caricamento dell'elenco delle cartelle dal server. - + Signed out Disconnesso - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. L'aggiunta di una cartella è disabilitata perché stai già sincronizzando tutti i tuoi file. Se desideri sincronizzare più cartelle, rimuovi la cartella radice attualmente configurata. - + Fetching folder list from server... Recupero dell'elenco delle cartelle dal server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Controllo delle modifiche in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizzazione di %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ricezione %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) invio %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 di %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 rimanenti, %1 di %2, file %3 di %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 di %2, file %3 di %4 - + file %1 of %2 file %1 di %2 - + Waiting... Attendere... - + Waiting for %n other folder(s)... In attesa di %n altra cartella...In attesa di %n altre cartelle... - + Preparing to sync... Preparazione della sincronizzazione... @@ -1105,12 +1105,12 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderWizard - + Add Folder Sync Connection Aggiungi connessioni di sincronizzazione cartelle - + Add Sync Connection Aggiungi connessione di sincronizzazione @@ -1136,52 +1136,52 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderWizardRemotePath - + Create Remote Folder Crea cartella remota - + Enter the name of the new folder to be created below '%1': Digita il nome della nuova cartella da creare sotto a '%1': - + Folder was successfully created on %1. La cartella è stata creata correttamente su %1. - + Authentication failed accessing %1 Autenticazione non riuscita durante l'accesso a %1 - + Failed to create the folder on %1. Please check manually. Non è stato possibile creare la cartella su %1. Controlla manualmente. - + Failed to list a folder. Error: %1 Impossibile elencare una cartella. Errore: %1 - + Choose this to sync the entire account Selezionala per sincronizzare l'intero account - + This folder is already being synced. Questa cartella è già sincronizzata. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Stai già sincronizzando <i>%1</i>, che è la cartella superiore di <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Stai già sincronizzando tutti i tuoi file. La sincronizzazione di un'altra cartella <b>non</b> è supportata. Se vuoi sincronizzare più cartelle, rimuovi la configurazione della cartella principale di sincronizzazione. @@ -1427,7 +1427,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se - + Folder Cartella @@ -1452,17 +1452,17 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Copia - + Time Ora - + File File - + Issue @@ -1528,12 +1528,12 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::Logger - + Error Errore - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Il file '%1'<br/>non può essere aperto in scrittura.<br/><br/>Il risultato del log <b>non</b> può essere salvato!</nobr> @@ -1541,27 +1541,27 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::NSISUpdater - + New Version Available Nuova versione disponibile - + <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> <p>Una nuova versione del client %1 è disponibile.</p><p><b>%2</b> è disponibile per lo scaricamento. La versione installata è %3.</p> - + Skip this version Salta questa versione - + Skip this time Salta questa volta - + Get update Ottieni l'aggiornamento @@ -1673,11 +1673,6 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se SOCKS5 proxy Proxy SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 richieste per utilizzare il limite di banda - OCC::NotificationWidget @@ -1707,32 +1702,32 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1740,58 +1735,58 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::OCUpdater - + New %1 Update Ready Un nuovo aggiornamento di %1 è pronto - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Un nuovo aggiornamento di %1 sta per essere installato. L'aggiornamento potrebbe richiedere privilegi aggiuntivi durante l'avanzamento. - + Downloading version %1. Please wait... Scaricamento della versione %1. Attendi... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Impossibile scaricare l'aggiornamento. Fai clic <a href='%1'>qui</a> per scaricare l'aggiornamento manualmente. - + Could not check for new updates. Impossibile verificare la presenza di nuovi aggiornamenti. - + %1 version %2 available. Restart application to start the update. La versione %2 di %1 è disponibile. Riavvia l'applicazione per iniziare l'aggiornamento. - + New %1 version %2 available. Please use the system's update tool to install it. Nuova versione %2 di %1 disponibile. Utilizza lo strumento di aggiornamento di sistema per installarla. - + Checking update server... Controllo server degli aggiornamenti... - + Update status is unknown: Did not check for new updates. Lo stato di aggiornamento è sconosciuto. Non è possibile verificare la presenza di nuovi aggiornamenti. - + No updates available. Your installation is at the latest version. Non ci sono aggiornamenti disponibili. La tua installazione è aggiornata all'ultima versione. - + Update Check Controllo aggiornamenti @@ -1868,7 +1863,7 @@ for additional privileges during the process. Configura certificato TLS lato client - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Connessione all'indirizzo sicuro del server <em>%1</em> non riuscita. Come desideri procedere?</p></body></html> @@ -1937,144 +1932,144 @@ Non è consigliabile utilizzarlo. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Connesso correttamente a %1: %2 versione %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Connessione a %1 su %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo scaduto durante il tentativo di connessione a %1 su %2. - + Trying to connect to %1 at %2... Tentativo di connessione a %1 su %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. La richiesta autenticata al server è stata rediretta a '%1'. L'URL è errato, il server non è configurato correttamente. - + There was an invalid response to an authenticated webdav request Ricevuta una risposta non valida a una richiesta webdav autenticata. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Accesso negato dal server. Per verificare di avere i permessi appropriati, <a href="%1">fai clic qui</a> per accedere al servizio con il tuo browser. - + Invalid URL URL non valido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> La cartella di sincronizzazione locale %1 esiste già, impostata per la sincronizzazione.<br/><br/> - + Creating local sync folder %1... Creazione della cartella locale di sincronizzazione %1... - + ok ok - + failed. non riuscita. - + Could not create local folder %1 Impossibile creare la cartella locale %1 - + No remote folder specified! Nessuna cartella remota specificata! - + Error: %1 Errore: %1 - + creating folder on ownCloud: %1 creazione cartella su ownCloud: %1 - + Remote folder %1 created successfully. La cartella remota %1 è stata creata correttamente. - + The remote folder %1 already exists. Connecting it for syncing. La cartella remota %1 esiste già. Connessione in corso per la sincronizzazione - - + + The folder creation resulted in HTTP error code %1 La creazione della cartella ha restituito un codice di errore HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> La creazione della cartella remota non è riuscita poiché le credenziali fornite sono errate!<br/>Torna indietro e verifica le credenziali.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">La creazione della cartella remota non è riuscita probabilmente perché le credenziali fornite non sono corrette.</font><br/>Torna indietro e controlla le credenziali inserite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Creazione della cartella remota %1 non riuscita con errore <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Una connessione di sincronizzazione da %1 alla cartella remota %2 è stata stabilita. - + Successfully connected to %1! Connesso con successo a %1! - + Connection to %1 could not be established. Please check again. La connessione a %1 non può essere stabilita. Prova ancora. - + Folder rename failed Rinomina della cartella non riuscita - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Impossibile rimuovere o creare una copia di sicurezza della cartella poiché la cartella o un file in essa contenuto è aperta in un altro programma. Chiudi la cartella o il file e premi Riprova o annulla la configurazione. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Cartella locale %1 creata correttamente!</b></font> @@ -2121,7 +2116,7 @@ Non è consigliabile utilizzarlo. OCC::PropagateDirectory - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2177,12 +2172,12 @@ Non è consigliabile utilizzarlo. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ripristino non riuscito: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un file o una cartella è stato rimosso da una condivisione in sola lettura, ma il ripristino non è riuscito: %1 @@ -2190,22 +2185,22 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Impossibile eliminare il file %1, errore: %2 - + Attention, possible case sensitivity clash with %1 Attenzione, possibile conflitto relativo all'uso di maiuscole e minuscole con %1 - + could not create folder %1 impossibile creare la cartella %1 - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2213,17 +2208,17 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalRemove - + Error removing '%1': %2; Errore durante la rimozione di '%1': %2; - + Could not remove folder '%1' Impossibile rimuovere la cartella '%1' - + Could not remove %1 because of a local file name clash Impossibile rimuovere %1 a causa di un conflitto con un file locale @@ -2231,13 +2226,13 @@ Non è consigliabile utilizzarlo. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Il file %1 non può essere rinominato in %2 a causa di un conflitto con il nome di un file locale - - + + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2305,27 +2300,28 @@ Non è consigliabile utilizzarlo. Il file %1 non può essere caricato poiché esiste un altro file con lo stesso nome, ma con differenze tra maiuscole e minuscole - + File Removed File rimosso - + Local file changed during syncing. It will be resumed. Il file locale è stato modificato durante la sincronizzazione. Sarà ripristinato. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2333,32 +2329,27 @@ Non è consigliabile utilizzarlo. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2. - - - + The local file was removed during sync. Il file locale è stato rimosso durante la sincronizzazione. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + Unexpected return code from server (%1) Codice di uscita inatteso dal server (%1) - + Missing File ID from server File ID mancante dal server - + Missing ETag from server ETag mancante dal server @@ -2366,32 +2357,27 @@ Non è consigliabile utilizzarlo. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forzare l'interruzione dell'operazione in caso di ripristino della connessione HTTP con Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Il file è stato modificato localmente, ma è parte di una condivisione in sola lettura. È stato ripristinato e la tua modifica è nel file di conflitto. - + Poll URL missing URL di richiesta mancante - + The local file was removed during sync. Il file locale è stato rimosso durante la sincronizzazione. - + Local file changed during sync. Un file locale è cambiato durante la sincronizzazione. - + The server did not acknowledge the last chunk. (No e-tag was present) Il server non ha riconosciuto l'ultimo pezzo. (Non era presente alcun e-tag) @@ -2409,42 +2395,42 @@ Non è consigliabile utilizzarlo. EtichettaTesto - + Time Ora - + File File - + Folder Cartella - + Action Azione - + Size Dimensione - + Local sync protocol Protocollo di sincronizzazione locale - + Copy Copia - + Copy the activity list to the clipboard. Copia l'elenco delle attività negli appunti. @@ -2485,7 +2471,7 @@ Non è consigliabile utilizzarlo. OCC::SelectiveSyncDialog - + Choose What to Sync Scegli cosa sincronizzare @@ -2503,23 +2489,23 @@ Non è consigliabile utilizzarlo. Deseleziona le cartelle remote che non desideri sincronizzare. - + Name Nome - + Size Dimensione - - + + No subfolders currently on the server. Attualmente non ci sono sottocartelle sul server. - + An error occurred while loading the list of sub folders. Si è verificato un errore durante il caricamento dell'elenco delle sottocartelle. @@ -2547,7 +2533,7 @@ Non è consigliabile utilizzarlo. Rete - + Account Account @@ -2866,12 +2852,12 @@ Non è consigliabile utilizzarlo. OCC::ShibbolethCredentials - + Login Error Errore di accesso - + You must sign in as user %1 Devi accedere con l'utente %1 @@ -2902,28 +2888,28 @@ Non è consigliabile utilizzarlo. OCC::SocketApi - + Share with %1 parameter is ownCloud Condividi con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2931,119 +2917,114 @@ Non è consigliabile utilizzarlo. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Dettagli del certificato</h3> - + Common Name (CN): Nome comune (CN): - + Subject Alternative Names: Nomi alternativi soggetto (SAN): - + Organization (O): Organizzazione (O): - + Organizational Unit (OU): Unità organizzativa (OU): - + State/Province: Stato/Regione: - + Country: Nazione: - + Serial: Numero di serie: - + <h3>Issuer</h3> <h3>Emittente</h3> - + Issuer: Emittente: - + Issued on: Emesso il: - + Expires on: Scade il: - + <h3>Fingerprints</h3> <h3>Impronte digitali</h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Nota:</b> questo certificato è stato approvato manualmente</p> - + %1 (self-signed) %1 (autofirmato) - + %1 %1 - + This connection is encrypted using %1 bit %2. Questa connessione è cifrata utilizzando %1 bit %2. - + No support for SSL session tickets/identifiers Nessun supporto per i ticket/identificatori di sessione SSL - + Certificate information: Informazioni sul certificato: - + This connection is NOT secure as it is not encrypted. Questa connessione NON è sicura poiché non è cifrata. @@ -3063,67 +3044,67 @@ Non è consigliabile utilizzarlo. Fidati comunque di questo certificato - + Untrusted Certificate Certificato non attendibile - + Cannot connect securely to <i>%1</i>: Impossibile collegarsi in modo sicuro a <i>%1</i>: - + with Certificate %1 con certificato %1 + + - - &lt;not specified&gt; &lt;non specificato&gt; - - + + Organization: %1 Organizzazione: %1 - - + + Unit: %1 Reparto: %1 - - + + Country: %1 Nazione: %1 - + Fingerprint (MD5): <tt>%1</tt> Impronta digitale (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Impronta digitale (SHA1): <tt>%1</tt> - + Effective Date: %1 Data effettiva: %1 - + Expiration Date: %1 Data di scadenza: %1 - + Issuer: %1 Emittente: %1 @@ -3237,27 +3218,27 @@ Non è consigliabile utilizzarlo. Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3362,69 +3343,69 @@ Non è consigliabile utilizzarlo. Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine @@ -3448,17 +3429,17 @@ Non è consigliabile utilizzarlo. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versione %1. Per ulteriori informazioni vedi <a href="%2">3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuito da %1 e sotto licenza GNU General Public License (GPL) versione 2.0.<br/>%2 e il logo di %2 sono marchi registrati di %1 negli Stati Uniti, in altri paesi o entrambi.</p> @@ -3871,48 +3852,40 @@ Non è consigliabile utilizzarlo. PremiPulsante - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future nel futuro - + %n day(s) ago %n giorno fa%n giorni fa - + %n hour(s) ago %n ora fa%n ore fa - + now adesso - + Less than a minute ago Meno di un minuto fa - + %n minute(s) ago %n minuto fa%n minuti fa - + Some time ago Tempo fa @@ -3926,57 +3899,57 @@ Non è consigliabile utilizzarlo. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) % anno%n anni - + %n month(s) %n mese%n mesi - + %n day(s) %n giorno%n giorni - + %n hour(s) %n ora%n ore - + %n minute(s) %n minuto%n minuti - + %n second(s) %n secondo%n secondi - + %1 %2 %1 %2 @@ -3997,7 +3970,7 @@ Non è consigliabile utilizzarlo. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Compilato dalla revisione Git <a href="%1">%2</a> il %3, %4 utilizzando Qt %5, %6</small><p> diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 25ca904a5..fd2d4913f 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 指定先のファイルは予期しないサイズまたは変更時間です @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out 接続タイムアウト - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel キャンセル @@ -174,184 +174,184 @@ アカウント - + Choose what to sync 同期フォルダーを選択 - + Force sync now 今すぐ強制的に同期 - + Restart sync 同期を再実行 - + Remove folder sync connection 同期フォルダー接続を削除 - + Folder creation failed フォルダーの作成に失敗しました - + <p>Could not create local folder <i>%1</i>. <p>ローカルフォルダー <i>%1</i> を作成できません。 - + Confirm Folder Sync Connection Removal 同期フォルダー接続の削除を確認 - + Remove Folder Sync Connection 同期フォルダー接続を削除 - + Sync Running 同期を実行中 - + The syncing operation is running.<br/>Do you want to terminate it? 同期作業を実行中です。<br/>終了しますか? - + %1 in use %1 を使用中 - + %1 as <i>%2</i> <i>%2</i> の %1 - + The server version %1 is old and unsupported! Proceed at your own risk. サーバーバージョン %1 は古くサポートされていません!自己責任で進んでください。 - + Connected to %1. %1 に接続 - + Server %1 is temporarily unavailable. サーバー %1 は一時的に利用できません - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1 からサインアウトしました。 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. %2 の %1 への接続がありません。 - + Log in ログイン - + There are folders that were not synchronized because they are too big: 大きすぎるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are external storages: 外部ストレージにあるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are too big or external storages: 大きすぎたか、外部ストレージにあるため同期されなかったフォルダーがあります: - + Confirm Account Removal アカウント削除確認 - + <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> <p> アカウント <i>%1</i> を本当に削除しますか?</p><p><b>注意:</b> これによりファイルが一切削除されることはありません。</p> - + Remove connection 接続削除 - - + + Open folder フォルダーを開く - + Log out ログアウト - + Resume sync 再開 - + Pause sync 一時停止 - + <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> <p>フォルダー<i>%1</i>の同期を本当に止めますか?</p><p><b>注:</b> これによりファイルが一切削除されることはありません。</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %2 の %1(%3%) 利用中。外部ネットワークストレージや共有フォルダーを含むフォルダーがある場合は、容量の上限値が異なる可能性があります。 - + %1 of %2 in use %2 のうち %1 を使用中 - + Currently there is no storage usage information available. 現在、利用できるストレージ利用状況はありません。 - + No %1 connection configured. %1 の接続は設定されていません。 @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity サーバーアクティビティ - + Sync Protocol 同期状況 - + Not Synced 同期対象外 - + Not Synced (%1) %1 is the number of not synced files. 未同期 (%1) - + The server activity list has been copied to the clipboard. サーバーアクティビティリストをクリップボードにコピーしました。 - + The sync activity list has been copied to the clipboard. 同期状況をクリップボードにコピーしました。 - + The list of unsynced items has been copied to the clipboard. 同期されていないアイテムのリストがクリップボードにコピーされました。 - + Copied to clipboard クリップボードにコピー @@ -477,47 +477,47 @@ テキストラベル - + Server Activities サーバーアクティビティ - + Copy コピー - + Copy the activity list to the clipboard. アクティビティ一覧をコピーする - + Action Required: Notifications 操作が必要: 通知 - + <br/>Account %1 does not have activities enabled. <br/>%1 アカウントは、 アクティビティを有効にしていません。 - + You received %n new notification(s) from %2. %2 から %n の新しい通知がありました。 - + You received %n new notification(s) from %1 and %2. %1 と %2 から %n の新しい通知がありました。 - + You received new notifications from %1, %2 and other accounts. %1 と %2 、その他アカウントから新しい通知がありました。 - + %1 Notifications - Action Required 通知 %1 - 操作が必要です。 @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file 設定ファイルのアクセスでエラーが発生しました - + There was an error while accessing the configuration file at %1. 設定ファイルの %1 行目にアクセスしている時にエラーが発生しました。 - + Quit ownCloud ownCloudを終了 @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -752,26 +752,26 @@ システム上の除外ファイルを読み込めません - + A new folder larger than %1 MB has been added: %2. %1 MB より大きな新しいフォルダーが追加されました: %2 - + A folder from an external storage has been added. 外部ストレージからフォルダーが追加されました。 - + Please go in the settings to select it if you wish to download it. このフォルダーをダウンロードするには設定画面で選択してください。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 「すべてのファイルを削除」を選択すると、あなたが所有者でない限り、ファイルは使用できなくなります。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce 「ファイルを残す」を選択した場合、ファイルはサーバーから再同期されます。 - + Remove All Files? すべてのファイルを削除しますか? - + Remove all files すべてのファイルを削除 - + Keep files ファイルを残す - + This sync would reset the files to an earlier 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? この同期により同期フォルダー '%1' のファイルが以前のものに戻されます。 これは、バックアップがサーバー上に復元されたためです。 通常と同じように同期を続けると、すべてのファイルが以前の状態の古いファイルによって上書きされます。最新のローカルファイルを競合ファイルとして保存しますか? - + Backup detected バックアップが検出されました - + Normal Synchronisation 正常同期 - + Keep Local Files as Conflict コンフリクト時にローカルファイルを保持 @@ -949,12 +949,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an 同期フォルダーを追加 - + Synchronizing with local folder ローカルフォルダーを同期中 - + File ファイル @@ -962,144 +962,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder フォルダーを追加するためには、接続している必要があります。 - + Click this button to add a folder to synchronize. このボタンをクリックして同期フォルダーを追加してください。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. サーバーからフォルダーのリスト取得時にエラー - + Signed out サインアウト - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. すでに同期対象のフォルダーのため、追加したフォルダーを無効にしました。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダーの同期設定を削除してください。 - + Fetching folder list from server... サーバーからフォルダーリストを取得中... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' '%1' の更新を確認しています - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同期中 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ダウンロード %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) アップロード %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 中 %3 完了) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 残り%5、%2中%1完了 、ファイル%4個中%3個完了 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, ファイル数 %3 of %4 - + file %1 of %2 %1 / %2 ファイル - + Waiting... 待機中... - + Waiting for %n other folder(s)... %n 他のフォルダーの完了待ち... - + Preparing to sync... 同期の準備中... @@ -1107,12 +1107,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 同期フォルダーを追加 - + Add Sync Connection 同期接続を追加 @@ -1138,52 +1138,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder リモートフォルダーを追加 - + Enter the name of the new folder to be created below '%1': '%1'の下に新しいフォルダーの名前を入力: - + Folder was successfully created on %1. %1 にフォルダーが作成されました。 - + Authentication failed accessing %1 %1 アクセス中に認証に失敗しました - + Failed to create the folder on %1. Please check manually. %1 にフォルダーを作成できませんでした。手作業で確認してください。 - + Failed to list a folder. Error: %1 フォルダーをリストアップできません。エラー: %1 - + Choose this to sync the entire account アカウント全体を同期する場合はこちらを選択 - + This folder is already being synced. このフォルダーはすでに同期されています。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i>は、<i>%2</i>の親フォルダーですでに同期しています。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. すべてのファイルはすでに同期されています。他のフォルダーの同期は<b>サポートしていません</>。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダー同期設定を削除してください。 @@ -1429,7 +1429,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder フォルダー @@ -1454,17 +1454,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from コピー - + Time 時刻 - + File ファイル - + Issue @@ -1530,12 +1530,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error エラー - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>ファイル '%1'<br/>を書き込み用で開けませんでした。<br/><br/>ログ出力を<b>保存できません</b>でした!</nobr> @@ -1543,27 +1543,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available 新しいバージョンが利用可能です - + <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> <p>%1 クライアントの新しいバージョンが利用可能です。</p><p><b>%2</b> がダウンロード可能です。インストールされているバージョンは %3 です。<p> - + Skip this version 今回のバージョンをスキップ - + Skip this time 今回はスキップ - + Get update アップデートを取得 @@ -1675,11 +1675,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5プロキシ - - - Qt >= 5.4 is required in order to use the bandwidth limit - 帯域制限にはQt5.4以上が必要です - OCC::NotificationWidget @@ -1709,32 +1704,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1742,58 +1737,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready 新しい %1 アップデートの準備完了 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. %1 の新しいアップデートのインストール準備ができました。アップデートのインストール中、追加の権限が必要な場合があります。 - + Downloading version %1. Please wait... バージョン %1 をダウンロードしています。しばらくお待ちください... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. アップデートをダウンロードできませんでした。手動でアップデートするには、<a href='%1'>ここ</a> をクリックしてください。 - + Could not check for new updates. アップデートを確認できませんでした。 - + %1 version %2 available. Restart application to start the update. %1 のバージョン %2 が利用できます。アップデートを開始するためにアプリケーションを再起動してください。 - + New %1 version %2 available. Please use the system's update tool to install it. %1 の新しいバージョン %2 に更新できます。アプリのアップデートツールでインストールしてください。 - + Checking update server... アップデートをチェックしています.... - + Update status is unknown: Did not check for new updates. 更新状況が不明です: 更新をチェックしていません。 - + No updates available. Your installation is at the latest version. 利用可能なアップデートはありません。最新版がインストールされています。 - + Update Check アップデートを確認 @@ -1870,7 +1865,7 @@ for additional privileges during the process. クライアントサイドTLS証明書を設定 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>安全なサーバーアドレス <em>%1</em> に接続できませんでした。どのように進めますか?</p></body></html> @@ -1938,144 +1933,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">正常に %1 へ接続されました:%2 バージョン %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 の %1 に接続に失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 の %1 へ接続を試みた際にタイムアウトしました。 - + Trying to connect to %1 at %2... %2 の %1 へ接続を試みています... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. サーバーへの認証リクエストは '%1' へリダイレクトされました。URLは不正です、サーバーの設定に誤りがあります。 - + There was an invalid response to an authenticated webdav request 認証された WebDav リクエストに不正な応答がありました - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. サーバーによってアクセスが拒否されています。適切なアクセス権があるか検証するには、<a href="%1">ここをクリック</a>してブラウザーでサービスにアクセスしてください。 - + Invalid URL 無効なURL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ローカルの同期フォルダー %1 はすでに存在するため、同期の設定をしてください。<br/><br/> - + Creating local sync folder %1... ローカル同期フォルダー %1 を作成中... - + ok OK - + failed. 失敗。 - + Could not create local folder %1 ローカルフォルダー %1 を作成できませんでした - + No remote folder specified! リモートフォルダーが指定されていません! - + Error: %1 エラー: %1 - + creating folder on ownCloud: %1 ownCloud上にフォルダーを作成中: %1 - + Remote folder %1 created successfully. リモートフォルダー %1 は正常に生成されました。 - + The remote folder %1 already exists. Connecting it for syncing. リモートフォルダー %1 はすでに存在します。同期のために接続しています。 - - + + The folder creation resulted in HTTP error code %1 フォルダーの作成はHTTPのエラーコード %1 で終了しました - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 指定された資格情報が間違っているため、リモートフォルダーの作成に失敗しました!<br/>前に戻って資格情報を確認してください。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">おそらく資格情報が間違っているため、リモートフォルダーの作成に失敗しました。</font><br/>前に戻り、資格情報をチェックしてください。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. リモートフォルダー %1 の作成がエラーで失敗しました。<tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. %1 からリモートディレクトリ %2 への同期接続を設定しました。 - + Successfully connected to %1! %1への接続に成功しました! - + Connection to %1 could not be established. Please check again. %1 への接続を確立できませんでした。もう一度確認してください。 - + Folder rename failed フォルダー名の変更に失敗しました。 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. フォルダーまたはその中にあるファイルが他のプログラムで開かれているため、フォルダーの削除やバックアップができません。フォルダーまたはファイルを閉じてから再試行するか、セットアップをキャンセルしてください。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ローカルの同期フォルダー %1 は正常に作成されました!</b></font> @@ -2122,7 +2117,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2178,12 +2173,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 復元に失敗: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ファイルまたはフォルダーが読み込み専用の共有から削除されましたが、復元に失敗しました: %1 @@ -2191,22 +2186,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ファイル %1 を削除できません。エラー: %2 - + Attention, possible case sensitivity clash with %1 注意: %1 で大文字小文字が競合している可能性 - + could not create folder %1 フォルダー %1 を作成できません - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2214,17 +2209,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; '%1'の削除エラー: %2; - + Could not remove folder '%1' フォルダー '%1'を削除できません - + Could not remove %1 because of a local file name clash %1 はローカルファイル名が衝突しているため削除できませんでした @@ -2232,13 +2227,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash ファイル %1 はローカルファイル名が衝突しているため %2 に名前を変更できません - - + + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2306,27 +2301,28 @@ It is not advisable to use it. ファイル %1 は、大文字と小文字の区別が違う同じ名前のファイルが存在するためアップロードできません - + File Removed ファイルを削除しました - + Local file changed during syncing. It will be resumed. ローカルファイルが同期中に変更されました。再開されます。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2334,32 +2330,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - 5.4.2 以下のQt でHTTP 接続リセットが強制終了されました - - - + The local file was removed during sync. ローカルファイルを同期中に削除します。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + Unexpected return code from server (%1) サーバー (%1) からの予期しない戻りコード - + Missing File ID from server サーバーからファイルIDの戻りがありません - + Missing ETag from server サーバーからETagの戻りがありません @@ -2367,32 +2358,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - 5.4.2 以下のQt でHTTP 接続リセットが強制終了されました - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. ファイルがローカルで編集されましたが、読み込み専用の共有の一部です。ファイルは復元され、あなたの編集は競合するファイル内にあります。 - + Poll URL missing ポーリングURLがありません - + The local file was removed during sync. ローカルファイルを同期中に削除します。 - + Local file changed during sync. ローカルのファイルが同期中に変更されました。 - + The server did not acknowledge the last chunk. (No e-tag was present) サーバーは最終チャンクを認識しませんでした。(e-tag が存在しませんでした) @@ -2410,42 +2396,42 @@ It is not advisable to use it. テキストラベル - + Time 時刻 - + File ファイル - + Folder フォルダー - + Action アクション - + Size サイズ - + Local sync protocol ローカルファイル同期状況 - + Copy コピー - + Copy the activity list to the clipboard. アクティビティ一覧をコピーする @@ -2486,7 +2472,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 同期フォルダーを選択 @@ -2504,23 +2490,23 @@ It is not advisable to use it. 同期したくないリモートのサブフォルダーは、同期対象から外せます。 - + Name 名前 - + Size サイズ - - + + No subfolders currently on the server. 現在サーバーにサブフォルダーはありません。 - + An error occurred while loading the list of sub folders. サーバーからフォルダーのリスト取得時にエラーが発生しました。 @@ -2548,7 +2534,7 @@ It is not advisable to use it. ネットワーク - + Account アカウント @@ -2867,12 +2853,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error ログインエラー - + You must sign in as user %1 ユーザー %1 としてログインする必要があります @@ -2903,28 +2889,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud %1 と共有 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2932,119 +2918,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>詳細認証情報</h3> - + Common Name (CN): コモンネーム(CN): - + Subject Alternative Names: サブジェクトの別名: - + Organization (O): 組織(O): - + Organizational Unit (OU): 部門名(OU): - + State/Province: 州/県: - + Country: 国: - + Serial: シリアル番号: - + <h3>Issuer</h3> <h3>発行者</h3> - + Issuer: 発行者: - + Issued on: 発行日: - + Expires on: 有効期限: - + <h3>Fingerprints</h3> <h3>フィンガープリント</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>注意:</b> この認証は手動で承認されました</p> - + %1 (self-signed) %1 (自己証明書) - + %1 %1 - + This connection is encrypted using %1 bit %2. この接続は、%1 の %2 bit を使って暗号化されています。 - + No support for SSL session tickets/identifiers SSLセッションチケット/識別子はサポートされていません - + Certificate information: 認証情報: - + This connection is NOT secure as it is not encrypted. 暗号化されていないので、この接続は安全ではありません。 @@ -3064,67 +3045,67 @@ It is not advisable to use it. この証明書を信用する - + Untrusted Certificate 信頼できない証明書 - + Cannot connect securely to <i>%1</i>: <i>%1</i> にセキュアに接続できません: - + with Certificate %1 証明書 %1 + + - - &lt;not specified&gt; &lt;指定されていません&gt; - - + + Organization: %1 組織名: %1 - - + + Unit: %1 部門名: %1 - - + + Country: %1 国: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 発効日: %1 - + Expiration Date: %1 有効期限: %1 - + Issuer: %1 発行者: %1 @@ -3238,27 +3219,27 @@ It is not advisable to use it. %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3363,69 +3344,69 @@ It is not advisable to use it. 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 @@ -3449,17 +3430,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>バージョン %1. 詳細な情報は<a href='%2'>%3</a>を確認してください。</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 が配布し、 GNU General Public License (GPL) バージョン2.0 の下でライセンスされています。<br/>%2 及び %2 のロゴはアメリカ合衆国またはその他の国、あるいはその両方における %1 の登録商標です。</p> @@ -3872,48 +3853,40 @@ It is not advisable to use it. プッシュボタン - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future 今後 - + %n day(s) ago %n日前 - + %n hour(s) ago %n 時間前 - + now - + Less than a minute ago 1分以内 - + %n minute(s) ago %n 分前 - + Some time ago 数分前 @@ -3927,57 +3900,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n ヶ月 - + %n day(s) %n 日 - + %n hour(s) %n 時間 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 @@ -3998,7 +3971,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small><a href="%1">%2</a> %3, %4 のGitリビジョンからのビルド Qt %5, %6 を利用</small></p> diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index e20c579d1..b056af6dd 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Målfilen har uventet størrelse eller endringstidspunkt @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Forbindelsen fikk tidsavbrudd - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Avbryt @@ -174,184 +174,184 @@ Konto - + Choose what to sync Velg hva som synkroniseres - + Force sync now Tving synkronisering nå - + Restart sync Prøv synkronisering igjen - + Remove folder sync connection Fjern tilkobling for mappe-synkronisering - + Folder creation failed Oppretting av mappe feilet - + <p>Could not create local folder <i>%1</i>. <p>Klarte ikke å opprette lokal mappe <i>%1</i>. - + Confirm Folder Sync Connection Removal Bekreft fjerning av tilkobling for mappe-synkronisering - + Remove Folder Sync Connection Fjern tilkobling for mappe-synkronisering - + Sync Running Synkroniserer... - + The syncing operation is running.<br/>Do you want to terminate it? Synkronisering kjører.<br/>Vil du avbryte den? - + %1 in use %1 i bruk - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server-versjonen %1 er gammel og støttes ikke! Fortsett på egen risiko. - + Connected to %1. Tilkoblet %1. - + Server %1 is temporarily unavailable. Server %1 er midlertidig utilgjengelig. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Logget ut fra %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ingen tilkobling til %1 på %2. - + Log in Logg inn - + There are folders that were not synchronized because they are too big: Noen mapper ble ikke synkronisert fordi de er for store - + There are folders that were not synchronized because they are external storages: Noen mapper ble ikke synkronisert fordi de er eksterne lagringsplasser: - + There are folders that were not synchronized because they are too big or external storages: Noen mapper ble ikke synkronisert fordi de er for store eller de er eksterne lagringsplasser: - + Confirm Account Removal Bekreft fjerning av konto - + <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> <p>Vil du virkelig fjerne tilkoblingen til kontoen <i>%1</i>?</p><p><b>Merk:</b> Dette vil <b>ikke</b> slette noen filer.</p> - + Remove connection Fjern tilkobling - - + + Open folder Åpne mappe - + Log out Logg ut - + Resume sync Fortsett synkronisering - + Pause sync Sett synkronisering på pause - + <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> <p>Vil du virkelig stoppe synkronisering av mappen <i>%1</i>?</p><p><b>Merk:</b> Dette vil <b>ikke</b> slette noen filer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) av %2 i bruk. Noen mapper, inkludert nettverkstilkoblede eller delte mapper, kan ha andre begrensninger. - + %1 of %2 in use %1 av %2 i bruk - + Currently there is no storage usage information available. Ingen informasjon om bruk av lagringsplass tilgjengelig for øyeblikket. - + No %1 connection configured. Ingen %1-forbindelse konfigurert. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Server-aktivitet - + Sync Protocol Synkroniseringsprotokoll - + Not Synced Ikke synkronisert - + Not Synced (%1) %1 is the number of not synced files. Ikke synkronisert (%1) - + The server activity list has been copied to the clipboard. Server-aktivitetslisten er kopiert til utklippstavlen. - + The sync activity list has been copied to the clipboard. Synkroniserings-aktivitetslisten er kopiert til utklippstavlen. - + The list of unsynced items has been copied to the clipboard. Listen med usynkroniserte elementer ble kopiert til utklippstavlen. - + Copied to clipboard Kopiert til utklippstavlen @@ -477,47 +477,47 @@ Tekst-etikett - + Server Activities Server-aktiviteter - + Copy Kopier - + Copy the activity list to the clipboard. Kopier aktivitetslisten til utklippstavlen. - + Action Required: Notifications Handling kreves: Varsler - + <br/>Account %1 does not have activities enabled. <br/>Konto %1 har ikke aktiviteter aktivert. - + You received %n new notification(s) from %2. Du mottok %n nytt varsel fra %2.Du mottok %n nye varsler fra %2. - + You received %n new notification(s) from %1 and %2. Du mottok %n nytt varsel fra %1 og %2.Du mottok %n nye varsler fra %1 og %2. - + You received new notifications from %1, %2 and other accounts. Du mottok nye varsler fra %1, %2 og andre kontoer. - + %1 Notifications - Action Required %1 varsler - Handling kreves @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Feil ved lesing av konfigurasjonsfil - + There was an error while accessing the configuration file at %1. En feil oppstod ved aksessering av konfigurasjonsfilen på %1. - + Quit ownCloud Avslutt ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -752,25 +752,25 @@ Klarte ikke å lese systemets ekskluderingsfil - + A new folder larger than %1 MB has been added: %2. En ny mappe større enn %1 MB er blitt lagt til: %2. - + A folder from an external storage has been added. En mappe fra et eksternt lager er blitt lagt til. - + Please go in the settings to select it if you wish to download it. Gå til Innstillinger og velg den hvis du ønsker å laste den ned. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -781,7 +781,7 @@ Hvis du velger å beholde filene, vil de bli synkronisert tilbake til serveren h Hvis du velger å slette filene, blir de utilgjengelige for deg hvis du ikke er eieren av filen. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -790,22 +790,22 @@ Er du sikker på at du ønsker å synkronisere denne handlingen med serveren? Hvis det var et uhell og du velger å beholde filene, vil de bli synkronisert tilbake fra serveren. - + Remove All Files? Fjerne alle filer? - + Remove all files Fjern alle filer - + Keep files Behold filer - + This sync would reset the files to an earlier 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? @@ -814,17 +814,17 @@ Dette kan være fordi en backup ble gjenopprettet på serveren. Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrevet av en eldre fil i en tidligere tilstand. Ønsker du å beholde dine ferskeste lokale filer som konflikt-filer? - + Backup detected Backup oppdaget - + Normal Synchronisation Normal synkronisering - + Keep Local Files as Conflict Behold lokale filer som konflikt @@ -950,12 +950,12 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Legg til mappe-synkronisering - + Synchronizing with local folder Synkroniserer med lokal mappe - + File Fil @@ -963,144 +963,144 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderStatusModel - + You need to be connected to add a folder Du må være tilkoblet for å legge til en mappe - + Click this button to add a folder to synchronize. Klikk denne knappen for å legge til en mappe som skal synkroniseres. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Feil ved innlasting av listen av mapper fra serveren. - + Signed out Logget ut - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Du kan ikke legge til en mappe fordi du allerede synkroniserer alle filene dine. Hvis du ønsker å synkronisere individuelle mapper, må du fjerne synkroniseringen av rotmappen som er konfigurert. - + Fetching folder list from server... Henter mappeliste fra server.. - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Ser etter endringer i '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserer %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) nedlasting %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) opplasting %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 igjen, %1 av %2, fil %3 of %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Venter.. - + Waiting for %n other folder(s)... Venter på %n annen mappe...Venter på %n andre mappe(r)... - + Preparing to sync... Forbereder synkronisering... @@ -1108,12 +1108,12 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderWizard - + Add Folder Sync Connection Legg til mappe-synkronisering - + Add Sync Connection Legg til tilkobling for synkronisering @@ -1139,52 +1139,52 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderWizardRemotePath - + Create Remote Folder Opprett ekstern mappe - + Enter the name of the new folder to be created below '%1': Oppgi navnet på den nye mappen som skal opprettes under '%1': - + Folder was successfully created on %1. Mappen ble opprettet på %1. - + Authentication failed accessing %1 Autentisering feilet ved tilgang til %1 - + Failed to create the folder on %1. Please check manually. Klarte ikke å opprette mappen på %1. Sjekk manuelt. - + Failed to list a folder. Error: %1 Klarte ikke å liste en mappe. Feil: %1 - + Choose this to sync the entire account Velg dette for å synkronisere en hel konto - + This folder is already being synced. Denne mappen synkroniseres allerede. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkroniserer allerede <i>%1</i>, som er foreldremappe for <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Du synkroniserer allerede alle filene dine. Synkronisering av enda en mappe støttes <b>ikke</b>. Hvis du vil synkronisere flere mapper må du fjerne den konfigurerte synkroniseringen av rotmappe. @@ -1430,7 +1430,7 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning - + Folder Mappe @@ -1455,17 +1455,17 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning Kopier - + Time Tid - + File Fil - + Issue @@ -1531,12 +1531,12 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::Logger - + Error Feil - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Fil '%1'<br/>kan ikke åpnes for skriving.<br/><br/>Loggen kan <b>ikke</b> lagres!</nobr> @@ -1544,27 +1544,27 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::NSISUpdater - + New Version Available Ny versjon tilgjengelig - + <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> <p>En ny versjon av %1-klienten er tilgjengelig.</p><p><b>%2</b> er tilgjengelig for nedlasting. Installert versjon er %3.</p> - + Skip this version Hopp over denne versjonen - + Skip this time Hopp over denne gangen - + Get update Hent oppdatering @@ -1676,11 +1676,6 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 kreves for å bruke båndbreddebegrensing - OCC::NotificationWidget @@ -1710,32 +1705,32 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1743,59 +1738,59 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::OCUpdater - + New %1 Update Ready Ny %1-oppdatering er klar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. En ny oppdatering for %1 er i ferd med å bli installert. Oppdateringen kan be om flere rettigheter under behandlingen. - + Downloading version %1. Please wait... Laster ned versjon %1. Vennligst vent... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Klarte ikke å laste ned oppdateringen. Klikk <a href='%1'>her</a> for å laste ned oppdateringen manuelt. - + Could not check for new updates. Klarte ikke å se etter nye oppdateringer. - + %1 version %2 available. Restart application to start the update. %1 versjon %2 tilgjengelig. Start applikasjonen på nytt for å starte oppdatering. - + New %1 version %2 available. Please use the system's update tool to install it. Ny %1 versjon %2 tilgjengelig. Bruk systemets oppdateringsverktøy til å installere den. - + Checking update server... Sjekker oppdaterings-server... - + Update status is unknown: Did not check for new updates. Oppdateringsstatus er ukjent: Sjekket ikke for nye oppdateringer. - + No updates available. Your installation is at the latest version. Ingen oppdateringer tilgjengelig. Du har den nyeste versjonen. - + Update Check Oppdateringssjek @@ -1872,7 +1867,7 @@ kan be om flere rettigheter under behandlingen. Konfigurer TLS-sertifikat på klientsiden - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Klarte ikke å koble til den sikre server-addressen <em>%1</em>. Hvordan vil du gå videre?</p></body></html> @@ -1941,144 +1936,144 @@ Det er ikke tilrådelig å bruke den. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Vellykket oppkobling mot %1: %2 versjon %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Klarte ikke å koble til %1 på %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tidsavbrudd ved oppkobling mot %1 på %2. - + Trying to connect to %1 at %2... Prøver å koble til %1 på %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Autentisert forespørsel til serveren ble omdirigert til '%1'. URL-en er ugyldig, serveren er feilkonfigurert. - + There was an invalid response to an authenticated webdav request Det kom et uventet svar fra en autentisert webdav-forespørsel. - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Tilgang forbudt av serveren. For å sjekke om du har gyldig tilgang, <a href="%1">klikk her</a> for å aksessere tjenesten med nettleseren din. - + Invalid URL Ugyldig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkroniseringsmappe %1 finnes allerede. Setter den opp for synkronisering.<br/><br/> - + Creating local sync folder %1... Oppretter lokal synkroniseringsmappe %1... - + ok ok - + failed. feilet. - + Could not create local folder %1 Klarte ikke å opprette lokal mappe %1 - + No remote folder specified! Ingen ekstern mappe spesifisert! - + Error: %1 Feil: %1 - + creating folder on ownCloud: %1 oppretter mappe på ownCloud: %1 - + Remote folder %1 created successfully. Ekstern mappe %1 ble opprettet. - + The remote folder %1 already exists. Connecting it for syncing. Ekstern mappe %1 finnes allerede. Kobler den til for synkronisering. - - + + The folder creation resulted in HTTP error code %1 Oppretting av mappe resulterte i HTTP-feilkode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Oppretting av ekstern mappe feilet fordi påloggingsinformasjonen er feil!<br/>Gå tilbake og sjekk brukernavnet og passordet ditt.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Oppretting av ekstern mappe feilet, sannsynligvis fordi oppgitt påloggingsinformasjon er feil.</font><br/>Vennligst gå tilbake og sjekk ditt brukernavn og passord.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Oppretting av ekstern mappe %1 feilet med feil <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsforbindelse fra %1 til ekstern mappe %2 ble satt opp. - + Successfully connected to %1! Forbindelse til %1 opprettet! - + Connection to %1 could not be established. Please check again. Klarte ikke å etablere forbindelse til %1. Sjekk igjen. - + Folder rename failed Omdøping av mappe feilet - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan ikke fjerne og sikkerhetskopiere mappen fordi mappen eller en fil i mappen er åpen i et annet program. Lukk mappen eller filen og prøv igjen, eller avbryt oppsettet. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Oppretting av lokal synkroniseringsmappe %1 vellykket!</b></font> @@ -2125,7 +2120,7 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateDirectory - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2181,12 +2176,12 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Gjenoppretting feilet: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mappe ble fjernet fra en deling med lesetilgang, men gjenoppretting feilet: %1 @@ -2194,22 +2189,22 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 klarte ikke å slette fil %1, feil: %2 - + Attention, possible case sensitivity clash with %1 Merk! mulig sammenfall med %1 pga. sensitivitet for store/små bokstaver - + could not create folder %1 klarte ikke å opprette mappe %1 - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2217,17 +2212,17 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalRemove - + Error removing '%1': %2; Feil ved fjerning av '%1': %2; - + Could not remove folder '%1' Klarte ikke å fjerne mappe '%1' - + Could not remove %1 because of a local file name clash Kunne ikke fjerne %1 på grunn av lokalt sammenfall av filnavn @@ -2235,13 +2230,13 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Fil %1 kan ikke omdøpes til %2 på grunn av lokalt sammenfall av filnavn - - + + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2309,27 +2304,28 @@ Det er ikke tilrådelig å bruke den. Fil %1 kan ikke lastes opp fordi en annen fil eksisterer med samme navn, bare med forskjellige store og små bokstaver i navnet. - + File Removed Fil fjernet - + Local file changed during syncing. It will be resumed. Lokal fil endret under synkronisering. Den vil gjenopptas. - + Local file changed during sync. Lokal fil endret under synkronisering. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2337,32 +2333,27 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Tvinger avbryting av jobb ved HTTP connection reset med Qt < 5.4.2. - - - + The local file was removed during sync. Den lokale filen ble fjernet under synkronisering. - + Local file changed during sync. Lokal fil endret under synkronisering. - + Unexpected return code from server (%1) Uventet returkode fra serveren (%1) - + Missing File ID from server Mangler File ID fra server - + Missing ETag from server Mangler ETag fra server @@ -2370,32 +2361,27 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Tvinger avbryting av jobb ved HTTP connection reset med Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Filen ble redigert lokalt men er en del av en deling med lesetilgang. Den er blitt gjenopprettet og din endring er i konfliktfilen. - + Poll URL missing Forespørsels-URL mangler - + The local file was removed during sync. Den lokale filen ble fjernet under synkronisering. - + Local file changed during sync. Lokal fil endret under synkronisering. - + The server did not acknowledge the last chunk. (No e-tag was present) Serveren godtok ikke den siste deloverføringen. (Ingen e-tag var tilstede) @@ -2413,42 +2399,42 @@ Det er ikke tilrådelig å bruke den. Tekst-etikett - + Time Tid - + File Fil - + Folder Mappe - + Action Handling - + Size Størrelse - + Local sync protocol Lokal synkroniseringsprotokoll - + Copy Kopier - + Copy the activity list to the clipboard. Kopier aktivitetslisten til utklippstavlen. @@ -2489,7 +2475,7 @@ Det er ikke tilrådelig å bruke den. OCC::SelectiveSyncDialog - + Choose What to Sync Velg hva som synkroniseres @@ -2507,23 +2493,23 @@ Det er ikke tilrådelig å bruke den. Fjern valg for eksterne mapper som du ikke ønsker å synkronisere. - + Name Navn - + Size Størrelse - - + + No subfolders currently on the server. Ingen undermapper på serveren nå - + An error occurred while loading the list of sub folders. Det oppstod en feil ved lasting av liten med undermapper. @@ -2551,7 +2537,7 @@ Det er ikke tilrådelig å bruke den. Nettverk - + Account Konto @@ -2870,12 +2856,12 @@ Det er ikke tilrådelig å bruke den. OCC::ShibbolethCredentials - + Login Error Innloggingsfeil - + You must sign in as user %1 Du må logge inn som bruker %1 @@ -2906,28 +2892,28 @@ Det er ikke tilrådelig å bruke den. OCC::SocketApi - + Share with %1 parameter is ownCloud Del med %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2935,119 +2921,114 @@ Det er ikke tilrådelig å bruke den. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifikatdetaljer</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Subject Alternative Names: - + Organization (O): Organization (O): - + Organizational Unit (OU): Organizational Unit (OU): - + State/Province: State/Province: - + Country: Land: - + Serial: Serial: - + <h3>Issuer</h3> <h3>Utsteder</h3> - + Issuer: Utsteder: - + Issued on: Utstedt dato: - + Expires on: Utløper dato: - + <h3>Fingerprints</h3> <h3>Fingeravtrykk</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>NB:</b> Dette sertifikatet ble godkjent manuelt</p> - + %1 (self-signed) %1 (egensignert) - + %1 %1 - + This connection is encrypted using %1 bit %2. Denne forbindelsen er kryptert med %1 bit %2. - + No support for SSL session tickets/identifiers Ingen støtte for billett/ID for SSL-økt - + Certificate information: Sertifikatinformasjon: - + This connection is NOT secure as it is not encrypted. Denne forbindelsen er IKKE sikker da den ikke er kryptert. @@ -3067,67 +3048,67 @@ Det er ikke tilrådelig å bruke den. Stol på dette sertifikatet likevel - + Untrusted Certificate Ikke-klarert sertifikat - + Cannot connect securely to <i>%1</i>: Kan ikke koble sikkert til <i>%1</i>: - + with Certificate %1 med sertifikat %1 + + - - &lt;not specified&gt; &lt;ikke spesifisert&gt; - - + + Organization: %1 Organisasjon: %1 - - + + Unit: %1 Enhet: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingeravtrykk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingeravtrykk (SHA1): <tt>%1</tt> - + Effective Date: %1 Gyldig fra dato: %1 - + Expiration Date: %1 Utløpsdato: %1 - + Issuer: %1 Utsteder: %1 @@ -3241,27 +3222,27 @@ Det er ikke tilrådelig å bruke den. Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3366,69 +3347,69 @@ Det er ikke tilrådelig å bruke den. Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden @@ -3452,17 +3433,17 @@ Det er ikke tilrådelig å bruke den. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versjon %1. For mer informasjon gå til <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuert av %1 og lisensiert under GNU General Public License (GPL) Version 2.0.<br/>%2 og %2-logoet er registrerte varemerker for %1 i USA, i andre land eller begge deler.</p> @@ -3875,48 +3856,40 @@ Det er ikke tilrådelig å bruke den. Trykknapp - - QApplication - - - QT_LAYOUT_DIRECTION - LTR - - QObject - + in the future fram i tid - + %n day(s) ago i gårfor %n dager siden - + %n hour(s) ago for %n time sidenfor %n timer siden - + now - + Less than a minute ago For mindre enn et minutt siden - + %n minute(s) ago for %n minutt sidenfor %n minutter siden - + Some time ago For en stund siden @@ -3930,57 +3903,57 @@ Det er ikke tilrådelig å bruke den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n måned%n måneder - + %n day(s) %n dag%n dager - + %n hour(s) %n time%n timer - + %n minute(s) %n minutt%n minutter - + %n second(s) %n sekund%n sekunder - + %1 %2 %1 %2 @@ -4001,7 +3974,7 @@ Det er ikke tilrådelig å bruke den. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Bygget fra Git-revisjon <a href="%1">%2</a> %3, %4 med Qt %5, %6</small></p> diff --git a/translations/client_nl.ts b/translations/client_nl.ts index f236dbe1d..72c4b0494 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Het doelbestand heeft een onverwachte omvang of tijdstempel @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Time-out verbinding - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Annuleren @@ -174,184 +174,184 @@ Account - + Choose what to sync Selectieve synchronisatie - + Force sync now Forceer sync nu - + Restart sync Herstarten sync - + Remove folder sync connection Verwijderen map sync verbinding - + Folder creation failed Maken map mislukt - + <p>Could not create local folder <i>%1</i>. <p>Kon lokale map <i>%1</i> niet maken. - + Confirm Folder Sync Connection Removal Bevestig verwijderen Map Sync verbinding - + Remove Folder Sync Connection Verwijderen Map Sync verbinding - + Sync Running Bezig met synchroniseren - + The syncing operation is running.<br/>Do you want to terminate it? Bezig met synchroniseren.<br/>Wilt u stoppen met synchroniseren? - + %1 in use %1 in gebruik - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. De serverversie %1 is oud en wordt niet meer ondersteund. Verdergaan is op eigen risico. - + Connected to %1. Verbonden met %1. - + Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar - + Server %1 is currently in maintenance mode. - + Signed out from %1. Uitgelogd van %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Geen verbinding met %1 op %2. - + Log in Meld u aan - + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn: - + There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze op externe opslag staan: - + There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn of op externe opslag staan: - + Confirm Account Removal Bevestig verwijderen account - + <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> <p>Wilt u echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijdert u <b>geen</b> bestanden.</p> - + Remove connection Verwijderen verbinding - - + + Open folder Openen map - + Log out Afmelden - + Resume sync Hervatten sync - + Pause sync Pauzeren sync - + <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> <p>Weet u zeker dat u de synchronisatie van map <i>%1</i> wilt stoppen?</p><p><b>Opmerking:</b> Dit zal <b>geen</b> bestanden verwijderen.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) van %2 in gebruik. Sommige mappen, inclusief netwerkmappen en gedeelde mappen, kunnen andere limieten hebben. - + %1 of %2 in use %1 van %2 in gebruik - + Currently there is no storage usage information available. Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. - + No %1 connection configured. Geen %1 connectie geconfigureerd. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveractiviteit - + Sync Protocol Synchronisatiegeschiedenis - + Not Synced Niet gesynchroniseerd - + Not Synced (%1) %1 is the number of not synced files. Niet gesynchroniseerd (%1) - + The server activity list has been copied to the clipboard. De server activiteitenlijst is gekopieerd naar het klembord. - + The sync activity list has been copied to the clipboard. De sync activiteitenlijst is gekopieerd naar het klembord. - + The list of unsynced items has been copied to the clipboard. De lijst met niet gesyncte objecten is gekopieerd naar het klembord. - + Copied to clipboard Gekopieerd naar het klembord @@ -477,47 +477,47 @@ Tekstlabel - + Server Activities Serveractiviteiten - + Copy Kopiëren - + Copy the activity list to the clipboard. Kopieer de activiteitenlijst naar het klembord. - + Action Required: Notifications Actie verwacht: Berichten - + <br/>Account %1 does not have activities enabled. <br/>Account %1 heeft geen activiteiten ingeschakeld. - + You received %n new notification(s) from %2. U ontving %n nieuw bericht van %2.U ontving %n nieuwe berichten van %2. - + You received %n new notification(s) from %1 and %2. U ontving %n nieuwe melding(en) van %1 en %2.U ontving %n nieuwe melding(en) van %1 en %2. - + You received new notifications from %1, %2 and other accounts. Je hebt nieuwe berichten ontvangen van %1, %2 en andere acounts - + %1 Notifications - Action Required %1 Berichten - Actie verwacht @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Fout bij benaderen configuratiebestand - + There was an error while accessing the configuration file at %1. Er trad een fout op bij het benaderen configuratiebestand op %1 - + Quit ownCloud Verlaten ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -752,26 +752,26 @@ Kon het systeem-uitsluitingsbestand niet lezen - + A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. - + Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Als u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de serv Als u de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij u de eigenaar bent. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -790,22 +790,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Als dit een ongelukje was en u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - + Remove All Files? Verwijder alle bestanden? - + Remove all files Verwijder alle bestanden - + Keep files Bewaar bestanden - + This sync would reset the files to an earlier 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? @@ -814,17 +814,17 @@ Dit kan komen doordat een backup is hersteld op de server. Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere versie. Wilt u uw lokale meer recente bestanden behouden als conflict bestanden? - + Backup detected Backup gedetecteerd - + Normal Synchronisation Normale synchronisatie - + Keep Local Files as Conflict Behoud lokale bestanden als conflict @@ -950,12 +950,12 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v Toevoegen mapsync verbinding - + Synchronizing with local folder Synchroniseren met lokale map - + File Bestand @@ -963,145 +963,145 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderStatusModel - + You need to be connected to add a folder U moet verbonden zijn om een map toe te voegen - + Click this button to add a folder to synchronize. Klik op deze knop om een te synchroniseren map toe te voegen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fout bij ophalen mappenlijst van de server. - + Signed out Afgemeld - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Het toevoegen van een map is uitgeschakeld, omdat u reeds al uw bestanden synchroniseert. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde hoofdmap verwijderen. - + Fetching folder list from server... Mappenlijst ophalen van de server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchroniseren %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 van %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 over, %1 van %2, bestand %3 van %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 van %2, bestand %3 van %4 - + file %1 of %2 bestand %1 van %2 - + Waiting... Aan het wachten... - + Waiting for %n other folder(s)... Wacht op %n andere map...Wacht op %n andere mappen... - + Preparing to sync... Voorbereiden op sync... @@ -1109,12 +1109,12 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderWizard - + Add Folder Sync Connection Toevoegen mapsync verbinding - + Add Sync Connection Toevoegen Sync verbinding @@ -1140,52 +1140,52 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderWizardRemotePath - + Create Remote Folder Externe map aanmaken - + Enter the name of the new folder to be created below '%1': Voer de naam van de hieronder te maken nieuwe map in '%1': - + Folder was successfully created on %1. Map is succesvol aangemaakt op %1. - + Authentication failed accessing %1 Authenticatie mislukt bij benaderen %1 - + Failed to create the folder on %1. Please check manually. Aanmaken van de map op %1 mislukt. Controleer handmatig. - + Failed to list a folder. Error: %1 Tonen mappenlijst mislukt. Fout: %1 - + Choose this to sync the entire account Kies dit om uw volledige account te synchroniseren - + This folder is already being synced. Deze map is al gesynchroniseerd. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. U synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. U bent al uw bestanden al aan het synchroniseren. Het synchroniseren van een andere map wordt <b>niet</b> ondersteund. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde synchronisatie hoofdmap verwijderen. @@ -1435,7 +1435,7 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma - + Folder Map @@ -1460,17 +1460,17 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma Kopiëren - + Time Tijd - + File Bestand - + Issue @@ -1536,12 +1536,12 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::Logger - + Error Fout - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Bestand '%1'<br/>kan niet worden geopend voor schrijven.<br/><br/>De logging output kan <b>niet</b> worden weggeschreven!</nobr> @@ -1549,27 +1549,27 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::NSISUpdater - + New Version Available Nieuwe versie beschikbaar - + <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> <p>Er is een nieuwe versie van de %1 Client beschikbaar.</p><p><b>%2</b> is beschikbaar voor download. De geïnstalleerde versie is %3.</p> - + Skip this version Deze versie overslaan. - + Skip this time Deze keer overslaan - + Get update Ophalen update @@ -1681,11 +1681,6 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 is vereist om de bandbreedte-limieten toe te passen - OCC::NotificationWidget @@ -1715,32 +1710,32 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1748,59 +1743,59 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::OCUpdater - + New %1 Update Ready Nieuwe %1 update is klaar - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Er wordt een nieuwe update voor %1 geïnstalleerd. De updater kan vragen om extra autorisaties tijdens installatie. - + Downloading version %1. Please wait... Downloaden versie %1. Even geduld... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Kon de download niet bijwerken. Klik <a href='%1'>hier</a> om de download handmatig bij te werken. - + Could not check for new updates. Kon niet controleren op updates. - + %1 version %2 available. Restart application to start the update. %1 versie %2 beschikbaar. Herstart de applicatie om de update te starten. - + New %1 version %2 available. Please use the system's update tool to install it. Nieuwe %1 versie %2 beschikbaar. Gebruik de systeemupdate tool om te installeren. - + Checking update server... Controleren updateserver... - + Update status is unknown: Did not check for new updates. Update status is onbekend: niet gecontroleerd op nieuwe updates. - + No updates available. Your installation is at the latest version. Geen updates beschikbaar. Uw installatie is al de laatste versie. - + Update Check Controle update @@ -1877,7 +1872,7 @@ vragen om extra autorisaties tijdens installatie. Configureer het client-side TLS-certificaat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Kon niet verbinden met het opgegeven beveiligde serveradres <em>%1</em>.Hoe wilt u verder gaan?</p></body></html> @@ -1946,144 +1941,144 @@ We adviseren deze site niet te gebruiken. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Succesvol verbonden met %1: %2 versie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Kon geen verbinding maken met %1 op %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Time-out bij verbinden met %1 om %2. - + Trying to connect to %1 at %2... Probeer te verbinden met %1 om %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. De geauthentiseerde aanvraag voor de server werd omgeleid naar '%1'. De URL is onjuist, de server is verkeerd geconfigureerd. - + There was an invalid response to an authenticated webdav request Er was een ongeldig antwoord op een geauthenticeerde webdav opvraging - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Toegang door server verboden. Om te verifiëren dat u toegang mag hebben, <a href="%1">klik hier</a> om met uw browser toegang tot de service te krijgen. - + Invalid URL Ongeldige URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokale synch map %1 bestaat al, deze wordt ingesteld voor synchronisatie.<br/><br/> - + Creating local sync folder %1... Creëren lokale sync map %1... - + ok ok - + failed. mislukt. - + Could not create local folder %1 Kon lokale map %1 niet aanmaken - + No remote folder specified! Geen externe map opgegeven! - + Error: %1 Fout: %1 - + creating folder on ownCloud: %1 aanmaken map op ownCloud: %1 - + Remote folder %1 created successfully. Externe map %1 succesvol gecreërd. - + The remote folder %1 already exists. Connecting it for syncing. De remote map %1 bestaat al. Verbinden voor synchroniseren. - - + + The folder creation resulted in HTTP error code %1 Het aanmaken van de map resulteerde in HTTP foutcode %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.<br/>Ga terug en controleer uw inloggegevens.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Het aanmaken van de remote map is mislukt, waarschijnlijk omdat uw inloggegevens fout waren.</font><br/>ga terug en controleer uw inloggevens.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Aanmaken van remote map %1 mislukt met fout <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Er is een sync verbinding van %1 naar remote directory %2 opgezet. - + Successfully connected to %1! Succesvol verbonden met %1! - + Connection to %1 could not be established. Please check again. Verbinding met %1 niet geslaagd. Probeer het nog eens. - + Folder rename failed Hernoemen map mislukt - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan de map niet verwijderen en backuppen, omdat de map of een bestand daarin, geopend is in een ander programma. Sluit de map of het bestand en drup op Opnieuw of annuleer de installatie. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokale synch map %1 is succesvol aangemaakt!</b></font> @@ -2130,7 +2125,7 @@ We adviseren deze site niet te gebruiken. OCC::PropagateDirectory - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2186,12 +2181,12 @@ We adviseren deze site niet te gebruiken. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Herstel mislukte: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Er is een bestand of map verwijderd van een alleen-lezen share, maar herstellen is mislukt: %1 @@ -2199,22 +2194,22 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 kon bestand file %1 niet verwijderen, fout: %2 - + Attention, possible case sensitivity clash with %1 Let op, mogelijk conflict hoofdlettergevoeligheid met 1% - + could not create folder %1 kon map %1 niet maken - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2222,17 +2217,17 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fout bij verwijderen '%1": %2; - + Could not remove folder '%1' Kon map '%1' niet verwijderen - + Could not remove %1 because of a local file name clash Bestand %1 kon niet worden verwijderd, omdat de naam conflicteert met een lokaal bestand @@ -2240,13 +2235,13 @@ We adviseren deze site niet te gebruiken. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Bestand %1 kan niet worden hernoemd naar %2, omdat de naam conflicteert met een lokaal bestand - - + + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2314,27 +2309,28 @@ We adviseren deze site niet te gebruiken. Bestand %1 kan niet worden geüpload omdat er al een ander bestand met dezelfde naam bestaan, al verschillen hoofd/kleine letters - + File Removed Bestand verwijderd - + Local file changed during syncing. It will be resumed. Lokaal bestand gewijzigd bij sync. Wordt opnieuw meengenomen. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2342,32 +2338,27 @@ We adviseren deze site niet te gebruiken. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forceren job-beëindiging op HTTP verbindingsreset met Qt < 5.4.2. - - - + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + Unexpected return code from server (%1) Onverwachte reactie van server (%1) - + Missing File ID from server Ontbrekende File ID van de server - + Missing ETag from server Ontbrekende ETag van de server @@ -2375,32 +2366,27 @@ We adviseren deze site niet te gebruiken. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forceren job-beëindiging op HTTP verbindingsreset met Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Het bestand is lokaal bewerkt, maar hoort bij een alleen-lezen share. Het originele bestand is teruggezet en uw bewerking staat in het conflicten bestand. - + Poll URL missing URL opvraag ontbreekt - + The local file was removed during sync. Het lokale bestand werd verwijderd tijdens sync. - + Local file changed during sync. Lokaal bestand gewijzigd bij sync. - + The server did not acknowledge the last chunk. (No e-tag was present) De server heeft het laatste deel niet bevestigd (er was geen e-tag aanwezig) @@ -2418,42 +2404,42 @@ We adviseren deze site niet te gebruiken. Tekstlabel - + Time Tijd - + File Bestand - + Folder Map - + Action Handeling - + Size Grootte - + Local sync protocol Lokaal sync protocol - + Copy Kopiëren - + Copy the activity list to the clipboard. Kopieer de activiteitenlijst naar het klembord. @@ -2494,7 +2480,7 @@ We adviseren deze site niet te gebruiken. OCC::SelectiveSyncDialog - + Choose What to Sync Kies wat te synchroniseren @@ -2512,23 +2498,23 @@ We adviseren deze site niet te gebruiken. Deselecteer de externe mappen die u niet wenst te synchroniseren. - + Name Naam - + Size Grootte - - + + No subfolders currently on the server. Momenteel geen submappen op de server. - + An error occurred while loading the list of sub folders. Er trad een fout op bij het laden van de lijst met submappen. @@ -2556,7 +2542,7 @@ We adviseren deze site niet te gebruiken. Netwerk - + Account Account @@ -2875,12 +2861,12 @@ We adviseren deze site niet te gebruiken. OCC::ShibbolethCredentials - + Login Error Inlogfout - + You must sign in as user %1 U moet inloggen als gebruiker %1 @@ -2911,28 +2897,28 @@ We adviseren deze site niet te gebruiken. OCC::SocketApi - + Share with %1 parameter is ownCloud Delen met %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2940,119 +2926,114 @@ We adviseren deze site niet te gebruiken. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Certificaat details</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Alternatieve subject namen: - + Organization (O): Organisatie (O): - + Organizational Unit (OU): Organisatie unit (OU): - + State/Province: Land/Provincie: - + Country: Land: - + Serial: Serienummer: - + <h3>Issuer</h3> <h3>Uitgever</h3> - + Issuer: Uitgever: - + Issued on: Uitgegeven op: - + Expires on: Vervalt op: - + <h3>Fingerprints</h3> <h3>Vingerafdrukken</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Let op:</b> Dit certificaat werd handmatig goedgekeurd</p> - + %1 (self-signed) %1 (zelf ondertekend) - + %1 %1 - + This connection is encrypted using %1 bit %2. Deze verbinding is versleuteld via %1 bit %2. - + No support for SSL session tickets/identifiers Geen ondersteuning voor SSL-sessie tickets/identifiers - + Certificate information: Certificaat informatie: - + This connection is NOT secure as it is not encrypted. Deze verbinding is NIET veilig, omdat deze niet versleuteld is. @@ -3072,67 +3053,67 @@ We adviseren deze site niet te gebruiken. Vertrouw dit certificaat alsnog - + Untrusted Certificate Niet vertrouwd certificaat - + Cannot connect securely to <i>%1</i>: Kan niet beveiligd verbinden met <i>%1</i>: - + with Certificate %1 met certificaat %1 + + - - &lt;not specified&gt; &lt;niet gespecificeerd&gt; - - + + Organization: %1 Organisatie: %1 - - + + Unit: %1 Unit: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint (SHA1): <tt>%1</tt> - + Effective Date: %1 Ingangsdatum: %1 - + Expiration Date: %1 Vervaldatum: %1 - + Issuer: %1 Uitgever: %1 @@ -3246,27 +3227,27 @@ We adviseren deze site niet te gebruiken. Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3371,69 +3352,69 @@ We adviseren deze site niet te gebruiken. Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron @@ -3457,17 +3438,17 @@ We adviseren deze site niet te gebruiken. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versie %1. Voor meer informatie bezoek <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Gedistribueerd door %1 en gelicenseerd onder de GNU General Public License (GPL) Versie 2.0.<br/>%2 en het %2 logo zijn geregistreerde handelsmerken van %1 in de Verenigde Staten, in andere landen of beide.</p> @@ -3880,48 +3861,40 @@ We adviseren deze site niet te gebruiken. Drukknop - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future in de toekomst - + %n day(s) ago %n dag geleden%n dagen geleden - + %n hour(s) ago %n uur geleden%n uur geleden - + now nu - + Less than a minute ago Minder dan een minuut geleden - + %n minute(s) ago %n minuut geleden%n minuten geleden - + Some time ago Even geleden @@ -3935,57 +3908,57 @@ We adviseren deze site niet te gebruiken. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n jaar%n jaar - + %n month(s) %n maand%n maanden - + %n day(s) %n dag%n dagen - + %n hour(s) %n uur%n uur - + %n minute(s) %n minuut%n minuten - + %n second(s) %n seconde%n seconde(n) - + %1 %2 %1 %2 @@ -4006,7 +3979,7 @@ We adviseren deze site niet te gebruiken. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Gebouwd vanuit Git revisie <a href="%1">%2</a> op %3, %4 gebruik makend van Qt %5, %6</small></p> diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 765f86adf..2a00d2229 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Plik docelowy ma nieznaną wielkość lub datę modyfikacji @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Przekroczono czas odpowiedzi - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Anuluj @@ -174,184 +174,184 @@ Konto - + Choose what to sync Wybierz co synchronizować - + Force sync now Zsynchronizuj teraz - + Restart sync Uruchom ponownie synchronizację - + Remove folder sync connection Usuń folder połączenia synchronizacji - + Folder creation failed Nie udało się stworzyć katalogu - + <p>Could not create local folder <i>%1</i>. <p>Nie można stworzyć lokalnego katalogu <i>%1</i>. - + Confirm Folder Sync Connection Removal Usuń folder połączenia synchronizacji - + Remove Folder Sync Connection Usuń folder połączenia synchronizacji - + Sync Running Synchronizacja uruchomiona - + The syncing operation is running.<br/>Do you want to terminate it? Operacja synchronizacji jest uruchomiona.<br>Czy chcesz ją zakończyć? - + %1 in use %1 w użyciu - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Wersja serwera %1 jest przestarzała i nie jest już wspierana. Kontynuujesz na własne ryzyko. - + Connected to %1. Podłączony do %1. - + Server %1 is temporarily unavailable. Serwer %1 jest tymczasowo niedostępny. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Wylogowano z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Brak połączenia do %1 z %2. - + Log in Zaloguj - + There are folders that were not synchronized because they are too big: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duze: - + There are folders that were not synchronized because they are external storages: Te foldery nie zostały zsynchronizowane ponieważ znajdują się w pamięci zewnętrznej: - + There are folders that were not synchronized because they are too big or external storages: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duże lub znajdują się w pamięci zewnętrznej: - + Confirm Account Removal Potwierdź usunięcie konta - + <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> <p>Czy na pewno chcesz usunąć połączenie z kontem <i>%1</i>?</p><p><b>Uwaga:</b> ta operacja <b>nie</b> usunie plików klienta.</p> - + Remove connection Usuwanie połączenia - - + + Open folder Otwórz katalog - + Log out Wyloguj - + Resume sync Przywróć synchronizację - + Pause sync Zatrzymaj synchronizację - + <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> <p>Czy na pewno chcesz zatrzymać synchronizację folderu <i>%1</i>?</p><p><b>Uwaga:</b> ta operacja <b>nie</b> usunie plików z klienta.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) z %2 w użyciu. Niektóre foldery, w tym zamontowane lub udostępnione foldery w sieci, mogą mieć różne limity. - + %1 of %2 in use %1 z %2 w użyciu - + Currently there is no storage usage information available. Obecnie nie ma dostępnych informacji o wykorzystaniu pamięci masowej. - + No %1 connection configured. Połączenie %1 nie skonfigurowane. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktywność serwera - + Sync Protocol Protokół synchronizacji - + Not Synced Niezsynchronizowany - + Not Synced (%1) %1 is the number of not synced files. Niezsynchronizowany (%1) - + The server activity list has been copied to the clipboard. Log aktywności serwera został skopiowany do schowka. - + The sync activity list has been copied to the clipboard. Przebieg synchronizacji został skopiowany do schowka. - + The list of unsynced items has been copied to the clipboard. Lista niezsynchronizowanych elementów została skopiowana do schowka - + Copied to clipboard Skopiuj do schowka @@ -477,47 +477,47 @@ Etykieta - + Server Activities Działania serwera - + Copy Kopiuj - + Copy the activity list to the clipboard. Kopiuj listę aktywności do schowka. - + Action Required: Notifications Wymagana akcja: Powiadomienia - + <br/>Account %1 does not have activities enabled. <br/>Użytkownik %1 nie ma włączonej historii aktywności. - + You received %n new notification(s) from %2. Otrzymano %n nowe powiadomienie od %2.Otrzymano %n nowe powiadomienia od %2.Otrzymano %n nowych powiadomień od %2.Otrzymano %n nowych powiadomień od %2. - + You received %n new notification(s) from %1 and %2. Otrzymano %n nowe powiadomienie od %1 i %2.Otrzymano %n nowe powiadomienia od %1 i %2.Otrzymano %n nowych powiadomień %1 i %2.Otrzymano %n nowych powiadomień %1 i %2. - + You received new notifications from %1, %2 and other accounts. Otrzymałeś nowe powiadomienia z %1, %2 i innych kont. - + %1 Notifications - Action Required %1 Powiadomień - Wymagana akcja @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Błąd przy dostępie do pliku konfiguracji - + There was an error while accessing the configuration file at %1. Wystąpił błąd podczas próby dostępu do pliku konfiguracyjnego %1. - + Quit ownCloud Wyłącz ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -752,26 +752,26 @@ Nie można przeczytać pliku wyłączeń - + A new folder larger than %1 MB has been added: %2. Nowy folder większy niż %1MB został dodany: %2 - + A folder from an external storage has been added. Folder z pamięci zewnętrznej został dodany . - + Please go in the settings to select it if you wish to download it. Przejdź do ustawień żeby go zaznaczyć i pobrać. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -779,46 +779,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Usunąć wszystkie pliki? - + Remove all files Usuń wszystkie pliki - + Keep files Pozostaw pliki - + This sync would reset the files to an earlier 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? - + Backup detected Wykryto kopię zapasową. - + Normal Synchronisation Normalna synchronizacja. - + Keep Local Files as Conflict Zatrzymaj pliki lokalne i ustaw status konfliktu. @@ -944,12 +944,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Dodaj folder połączenia synchronizacji - + Synchronizing with local folder Synchronizacja z folderem lokalnym. - + File Plik @@ -957,144 +957,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Musisz być podłączony, by dodać folder. - + Click this button to add a folder to synchronize. Kliknij ten przycisk, by dodać folder do synchronizacji. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Wystąpił błąd podczas pobierania listy folderów z serwera. - + Signed out Odłączony - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Dodawanie folderu jest zablokowane, ponieważ już synchronizujesz wszystkie swoje pliki. Jeśli chcesz zsynchronizować wiele folderów, usuń folder aktualnie skonfigurowany. - + Fetching folder list from server... Pobieranie listy folderów z serwera. - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizowanie %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) pobieranie %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) wysyłanie %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 z %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Plik %3 z %4, pozostało czasu %5 (%1 z %2) - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, plik %3 z %4 - + file %1 of %2 plik %1 z %2 - + Waiting... Czekaj... - + Waiting for %n other folder(s)... Oczekiwanie na %n inny folder...Oczekiwanie na %n inne foldery...Oczekiwanie na %n innych folderów...Oczekiwanie na %n innych folderów... - + Preparing to sync... Przygotowanie do synchronizacji ... @@ -1102,12 +1102,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Dodaj folder połączenia synchronizacji - + Add Sync Connection Dodaj połączenie synchronizacji @@ -1133,52 +1133,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Dodaj zdalny katalog - + Enter the name of the new folder to be created below '%1': Wpisz nazwę dla nowego katalogu, utworzonego poniżej '%1': - + Folder was successfully created on %1. Folder został utworzony pomyślnie na %1 - + Authentication failed accessing %1 Błąd autentykacji w dostępie do %1 - + Failed to create the folder on %1. Please check manually. Nie udało się utworzyć folderu na %1. Proszę sprawdzić ręcznie. - + Failed to list a folder. Error: %1 Nie udało się wyświetlić folderu. Błąd: %1 - + Choose this to sync the entire account Wybierz to, aby zsynchronizować całe konto - + This folder is already being synced. Ten katalog jest już synchronizowany. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synchronizujesz już <i>%1</i>, który jest folderem nadrzędnym <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Już aktualizujesz wszystkie pliku. Synchronizacja innego folderu <b>nie</b> jest wspierana. Jeśli chcesz synchronizować wiele folderów, proszę usuń aktualnie skonfigurowaną synchronizację folderu głównego. @@ -1424,7 +1424,7 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn - + Folder Folder @@ -1449,17 +1449,17 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn Kopiuj - + Time Czas - + File Plik - + Issue @@ -1525,12 +1525,12 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::Logger - + Error Błąd - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Plik '%1'<br>nie może zostać otwarty do zapisu.<br/><br/>Dane wyjściowe dziennika <b>nie</b> mogą być zapisane!</nobr> @@ -1538,27 +1538,27 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::NSISUpdater - + New Version Available Nowa wersja dostępna - + <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> <p>Nowa wersja klienta %1 jest dostępna.</p><p><b>%2</b>jest dostępna do pobrania. Zainstalowana wersja to %3.<p> - + Skip this version Pomiń tą wersję - + Skip this time Pomiń tym razem - + Get update Uaktualnij @@ -1670,11 +1670,6 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Aby ustawiać limit pasma wymagana jest biblioteka Qt >= 5.4 - OCC::NotificationWidget @@ -1704,32 +1699,32 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1737,59 +1732,59 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::OCUpdater - + New %1 Update Ready Nowe %1 uaktualnienie jest gotowe - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nowe ualtualnienie dla %1 jest gotowe do instalacji. Aktualizator może zapytać o dodatkowe uprawnienia podczas procesu aktualizacji. - + Downloading version %1. Please wait... Pobieranie wersji %1. Proszę czekać... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nie można pobrać aktualizacji. Proszę kliknąć <a href='%1'>tutaj</a>, aby ściągnąć aktualizację ręcznie - + Could not check for new updates. Nie można sprawdzić dostępności nowych aktualizacji. - + %1 version %2 available. Restart application to start the update. %1 wersja %2 jest dostępna. Zrestartuj aplikację aby rozpocząć aktualizację. - + New %1 version %2 available. Please use the system's update tool to install it. Nowa %1 wersja %2 jest dostępna.Użyj systemowego narzędzia aby ją zainstalować. - + Checking update server... Sprawdzanie aktualizacji serwera... - + Update status is unknown: Did not check for new updates. Status aktualizacji nieznany. Nie sprawdzono nowych aktualizacji. - + No updates available. Your installation is at the latest version. Brak dostępnych aktualizacji. Twoja instalacja jest w najnowszej wersji. - + Update Check Sprawdź aktualizację @@ -1866,7 +1861,7 @@ o dodatkowe uprawnienia podczas procesu aktualizacji. Konfiguruj certyfikat TLS po stronie klienta - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nie można połączyć się z bezpiecznym adresem serwera <em>%1</em>. Co chcesz zrobić ?</p></body></html> @@ -1935,144 +1930,144 @@ Niezalecane jest jego użycie. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Udane połączenie z %1: %2 wersja %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Nie udało się połączyć do %1 w %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Upłynął czas podczas próby połączenia do %1 na %2. - + Trying to connect to %1 at %2... Próba połączenia z %1 w %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. - + There was an invalid response to an authenticated webdav request - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Dostęp zabroniony przez serwer. Aby sprawdzić, czy masz odpowiednie uprawnienia, kliknij <a href="%1">tutaj</a>, aby połączyć się z usługą poprzez przeglądarkę. - + Invalid URL Błędny adres url. - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokalny folder synchronizacji %1 już istnieje. Ustawiam go do synchronizacji.<br/><br/> - + Creating local sync folder %1... Tworzenie lokalnego folderu synchronizacji %1... - + ok OK - + failed. Błąd. - + Could not create local folder %1 Nie udało się utworzyć lokalnego folderu %1 - + No remote folder specified! Nie określono folderu zdalnego! - + Error: %1 Błąd: %1 - + creating folder on ownCloud: %1 tworzę folder na ownCloud: %1 - + Remote folder %1 created successfully. Zdalny folder %1 został utworzony pomyślnie. - + The remote folder %1 already exists. Connecting it for syncing. Zdalny folder %1 już istnieje. Podłączam go do synchronizowania. - - + + The folder creation resulted in HTTP error code %1 Tworzenie folderu spowodowało kod błędu HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Nie udało się utworzyć zdalnego folderu ponieważ podane dane dostępowe są nieprawidłowe!<br/>Wróć i sprawdź podane dane dostępowe.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Tworzenie folderu zdalnego nie powiodło się. Prawdopodobnie dostarczone poświadczenia są błędne.</font><br/>Wróć i sprawdź poświadczenia.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Tworzenie folderu zdalnego %1 nie powiodło się z powodu błędu <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Połączenie synchronizacji z %1 do katalogu zdalnego %2 zostało utworzone. - + Successfully connected to %1! Udane połączenie z %1! - + Connection to %1 could not be established. Please check again. Połączenie z %1 nie może być nawiązane. Sprawdź ponownie. - + Folder rename failed Zmiana nazwy folderu nie powiodła się - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nie można usunąć i zarchiwizować folderu ponieważ znajdujący się w nim plik lub folder jest otwarty przez inny program. Proszę zamknąć folder lub plik albo kliknąć ponów lub anuluj setup. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Utworzenie lokalnego folderu synchronizowanego %1 zakończone pomyślnie!</b></font> @@ -2119,7 +2114,7 @@ Niezalecane jest jego użycie. OCC::PropagateDirectory - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2175,12 +2170,12 @@ Niezalecane jest jego użycie. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2188,22 +2183,22 @@ Niezalecane jest jego użycie. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 nie można skasować pliku %1, błąd: %2 - + Attention, possible case sensitivity clash with %1 Uwaga, możliwa niezgodność związana z wielością liter w %1 - + could not create folder %1 nie można utworzyć folderu %1 - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2211,17 +2206,17 @@ Niezalecane jest jego użycie. OCC::PropagateLocalRemove - + Error removing '%1': %2; Błąd usuwania '%1': %2; - + Could not remove folder '%1' Nie można usunąć folderu '%1' - + Could not remove %1 because of a local file name clash Nie można usunąć %1 z powodu kolizji z lokalną nazwą pliku @@ -2229,13 +2224,13 @@ Niezalecane jest jego użycie. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Plik %1 nie może być nazwany %2 z powodu kolizji z lokalną nazwą pliku - - + + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2303,27 +2298,28 @@ Niezalecane jest jego użycie. - + File Removed Usunięto plik - + Local file changed during syncing. It will be resumed. Lokalny plik uległ zmianie w trakcie synchronizacji. Zostanie wznowiony. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2331,32 +2327,27 @@ Niezalecane jest jego użycie. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2364,32 +2355,27 @@ Niezalecane jest jego użycie. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Plik był edytowany lokalnie ale jest częścią udziału z prawem tylko do odczytu. Został przywrócony i Twoja edycja jest w pliku konfliktu - + Poll URL missing - + The local file was removed during sync. Pliki lokalny został usunięty podczas synchronizacji. - + Local file changed during sync. Lokalny plik zmienił się podczas synchronizacji. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2407,42 +2393,42 @@ Niezalecane jest jego użycie. Etykieta - + Time Czas - + File Plik - + Folder Folder - + Action Akcja - + Size Rozmiar - + Local sync protocol Lokalny protokół synchronizacji - + Copy Kopiuj - + Copy the activity list to the clipboard. Kopiuj listę aktywności do schowka. @@ -2483,7 +2469,7 @@ Niezalecane jest jego użycie. OCC::SelectiveSyncDialog - + Choose What to Sync Wybierz co synchronizować @@ -2501,23 +2487,23 @@ Niezalecane jest jego użycie. Odznacz foldery zdalne, których nie chcesz synchronizować. - + Name Nazwa - + Size Rozmiar - - + + No subfolders currently on the server. Na serwerze nie ma w tej chwili żadnych podkatalogów. - + An error occurred while loading the list of sub folders. Wystąpił błąd podczas wczytywania listy podfolderów @@ -2545,7 +2531,7 @@ Niezalecane jest jego użycie. Sieć - + Account Konto @@ -2864,12 +2850,12 @@ Niezalecane jest jego użycie. OCC::ShibbolethCredentials - + Login Error Błąd logowania - + You must sign in as user %1 Musisz zalogować się jako użytkownik %1 @@ -2900,28 +2886,28 @@ Niezalecane jest jego użycie. OCC::SocketApi - + Share with %1 parameter is ownCloud Współdzielone z %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2929,119 +2915,114 @@ Niezalecane jest jego użycie. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Szczegóły certyfikatu</h3> - + Common Name (CN): Nazwa (CN): - + Subject Alternative Names: Alternatywna nazwa tematu: - + Organization (O): Organizacja (O): - + Organizational Unit (OU): Jednostka organizacyjna (OU): - + State/Province: Województwo - + Country: Kraj: - + Serial: Numer seryjny: - + <h3>Issuer</h3> <h3>Wystawca</h3> - + Issuer: Emitent: - + Issued on: Data wydania: - + Expires on: Wygasa: - + <h3>Fingerprints</h3> <h3>Odciski palców</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Uwaga:</b> Ten certyfikat został ręcznie zaakceptowany</p> - + %1 (self-signed) %1 (własnoręcznie podpisany) - + %1 %1 - + This connection is encrypted using %1 bit %2. o połączenie jest szyfrowane przy użyciu %1 bit %2. - + No support for SSL session tickets/identifiers - + Certificate information: Informacje Certyfikatu: - + This connection is NOT secure as it is not encrypted. To połączenie NIE jest bezpieczne, ponieważ jest nieszyfrowane. @@ -3061,67 +3042,67 @@ Niezalecane jest jego użycie. Zaufaj temu zaświadczeniu mimo wszystko. - + Untrusted Certificate Certyfikat niezaufany - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 z certyfikatem %1 + + - - &lt;not specified&gt; &lt;nie określono&gt; - - + + Organization: %1 Organizacja: %1 - - + + Unit: %1 Jednostka: %1 - - + + Country: %1 Kraj: %1 - + Fingerprint (MD5): <tt>%1</tt> Odcisk (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Odcisk (SHA1): <tt>%1</tt> - + Effective Date: %1 Data wejścia w życie: %1 - + Expiration Date: %1 Data wygaśnięcia: %1 - + Issuer: %1 Wystawca: %1 @@ -3235,27 +3216,27 @@ Niezalecane jest jego użycie. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3360,69 +3341,69 @@ Niezalecane jest jego użycie. - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło @@ -3446,17 +3427,17 @@ Niezalecane jest jego użycie. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Wersja %1. Aby uzyskać więcej informacji prosimy odwiedzić <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3870,48 +3851,40 @@ Niezalecane jest jego użycie. Kliknij - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future w przyszłości - + %n day(s) ago %n dzień temu%n dni temu%n dni temu%n dni temu - + %n hour(s) ago %n godzinę temu%n godziny temu%n godzin temu%n godzin temu - + now teraz - + Less than a minute ago Mniej niż minutę temu - + %n minute(s) ago %n minutę temu%n minuty temu%n minut temu%n minut temu - + Some time ago Jakiś czas temu @@ -3925,57 +3898,57 @@ Kliknij Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n lata%n lat%n lat - + %n month(s) %n miesiąc%n miesiące%n miesięcy%n miesięcy - + %n day(s) %n dzień%n dni%n dni%n dni - + %n hour(s) %n godzina%n godziny%n godzin%n godzin - + %n minute(s) %n minuta%n minuty%n minut%n minut - + %n second(s) %n sekunda%n sekundy%n sekund%n sekund - + %1 %2 %1 %2 @@ -3996,7 +3969,7 @@ Kliknij ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 347ce30e5..4335c011f 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O ficheiro de destino tem um tamanho inesperado ou a hora foi modificada @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out A ligação expirou - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancelar @@ -174,184 +174,184 @@ Conta - + Choose what to sync Escolher o que sincronizar - + Force sync now Forçar a sincronização - + Restart sync Retomar sincronização - + Remove folder sync connection Remover ligação de sincronização de pasta - + Folder creation failed Não foi possível criar a pasta - + <p>Could not create local folder <i>%1</i>. <p>Não foi possível criar a pasta local<i>%1</i>. - + Confirm Folder Sync Connection Removal Confirmar Remoção da Ligação de Sincronização de Pasta - + Remove Folder Sync Connection Remover Ligação da Sincronização de Pasta - + Sync Running Sincronização em Execução - + The syncing operation is running.<br/>Do you want to terminate it? A operação de sincronização está em execução.<br/>Deseja terminá-la? - + %1 in use %1 em utilização - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão %1 do servidor é antiga e não é suportada! Prossiga por sua conta e risco. - + Connected to %1. Ligado a %1. - + Server %1 is temporarily unavailable. O servidor %1 está temporariamente indisponível. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Terminou a sessão de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Sem ligação para %1 em %2. - + Log in Iniciar Sessão - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas por serem demasiado grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas por serem armazenamento externo: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas por serem demasiado grandes ou armazenamento externo: - + Confirm Account Removal Confirmar Remoção da Conta - + <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> <p>Deseja mesmo remover a ligação da conta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar quaisquer ficheiros.</p> - + Remove connection Remover ligação - - + + Open folder Abrir pasta - + Log out Terminar sessão - + Resume sync Retomar sincronização - + Pause sync Pausar sincronização - + <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> <p>Deseja mesmo parar a sincronização da pasta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar qualquer ficheiro.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de %2 em utilização. Algumas pastas, incluindo a rede montada ou as pastas partilhadas, podem ter limites diferentes. - + %1 of %2 in use %1 de %2 em utilização - + Currently there is no storage usage information available. Atualmente não está disponível nenhuma informação da utilização do armazenamento. - + No %1 connection configured. %1 sem ligação configurada. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não Sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The sync activity list has been copied to the clipboard. A lista de atividades de sincronização foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para a área de transferência @@ -477,47 +477,47 @@ EtiquetaTexto - + Server Activities Atividades do Servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de actividades para a área de transferência. - + Action Required: Notifications Ação necessária: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Recebeu %n nova notificação de %2.Recebeu %n novas notificações de %2. - + You received %n new notification(s) from %1 and %2. Recebeu %n nova notificação de %1 e %2.Recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Necessária @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erro a aceder ao ficheiro de configuração - + There was an error while accessing the configuration file at %1. Ocorreu um erro enquanto se acedia ao ficheiro de configuração em %1. - + Quit ownCloud Sair do ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -752,26 +752,26 @@ Não foi possível ler o ficheiro excluir do sistema - + A new folder larger than %1 MB has been added: %2. Foi adicionada uma nova pasta maior que %1 MB: %2. - + A folder from an external storage has been added. Foi adicionada uma pasta vinda de armazenamento externo. - + Please go in the settings to select it if you wish to download it. Por favor, vá às configurações para a selecionar se a desejar transferir. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ Se decidir manter os ficheiros, eles serão sincronizados novamento para o servi Se decidir apagar os ficheiros, eles ficaram indisponíveis para si, a não ser que seja o seu proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Tem a certeza que deseja sincronizar essas ações com o servidor? Se foi acidental e decidir manter os seus ficheiros, eles serão sincronizados novamente apartir do servidor. - + Remove All Files? Remover todos os ficheiros? - + Remove all files Remover todos os ficheiros - + Keep files Manter ficheiros - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Isto pode ser porque um backup foi restaurado no servidor. Continuando a sincronização fará com que todos os seus ficheiros sejam substituídos por um ficheiro mais velho num estado anterior. Deseja manter os seus ficheiros locais mais recentes como ficheiros de conflito? - + Backup detected Detetada cópia de segurança - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Ficheiros Locais como Conflito @@ -951,12 +951,12 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Adicionar Ligação de Sincronização de Pasta - + Synchronizing with local folder A sincronizar com a pasta local - + File Ficheiro @@ -964,144 +964,144 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderStatusModel - + You need to be connected to add a folder Precisa de estar ligado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique neste botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro durante o carregamento da lista de pastas a partir do servidor. - + Signed out Sessão terminada - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Adicionar pasta está desativada porque já está a sincronizar todos os seus ficheiros. Se deseja sincronizar múltiplas pastas, por favor, remova a pasta raiz atualmente configurada. - + Fetching folder list from server... A obter a lista de pastas do servidor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' A procurar por alterações em '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" A sincronizar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) transferir %s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restante, %1 de %2, ficheiro %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... A aguardar... - + Waiting for %n other folder(s)... A aguardar por %n outra pasta...A aguardar por %n outra(s) pasta(s)... - + Preparing to sync... A preparar para sincronizar... @@ -1109,12 +1109,12 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderWizard - + Add Folder Sync Connection Adicionar Ligação de Sincronização de Pasta - + Add Sync Connection Adicionar Ligação de Sincronização @@ -1140,52 +1140,52 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderWizardRemotePath - + Create Remote Folder Criar Pasta Remota - + Enter the name of the new folder to be created below '%1': Insira o nome da nova pasta para ser criada em baixo '%1': - + Folder was successfully created on %1. A pasta foi criada com sucesso em %1. - + Authentication failed accessing %1 A autenticação falhou ao aceder %1 - + Failed to create the folder on %1. Please check manually. Não foi possível criar a pasta em %1. Por favor, verifique manualmente. - + Failed to list a folder. Error: %1 Não foi possível listar uma pasta. Erro: %1 - + Choose this to sync the entire account Escolha isto para sincronizar a conta completa - + This folder is already being synced. Esta pasta já foi sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Já está a sincronizar <i>%1</i>, que é uma pasta de origem de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Já está a sincronizar todos os seus ficheiros. Sincronizar outra pasta<b>não</b> é suportado. Se desejar sincronizar múltiplas pastas, por favor, remova a sincronização da pasta raiz atualmente configurada. @@ -1431,7 +1431,7 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a - + Folder Pasta @@ -1456,17 +1456,17 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a Copiar - + Time Tempo - + File Ficheiro - + Issue @@ -1532,12 +1532,12 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>O ficheiro '%1'<br/>não pode ser aberto para gravação.<br/><br/>O ficheiro de registo de saída <b>não</b> pode ser guardado!</nobr> @@ -1545,27 +1545,27 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::NSISUpdater - + New Version Available Disponível Nova Versão - + <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> <p>Está disponível uma nova versão do Cliente %1.</p><p><b>%2</b> está disponível para transferência. A versão instalada é a %3.</p> - + Skip this version Ignorar esta versão - + Skip this time Ignorar desta vez - + Get update Obter atualização @@ -1677,11 +1677,6 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a SOCKS5 proxy Proxy de SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 é necessário para poder utilizar o limite da largura de banda - OCC::NotificationWidget @@ -1711,32 +1706,32 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1744,59 +1739,59 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::OCUpdater - + New %1 Update Ready Nova Atualização %1 Pronta - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Está prestes a ser instalada uma nova atualização para %1. O atualizador poderá pedir por privilégios adicionais durante o processo. - + Downloading version %1. Please wait... Por favor, aguarde - a transferir a versão %1... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Não foi possível transferir a atualização. Por favor, clique <a href='%1'>aqui</a> para a transferir manualmente. - + Could not check for new updates. Não foi possível procurar por novas atualizações. - + %1 version %2 available. Restart application to start the update. Disponível %1 versão %2. Reinicie a aplicação para iniciar a atualização. - + New %1 version %2 available. Please use the system's update tool to install it. Disponível nova %1 versão %2. Por favor, utilize a ferramenta de atualização do sistema para a instalar. - + Checking update server... A procurar por atualizações no servidor... - + Update status is unknown: Did not check for new updates. O estado de atualização é desconhecido: não foi possível procurar por novas atualizações. - + No updates available. Your installation is at the latest version. Não estão disponíveis atualizações. A sua instalação já está com a última versão. - + Update Check Procurar por Atualizações @@ -1873,7 +1868,7 @@ poderá pedir por privilégios adicionais durante o processo. Configurar certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Não foi possível ligar ao endereço do servidor seguro <em>%1</em>. Como deseja proceder?</p></body></html> @@ -1942,144 +1937,144 @@ Não é aconselhada a sua utilização. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Ligado com sucesso a %1: %2 - versão: %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Não foi possível ligar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Tempo expirou enquanto tentava ligar a %1 em %2. - + Trying to connect to %1 at %2... A tentar ligar a %1 em %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. O pedido de autenticação para o servidor foi redirecionado para '%1'. O URL é mau, o servidor está mal configurado. - + There was an invalid response to an authenticated webdav request Houve uma resposta inválida para o pedido de autenticação webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acesso proibido pelo servidor. Para verificar que tem o acesso adequado, <a href="%1">clique aqui</a> para aceder ao serviço com o seu navegador. - + Invalid URL URL inválido - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> A pasta de sincronização local %1 já existe, a configurar para sincronizar.<br/><br/> - + Creating local sync folder %1... A criar a pasta de sincronização local %1... - + ok ok - + failed. Falhou. - + Could not create local folder %1 Não foi possível criar a pasta local %1 - + No remote folder specified! Não foi indicada a pasta remota! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 a criar a pasta na ownCloud: %1 - + Remote folder %1 created successfully. Criação da pasta remota %1 com sucesso! - + The remote folder %1 already exists. Connecting it for syncing. A pasta remota %1 já existe. Ligue-a para sincronizar. - - + + The folder creation resulted in HTTP error code %1 A criação da pasta resultou num erro HTTP com o código %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.<br/>Por favor, verifique as suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação da pasta remota falhou, provavelmente por ter introduzido as credenciais erradas.</font><br/>Por favor, verifique as suas credenciais.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. A criação da pasta remota %1 falhou com o erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. A sincronização de %1 com a pasta remota %2 foi criada com sucesso. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Não foi possível ligar a %1 . Por Favor verifique novamente. - + Folder rename failed Erro ao renomear a pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup à pasta porque a pasta ou um ficheiro nesta está aberto em outro programa. Por favor, feche a pasta ou o ficheiro e clique novamente ou cancele a configuração. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -2126,7 +2121,7 @@ Não é aconselhada a sua utilização. OCC::PropagateDirectory - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2182,12 +2177,12 @@ Não é aconselhada a sua utilização. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Restauro Falhou: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Um ficheiro ou pasta foi removido de uma partilha só de leitura, mas o restauro falhou: %1 @@ -2195,22 +2190,22 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 Não foi possivel eliminar o ficheiro %1, erro: %2 - + Attention, possible case sensitivity clash with %1 Atenção, possível sensibilidade a maiúsculas em conflito com %1 - + could not create folder %1 Não foi possivel criar a pasta %1 - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2218,17 +2213,17 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erro ao remover '%1': %2; - + Could not remove folder '%1' Não foi possível remover a pasta '%1' - + Could not remove %1 because of a local file name clash Nao foi possivel remover %1 devido a conflito local com nome de ficheiro @@ -2236,13 +2231,13 @@ Não é aconselhada a sua utilização. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash O ficheiro %1 nao pode ser renomeado para %2 devido a conflito com nome de ficheiro local - - + + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2310,27 +2305,28 @@ Não é aconselhada a sua utilização. Não foi possível transferir o ficheiro %1 devido a existir um ficheiro com o mesmo nome, diferenciando apenas as maiúsculas ou minúsculas. - + File Removed Ficheiro Eliminado - + Local file changed during syncing. It will be resumed. O ficheiro local foi alterado durante a sincronização. Vai ser finalizado. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -2338,32 +2334,27 @@ Não é aconselhada a sua utilização. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - A forçar aborto no trabalho de redefinição de conexão HTTP com Qt < 5.4.3 - - - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + Unexpected return code from server (%1) Código de resposta inesperado do servidor (%1) - + Missing File ID from server ID do ficheiro no servidor em falta - + Missing ETag from server ETag do servidor em falta @@ -2371,32 +2362,27 @@ Não é aconselhada a sua utilização. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - A forçar aborto no trabalho de redefinição de conexão HTTP com Qt < 5.4.3 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O ficheiro foi editado localmente mas faz parte de uma prtilha só de leitura. Foi restaurado mas a edição está no ficheiro de conflito. - + Poll URL missing URL poll em falta - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Ficheiro local alterado durante a sincronização. - + The server did not acknowledge the last chunk. (No e-tag was present) O servidor não reconheceu a última parte. (Nenhuma e-tag estava presente) @@ -2414,42 +2400,42 @@ Não é aconselhada a sua utilização. TextLabel - + Time Tempo - + File Ficheiro - + Folder Pasta - + Action Ação - + Size Tamanho - + Local sync protocol Protocolo de sincronização local - + Copy Copiar - + Copy the activity list to the clipboard. Copiar lista de actividades para a área de transferência. @@ -2490,7 +2476,7 @@ Não é aconselhada a sua utilização. OCC::SelectiveSyncDialog - + Choose What to Sync Escolher o Que Sincronizar @@ -2508,23 +2494,23 @@ Não é aconselhada a sua utilização. Desmarcar pastas remotas que não deseja sincronizar. - + Name Nome - + Size Tamanho - - + + No subfolders currently on the server. Atualmente não há sub-pastas no servidor. - + An error occurred while loading the list of sub folders. Ocorreu um erro ao carregar a lista das sub pastas. @@ -2552,7 +2538,7 @@ Não é aconselhada a sua utilização. Rede - + Account Conta @@ -2871,12 +2857,12 @@ Não é aconselhada a sua utilização. OCC::ShibbolethCredentials - + Login Error Erro de login - + You must sign in as user %1 Deve fazer o login como utilizador %1. @@ -2907,28 +2893,28 @@ Não é aconselhada a sua utilização. OCC::SocketApi - + Share with %1 parameter is ownCloud Partilhar com %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2936,119 +2922,114 @@ Não é aconselhada a sua utilização. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Detalhes do Certificado</h3> - + Common Name (CN): Nome Comum (NC): - + Subject Alternative Names: Nomes alternativos - + Organization (O): Organização (O): - + Organizational Unit (OU): Unidade Organizacional (UO): - + State/Province: Estado/Distrito: - + Country: País: - + Serial: Serial: - + <h3>Issuer</h3> <h3>Emissor</h3> - + Issuer: Emissor: - + Issued on: Emitido em: - + Expires on: Expira em: - + <h3>Fingerprints</h3> <h3>Impressões digitais</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Nota:</b> Este certificado foi aprovado manualmente</p> - + %1 (self-signed) %1 (auto-assinado) - + %1 %1 - + This connection is encrypted using %1 bit %2. Esta ligação é encriptada a %1 bit %2. - + No support for SSL session tickets/identifiers Nenhum suporte para tickets/identificadores de sessão SSL - + Certificate information: Informação do certificado: - + This connection is NOT secure as it is not encrypted. Esta ligação NÃO é segura uma vez que não está encriptada. @@ -3068,67 +3049,67 @@ Não é aconselhada a sua utilização. Confiar na mesma neste certificado. - + Untrusted Certificate Certificado Não Confiável - + Cannot connect securely to <i>%1</i>: Não é possível ligar com segurança a <i>%1</i>: - + with Certificate %1 com o certificado %1 + + - - &lt;not specified&gt; &lt;não especificado&gt; - - + + Organization: %1 Organização: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Chave(MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Chave(SHA1): <tt>%1</tt> - + Effective Date: %1 Data efectiva: %1 - + Expiration Date: %1 Data de Expiração: %1 - + Issuer: %1 Emissor: %1 @@ -3242,27 +3223,27 @@ Não é aconselhada a sua utilização. Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3367,69 +3348,69 @@ Não é aconselhada a sua utilização. Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem @@ -3453,17 +3434,17 @@ Não é aconselhada a sua utilização. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versão %1. Para mais informações visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Todos os direitos reservados ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado sob a GNU General Public License (GPL) Versão 2.0.<br/>%2 e o logótipo %2 são marcas registadas da %1 nos Estados Unidos, outros países, ou ambos </p> @@ -3876,48 +3857,40 @@ Não é aconselhada a sua utilização. Botão - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future no futuro - + %n day(s) ago %n dia atrás%n dias atrás - + %n hour(s) ago %n hora atrás%n horas atrás - + now agora - + Less than a minute ago Menos de um minuto atrás - + %n minute(s) ago %n minuto atrás%n minutos atrás - + Some time ago Algum tempo atrás @@ -3931,57 +3904,57 @@ Não é aconselhada a sua utilização. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n meses - + %n day(s) %n dia%n dias - + %n hour(s) %n hora%n horas - + %n minute(s) %n minuto%n minutos - + %n second(s) %n segundo%n segundos - + %1 %2 %1 %2 @@ -4002,7 +3975,7 @@ Não é aconselhada a sua utilização. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir da revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index ce0af73ce..971d321d9 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time O arquivo de destino tem um tamanho ou tempo de modificação inesperado @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Conexão expirou - + Unknown error: network reply was deleted Erro desconhecido: a resposta da rede foi excluída - + Server replied "%1 %2" to "%3 %4" Resposta do servidor "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Cancelar @@ -174,184 +174,184 @@ Conta - + Choose what to sync Escolha o que quer sincronizar - + Force sync now Forçar sincronização agora - + Restart sync Reiniciar a sincronização - + Remove folder sync connection Remover a conexão de sincronização de pastas - + Folder creation failed Falha na criação de pasta - + <p>Could not create local folder <i>%1</i>. <p>Não foi possível criar pasta local <i>%1</i>. - + Confirm Folder Sync Connection Removal Confirme a Remoção de Sincronização de Pasta - + Remove Folder Sync Connection Remover a Conexão de Sincronização de pasta - + Sync Running Sincronização Acontecendo - + The syncing operation is running.<br/>Do you want to terminate it? A operação de sincronização está acontecendo.<br/>Você deseja finaliza-la? - + %1 in use %1 em uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão do servidor %1 é antiga e não suportada! Prossiga por conta própria. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O Servidor %1 está temporariamente indisponível. - + Server %1 is currently in maintenance mode. Servidor %1 está atualmente em modo de manutenção. - + Signed out from %1. Desconectado de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obtendo autorização do navegador. <a href='%1'>Clique aqui</a> para reabrir o navegador. - + Connecting to %1... Conectando a %1... - + No connection to %1 at %2. Sem conexão para %1 em %2. - + Log in Entrar - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas porque são muito grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas porque são armazenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas porque são muito grandes ou armazenamentos externos: - + Confirm Account Removal Confirmar a Remoção da Conta - + <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> <p>Você realmente deseja remover a conexão desta conta<i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> irá deletar nenhum arquivo.</p> - + Remove connection Remover conexão - - + + Open folder Abrir pasta - + Log out Sair - + Resume sync Resumir sincronização - + Pause sync Pausar sincronização - + <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> <p>Você realmente deseja para a sincronização desta pasta <i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> vai deletar qualquer arquivo.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) de%2 em uso. Algumas pastas, incluindo montadas na rede ou pastas compartilhadas, podem ter limites diferenes. - + %1 of %2 in use %1 de %2 em uso - + Currently there is no storage usage information available. Atualmente, não há informações de uso de armazenamento disponível. - + No %1 connection configured. Nenhuma %1 conexão configurada. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não sincronizada (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor tem sido copiados para o clipboard. - + The sync activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para área de transferência @@ -477,47 +477,47 @@ RótuloTexto - + Server Activities Atividades do Servidor - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de atividades para a área de transferência. - + Action Required: Notifications Ação Requerida: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Você recebeu %n nova notificação de %2.Você recebeu %n notificações de %2. - + You received %n new notification(s) from %1 and %2. Você recebeu %n nova notificação de %1 e %2.Você recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Você recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Requerida @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Erro acessando o arquivo de configuração - + There was an error while accessing the configuration file at %1. Ocorreu um erro ao acessar o arquivo de configuração em %1. - + Quit ownCloud Sair do ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -752,26 +752,26 @@ Não foi possível ler o sistema de arquivo de exclusão - + A new folder larger than %1 MB has been added: %2. Uma nova pasta maior que %1 MB foi adicionada: %2 - + A folder from an external storage has been added. Uma pasta de um armazenamento externo foi adicionada. - + Please go in the settings to select it if you wish to download it. Por favor, vá nas configurações para selecioná-lo se você deseja baixá-lo. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,29 +782,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a Se você decidir excluir os arquivos, eles não estarão disponíveis para você, a menos que você seja o proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. Todos os arquivos na pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com o servidor, tornando tais arquivos indisponíveis, a menos que restaurados.Tem certeza de que deseja sincronizar essas ações com o servidor?Se isso foi um acidente e você decidir manter seus arquivos, eles serão re-sincronizados a partir do servidor. - + Remove All Files? Deseja Remover Todos os Arquivos? - + Remove all files Remover todos os arquivos - + Keep files Manter arquivos - + This sync would reset the files to an earlier 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? @@ -813,17 +813,17 @@ Isso pode ser porque um backup foi restaurado no servidor. Continuar a sincronização como normal fará com que todos os seus arquivos sejam substituídos por um arquivo antigo em um estado anterior. Deseja manter seus arquivos mais recentes locais como arquivos de conflito? - + Backup detected Backup detectado - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Arquivos Locais como Conflito @@ -949,12 +949,12 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Adicionar Pasta a Sincronizar - + Synchronizing with local folder Sincronizando com a pasta local - + File Arquivo @@ -962,144 +962,144 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderStatusModel - + You need to be connected to add a folder Você precisa estar conectado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique nesse botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro enquanto carregava a lista de pastas do servidor. - + Signed out Desconectado - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Adição de pasta está desativado porque você já está sincronizando todos os seus arquivos. Se você deseja sincronizar várias pastas, por favor, remova a pasta raiz configurada atualmente. - + Fetching folder list from server... Obtendo lista de pastas do servidor... - + There are unresolved conflicts. Click for details. Existem conflitos não resolvidos. Clique para detalhes. - + Checking for changes in '%1' Verificando alterações em '%1' - + Reconciling changes Reconciliando mudanças - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) baixar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restando, %1 de %2, arquivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de%2, arquivo %3 de %4 - + file %1 of %2 arquivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n outra pasta...Esperando por %n outras pastas... - + Preparing to sync... Preparando para sincronizar... @@ -1107,12 +1107,12 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderWizard - + Add Folder Sync Connection Adicionar Conexão de Sincronização de pasta - + Add Sync Connection Adicionar Conexão de Sincronização @@ -1138,52 +1138,52 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderWizardRemotePath - + Create Remote Folder Criar uma Pasta Remota - + Enter the name of the new folder to be created below '%1': Entre com o nome da nova pasta a ser criada abaixo '%1': - + Folder was successfully created on %1. Pasta foi criada com sucesso em %1. - + Authentication failed accessing %1 Falha na autenticação acessando %1 - + Failed to create the folder on %1. Please check manually. Falha ao criar a pasta em %1. Por favor, verifique manualmente. - + Failed to list a folder. Error: %1 Falha ao listar uma pasta. Erro: %1 - + Choose this to sync the entire account Escolha esta opção para sincronizar a conta inteira - + This folder is already being synced. Esta pasta já está sendo sincronizada. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Você já está sincronizando <i>%1</i>, que é uma pasta mãe de <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Você já está sincronizando todos os seus arquivos. Sincronizar outra pasta <b>não</ b> é possível. Se você deseja sincronizar várias pastas, por favor, remova a sincronização configurada atualmente para a pasta raiz. @@ -1430,7 +1430,7 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um - + Folder Pasta @@ -1455,17 +1455,17 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um Copiar - + Time Horário - + File Arquivo - + Issue Problemas @@ -1531,12 +1531,12 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::Logger - + Error Erro - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Arquivo '%1'<br/>não pode ser aberto para escrita.<br/><br/>A saída de log <b>não</b> pode ser salva!</nobr> @@ -1544,27 +1544,27 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::NSISUpdater - + New Version Available Nova Versão Disponínel - + <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> <p>Uma nova versão %1 de Ciente está disponível.</p><p><b>%2</b> está disponível para baixar. A versão instalada é a %3.</p> - + Skip this version Pule esta versão - + Skip this time Pular desta vez - + Get update Atualizar @@ -1676,11 +1676,6 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt>= 5,4 é necessário, a fim de utilizar o limite de banda - OCC::NotificationWidget @@ -1710,32 +1705,32 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::OAuth - + Error returned from the server: <em>%1</em> Erro retornado do servidor: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> Ocorreu um erro ao acessar o ponto final do token: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Não foi possível analisar o JSON retornado do servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor não continha todos os campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Erro de Login</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> <h1>Usuário errado</h1><p>Você fez logon com o usuário <em>%1</em>, mas deve fazer login com o usuário <em>%2</em>.<br>Faça o logout de %3 em outra guia, então<a href='%4'>clique aqui</a> e faça o login como usuário%2</p> @@ -1743,58 +1738,58 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::OCUpdater - + New %1 Update Ready Nova Atualização %1 Pronta - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Uma nova atualização para %1 está para ser instalada. O atualizador pode solicitar por privilégios adicionais durante o processo. - + Downloading version %1. Please wait... Baixando a versão %1. Por favor aguarde... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Não foi possível baixar atualização. Por favor, clique <a href='%1'>aqui</ a> para baixar a atualização manualmente. - + Could not check for new updates. Não foi possível verificar a existência de novas atualizações. - + %1 version %2 available. Restart application to start the update. %1 versão %2 disponível. Reinicie a aplicação para iniciar a atualização. - + New %1 version %2 available. Please use the system's update tool to install it. Nova %1 versão %2 disponível. Por favor, use a ferramenta de atualização do sistema para instalar. - + Checking update server... Verificando servidor de atualização... - + Update status is unknown: Did not check for new updates. Status de atualização é desconhecida: Não verifique para novas atualizações. - + No updates available. Your installation is at the latest version. Não há atualizações disponíveis. Sua instalação é a versão mais recente. - + Update Check Verificação de Atualização @@ -1871,7 +1866,7 @@ for additional privileges during the process. Configurar certificado TLS do lado do cliente - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Falha na conexão com o endereço do servidor seguro <em>%1</em>. Como você deseja prosseguir?</p></body></html> @@ -1939,144 +1934,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Conectado com sucesso a %1: %2 versão %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Falha ao conectar a %1 em %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. O tempo expirou ao tentar contactar %1 e %2. - + Trying to connect to %1 at %2... Tentando conectar a %1 em %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. A solicitação de autenticação ao servidor foi direcionada para '%1'. A URL está errada, a configuração do servidor está errada. - + There was an invalid response to an authenticated webdav request Houve uma resposta inválida a um pedido de autenticação WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Acesso proibido pelo servidor. Para verificar se você tem acesso adequado, <a href="%1">clique aqui</a> para acessar o serviço com o seu navegador. - + Invalid URL URL inválida - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Pasta local de sincronização %1 já existe, configurando para sincronização. <br/><br/> - + Creating local sync folder %1... Criação de pasta de sincronização local %1... - + ok ok - + failed. falhou. - + Could not create local folder %1 Não foi possível criar pasta local %1 - + No remote folder specified! Nenhuma pasta remota foi especificada! - + Error: %1 Erro: %1 - + creating folder on ownCloud: %1 criar pasta no ownCloud: %1 - + Remote folder %1 created successfully. Pasta remota %1 criada com sucesso. - + The remote folder %1 already exists. Connecting it for syncing. Pasta remota %1 já existe. Conectando para sincronizar. - - + + The folder creation resulted in HTTP error code %1 A criação da pasta resultou em um erro do código HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> A criação da pasta remota falhou porque as credenciais fornecidas estão erradas!<br/>Por favor, volte e verifique suas credenciais.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">A criação remota de pasta falhou provavelmente as causas da falha na criação da pasta remota são credenciais erradas</font><br/>Volte e verifique suas credenciais, por favor.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Falha na criação da pasta remota %1 com erro <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Uma conexão de sincronização de %1 para o diretório remoto %2 foi realizada. - + Successfully connected to %1! Conectado com sucesso a %1! - + Connection to %1 could not be established. Please check again. Conexão à %1 não foi estabelecida. Por favor, verifique novamente. - + Folder rename failed Falha no nome da pasta - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Não é possível remover e fazer backup da pasta porque a pasta ou um arquivo que está nesta pasta está aberto em outro programa. Por favor, feche a pasta ou arquivo e clique tentar novamente ou cancelar a operação. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Pasta de sincronização local %1 criada com sucesso!</b></font> @@ -2123,7 +2118,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2179,12 +2174,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falha na Restauração: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Um arquivo ou pasta foi removido de um compartilhamento de somente leitura, mas a restauração falhou: %1 @@ -2192,22 +2187,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 não foi possível apagar o arquivo %1, erro: %2 - + Attention, possible case sensitivity clash with %1 Atenção, possível caso de sensibilidade de minúscula/maiúscula, choque com %1 - + could not create folder %1 não foi possível criar a pasta %1 - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2215,17 +2210,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Erro removendo '%1': %2; - + Could not remove folder '%1' Não foi possível remover a pasta '%1' - + Could not remove %1 because of a local file name clash Não foi possível remover %1 por causa de um choque de nomes de arquivos locais @@ -2233,13 +2228,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash O arquivo %1 não pode ser renomeado para %2 por causa de um choque com nome de arquivo local - - + + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2307,27 +2302,28 @@ It is not advisable to use it. O arquivo %1 não pode ser enviado porque um outro arquivo com o mesmo nome, diferenciando apenas letras maiúsculas e minúsculas, existe - + File Removed Arquivo Removido - + Local file changed during syncing. It will be resumed. Arquivo local alterado durante a sincronização. Ele será retomado. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + + Upload of %1 exceeds the quota for the folder O envio de %1 excede a quota da pasta - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2335,32 +2331,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forçando cancelamento do trabalho em redefinição de conexão HTTP com o Qt < 5.4.2. - - - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + Unexpected return code from server (%1) Código de retorno inesperado do servidor (%1) - + Missing File ID from server Falta ID do arquivo do servidor - + Missing ETag from server Falta ETag do servidor @@ -2368,32 +2359,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Forçando cancelamento do trabalho em redefinição de conexão HTTP com o Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. O arquivo foi editado localmente mas faz parte de compartilhamento só de leitura. Ele foi restaurado mas sua edição está em conflito com o arquivo. - + Poll URL missing Faltando conjunto de URL - + The local file was removed during sync. O arquivo local foi removido durante a sincronização. - + Local file changed during sync. Arquivo local modificado durante a sincronização. - + The server did not acknowledge the last chunk. (No e-tag was present) O servidor não reconheceu o último pedaço. (Nenhuma e-tag estava presente) @@ -2411,42 +2397,42 @@ It is not advisable to use it. RótuloTexto - + Time Tempo - + File Arquivo - + Folder Pasta - + Action Ação - + Size Tamanho - + Local sync protocol Protocolo de sincronização local - + Copy Copiar - + Copy the activity list to the clipboard. Copiar a lista de atividades para a área de transferência. @@ -2487,7 +2473,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Escolher o que Sincronizar @@ -2505,23 +2491,23 @@ It is not advisable to use it. Desmarque as pastas remotas que não deseja sincronizar. - + Name Nome - + Size Tamanho - - + + No subfolders currently on the server. Nenhuma sub-pasta atualmente no servidor. - + An error occurred while loading the list of sub folders. Ocorreu um erro enquanto carregava a lista de subpastas. @@ -2549,7 +2535,7 @@ It is not advisable to use it. Rede - + Account Conta @@ -2868,12 +2854,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Erro de Login - + You must sign in as user %1 Você deve entrar como usuário %1 @@ -2904,28 +2890,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Compartilhar com %1 - + I shared something with you Eu compartilhei algo com você - + Share... Compartilhar... - + Copy private link to clipboard Copie o linque privado para a área de transferência - + Send private link by email... Envie o linque privado por e-mail... @@ -2933,119 +2919,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3> Detalhes do Certificado </h3> - + Common Name (CN): Nome Comum (CN): - + Subject Alternative Names: Assunto Nomes Alternativos: - + Organization (O): Organização (O): - + Organizational Unit (OU): Unidade Organizacional (OU): - + State/Province: Estado/Província: - + Country: País: - + Serial: Série: - + <h3>Issuer</h3> <h3>Emissor</h3> - + Issuer: Emissor: - + Issued on: Emitido em: - + Expires on: Expira em: - + <h3>Fingerprints</h3> <h3>Impressões Digitais</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b> Nota:</b>Este certificado foi aprovado manualmente</p> - + %1 (self-signed) %1 (auto-assinado) - + %1 %1 - + This connection is encrypted using %1 bit %2. Esta conexão é criptografada usando %1 bit %2. - + No support for SSL session tickets/identifiers Não há suporte para sessão SSL tickets/identificadores - + Certificate information: Informações do certificado: - + This connection is NOT secure as it is not encrypted. Esta conexão não é segura, uma vez que não é criptografada. @@ -3065,67 +3046,67 @@ It is not advisable to use it. Confiar neste certificado mesmo assim - + Untrusted Certificate Certificado Não Confiável - + Cannot connect securely to <i>%1</i>: Não é possível conectar com segurança a <i>%1</i>: - + with Certificate %1 com Certificado %1 + + - - &lt;not specified&gt; &lt;não especificado&gt; - - + + Organization: %1 Organização: %1 - - + + Unit: %1 Unidade: %1 - - + + Country: %1 País: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingerprint/Identificação (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingerprint/Identificação (SHA1): <tt>%1</tt> - + Effective Date: %1 Data efetiva: %1 - + Expiration Date: %1 Data de Vencimento: %1 - + Issuer: %1 Emissor: %1 @@ -3239,27 +3220,27 @@ It is not advisable to use it. Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. @@ -3364,69 +3345,69 @@ It is not advisable to use it. Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte @@ -3450,17 +3431,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Versão %1. Para mais informações por favor visite <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Direitos autorais ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribuído por %1 e licenciado sobre a GNU General Public License (GPL) Versão 2.0.<br/>%2 e o %2 logo são marcas registradas de %1 nos Estados Unidos, outros países ou ambos.</p> @@ -3873,48 +3854,40 @@ It is not advisable to use it. AperteoBotão - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future no futuro - + %n day(s) ago %n dia(s) atrás%n dia(s) atrás - + %n hour(s) ago %n hora(s) atrás%n hora(s) atrás - + now agora - + Less than a minute ago A menos de um minuto atrás - + %n minute(s) ago %n minuto(s) atrás%n minuto(s) atrás - + Some time ago Algum tempo atrás @@ -3928,57 +3901,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n mês(es) - + %n day(s) %n day%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 @@ -3999,7 +3972,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Construído a partir de revisão Git <a href="%1">%2</a> em %3, %4 usando Qt %5, %6</small></p> diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 43e999735..e7fed3fcc 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Конечный файл имеет некорректный размер или время изменения @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Время ожидания соединения превышено - + Unknown error: network reply was deleted Неизвестная ошибка: сетевой ответ был удален - + Server replied "%1 %2" to "%3 %4" Сервер ответил от "%1 %2" до "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Отмена @@ -174,184 +174,184 @@ Уч.запись - + Choose what to sync Выбрать объекты для синхронизации - + Force sync now Принудительно синхронизовать сейчас - + Restart sync Перезапустить синхронизацию - + Remove folder sync connection Удалить подключение синхронизации каталога - + Folder creation failed Ошибка создания каталога - + <p>Could not create local folder <i>%1</i>. <p>Не удалось создать локальный каталог <i>%1</i>. - + Confirm Folder Sync Connection Removal Подтвердите удаление подключения синхронизации каталога - + Remove Folder Sync Connection Удалить подключение синхронизации каталога - + Sync Running Синхронизация запущена - + The syncing operation is running.<br/>Do you want to terminate it? Выполняется синхронизация.<br/>Вы хотите её остановить? - + %1 in use %1 используется - + %1 as <i>%2</i> %1 как <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Сервер версии %1 устарел и не поддерживается! Продолжайте на свой страх и риск. - + Connected to %1. Соединен с %1. - + Server %1 is temporarily unavailable. Сервер %1 временно недоступен. - + Server %1 is currently in maintenance mode. Сервер %1 в настоящее время находится в режиме технического обслуживания. - + Signed out from %1. Успешно вышли из %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Получение авторизации из браузера. <a href='%1'>Нажмите здесь</a>, чтобы повторно открыть браузер. - + Connecting to %1... Соединение с %1... - + No connection to %1 at %2. Нет соединения с %1 в %2. - + Log in Войти - + There are folders that were not synchronized because they are too big: Есть каталоги, которые не были синхронизированы, так как они слишком большие: - + There are folders that were not synchronized because they are external storages: Есть каталоги, которые не были синхронизированы, так как они являются внешними хранилищами: - + There are folders that were not synchronized because they are too big or external storages: Есть каталоги, которые не были синхронизированы, так как они слишком велики или являются внешними хранилищами: - + Confirm Account Removal Подтверждение удаления учетной записи - + <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> <p>Вы действительно желаете удалить подключение к учетной записи <i>%1</i>?</p><p><b>Примечание:</b> Это действие <b>НЕ</b> удалит ваши файлы.</p> - + Remove connection Удалить подключение - - + + Open folder Открыть папку - + Log out Выйти - + Resume sync Возобновить синхронизацию - + Pause sync Приостановить синхронизацию - + <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> <p>Вы действительно желаете остановить синхронизацию папки <i>%1</i>?</p><p><b>Примечание:</b> Это действие <b>НЕ</b> удалит ваши файлы.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) из %2 используется. Некоторые папки, включая сетевые или общие, могут иметь свои собственные ограничения. - + %1 of %2 in use %1 из %2 используется - + Currently there is no storage usage information available. В данный момент информация о заполненности хранилища недоступна. - + No %1 connection configured. Нет настроенного подключения %1. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Действия Сервера - + Sync Protocol Протокол синхронизации - + Not Synced Не синхронизировано - + Not Synced (%1) %1 is the number of not synced files. Не синхронизировано (%1) - + The server activity list has been copied to the clipboard. Список активности сервера скопирован в буфер обмена. - + The sync activity list has been copied to the clipboard. Список активности синхронизации скопирован в буфер обмена. - + The list of unsynced items has been copied to the clipboard. Список несинхронизированных элементов скопирован в буфер обмена. - + Copied to clipboard Скопировано в буфер обмена @@ -477,47 +477,47 @@ TextLabel - + Server Activities Действия Сервера - + Copy Копировать - + Copy the activity list to the clipboard. Скопировать журнал синхронизации в буфер обмена. - + Action Required: Notifications Требуется действие: уведомления - + <br/>Account %1 does not have activities enabled. <br/>У учетной записи %1 не включены события. - + You received %n new notification(s) from %2. Вы получили %n новое уведомление от %2.Вы получили %n новых уведомления от %2.Вы получили %n новых уведомлений от %2.Вы получили %n новых уведомлений от %2. - + You received %n new notification(s) from %1 and %2. Вы получили %n новое уведомление от %1 и %2.Вы получили %n новых уведомления от %1 и %2.Вы получили %n новых уведомлений от %1 и %2.Вы получили %n новых уведомлений от %1 и %2. - + You received new notifications from %1, %2 and other accounts. Для Вас получено %n новых уведомлений из %1, %2 и других уч.записей. - + %1 Notifications - Action Required %1 уведомлений - требуются действия. @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Ошибка при доступе к файлу конфигурации - + There was an error while accessing the configuration file at %1. При обращении к файлу конфигурации %1 произошла ошибка. - + Quit ownCloud Выйти из ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -752,26 +752,26 @@ Невозможно прочесть системный файл исключений - + A new folder larger than %1 MB has been added: %2. Был добавлен новый каталог размером более %1 МБ: %2. - + A folder from an external storage has been added. Добавлен каталог из внешнего хранилища. - + Please go in the settings to select it if you wish to download it. Пожалуйста, перейдите в настройки, чтобы выбрать его, если вы хотите его скачать. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Если вы решили удалить файлы, они станут вам недоступны, крмое случая, когда вы сам владелец. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,39 +791,39 @@ If this was an accident and you decide to keep your files, they will be re-synce Если это произошло случайно и вы решите сохранить файлы, они будут перезакачаны с сервера. - + Remove All Files? Удалить все файлы? - + Remove all files Удалить все файлы - + Keep files Сохранить файлы - + This sync would reset the files to an earlier 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? Эта синхронизация собирается сбросить файлы в катлоге '%1' в более ранее состояние. Такое может случиться, если на сервере восстановлена резервная копия. Если продолжать синхронизацию как обычно, то ваши файлы будут перетёрты более старыми версиями. Хотите сохранить ваши локальные свежие файлы в качестве конфликтных? - + Backup detected Обнаружена резервная копия - + Normal Synchronisation Обычная синхронизация - + Keep Local Files as Conflict Сохранить локальные файлы как конфликтующие @@ -949,12 +949,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Добавить папку для синхронизации - + Synchronizing with local folder Синхронизация с локальным каталогом - + File Файл @@ -962,144 +962,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Необходимо подключиться, чтобы добавить каталог - + Click this button to add a folder to synchronize. Нажмите на эту кнопку для добавления каталога к синхронизации. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ошибка загрузки списка папок с сервера. - + Signed out Вышли из аккаунта - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Добавление папки отключена, потому что вы уже синхронизированы все файлы. Если вы хотите синхронизировать несколько папок, пожалуйста, удалите текущую корневую папку. - + Fetching folder list from server... Извлечение списка папок с сервера... - + There are unresolved conflicts. Click for details. Есть неразрешенные конфликты. Нажми для просмотра подробностей. - + Checking for changes in '%1' Проверка изменений в '%1' - + Reconciling changes Согласование изменений - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизация %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) скачивание %1/с - + u2193 %1/s u2193 %1/сjavascript:; - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) загрузка %1/с - + u2191 %1/s u2191 %1/с - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 из %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Осталось %5, %1 из %2, файл %3 из %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 из %2, файл %3 из %4 - + file %1 of %2 файл %1 из %2 - + Waiting... Ожидание... - + Waiting for %n other folder(s)... Ожидание %n директории...Ожидание %n директорий...Ожидание %n директорий...Ожидание %n директорий... - + Preparing to sync... Подготовка к синхронизации... @@ -1107,12 +1107,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Добавить папку для синхронизации - + Add Sync Connection Добавить подключение для синхронизации @@ -1138,52 +1138,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Создать Удалённый Каталог - + Enter the name of the new folder to be created below '%1': Введите имя каталога, который должен быть создан под '%1': - + Folder was successfully created on %1. Каталог успешно создан на %1. - + Authentication failed accessing %1 Ошибка авторизации при доступе к %1 - + Failed to create the folder on %1. Please check manually. Невозможно создать каталог по пути %1. Попробуйте создать его вручную. - + Failed to list a folder. Error: %1 Ошибка просмотра папки. Ошибка: %1 - + Choose this to sync the entire account Нажмите здесь для синхронизации всей учётной записи - + This folder is already being synced. Этот каталог уже выбран для синхронизации. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Каталог <i>%1</i> уже настроен для синхронизации, и он является родительским для каталога <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. В данный момент включена синхронизация всех файлов. Синхронизация другого каталога в этом режиме <b>не</b> поддерживается. Удалите синхронизацию корневого каталога сервера для синхронизации нескольких локальных каталогов. @@ -1428,7 +1428,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Папка @@ -1453,17 +1453,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Копировать - + Time Время - + File Файл - + Issue @@ -1529,12 +1529,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Ошибка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Файл '%1'<br/>не может быть открыт на запись.<br/><br/>Журнал <b>не может</b> быть сохранён!</nobr> @@ -1542,27 +1542,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Доступна новая версия - + <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> <p>Доступна новая версия приложения %1.</p><p><b>%2</b> доступна для загрузки. Установленная версия: %3.</p> - + Skip this version Пропустить эту версию - + Skip this time Пропустить в этот раз - + Get update Получить обновление @@ -1674,11 +1674,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5-прокси - - - Qt >= 5.4 is required in order to use the bandwidth limit - Чтобы использовать ограничение пропускной способности, требуется Qt версии 5.4 или новее - OCC::NotificationWidget @@ -1708,32 +1703,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1741,59 +1736,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Доступно обновление %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Новое обновление %1 в процессе установки. Установщик может запросить дополнительные разрешения во время обновления. - + Downloading version %1. Please wait... Загрузка версии %1. Пожалуйста, подождите... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Не удалось загрузить обновление. Для скачивания файлов вручную, нажмите <a href='%1'>здесь</a> - + Could not check for new updates. Не удалось проверить наличие новых обновлений. - + %1 version %2 available. Restart application to start the update. %1 версия %2 доступна. Перезагрузите приложение, чтобы запустить обновление. - + New %1 version %2 available. Please use the system's update tool to install it. Новая %1 версия %2 доступна. Пожалуйста используйте утилиту обновления системы для установки. - + Checking update server... Проверка наличия обновлений на сервере... - + Update status is unknown: Did not check for new updates. Статус обновления неизвестен: Не удалось проверить наличие обновлений. - + No updates available. Your installation is at the latest version. Обновлений в настоящий момент нет. У вас установлена самая последняя версия программы. - + Update Check Проверка Обновлений @@ -1870,7 +1865,7 @@ for additional privileges during the process. Настроить TLS сертификат клиента - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не удалось подключиться к безопасному серверу по адресу <em>%1</em>. Как Вы хотите продолжить?</p></body></html> @@ -1939,144 +1934,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успешное подключение к %1: %2 версия %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не удалось подключиться к %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Превышено время ожидания соединения к %1 на %2. - + Trying to connect to %1 at %2... Попытка соединиться с %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Запрос авторизации с сервера перенаправлен на '%1'. Ссылка не верна, сервер не настроен. - + There was an invalid response to an authenticated webdav request Обнаружен не верный ответ на авторизованный запрос WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Доступ запрещён сервером. Чтобы доказать, что у Вас есть права доступа, <a href="%1">нажмите здесь</a> для входа через Ваш браузер. - + Invalid URL Неверная ссылка - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальный каталог синхронизации %1 уже существует, используем его для синхронизации.<br/><br/> - + Creating local sync folder %1... Создание локальной папки синхронизации %1... - + ok ок - + failed. не удалось. - + Could not create local folder %1 Не удалось создать локальный каталог синхронизации %1 - + No remote folder specified! Не указан удалённый каталог! - + Error: %1 Ошибка: %1 - + creating folder on ownCloud: %1 создание каталога на ownCloud: %1 - + Remote folder %1 created successfully. Удалённый каталог %1 успешно создан. - + The remote folder %1 already exists. Connecting it for syncing. Удалённый каталог %1 уже существует. Подключение к нему для синхронизации. - - + + The folder creation resulted in HTTP error code %1 Создание каталога завершилось с HTTP-ошибкой %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Не удалось создать удаленный каталог, так как представленные параметры доступа неверны!<br/>Пожалуйста, вернитесь назад и проверьте учетные данные.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Не удалось создать удаленный каталог, возможно, указанные учетные данные неверны.</font><br/>Вернитесь назад и проверьте учетные данные.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Удаленный каталог %1 не создан из-за ошибки <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Установлено соединение синхронизации %1 к удалённому каталогу %2. - + Successfully connected to %1! Соединение с %1 установлено успешно! - + Connection to %1 could not be established. Please check again. Не удалось соединиться с %1. Попробуйте снова. - + Folder rename failed Ошибка переименования каталога - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Невозможно удалить каталог и создать его резервную копию, каталог или файл в ней открыт в другой программе. Закройте каталог или файл и нажмите "Повторить попытку", либо прервите мастер настройки. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальный каталог синхронизации %1 успешно создан!</b></font> @@ -2123,7 +2118,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2179,12 +2174,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Восстановление не удалось: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Файл или папка была удалена из доступа только для чтения, восстановление завершилось с ошибкой: %1 @@ -2192,22 +2187,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 не удалось удалить файл %1, ошибка: %2 - + Attention, possible case sensitivity clash with %1 Внимание, возможен конфликт чувствительности к регистру с %1 - + could not create folder %1 не удается создать папку %1 - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2215,17 +2210,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Ошибка при удалении '%1': %2; - + Could not remove folder '%1' Не удается удалить папку '%1' - + Could not remove %1 because of a local file name clash Не удается удалить %1 из-за локального конфликта имен @@ -2233,13 +2228,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Файл %1 не может быть переименован в %2 из-за локального конфликта имен - - + + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2307,27 +2302,28 @@ It is not advisable to use it. Невозможно загрузить файл %1, так как уже есть другой файл с тем же именем, отличающимся только регистром символов - + File Removed Файл Перемещён - + Local file changed during syncing. It will be resumed. Локальный файл изменился в процессе синхронизации. Операция будет возобновлена. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2335,32 +2331,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Принудительная остановка задачи при сбросе HTTP подключения для Qt < 5.4.2. - - - + The local file was removed during sync. Локальный файл был удалён в процессе синхронизации. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + Unexpected return code from server (%1) Неожиданный код завершения от сервера (%1) - + Missing File ID from server Отсутствует код файла от сервера - + Missing ETag from server Отсутствует ETag с сервера @@ -2368,32 +2359,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Принудительная остановка задачи при сбросе HTTP подключения для Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Измененный файл принадлежит удаленному общему ресурсу только для чтения. Файл был восстановлен, ваши правки доступны в файле конфликтов. - + Poll URL missing Не хватает сформированного URL - + The local file was removed during sync. Локальный файл был удалён в процессе синхронизации. - + Local file changed during sync. Локальный файл изменился в процессе синхронизации. - + The server did not acknowledge the last chunk. (No e-tag was present) Сервер не смог подтвердить последнюю часть данных.(Отсутствовали теги e-tag) @@ -2411,42 +2397,42 @@ It is not advisable to use it. TextLabel - + Time Время - + File Файл - + Folder Каталог - + Action Действие - + Size Размер - + Local sync protocol Локальный протокол синхронизации - + Copy Копировать - + Copy the activity list to the clipboard. Скопировать журнал синхронизации в буфер обмена. @@ -2487,7 +2473,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Уточнить объекты @@ -2505,23 +2491,23 @@ It is not advisable to use it. Снимите выбор с удалённых папок, котрые вы не хотите синхронизировать. - + Name Название - + Size Размер - - + + No subfolders currently on the server. Нет подкаталогов на сервере на данный момент. - + An error occurred while loading the list of sub folders. Произошла ошибка во время загрузки списка подпапок. @@ -2549,7 +2535,7 @@ It is not advisable to use it. Сеть - + Account Уч.запись @@ -2868,12 +2854,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Ошибка входа - + You must sign in as user %1 Вы должны войти как пользователь %1 @@ -2904,28 +2890,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Поделиться с %1 - + I shared something with you Я поделился с тобой - + Share... Поделиться... - + Copy private link to clipboard Копировать приватную ссылку в буфер обмена... - + Send private link by email... Отправить приватную ссылку по email... @@ -2933,119 +2919,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Данные сертификата:</h3> - + Common Name (CN): Общее имя (CN): - + Subject Alternative Names: Альтернативное имя субъекта: - + Organization (O): Организация (О): - + Organizational Unit (OU): Организационное подразделение (OU): - + State/Province: Область/район: - + Country: Страна: - + Serial: Номер: - + <h3>Issuer</h3> <h3>Выдан:</h3> - + Issuer: Издатель: - + Issued on: Выдан: - + Expires on: Истекает: - + <h3>Fingerprints</h3> <h3>Отпечаток</ h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Заметка:</b> Этот сертификат был одобрен вручную</p> - + %1 (self-signed) %1 (самоподписанный) - + %1 %1 - + This connection is encrypted using %1 bit %2. Это соединение зашифровано %1-битным %2. - + No support for SSL session tickets/identifiers Нет поддержки для тикетов/идентификаторов SSL сессии - + Certificate information: Информация о TLS-сертификатах: - + This connection is NOT secure as it is not encrypted. Это соединение НЕ безопасно, используется протокол без шифрования. @@ -3065,67 +3046,67 @@ It is not advisable to use it. Доверять этому сертификату в любом случае - + Untrusted Certificate Сертификат без доверия - + Cannot connect securely to <i>%1</i>: Не удалось осуществить безопасное подключение к <i>%1</i>: - + with Certificate %1 Сертификат %1 + + - - &lt;not specified&gt; &lt;не указано&gt; - - + + Organization: %1 Организация: %1 - - + + Unit: %1 Подразделение: %1 - - + + Country: %1 Страна: %1 - + Fingerprint (MD5): <tt>%1</tt> Отпечаток (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Отпечаток (SHA1): <tt>%1</tt> - + Effective Date: %1 Дата вступления в силу: %1 - + Expiration Date: %1 Дата окончания: %1 - + Issuer: %1 Издатель: %1 @@ -3239,27 +3220,27 @@ It is not advisable to use it. Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3364,69 +3345,69 @@ It is not advisable to use it. Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник @@ -3450,17 +3431,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Версия %1. Для получения дополнительной информации посетите <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Все права принадлежат ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Распространяется %1 и лицензировано под GNU General Public License (GPL) Версии 2.0.<br/>Логотипы %2 и %2 являются зарегистрированной торговой маркой %1 в США и/или других странах.</p> @@ -3873,48 +3854,40 @@ It is not advisable to use it. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future в будущем - + %n day(s) ago %n день назад%n дня назад%n дней назад%n дней назад - + %n hour(s) ago %n час назад%n часа назад%n часов назад%n часов назад - + now сейчас - + Less than a minute ago Меньше минуты назад - + %n minute(s) ago %n минута назад%n минуты назад%n минут назад%n минут назад - + Some time ago Некоторое время назад @@ -3928,57 +3901,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) %n год%n года%n лет%n лет - + %n month(s) %n месяц%n месяца%3 месяцев%n месяцев - + %n day(s) %n день%n дня%n дней%n дней - + %n hour(s) %n час%n часа%n часов%n часов - + %n minute(s) %n минута%n минуты%n минут%n минут - + %n second(s) %n секунда%n секунды%n секунд%n секунд - + %1 %2 %1 %2 @@ -3999,7 +3972,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Собрано исходников Git версии <a href="%1">%2</a> на %3, %4 используя Qt %5, %6</small></p> diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 7b0b8d621..a34ba542a 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Cieľový súbor má neočakávanú veľkosť alebo čas zmeny @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Pripojenie expirovalo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Zrušiť @@ -174,184 +174,184 @@ Účet - + Choose what to sync Vybrať čo synchronizovať - + Force sync now - + Restart sync - + Remove folder sync connection Odstrániť prepojenie priečinka - + Folder creation failed Vytvorenie priečinka zlyhalo - + <p>Could not create local folder <i>%1</i>. <p>Nemožno vytvoriť lokálny priečinok <i>%1</i>. - + Confirm Folder Sync Connection Removal Potvrdiť odstránenie prepojenia priečinka - + Remove Folder Sync Connection Odstrániť prepojenie priečinka - + Sync Running Prebiehajúca synchronizácia - + The syncing operation is running.<br/>Do you want to terminate it? Proces synchronizácie práve prebieha.<br/>Chcete ho ukončiť? - + %1 in use %1 sa používa - + %1 as <i>%2</i> %1 ako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Verzia servera %1 je stará a nepodporovaná. Pokračujte na vlastné nebezpečenstvo. - + Connected to %1. Pripojené k %1 - + Server %1 is temporarily unavailable. Server %1 je dočasne nedostupný. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Odhlásený z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Žiadne pripojenie k %1 na %2. - + Log in Prihlásiť sa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Potvrďte ostránenie účtu - + <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> <p>Naozaj chcete odstrániť pripojenie k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Tým sa <b>nevymažú</b> žiadne súbory.</p> - + Remove connection Vymazať pripojenie - - + + Open folder Otvoriť priečinok - + Log out Odhlásiť - + Resume sync Obnoviť synchronizáciu - + Pause sync Pozastaviť synchronizáciu - + <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> <p>Naozaj si prajete zastaviť synchronizácu priečinka <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>nevymaže</b> žiadne súbory.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) z %2 je využitých. Niektoré priečinky, vrátane sieťových a zdieľaných, môžu mať iné limity. - + %1 of %2 in use %1 z %2 je využitých - + Currently there is no storage usage information available. Teraz nie sú k dispozícii žiadne informácie o využití úložiska. - + No %1 connection configured. Žiadne nakonfigurované %1 spojenie @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita servera - + Sync Protocol Záznam synchronizácie - + Not Synced Nezosynchronizované - + Not Synced (%1) %1 is the number of not synced files. Nezosynchronizované (%1) - + The server activity list has been copied to the clipboard. Zoznam aktivít servera bol skopírovaný do schránky. - + The sync activity list has been copied to the clipboard. Zoznam aktivít synchronizácie bol skopírovaný do schránky. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Skopírované do schránky @@ -477,47 +477,47 @@ Štítok - + Server Activities Aktivita servera - + Copy Kopírovať - + Copy the activity list to the clipboard. Skopírovať zoznam aktivít do schránky. - + Action Required: Notifications Požaduje sa činnosť: oznámenia - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -752,24 +752,24 @@ Nemožno čítať systémový exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Odstrániť všetky súbory? - + Remove all files Odstrániť všetky súbory - + Keep files Ponechať súbory - + This sync would reset the files to an earlier 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? - + Backup detected Záloha je dostupná - + Normal Synchronisation Bežná synchronizácia - + Keep Local Files as Conflict Ponechať lokálne súbory ako konfliktné @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder Synchronizujem lokálny priečinok - + File Súbor @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Na pridanie priečinku je nutné byť pripojený - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Odhlásený - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Načítavam zoznam priečinkov zo servera... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuje sa %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stiahnuť %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrať %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, súbor %3 z %4 - + file %1 of %2 súbor %1 z %2 - + Waiting... Čakajte... - + Waiting for %n other folder(s)... - + Preparing to sync... Príprava na synchronizáciu... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Vytvoriť vzdialený priečinok - + Enter the name of the new folder to be created below '%1': Zadajte názov nového priečinka, ktorý bude vytvorený v '%1': - + Folder was successfully created on %1. Priečinok bol úspešne vytvorený na %1. - + Authentication failed accessing %1 Zlyhalo overenie pri pripojení %1 - + Failed to create the folder on %1. Please check manually. Na %1 zlyhalo vytvorenie priečinka. Skontrolujte to, prosím, ručne. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Zvoľte pre synchronizáciu celého účtu - + This folder is already being synced. Tento priečinok sa už synchronizuje. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Priečinok <i>%1</i> už synchronizujete a je nadradený priečinku <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Už synchronizujete všetky vaše súbory. Synchronizácia dalšieho priečinka <b>nie je</b> podporovaná. Ak chcete synchronizovať viac priečinkov, odstránte, prosím, synchronizáciu aktuálneho kořenového priečinka. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Priečinok @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Kopírovať - + Time Čas - + File Súbor - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Chyba - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Súbor '%1'<br/>nesmie byť otvorený pre proces úprav.</br/><br/>Systémový záznam (log) <b>nemôže</b> byť uložený!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Nová verzia je k dispozícii - + <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> <p>Je dostupná nová verzia klienta %1.</p><p><b>%2</b> je dostupná na stiahnutie. Nainštalovaná verzia je %3.</p> - + Skip this version Preskočiť túto verziu - + Skip this time Tentoraz preskočiť - + Get update Aktualizovať teraz @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,59 +1728,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Pripravená je nová aktualizácia %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nainštaluje sa nová aktualizácia pre %1. V priebehu aktualizácie môžu byť vyžadované dodatočné oprávnenia. - + Downloading version %1. Please wait... Sťahujem verziu %1. Čakajte prosím... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Nemôžem stiahnuť aktualizáciu. Kliknite, prosím, na <a href='%1'>tento odkaz</a> pre ručné stiahnutie aktualizácie. - + Could not check for new updates. Nemôžem skontrolovať dostupnosť aktualizácie. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Kontrolujem aktualizačný server... - + Update status is unknown: Did not check for new updates. Stav aktualizácie nie je známy: Neboli skontrolované nové aktualizácie. - + No updates available. Your installation is at the latest version. Žiadne aktualizácie nie sú k dispozícii. Používate aktuálnu verziu. - + Update Check Kontrola aktualizácií @@ -1862,7 +1857,7 @@ môžu byť vyžadované dodatočné oprávnenia. Nakonfigurovať klientský TLS certifikát - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Nepodarilo sa pripojenie k zabezpečenému serveru <em>%1</em>. Ako chcete pokračovať?</p></body></html> @@ -1931,144 +1926,144 @@ Nie je vhodné ju používať. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Úspešne pripojené k %1: %2 verzie %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Zlyhalo spojenie s %1 o %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Časový limit vypršal pri pokuse o pripojenie k %1 na %2. - + Trying to connect to %1 at %2... Pokúšam sa o pripojenie k %1 na %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Overená požiadavka na server bola presmerovaná na '%1'. URL je zlá, server nie je správne nakonfigurovaný. - + There was an invalid response to an authenticated webdav request Neplatná odpoveď na overenú webdav požiadavku - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Prístup zamietnutý serverom. Po overení správnych prístupových práv, <a href="%1">kliknite sem</a> a otvorte službu v svojom prezerači. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokálny synchronizačný priečinok %1 už existuje, prebieha jeho nastavovanie pre synchronizáciu.<br/><br/> - + Creating local sync folder %1... Vytváranie lokálneho synchronizačného priečinka %1 ... - + ok v poriadku - + failed. neúspešné. - + Could not create local folder %1 Nemožno vytvoriť lokálny priečinok %1 - + No remote folder specified! Vzdialený priečinok nie je nastavený! - + Error: %1 Chyba: %1 - + creating folder on ownCloud: %1 vytváram priečinok v ownCloude: %1 - + Remote folder %1 created successfully. Vzdialený priečinok %1 bol úspešne vytvorený. - + The remote folder %1 already exists. Connecting it for syncing. Vzdialený priečinok %1 už existuje. Prebieha jeho pripájanie pre synchronizáciu. - - + + The folder creation resulted in HTTP error code %1 Vytváranie priečinka skončilo s HTTP chybovým kódom %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Proces vytvárania vzdialeného priečinka zlyhal, lebo použité prihlasovacie údaje nie sú správne!<br/>Prosím skontrolujte si vaše údaje a skúste to znovu.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Vytvorenie vzdialeného priečinka pravdepodobne zlyhalo kvôli nesprávnym prihlasovacím údajom.</font><br/>Prosím choďte späť a skontrolujte ich.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Vytvorenie vzdialeného priečinka %1 zlyhalo s chybou <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Synchronizačné spojenie z %1 do vzdialeného priečinka %2 bolo práve nastavené. - + Successfully connected to %1! Úspešne pripojené s %1! - + Connection to %1 could not be established. Please check again. Pripojenie k %1 nemohlo byť iniciované. Prosím skontrolujte to znovu. - + Folder rename failed Premenovanie priečinka zlyhalo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Nemožno odstrániť a zazálohovať priečinok, pretože priečinok alebo súbor je otvorený v inom programe. Prosím zatvorte priečinok nebo súbor a skúste to znovu alebo zrušte akciu. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokálny synchronizačný priečinok %1 bol úspešne vytvorený!</b></font> @@ -2115,7 +2110,7 @@ Nie je vhodné ju používať. OCC::PropagateDirectory - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2171,12 +2166,12 @@ Nie je vhodné ju používať. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovenie zlyhalo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2184,22 +2179,22 @@ Nie je vhodné ju používať. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Pozor, možná kolízia z dôvodu veľkosti písmen s %1 - + could not create folder %1 nemožno vytvoriť priečinok %1 - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2207,17 +2202,17 @@ Nie je vhodné ju používať. OCC::PropagateLocalRemove - + Error removing '%1': %2; Chyba pri odstraňovaní '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Nemožno odstrániť %1 z dôvodu kolízie názvu súboru s lokálnym súborom @@ -2225,13 +2220,13 @@ Nie je vhodné ju používať. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Súbor %1 nemôže byť premenovaný na %2 z dôvodu, že tento názov je už použitý - - + + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2299,27 +2294,28 @@ Nie je vhodné ju používať. - + File Removed Súbor zmazaný - + Local file changed during syncing. It will be resumed. Lokálny súbor bol zmenený počas synchronizácie. Bude obnovený. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2327,32 +2323,27 @@ Nie je vhodné ju používať. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vynútené ukončenie procesu pri resete HTTP pripojení s Qt < 5.4.2. - - - + The local file was removed during sync. Lokálny súbor bol odstránený počas synchronizácie. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2360,32 +2351,27 @@ Nie je vhodné ju používať. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vynútené ukončenie procesu pri resete HTTP pripojení s Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Súbor bol zmenený, ale je súčasťou zdieľania len na čítanie. Pôvodný súbor bol obnovený a upravená verzia je uložená v konfliktnom súbore. - + Poll URL missing Chýba URL adresa - + The local file was removed during sync. Lokálny súbor bol odstránený počas synchronizácie. - + Local file changed during sync. Lokálny súbor bol zmenený počas synchronizácie. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2403,42 +2389,42 @@ Nie je vhodné ju používať. Štítok - + Time Čas - + File Súbor - + Folder Priečinok - + Action Akcia - + Size Veľkosť - + Local sync protocol Lokálny protokol synchronizácie - + Copy Kopírovať - + Copy the activity list to the clipboard. Skopírovať zoznam aktivít do schránky. @@ -2479,7 +2465,7 @@ Nie je vhodné ju používať. OCC::SelectiveSyncDialog - + Choose What to Sync Vybrať čo synchronizovať @@ -2497,23 +2483,23 @@ Nie je vhodné ju používať. - + Name Názov - + Size Veľkosť - - + + No subfolders currently on the server. Na serveri teraz nie sú žiadne podpriečinky. - + An error occurred while loading the list of sub folders. @@ -2541,7 +2527,7 @@ Nie je vhodné ju používať. Sieť - + Account Účet @@ -2860,12 +2846,12 @@ Nie je vhodné ju používať. OCC::ShibbolethCredentials - + Login Error Chybné prihlásenie - + You must sign in as user %1 Musíte sa prihlásiť ako používateľ %1 @@ -2896,28 +2882,28 @@ Nie je vhodné ju používať. OCC::SocketApi - + Share with %1 parameter is ownCloud Zdieľať s %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2925,119 +2911,114 @@ Nie je vhodné ju používať. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Podrobnosti certifikátu</h3> - + Common Name (CN): Bežné meno (CN): - + Subject Alternative Names: Alternatívne meno subjektu: - + Organization (O): Organizácia (O): - + Organizational Unit (OU): Organizačná jednotka (OU): - + State/Province: Štát/Provincia: - + Country: Krajina: - + Serial: Sériové číslo: - + <h3>Issuer</h3> <h3>Vydavateľ</h3> - + Issuer: Vydavateľ: - + Issued on: Vydané: - + Expires on: Platí do: - + <h3>Fingerprints</h3> <h3>Odtlačky</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Poznámka:</b> Tento certifikát bol ručne schválený</p> - + %1 (self-signed) %1 (podpísaný sám sebou) - + %1 %1 - + This connection is encrypted using %1 bit %2. Toto spojenie je šifrované pomocou %1 bitovej šifry %2. - + No support for SSL session tickets/identifiers - + Certificate information: Informácie o certifikáte: - + This connection is NOT secure as it is not encrypted. Toto spojenie NIE JE bezpečné, pretože nie je šifrované. @@ -3057,67 +3038,67 @@ Nie je vhodné ju používať. Dôverovať danému certifikátu v každom prípade - + Untrusted Certificate Nedôveryhodný certifikát - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 s certifikátom %1 + + - - &lt;not specified&gt; &lt;nešpecifikované&gt; - - + + Organization: %1 Organizácia: %1 - - + + Unit: %1 Jednotka: %1 - - + + Country: %1 Krajina: %1 - + Fingerprint (MD5): <tt>%1</tt> Odtlačok (MD5 hash): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Odtlačok (SHA1 hash): <tt>%1</tt> - + Effective Date: %1 Dátum účinnosti: %1 - + Expiration Date: %1 Koniec platnosti: %1 - + Issuer: %1 Vydavateľ: %1 @@ -3231,27 +3212,27 @@ Nie je vhodné ju používať. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3356,69 +3337,69 @@ Nie je vhodné ju používať. Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj @@ -3442,17 +3423,17 @@ Nie je vhodné ju používať. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Verzia %1. Pre viac informácií choďte na <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Šíri %1 pod licenciou GNU General Public License (GPL) Verzia 2.0.<br/>%2 a %2 logo sú registrované známky %1 v USA, ostatných krajinách, alebo oboje.</p> @@ -3865,48 +3846,40 @@ Nie je vhodné ju používať. Tlačidlo - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future v budúcnosti - + %n day(s) ago pred %n dňompred %n dňamipred %n dňami - + %n hour(s) ago pred %n hodinoupred %n hodinamipred %n hodinami - + now teraz - + Less than a minute ago Menej ako pred minútou - + %n minute(s) ago pred %n minútoupred %n minútamipred %n minútami - + Some time ago Pred istým časom @@ -3920,57 +3893,57 @@ Nie je vhodné ju používať. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n rokov - + %n month(s) %n mesiac%n mesiace%n mesiacov - + %n day(s) %n deň%n dni%n dní - + %n hour(s) %n hodina%n hodiny%n hodín - + %n minute(s) %n minúta%n minúty%n minút - + %n second(s) %n sekunda%n sekundy%n sekúnd - + %1 %2 %1 %2 @@ -3991,7 +3964,7 @@ Nie je vhodné ju používať. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Zostavené z Git revízie <a href="%1">%2</a> na %3, %4 s použitím Qt %5, %6</small></p> diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 78a95f096..5f8c54805 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Ciljna datoteka ima nepričakovano velikost oziroma čas zadnje spremembe. @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Povezava je časovno potekla - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Prekliči @@ -174,184 +174,184 @@ Račun - + Choose what to sync Izbor predmetov za usklajevanje - + Force sync now Vsili takojšnje usklajevanje - + Restart sync Ponovno zaženi usklajevanje - + Remove folder sync connection Odstrani povezavo mape usklajevanja - + Folder creation failed Ustvarjanje mape je spodletelo - + <p>Could not create local folder <i>%1</i>. <p>Ni mogoče ustvariti krajevne mape <i>%1</i>. - + Confirm Folder Sync Connection Removal Potrdi odstranjevanje povezave usklajevanja mape - + Remove Folder Sync Connection Odstrani povezavo usklajevanja mape - + Sync Running Usklajevanje je v teku - + The syncing operation is running.<br/>Do you want to terminate it? Izvaja se usklajevanje.<br/>Ali želite opravilo prekiniti? - + %1 in use %1 v uporabi - + %1 as <i>%2</i> %1 kot <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Različica strežnika %1 je zastarela in ni več podprta! Nadaljujete na lastno odgovornost. - + Connected to %1. Povezano z %1. - + Server %1 is temporarily unavailable. Strežnik %1 trenutno ni dosegljiv. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Uspešno odjavljeno iz %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ni povezave z %1 pri %2. - + Log in Prijava - + There are folders that were not synchronized because they are too big: Zaznane so mape, ki zaradi omejitve velikosti niso bile usklajene: - + There are folders that were not synchronized because they are external storages: Zaznane so mape, ki zaradi pripadnosti zunanji shrambi niso bile usklajene: - + There are folders that were not synchronized because they are too big or external storages: Zaznane so mape, ki zaradi omejitve velikosti ali pripadnosti zunanji shrambi niso bile usklajene: - + Confirm Account Removal Potrdi odstranitev računa - + <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> <p>Ali res želite odstraniti povezavo z računom <i>%1</i>?</p><p><b>Opomba:</b> S tem <b>ne bo</b> izbrisana nobena datoteka.</p> - + Remove connection Odstrani povezavo - - + + Open folder Odpri mapo - + Log out Odjava - + Resume sync Nadaljuj z usklajevanjem - + Pause sync Premor usklajevanja - + <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> <p>Ali res želite zaustaviti usklajevanje mape <i>%1</i>?</p><p><b>Opomba:</b> s tem datoteke iz odjemalca <b>ne bodo</b> odstranjene.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) od %2 v uporabi. Nekatere mape, vključno s priklopljenimi mapami in mapami v souporabi, imajo morda različne omejitve. - + %1 of %2 in use %1 od %2 v uporabi - + Currently there is no storage usage information available. Trenutno ni na voljo nobenih podatkov o porabi prostora. - + No %1 connection configured. Ni nastavljene povezave %1. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Dejavnost strežnika - + Sync Protocol Protokol usklajevanja - + Not Synced Ni usklajeno - + Not Synced (%1) %1 is the number of not synced files. Ni usklajeno (%1) - + The server activity list has been copied to the clipboard. Seznam opravil strežnika je kopiran v odložišče. - + The sync activity list has been copied to the clipboard. Seznam opravil usklajevanja je kopiran v odložišče. - + The list of unsynced items has been copied to the clipboard. Seznam neusklajenih predmetov je kopiran v odložišče. - + Copied to clipboard Kopirano v odložišče @@ -477,47 +477,47 @@ Besedilna oznaka - + Server Activities Dejavnosti strežnika - + Copy Kopiraj - + Copy the activity list to the clipboard. Kopiraj seznam opravil v odložišče. - + Action Required: Notifications Zahtevano je dejanje: obvestila - + <br/>Account %1 does not have activities enabled. <br/>Za račun %1 možnosti opravil niso omogočene. - + You received %n new notification(s) from %2. Prejeli ste %n novo obvestilo od %2.Prejeli ste %n novi obvestili od %2.Prejeli ste %n nova obvestila od %2.Prejeli ste %n novih obvestil od %2. - + You received %n new notification(s) from %1 and %2. Prejeli ste %n novo obvestilo od %1 in %2.Prejeli ste %n novi obvestili od %1 in %2.Prejeli ste %n nova obvestila od %1 in %2.Prejeli ste %n novih obvestil od %1 in %2. - + You received new notifications from %1, %2 and other accounts. Prejeli ste nova obvestila prek %1, %2 in drugih računov. - + %1 Notifications - Action Required %1 obvestil ‒ zahtevajo odziv @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Napaka dostopa do nastavitvene datoteke - + There was an error while accessing the configuration file at %1. Med dostopom do nastavitvene datoteke na %1 je prišlo do napake. - + Quit ownCloud Končaj ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -752,26 +752,26 @@ Ni mogoče prebrati sistemske izločitvene datoteke - + A new folder larger than %1 MB has been added: %2. Dodana je nova mapa, ki presega %1 MB: %2. - + A folder from an external storage has been added. Dodana je mapa iz zunanje shrambe. - + Please go in the settings to select it if you wish to download it. Med nastavitvami jo lahko izberete in označite za prejem. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več na voljo. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ Ali ste prepričani, da želite posodobiti spremembe s strežnikom? Če je prišlo do napake in se odločite datoteke ohraniti, bodo te ponovno usklajene s strežnika. - + Remove All Files? Ali naj bodo odstranjene vse datoteke? - + Remove all files Odstrani vse datoteke - + Keep files Ohrani datoteke - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ To se lahko zgodi, če je na strežniku na primer obnovljena varnostna kopija. Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi različicami. Ali želite ohraniti trenutne krajevne datoteke kot preimenovane datoteke v usklajevalnem sporu? - + Backup detected Varnostna kopija je zaznana - + Normal Synchronisation Običajno usklajevanje - + Keep Local Files as Conflict Ohrani krajevne datoteke kot datoteke v sporu @@ -951,12 +951,12 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi Dodaj povezavo za usklajevanje mape - + Synchronizing with local folder Poteka usklajevanje s krajevno mapo - + File Datoteka @@ -964,144 +964,144 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderStatusModel - + You need to be connected to add a folder Za dodajanje mape mora biti vzpostavljea povezava - + Click this button to add a folder to synchronize. Kliknite za dodajanje mape za usklajevanje. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Prišlo je do napake med nalaganjem datotek s strežnika. - + Signed out Odjavljeno - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Dodajanje mape je onemogočeno, ker se usklajojejo vse vaše datoteke. Če želite usklajevati več map, odstranite trenutno nastavljeno korensko mapo. - + Fetching folder list from server... Poteka pridobivanje seznama map s strežnika ... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Usklajevanje %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) prejemanje %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pošiljanje %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 od %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Preostalo še %5, %1 od %2, datoteka %3 od %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 od %2, datoteka %3 od %4 - + file %1 of %2 datoteka %1 od %2 - + Waiting... Čakanje na povezavo ... - + Waiting for %n other folder(s)... V pripravi je %n druga map ...V pripravi sta %n drugi mapi ...V pripravi so %n druge mape ...V pripravi je %n drugih map ... - + Preparing to sync... Priprava na usklajevanje ... @@ -1109,12 +1109,12 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderWizard - + Add Folder Sync Connection Dodaj povezavo za usklajevanje mape - + Add Sync Connection Dodaj povezavo za usklajevanje @@ -1140,52 +1140,52 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderWizardRemotePath - + Create Remote Folder Ustvari oddaljeno mapo - + Enter the name of the new folder to be created below '%1': Vnesite ime nove mape, ki bo ustvarjena kot podrejena '%1': - + Folder was successfully created on %1. Mapa je uspešno ustvarjena na %1. - + Authentication failed accessing %1 Overitev dostopa do %1 je spodletela. - + Failed to create the folder on %1. Please check manually. Ustvarjanje mape na %1 je spodletelo. Morda jo je mogoče ustvariti ročno. - + Failed to list a folder. Error: %1 Napaka izpisovanja datotek mape. Napaka: %1 - + Choose this to sync the entire account Izberite možnost za usklajevanje celotnega računa. - + This folder is already being synced. Ta mapa je že določena za usklajevanje. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Datoteke se že usklajujejo na ravni mape <i>%1</i>, ki je nadrejena mapi <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Trenutno so v usklajevanju vse datoteke korenske mape. Usklajevanje še ene mape <b>ni</b> podprto. Če želite uskladiti več map, je treba odstraniti trenutno nastavljeno korensko mapo in spremeniti nastavitve. @@ -1431,7 +1431,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n - + Folder Mapa @@ -1456,17 +1456,17 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Kopiraj - + Time Čas - + File Datoteka - + Issue @@ -1532,12 +1532,12 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::Logger - + Error Napaka - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Datoteke '%1'<br/>ni mogoče odpreti za pisanje.<br/><br/>Dnevniškega zapisa <b>ni mogoče</b> shraniti!</nobr> @@ -1545,27 +1545,27 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::NSISUpdater - + New Version Available Na voljo je novejša različica - + <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> <p>Na voljo je nova različica odjemalca %1.</p><p><b>%2</b> je na voljo za prejem. Trenutno je nameščena različica %3.</p> - + Skip this version Preskoči to različico - + Skip this time Posodobitev tokrat preskoči - + Get update Pridobi posodobitve @@ -1677,11 +1677,6 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n SOCKS5 proxy Posredniški strežnik SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Za uporabo omejevanja pasovne širine je zahtevana različica Qt >= 5.4 - OCC::NotificationWidget @@ -1711,32 +1706,32 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1744,59 +1739,59 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::OCUpdater - + New %1 Update Ready Na voljo je posodobitev %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Nameščena bo najnovejša posodobitev %1. Program lahko zahteva skrbniška dovoljenja za dokončanje opravila. - + Downloading version %1. Please wait... Poteka prejemanje različice %1 ... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Ni mogoče prejeti posodobitve. Kliknite <a href='%1'>here</a> za ročni prejem in namestitev. - + Could not check for new updates. Ni mogoče preveriti za nove posodobitve. - + %1 version %2 available. Restart application to start the update. Na voljo je %1 različice %2. Ponovno zaženite program za uveljavitev posodobitve. - + New %1 version %2 available. Please use the system's update tool to install it. Na voljo je %1 različice %2. Namestite jo prek sistemskega orodja za posodobljanje. - + Checking update server... Preverjanje strežnika za posodabljanje ... - + Update status is unknown: Did not check for new updates. Stanje posodobitve ni znano: ni mogoče preveriti za nove posodobitve. - + No updates available. Your installation is at the latest version. Na voljo ni novih posodobitev. Nameščena je najnovejša različica. - + Update Check Preverjanje za posodobitve @@ -1873,7 +1868,7 @@ zahteva skrbniška dovoljenja za dokončanje opravila. Nastavitev odjemalčevega potrdila TLS - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Povezovanje z navedenim naslovom varnega strežnika <em>%1</em> je spodletelo. Kako želite nadaljevati?</p></body></html> @@ -1942,144 +1937,144 @@ Uporaba ni priporočljiva. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Uspešno vzpostavljena povezava z %1: %2 različica %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Povezava z %1 pri %2 je spodletela:<br/>%3 - + Timeout while trying to connect to %1 at %2. Prekinitev med poskusom povezave na %1 pri %2. - + Trying to connect to %1 at %2... Poteka poskus povezave z %1 na %2 ... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Zahteva za overitev s strežnikom je bila preusmerjena na '%1'. Naslov URL ni veljaven ali pa strežnik ni ustrezno nastavljen. - + There was an invalid response to an authenticated webdav request Prejet je neveljaven odziv na zahtevo overitve webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Strežnik ne dovoli dostopa. Če želite preveriti, ali imate ustrezen dostop, <a href="%1">kliknite tu</a> za dostop do te storitve z brskalnikom. - + Invalid URL Neveljaven naslov URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Krajevna mapa %1 že obstaja. Nastavljena bo za usklajevanje.<br/><br/> - + Creating local sync folder %1... Ustvarjanje mape za krajevno usklajevanje %1 ... - + ok je v redu - + failed. je spodletelo. - + Could not create local folder %1 Krajevne mape %1 ni mogoče ustvariti. - + No remote folder specified! Ni navedenega oddaljenega strežnika! - + Error: %1 Napaka: %1 - + creating folder on ownCloud: %1 ustvarjanje mape v oblaku ownCloud: %1 - + Remote folder %1 created successfully. Oddaljena mapa %1 je uspešno ustvarjena. - + The remote folder %1 already exists. Connecting it for syncing. Oddaljena mapa %1 že obstaja. Vzpostavljena bo povezava za usklajevanje. - - + + The folder creation resulted in HTTP error code %1 Ustvarjanje mape je povzročilo napako HTTP %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Ustvarjanje mape na oddaljenem naslovu je spodletelo zaradi napačnih poveril. <br/>Vrnite se in preverite zahtevana gesla.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Ustvarjanje oddaljene mape je spodletelo. Najverjetneje je vzrok v neustreznih poverilih.</font><br/>Vrnite se na predhodno stran in jih preverite.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Ustvarjanje oddaljene mape %1 je spodletelo z napako <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Povezava za usklajevanje med %1 in oddaljeno mapo %2 je vzpostavljena. - + Successfully connected to %1! Povezava z %1 je uspešno vzpostavljena! - + Connection to %1 could not be established. Please check again. Povezave z %1 ni mogoče vzpostaviti. Preveriti je treba nastavitve. - + Folder rename failed Preimenovanje mape je spodletelo - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Mape ni mogoče odstraniti niti ni mogoče ustvariti varnostne kopije, saj je mapa oziroma dokument v njej odprt z drugim programom. Zaprite mapo/dokument ali prekinite namestitev. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Krajevno usklajena mapa %1 je uspešno ustvarjena!</b></font> @@ -2126,7 +2121,7 @@ Uporaba ni priporočljiva. OCC::PropagateDirectory - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2182,12 +2177,12 @@ Uporaba ni priporočljiva. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; obnovitev je spodletela: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Datoteka ali mapa je bila odstranjena iz mesta v souporabi, ki je nastavljeno le za branje, obnavljanje pa je spodletelo: %1 @@ -2195,22 +2190,22 @@ Uporaba ni priporočljiva. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ni mogoče izbrisati datoteke %1, napaka: %2 - + Attention, possible case sensitivity clash with %1 Pozor, mogoče je neskladje v velikosti črk imena %1 - + could not create folder %1 ni mogoče ustvariti mape %1 - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2218,17 +2213,17 @@ Uporaba ni priporočljiva. OCC::PropagateLocalRemove - + Error removing '%1': %2; Napaka odstranjevanja '%1': %2; - + Could not remove folder '%1' Ni mogoče odstraniti mape '%1' - + Could not remove %1 because of a local file name clash Ni mogoče odstraniti %1 zaradi neskladja s krajevnim imenom datoteke @@ -2236,13 +2231,13 @@ Uporaba ni priporočljiva. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Datoteke %1 ni mogoče preimenovati v %2 zaradi že obstoječe datoteke s tem imenom. - - + + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2310,27 +2305,28 @@ Uporaba ni priporočljiva. Datoteke %1 ni mogoče naložiti, saj obstaja druga, istoimenska datoteka, ki se od nje razlikuje le po velikih črkah v imenu. - + File Removed Datoteka je odstranjena - + Local file changed during syncing. It will be resumed. Krajevna datoteka je bila med usklajevanjem spremenjena. Usklajena bo, ko bo shranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2338,32 +2334,27 @@ Uporaba ni priporočljiva. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vsiljevanje prekinitve posla na prekinitvi povezave HTTP s Qt < 5.4.2. - - - + The local file was removed during sync. Krajevna datoteka je bila med usklajevanjem odstranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + Unexpected return code from server (%1) Napaka: nepričakovan odziv s strežnika (%1). - + Missing File ID from server Na strežniku manjka ID datoteke - + Missing ETag from server Na strežniku manjka ETag datoteke @@ -2371,32 +2362,27 @@ Uporaba ni priporočljiva. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Vsiljevanje prekinitve posla na prekinitvi povezave HTTP s Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Datoteka je bila krajevno spremenjena, čeprav je označena le za branje. Izvorna datoteka je obnovljena, narejene spremembe pa so zabeležene v datoteki spora. - + Poll URL missing Preveri manjkajoči naslov URL - + The local file was removed during sync. Krajevna datoteka je bila med usklajevanjem odstranjena. - + Local file changed during sync. Krajevna datoteka je bila med usklajevanjem spremenjena. - + The server did not acknowledge the last chunk. (No e-tag was present) Strežnik ne sprejme zadnjega paketa (ni navedene e-oznake) @@ -2414,42 +2400,42 @@ Uporaba ni priporočljiva. Besedilna oznaka - + Time Čas - + File Datoteka - + Folder Mapa - + Action Dejanje - + Size Velikost - + Local sync protocol Krajevni protokol usklajevanja - + Copy Kopiraj - + Copy the activity list to the clipboard. Kopiraj seznam opravil v odložišče. @@ -2490,7 +2476,7 @@ Uporaba ni priporočljiva. OCC::SelectiveSyncDialog - + Choose What to Sync Izbor map za usklajevanje @@ -2508,23 +2494,23 @@ Uporaba ni priporočljiva. Odstranite izbor oddaljenih map, ki jih ne želite usklajevati. - + Name Ime - + Size Velikost - - + + No subfolders currently on the server. Na strežniku trenutno ni podrejenih map. - + An error occurred while loading the list of sub folders. Prišlo je do napake med nalaganjem seznama podrejenih map. @@ -2552,7 +2538,7 @@ Uporaba ni priporočljiva. Omrežje - + Account Račun @@ -2871,12 +2857,12 @@ Uporaba ni priporočljiva. OCC::ShibbolethCredentials - + Login Error Napaka prijave - + You must sign in as user %1 Prijaviti se je treba kot uporabnik %1 @@ -2907,28 +2893,28 @@ Uporaba ni priporočljiva. OCC::SocketApi - + Share with %1 parameter is ownCloud Omogoči souporabo z %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2936,119 +2922,114 @@ Uporaba ni priporočljiva. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Podrobnosti potrdila</h3> - + Common Name (CN): Splošno ime (CN): - + Subject Alternative Names: Druga imena: - + Organization (O): Ustanova (U): - + Organizational Unit (OU): Organizacijska enota (OE): - + State/Province: Okraj: - + Country: Država: - + Serial: Zaporedna številka: - + <h3>Issuer</h3> <h3>Izdaljatelj</h3> - + Issuer: Izdaljatelj: - + Issued on: Izdano na: - + Expires on: Poteče na: - + <h3>Fingerprints</h3> <h3>Prstni odtisi</h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Opomba:</b> to potrdilo je bilo ročno odobreno</p> - + %1 (self-signed) %1 (samopodpisano) - + %1 %1 - + This connection is encrypted using %1 bit %2. Ta povezava je šifrirana z %1 bitnim %2. - + No support for SSL session tickets/identifiers Ni podpore za določila in karte ključe SSL - + Certificate information: Podrobnosti potrdila: - + This connection is NOT secure as it is not encrypted. Ta povezava NI varna, saj ni šifrirana. @@ -3068,67 +3049,67 @@ Uporaba ni priporočljiva. Vseeno zaupaj digitalnemu potrdilu - + Untrusted Certificate Potrdilo ni vredno zaupanja - + Cannot connect securely to <i>%1</i>: Ni mogoče vzpostaviti varne povezave z <i>%1</i>: - + with Certificate %1 s potrdilom %1 + + - - &lt;not specified&gt; &lt;ni podano&gt; - - + + Organization: %1 Ustanova: %1 - - + + Unit: %1 Enota: %1 - - + + Country: %1 Država: %1 - + Fingerprint (MD5): <tt>%1</tt> Prstni odtis (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Prstni odtis (SHA1): <tt>%1</tt> - + Effective Date: %1 Začetek veljavnosti: %1 - + Expiration Date: %1 Datum preteka: %1 - + Issuer: %1 Izdajatelj: %1 @@ -3242,27 +3223,27 @@ Uporaba ni priporočljiva. Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3367,69 +3348,69 @@ Uporaba ni priporočljiva. Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir @@ -3453,17 +3434,17 @@ Uporaba ni priporočljiva. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Različica %1. Za več podrobnosti si oglejte <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Avtorske pravice ownCloud, GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Programski paket objavlja %1 pod pogoji Splošnega javnega dovoljenja GNU (GNU General Public License - GPL), različice 2.0.<br>%2 in logotip %2 sta blagovni znamki %1 v Združenih državah, drugih državah ali oboje.</p> @@ -3876,48 +3857,40 @@ Uporaba ni priporočljiva. Potisni gumb - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future v prihodnje - + %n day(s) ago pred %n dnevompred %n dnevomapred %n dnevipred %n dnevi - + %n hour(s) ago pred %n uropred %n uramapred %n uramipred %n urami - + now zdaj - + Less than a minute ago Pred manj kot minuto - + %n minute(s) ago pred %n minutopred %n minutamapred %n minutamipred %n minutami - + Some time ago Pred nekaj časa @@ -3931,57 +3904,57 @@ Uporaba ni priporočljiva. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n leto%n leti%n leta%n let - + %n month(s) %n mesec%n meseca%n meseci%n mesecev - + %n day(s) %n dan%n dneva%n dnevi%n dni - + %n hour(s) %n ura%n uri%n ure%n ur - + %n minute(s) %n minuta%n minuti%n minute%n minut - + %n second(s) %n sekunda%n sekundi%n sekunde%n sekund - + %1 %2 %1 %2 @@ -4002,7 +3975,7 @@ Uporaba ni priporočljiva. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Izgrajeno na osnovi predelave Git <a href="%1">%2</a> na %3, %4 z uporabo Qt %5, %6</small></p> diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 15abed0f9..1c13a2938 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Одредишни фајл има неочекивану величину или време измене @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Време повезивања истекло - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Одустани @@ -174,184 +174,184 @@ Налог - + Choose what to sync Изаберите шта синхронизовати - + Force sync now - + Restart sync - + Remove folder sync connection - + Folder creation failed Прављење фасцикле није успело - + <p>Could not create local folder <i>%1</i>. <p>Не могу да направим локалну фасциклу <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Синхронизација у току - + The syncing operation is running.<br/>Do you want to terminate it? Синхронизација је у току.<br/>Желите ли да је прекинете? - + %1 in use %1 искоришћено - + %1 as <i>%2</i> %1 као <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Повезан са %1. - + Server %1 is temporarily unavailable. Сервер %1 је привремено недоступан. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Одјављен са %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Пријава - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Потврда уклањања налога - + <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> - + Remove connection Уклони везу - - + + Open folder Отвори фасциклу - + Log out Одјава - + Resume sync Настави синхронизацију - + Pause sync Паузирај синхронизацију - + <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> <p>Желите ли заиста да престанете са синхронизацијом фасцикле <i>%1</i>?</p><p><b>Напомена:</b> Ово <b>неће</b> обрисати ниједан фајл.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) од %2 искоришћено. Неке фасцикле, укључујући мрежно монтиране или дељене фасцикле, могу имати друга ограничења. - + %1 of %2 in use %1% од %2 искоришћено - + Currently there is no storage usage information available. Тренутно нема доступних података о заузећу складишта. - + No %1 connection configured. Нема подешене %1 везе. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Активност сервера - + Sync Protocol Протокол синхронизације - + Not Synced Несинхронизовано - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Копирано у клипборд @@ -477,47 +477,47 @@ Текст ознака - + Server Activities Активности сервера - + Copy Копирај - + Copy the activity list to the clipboard. Копирај активност у клипборд. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>Налог %1 нема укључене активности. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ Не могу да прочитам системски списак за игнорисање - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Уклонити све фајлове? - + Remove all files Уклони све фајлове - + Keep files Остави фајлове - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Додај везу синхронизације фасцикле - + Synchronizing with local folder - + File Фајл @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Одјављен - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... Добављам списак фасцикли са сервера... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Проверавам измене у „%1“ - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name „%1“ - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизујем %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) преузми %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) отпреми %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 од %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 фајл %1 од %2 - + Waiting... Чекам... - + Waiting for %n other folder(s)... - + Preparing to sync... Припремам синхронизацију... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Додај везу синхронизације фасцикле - + Add Sync Connection Додај везу синхронизације @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Прављење удаљене фасцикле - + Enter the name of the new folder to be created below '%1': Унесите назив нове фасцикле која ће бити направљена у %1: - + Folder was successfully created on %1. Фасцикла је успешно направљена на %1 - + Authentication failed accessing %1 Неуспела аутентификација при приступу %1 - + Failed to create the folder on %1. Please check manually. Нисам успео да направим фасциклу на %1. Проверите ручно. - + Failed to list a folder. Error: %1 Неуспех излиставања фасцикле. Грешка: %1 - + Choose this to sync the entire account Ово изаберите да синхронизујете целокупан налог - + This folder is already being synced. Ова фасцикла се већ синхронизује. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Већ синхронизујете <i>%1</i>, која садржи фасциклу <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Већ синхронизујете све ваше фајлове. Синхронизација других фасцикли <b>није</b> подржана. Ако желите синхронизацију више фасцикли, уклоните тренутно подешену корену фасциклу. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder фасцикла @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Копирај - + Time време - + File фајл - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Грешка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Фајл „%1“<br/>није уписив.<br/><br/>Записник се <b>не може</b> сачувати!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Нова верзија је доступна - + <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> <p>Нова верзија %1 клијента је доступна.</p><p><b>%2</b> је доступна за преузимање. Инсталирана је %3.</p> - + Skip this version Прескочи ову верзију - + Skip this time Прескочи сада - + Get update Ажурирај @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy СОКС-5 прокси - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,59 +1728,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Ново %1 ажурирање спремно - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Ново ажурирање за %1 ће се инсталирати. Можда ће бити потребне додатне дозволе током процеса. - + Downloading version %1. Please wait... Преузимам верзију %1. Сачекајте... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Не могу да преузмем ажурирање. Кликните <a href='%1'>овде</a> да бисте га преузели ручно. - + Could not check for new updates. Не могу да проверим нова ажурирања. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Проверавам сервер ажурирања... - + Update status is unknown: Did not check for new updates. Стање ажурирања је непознато. Нисам проверио нова ажурирања. - + No updates available. Your installation is at the latest version. Нема доступних ажурирања. Имате последњу верзију. - + Update Check Провера надоградњи @@ -1862,7 +1857,7 @@ for additional privileges during the process. Подеси клијентски ТЛС сертификат - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не могу да се повежем на сигурну адресу сервера <em>%1</em>. Како желите да наставите?</p></body></html> @@ -1931,144 +1926,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успешно повезан са %1: %2 верзија %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Неуспешно повезивање са %1 на %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Време је истекло у покушају повезивања са %1 на %2. - + Trying to connect to %1 at %2... Покушавам да се повежем са %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Аутентификован захтев серверу је преусмерен на %1. УРЛ је лош, сервер је лоше подешен. - + There was an invalid response to an authenticated webdav request Добијен је неисправан одговор на аутентификовани ВебДАВ захтев - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Сервер није дозволио приступ. Да проверите имате ли исправан приступ, <a href="%1">кликните овде</a> да бисте приступили услузи из прегледача. - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локална фасцикла %1 већ постоји. Одређујем је за синхронизацију.<br/><br/> - + Creating local sync folder %1... Правим локалну фасциклу синхронизације %1... - + ok у реду - + failed. неуспешно - + Could not create local folder %1 Не могу да направим локалну фасциклу %1 - + No remote folder specified! Није наведена удаљена фасцикла! - + Error: %1 Грешка: %1 - + creating folder on ownCloud: %1 правим фасциклу у облаку: % 1 - + Remote folder %1 created successfully. Удаљена фасцикла %1 је успешно направљена. - + The remote folder %1 already exists. Connecting it for syncing. Удаљена фасцикла %1 већ постоји. Повезујем се ради синхронизовања. - - + + The folder creation resulted in HTTP error code %1 Прављење фасцикле довело је до ХТТП грешке са кодом %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Прављење удаљене фасцикле није успело због погрешних акредитива!<br/>Идите назад и проверите ваше акредитиве.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Прављење удаљене фасцикле није успело због погрешних акредитива.</font><br/>Идите назад и проверите ваше акредитиве.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Прављење удаљене фасцикле %1 није успело због грешке <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. Веза за синхронизацију %1 до удаљеног директоријума %2 је подешена. - + Successfully connected to %1! Успешно повезан са %1! - + Connection to %1 could not be established. Please check again. Не може се успоставити веза са %1. Проверите поново. - + Folder rename failed Преименовање није успело - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Не могу да уклоним и направим резервну копију фасцикле јер су фасцикла или фајл отворени у другом програму. Затворите фасциклу или фајл и покушајте поново или одустаните од подешавања. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локална фасцикла за синхронизовање %1 је успешно направљена!</b></font> @@ -2115,7 +2110,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2171,12 +2166,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Враћање није успело: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2184,22 +2179,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 не могу да обришем фајл %1, грешка: %2 - + Attention, possible case sensitivity clash with %1 Пажња! Могуће сударање због величине слова са %1 - + could not create folder %1 не могу да направим фасциклу %1 - + Error writing metadata to the database @@ -2207,17 +2202,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Грешка при уклањању %1: %2; - + Could not remove folder '%1' Не могу да уклоним фасциклу „%1“ - + Could not remove %1 because of a local file name clash Не могу да уклоним %1 због сударања са називом локалног фајла @@ -2225,13 +2220,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Фајл %1 се не може преименовати у %2 због сударања са називом локалног фајла - - + + Error writing metadata to the database @@ -2299,27 +2294,28 @@ It is not advisable to use it. - + File Removed Фајл уклоњен - + Local file changed during syncing. It will be resumed. Локални фајл је измењен током синхронизације. Биће настављена. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2327,32 +2323,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Присили прекид посла код прекида ХТТП везе са КуТ < 5.4.2 - - - + The local file was removed during sync. Локални фајл је уклоњен током синхронизације. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2360,32 +2351,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Присили прекид посла код прекида ХТТП везе са КуТ < 5.4.2 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Фајл је измењен локално али је у саставу дељења које је само за читање. Враћен је у претходно стање а измене су у фајлу сукоба. - + Poll URL missing Адреса упита недостаје - + The local file was removed during sync. Локални фајл је уклоњен током синхронизације. - + Local file changed during sync. Локални фајл измењен током синхронизације. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2403,42 +2389,42 @@ It is not advisable to use it. Текст ознака - + Time време - + File фајл - + Folder фасцикла - + Action радња - + Size величина - + Local sync protocol Локални протокол синхронизације - + Copy Копирај - + Copy the activity list to the clipboard. Копирај активност у клипборд. @@ -2479,7 +2465,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Изаберите шта синхронизовати @@ -2497,23 +2483,23 @@ It is not advisable to use it. - + Name назив - + Size величина - - + + No subfolders currently on the server. На серверу тренутно нема потфасцикли. - + An error occurred while loading the list of sub folders. @@ -2541,7 +2527,7 @@ It is not advisable to use it. Мрежа - + Account Налог @@ -2860,12 +2846,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Грешка пријављивања - + You must sign in as user %1 Морате се пријавити као %1 @@ -2896,28 +2882,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Подели са %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2925,119 +2911,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Детаљи сертификата</h3> - + Common Name (CN): Уобичајено име: - + Subject Alternative Names: Алтернативно име: - + Organization (O): Организација: - + Organizational Unit (OU): Организациона јединица: - + State/Province: Покрајина/провинција: - + Country: Земља: - + Serial: Серијски број: - + <h3>Issuer</h3> <h3>Издавач</h3> - + Issuer: Издавач: - + Issued on: Издат: - + Expires on: Истиче: - + <h3>Fingerprints</h3> <h3>Отисци</h3> - - MD 5: - МД 5: - - - + SHA-256: СХА-256: - + SHA-1: СХА-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Напомена:</b> Овај сертификат је ручно одобрен</p> - + %1 (self-signed) %1 (самопотписан) - + %1 %1 - + This connection is encrypted using %1 bit %2. Ова веза је шифрована %1-битним %2. - + No support for SSL session tickets/identifiers - + Certificate information: Подаци о сертификату: - + This connection is NOT secure as it is not encrypted. Ова веза НИЈЕ безбедна јер није шифрована. @@ -3057,67 +3038,67 @@ It is not advisable to use it. Ипак веруј сертификату - + Untrusted Certificate - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 са сертификатом %1 + + - - &lt;not specified&gt; &lt;није наведено&gt; - - + + Organization: %1 Организација: %1 - - + + Unit: %1 Јединица: %1 - - + + Country: %1 Држава: %1 - + Fingerprint (MD5): <tt>%1</tt> Отисак (МД5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Отисак (СХА1): <tt>%1</tt> - + Effective Date: %1 Важи од: %1 - + Expiration Date: %1 Истиче : %1 - + Issuer: %1 Издавач: %1 @@ -3231,27 +3212,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3356,69 +3337,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор @@ -3442,17 +3423,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Верзија %1. За више информација посетите <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Дистрибуира %1 под ГНУ општом јавном лиценцом (ОЈЛ) верзија 2.0.<br/>%2 и %2 лого су регистроване марке %1 у САД, другим земљама или обоје</p> @@ -3865,48 +3846,40 @@ It is not advisable to use it. Тастер - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago пре мање од минут - + %n minute(s) ago - + Some time ago пре неког времена @@ -3920,57 +3893,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3991,7 +3964,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Направљено од ГИТ ревизије <a href="%1">%2</a> %3, %4 користећи КуТ %5, %6</small></p> diff --git a/translations/client_sv.ts b/translations/client_sv.ts index bf5cad5fb..6c82faffb 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Destinationsfilen har en oväntad storlek eller modifieringstidpunkt @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tidsgräns för anslutningen överskreds - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Avbryt @@ -174,184 +174,184 @@ Konto - + Choose what to sync Välj vad som ska synkas - + Force sync now Tvinga synkning - + Restart sync Starta om synkning - + Remove folder sync connection Ta bort anslutning till mappsynkronisering - + Folder creation failed Kunde inte skapa mappen - + <p>Could not create local folder <i>%1</i>. <p>Kunde inte skapa lokal mapp <i>%1</i>. - + Confirm Folder Sync Connection Removal Bekräfta radering av anslutning till mappsynkronisering - + Remove Folder Sync Connection Ta bort anslutning till mappsynkronisering - + Sync Running Synkronisering pågår - + The syncing operation is running.<br/>Do you want to terminate it? En synkronisering pågår.<br/>Vill du avbryta den? - + %1 in use %1 används - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Serverversion %1 är gammal och stöds inte längre! Fortsätt på egen risk. - + Connected to %1. Ansluten till %1. - + Server %1 is temporarily unavailable. Servern %1 är för tillfället inte tillgänglig. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Utloggad från %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ingen anslutning till %1 vid %2. - + Log in Logga in - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Bekräfta radering an kontot - + <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> <p>Vill du verkligen avsluta anslutningen till kontot <i>%1</i>?</p><p><b>Observera:</b> Detta kommer <b>inte</b> radera några filer.</p> - + Remove connection Radera anslutning - - + + Open folder Öppna mapp - + Log out Logga ut - + Resume sync Återuppta synkronisering - + Pause sync Pausa synkronisering - + <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> <p>Vill du verkligen avbryta synkronisering av mappen <i>%1</i>?</p><p><b>Observera:</b> Detta kommer <b>inte</b> radera några filer.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) av %2 används. Vissa mappar, inklusive nätverks- eller delade mappar, kan ha andra begränsningar. - + %1 of %2 in use %1 av %2 används - + Currently there is no storage usage information available. Just nu finns ingen utrymmes information tillgänglig - + No %1 connection configured. Ingen %1 anslutning konfigurerad. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Serveraktivitet - + Sync Protocol Synkprotokoll - + Not Synced Inte synkroniserad - + Not Synced (%1) %1 is the number of not synced files. Inte synkad (%1) - + The server activity list has been copied to the clipboard. Listan på serveraktivitet har kopierats till urklipp. - + The sync activity list has been copied to the clipboard. Listan på synkaktivitet har kopierats till urklipp. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopierat till urklipp @@ -477,47 +477,47 @@ Textetikett - + Server Activities Serveraktivitet - + Copy Kopiera - + Copy the activity list to the clipboard. Kopiera aktivitetslistan till urklipp. - + Action Required: Notifications Åtgärd krävs: Notifieringar - + <br/>Account %1 does not have activities enabled. <br/>Kontot %1 har inte aktiviteter aktiverade - + You received %n new notification(s) from %2. Du har mottagit %n ny notifiering från %2.Du har mottagit %n nya notifieringar från %2. - + You received %n new notification(s) from %1 and %2. Du tog emot %1 ny notis från %1 och %2.Du tog emot %n nya notiser från %1 och %2. - + You received new notifications from %1, %2 and other accounts. Du tog emot nya notiser från %1, %2 och andra konton. - + %1 Notifications - Action Required %1 Notiser - Åtgärd krävs @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file Kunde inte komma åt konfigurationsfilen - + There was an error while accessing the configuration file at %1. - + Quit ownCloud Avsluta ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -752,24 +752,24 @@ Kunde inte läsa systemets exkluderings-fil - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,29 +777,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ta bort alla filer? - + Remove all files Ta bort alla filer - + Keep files Behåll filer - + This sync would reset the files to an earlier 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? @@ -808,17 +808,17 @@ Detta kan vara för att en säkerhetskopia har återställts på servern. Om du fortsätter synkningen kommer alla dina filer återställas med en äldre version av filen. Vill du behålla dina nyare lokala filer som konfliktfiler? - + Backup detected Backup upptäckt - + Normal Synchronisation Normal synkronisation - + Keep Local Files as Conflict Behåll lokala filer som konflikt @@ -944,12 +944,12 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Lägg till mapp att synka. - + Synchronizing with local folder Synkroniserar med lokal mapp - + File Fil @@ -957,144 +957,144 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderStatusModel - + You need to be connected to add a folder Du måste vara ansluten för att lägga till en mapp - + Click this button to add a folder to synchronize. Klicka här för att lägga till en mapp att synka. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ett fel uppstod när mapplistan försökte laddas från servern. - + Signed out Utloggad - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Tillägg av mappar är avstängt eftersom du redan synkar alla dina filer. Om du vill synka fler mappar, var god ta bort den nuvarande rotmappen. - + Fetching folder list from server... Hämtar mapplistan från servern... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kollar efter ändringar i '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda ner %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda upp %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 kvar, %1 av %2, fil %3 av %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Väntar... - + Waiting for %n other folder(s)... Väntat på %n annan mapp...Väntat på %n andra mappar... - + Preparing to sync... Förbereder för att synkronisera... @@ -1102,12 +1102,12 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderWizard - + Add Folder Sync Connection Lägg till mapp att synka. - + Add Sync Connection Lägg till anslutning. @@ -1133,52 +1133,52 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderWizardRemotePath - + Create Remote Folder Skapa fjärrmapp - + Enter the name of the new folder to be created below '%1': Ange namnet på den nya mappen som skall skapas under '%1': - + Folder was successfully created on %1. Mappen skapades på %1. - + Authentication failed accessing %1 Autentisering misslyckades att komma åt %1 - + Failed to create the folder on %1. Please check manually. Det gick inte att skapa mappen på %1. Kontrollera manuellt. - + Failed to list a folder. Error: %1 Kunde inte lista en mapp. Felkod: %1 - + Choose this to sync the entire account Välj detta för att synka allt - + This folder is already being synced. Denna mappen synkas redan. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkar redan <i>%1</i>, vilket är övermapp till <i>%2</i> - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Du synkroniserar redan alla dina filer. Synkronisering av en annan mapp stöds <b>ej</b>. Om du vill synka flera mappar, ta bort den för tillfället konfigurerade rotmappen från synk. @@ -1424,7 +1424,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas - + Folder Mapp @@ -1449,17 +1449,17 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Kopiera - + Time Tid - + File Fil - + Issue @@ -1525,12 +1525,12 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::Logger - + Error Fel - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Filen '%1'<br/>kan inte öppnas för skrivning.<br/><br/>Loggtexten kan <b>inte</b> sparas!</nobr> @@ -1538,27 +1538,27 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::NSISUpdater - + New Version Available Ny version tillgänglig - + <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> <p>En ny version av %1 klienten är tillgänglig.</p><p><b>%2</b> är tillgänglig för nedladdning. Den installerade versionen är %3.</p> - + Skip this version Hoppa över denna version - + Skip this time Hoppa över denna gång - + Get update Hämta uppdatering @@ -1670,11 +1670,6 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas SOCKS5 proxy SOCKS5 proxy - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 krävs för att använda begränsning av bandbredd - OCC::NotificationWidget @@ -1704,32 +1699,32 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1737,59 +1732,59 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::OCUpdater - + New %1 Update Ready Ny %1 uppdatering tillgänglig - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. En ny uppdatering för %1 kommer installeras. Programmet kan be om ytterligare rättigheter under processen. - + Downloading version %1. Please wait... Laddar ner version %1. Var god vänta... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Kunde inte ladda ner uppdateringen. Klicka <a href='%1'>här</a> för att ladda ner uppdateringen manuellt. - + Could not check for new updates. Kunde inte söka efter uppdateringar. - + %1 version %2 available. Restart application to start the update. %1 version %2 tillgänglig. Starta om programmet för att starta uppdateringen. - + New %1 version %2 available. Please use the system's update tool to install it. Ny %1 version %2 tillgänglig. Var vänlig använd systemets verktyg för uppdateringar för att installera versionen. - + Checking update server... Kontrollerar uppdateringsservern... - + Update status is unknown: Did not check for new updates. Uppdateringsstatus är okänd: Gjorde ingen kontroll av nya uppdateringar. - + No updates available. Your installation is at the latest version. Inga uppdateringar tillgängliga. Din installation är redan den senaste versionen. - + Update Check Uppdateringskontroll @@ -1866,7 +1861,7 @@ ytterligare rättigheter under processen. Konfigurera TLS klient-certifikat - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Misslyckades med att ansluta till den säkra serveradressen <em>%1</em>. Hur vill du gå vidare?</p></body></html> @@ -1935,144 +1930,144 @@ Det är inte lämpligt använda den. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Lyckades ansluta till %1: %2 version %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Misslyckades att ansluta till %1 vid %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Försök att ansluta till %1 på %2 tog för lång tid. - + Trying to connect to %1 at %2... Försöker ansluta till %1 på %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Den autentiserade begäran till servern omdirigerades till '%1'. Den URLen är ogiltig, server är felkonfigurerad. - + There was an invalid response to an authenticated webdav request Det kom ett ogiltigt svar på en autentiserad webdav-begäran - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Åtkomst förbjuden av servern. För att bekräfta att du har korrekta rättigheter, <a href="%1">klicka här</a> för att ansluta till tjänsten med din webb-läsare. - + Invalid URL Ogiltig URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Lokal synkmapp %1 finns redan, aktiverar den för synk.<br/><br/> - + Creating local sync folder %1... Skapar lokal synk-mapp %1... - + ok ok - + failed. misslyckades. - + Could not create local folder %1 Kunde inte skapa lokal mapp %1 - + No remote folder specified! Ingen fjärrmapp specificerad! - + Error: %1 Fel: %1 - + creating folder on ownCloud: %1 skapar mapp på ownCloud: %1 - + Remote folder %1 created successfully. Fjärrmapp %1 har skapats. - + The remote folder %1 already exists. Connecting it for syncing. Fjärrmappen %1 finns redan. Ansluter den för synkronisering. - - + + The folder creation resulted in HTTP error code %1 Skapande av mapp resulterade i HTTP felkod %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Det gick inte att skapa mappen efter som du inte har tillräckliga rättigheter!<br/>Vänligen återvänd och kontrollera dina rättigheter. - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Misslyckades skapa fjärrmappen, troligen p.g.a felaktiga inloggningsuppgifter.</font><br/>Kontrollera dina inloggningsuppgifter.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Misslyckades skapa fjärrmapp %1 med fel <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. En synkroniseringsanslutning från %1 till fjärrmappen %2 har skapats. - + Successfully connected to %1! Ansluten till %1! - + Connection to %1 could not be established. Please check again. Anslutningen till %1 kunde inte etableras. Var god kontrollera och försök igen. - + Folder rename failed Omdöpning av mapp misslyckades - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Kan inte ta bort och göra en säkerhetskopia av mappen på grund av att mappen eller en fil i den används av ett annat program. Vänligen stäng mappen eller filen och försök igen eller avbryt installationen. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Lokal synkmapp %1 skapad!</b></font> @@ -2119,7 +2114,7 @@ Det är inte lämpligt använda den. OCC::PropagateDirectory - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2175,12 +2170,12 @@ Det är inte lämpligt använda den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Återställning misslyckades: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mapp togs bort från en skrivskyddad delning, men återställning misslyckades: %1 @@ -2188,22 +2183,22 @@ Det är inte lämpligt använda den. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 kunde inte ta bort fil %1, fel: %2 - + Attention, possible case sensitivity clash with %1 Observera, eventuell skiftlägeskänslig konflikt med %1 - + could not create folder %1 kunde inte skapa mapp %1 - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2211,17 +2206,17 @@ Det är inte lämpligt använda den. OCC::PropagateLocalRemove - + Error removing '%1': %2; Fel vid borttagning '%1': %2; - + Could not remove folder '%1' Kunde inte ta bort mapp '%1' - + Could not remove %1 because of a local file name clash Det gick inte att ta bort %1 på grund av ett lokalt filnamn @@ -2229,13 +2224,13 @@ Det är inte lämpligt använda den. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Filen %1 kan inte döpas om till %2 på grund av ett lokalt filnamn - - + + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2303,27 +2298,28 @@ Det är inte lämpligt använda den. - + File Removed Filen Raderad - + Local file changed during syncing. It will be resumed. Lokal fil ändrades under synkningen. Den kommer återupptas. - + Local file changed during sync. Lokal fil ändrades under synk. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2331,32 +2327,27 @@ Det är inte lämpligt använda den. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Tvinga jobbavbryt vid återställning av HTTP-anslutning med Qt < 5.4.2. - - - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synk. - + Unexpected return code from server (%1) - + Missing File ID from server Saknar Fil-ID från servern - + Missing ETag from server Saknar ETag från servern @@ -2364,32 +2355,27 @@ Det är inte lämpligt använda den. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Tvinga jobbavbryt vid återställning av HTTP-anslutning med Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Filen ändrades lokalt men är en del av en endast-läsbar delning. Den återställdes och din editering är i konflikt filen. - + Poll URL missing Hämtnings-URL saknas - + The local file was removed during sync. Den lokala filen togs bort under synkronisering. - + Local file changed during sync. Lokal fil ändrades under synk. - + The server did not acknowledge the last chunk. (No e-tag was present) Servern bekräftade inte senaste leveransen. (Ingen e-tagg fanns) @@ -2407,42 +2393,42 @@ Det är inte lämpligt använda den. Textetikett - + Time Tid - + File Fil - + Folder Mapp - + Action Ågärd - + Size Storlek - + Local sync protocol Lokalt synkprotokoll - + Copy Kopiera - + Copy the activity list to the clipboard. Kopiera aktivitetslistan till urklipp. @@ -2483,7 +2469,7 @@ Det är inte lämpligt använda den. OCC::SelectiveSyncDialog - + Choose What to Sync Välj vad som ska synkas @@ -2501,23 +2487,23 @@ Det är inte lämpligt använda den. - + Name Namn - + Size Storlek - - + + No subfolders currently on the server. Inga undermappar på servern för närvarande. - + An error occurred while loading the list of sub folders. Ett fel uppstod när listan för submappar laddades. @@ -2545,7 +2531,7 @@ Det är inte lämpligt använda den. Nätverk - + Account Konto @@ -2864,12 +2850,12 @@ Det är inte lämpligt använda den. OCC::ShibbolethCredentials - + Login Error Login fel - + You must sign in as user %1 Du måste logga in som en användare %1 @@ -2900,28 +2886,28 @@ Det är inte lämpligt använda den. OCC::SocketApi - + Share with %1 parameter is ownCloud Dela med %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2929,119 +2915,114 @@ Det är inte lämpligt använda den. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Certifikatdetaljer</h3> - + Common Name (CN): Common Name (CN): - + Subject Alternative Names: Alternativnamn: - + Organization (O): Organisation (O): - + Organizational Unit (OU): Organisationsenhet (OU): - + State/Province: Stat/Provins: - + Country: Land: - + Serial: Serienummer: - + <h3>Issuer</h3> <h3>Utfärdare</h3> - + Issuer: Utfärdare: - + Issued on: Utfärdat den: - + Expires on: Upphör den: - + <h3>Fingerprints</h3> <h3>Fingeravtryck</h3> - - MD 5: - MD5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Notera:</b> Detta certifikat var manuellt godkänt.</p> - + %1 (self-signed) %1 (självsignerat certifikat) - + %1 %1 - + This connection is encrypted using %1 bit %2. Denna anslutningen är krypterad med %1 bit %2 - + No support for SSL session tickets/identifiers Inget stöd för biljetter/identifikationer för SSL sessioner - + Certificate information: Certifikatinformation: - + This connection is NOT secure as it is not encrypted. Denna anslutningen är INTE säker eftersom den inte är krypterad. @@ -3061,67 +3042,67 @@ Det är inte lämpligt använda den. Lita på detta certifikat i alla fall - + Untrusted Certificate Ej betrott certifikat - + Cannot connect securely to <i>%1</i>: Kan inte ansluta säkert till <i>%1</i>: - + with Certificate %1 med Certifikat %1 + + - - &lt;not specified&gt; &lt;inte angivet&gt; - - + + Organization: %1 Organisation: %1 - - + + Unit: %1 Enhet: %1 - - + + Country: %1 Land: %1 - + Fingerprint (MD5): <tt>%1</tt> Fingeravtryck (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Fingeravtryck (SHA1): <tt>%1</tt> - + Effective Date: %1 Giltigt datum: %1 - + Expiration Date: %1 Utgångsdatum: %1 - + Issuer: %1 Utfärdare: %1 @@ -3235,27 +3216,27 @@ Det är inte lämpligt använda den. Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3360,69 +3341,69 @@ Det är inte lämpligt använda den. Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan @@ -3446,17 +3427,17 @@ Det är inte lämpligt använda den. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Version %1. För mer information vänligen besök <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Distribueras av %1 och licenserad under GNU General Public License (GPL) Version 2.0.<br/>%2 och %2 logotyp är registrerade varumärken av %1 i Förenta Staterna, andra länder, eller både och.</p> @@ -3869,48 +3850,40 @@ Det är inte lämpligt använda den. PushButton - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future i framtiden - + %n day(s) ago %n dag sedan%n dag(ar) sedan - + %n hour(s) ago %n timme sedan%n timmar sedan - + now nu - + Less than a minute ago Mindre än en minut sedan - + %n minute(s) ago %n minut sedan%n minut(er) sedan - + Some time ago En stund sedan @@ -3924,57 +3897,57 @@ Det är inte lämpligt använda den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n månad(er)%n månad(er) - + %n day(s) %n dag(ar)%n dag(ar) - + %n hour(s) %n timme/timmar%n timme/timmar - + %n minute(s) %n minut(er)%n minut(er) - + %n second(s) %n sekund(er)%n sekund(er) - + %1 %2 %1 %2 @@ -3995,7 +3968,7 @@ Det är inte lämpligt använda den. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Byggd från Git revision <a href="%1">%2</a> den %3, %4 med Qt %5, %6</small></p> diff --git a/translations/client_th.ts b/translations/client_th.ts index 79c1bd1b3..25b0532dc 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time แฟ้มปลายทางมีขนาดที่ระบุไม่ได้หรือการปรับเปลี่ยนเวลา @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out หมดเวลาการเชื่อมต่อ - + Unknown error: network reply was deleted ข้อผิดพลาดที่ไม่รู้จัก: การตอบกลับของเครือข่ายถูกลบแล้ว - + Server replied "%1 %2" to "%3 %4" เซิร์ฟเวอร์ตอบกลับ "%1 %2" ถึง "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel ยกเลิก @@ -174,184 +174,184 @@ บัญชี - + Choose what to sync เลือกข้อมูลที่ต้องการประสาน - + Force sync now บังคับประสานข้อมูลเดี๋ยวนี้ - + Restart sync ประสานข้อมูลอีกครั้ง - + Remove folder sync connection ลบโฟลเดอร์ที่ประสานข้อมูลออก - + Folder creation failed สร้างโฟลเดอร์ล้มเหลว - + <p>Could not create local folder <i>%1</i>. <p>ไม่สามารถสร้างโฟลเดอร์ต้นทาง <i>%1</i>. - + Confirm Folder Sync Connection Removal ยืนยันการลบโฟลเดอร์ที่ประสานข้อมูลออก - + Remove Folder Sync Connection ลบโฟลเดอร์ที่ประสานข้อมูล - + Sync Running กำลังประสานข้อมูล - + The syncing operation is running.<br/>Do you want to terminate it? กำลังดำเนินการประสานข้อมูลอยู่ <br/>คุณต้องการสิ้นสุดการทำงาน? - + %1 in use %1 กำลังถูกใช้งาน - + %1 as <i>%2</i> %1 เช่น <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. เซิร์ฟเวอร์เวอร์ชัน %1 เป็นรุ่นเก่าและไม่ได้รับการสนับสนุน! ดำเนินการความเสี่ยงด้วยคุณเอง - + Connected to %1. เชื่อมต่อกับ %1 - + Server %1 is temporarily unavailable. เซิร์ฟเวอร์ %1 ไม่สามารถใช้ได้ชั่วคราว - + Server %1 is currently in maintenance mode. เซิร์ฟเวอร์ %1 กำลังอยู่ในโหมดการบำรุงรักษา - + Signed out from %1. ลงชื่อออกจาก %1 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... กำลังเชื่อมต่อไปยัง %1... - + No connection to %1 at %2. ไม่มีการเชื่อมต่อไปยัง %1 ที่ %2 - + Log in เข้าสู่ระบบ - + There are folders that were not synchronized because they are too big: บางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะขนาดของมันใหญ่เกินไป: - + There are folders that were not synchronized because they are external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอก - + There are folders that were not synchronized because they are too big or external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอกหรือมีขนาดที่ใหญ่เกินไป - + Confirm Account Removal ยืนยันการลบบัญชี - + <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> <p>คุณต้องการลบการเชื่อมต่อกับบัญชี<i>%1</i>?</p><p><b>หมายเหตุ:</b> นี้จะ <b>ไม่</b> ลบไฟล์ใดๆ</p> - + Remove connection ลบการเชื่อมต่อ - - + + Open folder เปิดโฟลเดอร์ - + Log out ออกจากระบบ - + Resume sync ประสานข้อมูลอีกครั้ง - + Pause sync หยุดประสานข้อมูลชั่วคราว - + <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> <p>คุณต้องการที่จะหยุดการประสานข้อมูลโฟลเดอร์<i>%1</i>?</p><p><b>หมายเหตุ:</b> นี้จะ <b>ไม่</b> ลบไฟล์ใดๆ</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. มีการใช้งาน %1 (%3%) จาก %2 บางโฟลเดอร์รวมทั้งเครือข่ายที่ติดตั้งหรือโฟลเดอร์ที่แชร์อาจมีข้อจำกัดที่แตกต่างกัน - + %1 of %2 in use มีการใช้งาน %1 จาก %2 - + Currently there is no storage usage information available. ขณะนี้ไม่มีพื้นที่จัดเก็บข้อมูลที่ใช้งานได้ - + No %1 connection configured. ไม่มีการเชื่อมต่อ %1 ที่ถูกกำหนดค่า @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity กิจกรรมของเซิร์ฟเวอร์ - + Sync Protocol โปรโตคอลที่ใช้ในการผสานข้อมูล - + Not Synced ไม่ถูกประสานข้อมูลให้ตรงกัน - + Not Synced (%1) %1 is the number of not synced files. ไม่ถูกประสานข้อมูล (%1) - + The server activity list has been copied to the clipboard. รายการกิจกรรมเซิร์ฟเวอร์ได้ถูกคัดลอกไปยังคลิปบอร์ด - + The sync activity list has been copied to the clipboard. รายการกิจกรรมการประสานข้อมูลได้ถูกคัดลอกไปยังคลิปบอร์ด - + The list of unsynced items has been copied to the clipboard. รายชื่อของรายการที่ไม่ได้ประสานข้อมูล ได้ถูกคัดลอกไปยังคลิปบอร์ด - + Copied to clipboard คัดลอกไปยังคลิปบอร์ด @@ -477,47 +477,47 @@ ป้ายข้อความ - + Server Activities กิจกรรมของเซิร์ฟเวอร์ - + Copy คัดลอก - + Copy the activity list to the clipboard. คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด - + Action Required: Notifications จำเป็นต้องทำ: การแจ้งเตือน - + <br/>Account %1 does not have activities enabled. <br />บัญชี %1 ไม่มีกิจกรรมที่เปิดใช้งาน - + You received %n new notification(s) from %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %2 - + You received %n new notification(s) from %1 and %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %1 และ %2 - + You received new notifications from %1, %2 and other accounts. คุณได้รับการแจ้งเตือนใหม่จาก %1, %2 และผู้ใช้อื่นๆ - + %1 Notifications - Action Required %1 การแจ้งเตือน - จำเป็นต้องดำเนินการ @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file เกิดข้อผิดพลาดขณะกำลังเข้าถึงไฟล์กำหนดค่า - + There was an error while accessing the configuration file at %1. เกิดข้อผิดพลาดขณะกำลังเข้าถึงไฟล์กำหนดค่า %1 - + Quit ownCloud ออกจาก ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -752,26 +752,26 @@ ไม่สามารถอ่าน ยกเว้นไฟล์ระบบ - + A new folder larger than %1 MB has been added: %2. โฟลเดอร์ใหม่มีขนาดใหญ่กว่า %1 เมกะไบต์ ได้ถูกเพิ่ม: %2 - + A folder from an external storage has been added. โฟลเดอร์ที่มีพื้นที่จัดเก็บข้อมูลภายนอกได้ถูกเพิ่ม - + Please go in the settings to select it if you wish to download it. กรุณาไปในส่วนของการตั้งค่าเพื่อเลือก ถ้าคุณต้องการจะดาวน์โหลด - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a หากคุณตัดสินใจที่จะลบไฟล์ก็จะทำให้ไม่มีใครสามารถใช้งานโฟลเดอร์นี้ได้เพราะคุณเป็นเจ้าของ - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -792,22 +792,22 @@ If this was an accident and you decide to keep your files, they will be re-synce ถ้าเรื่องนี้เป็นอุบัติเหตุและคุณตัดสินใจที่จะเก็บไฟล์ของคุณ ไฟล์ของคุณก็จะถูกประสานข้อมูลใหม่อีกครั้ง - + Remove All Files? ลบไฟล์ทั้งหมด? - + Remove all files ลบไฟล์ทั้งหมด - + Keep files เก็บไฟล์เอาไว้ - + This sync would reset the files to an earlier 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? @@ -816,17 +816,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an ไฟล์ปัจจุบันของคุณทั้งหมดจะถูกเขียนทับด้วยไฟล์เก่า คุณต้องการเก็บไฟล์ไว้? - + Backup detected ตรวจพบการสำรองข้อมูล - + Normal Synchronisation ประสานข้อมูลปกติ - + Keep Local Files as Conflict เก็บไฟล์ต้นทางเป็นไฟล์ที่มีปัญหา @@ -953,12 +953,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Synchronizing with local folder กำลังประสานข้อมูลกับโฟลเดอร์ต้นทาง - + File ไฟล์ @@ -966,144 +966,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder คุณจะต้องเชื่อมต่อก่อนที่จะเพิ่มโฟลเดอร์ - + Click this button to add a folder to synchronize. คลิกที่ปุ่มนี้เพื่อเพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. ข้อผิดพลาดในขณะที่โหลดรายชื่อโฟลเดอร์จากเซิร์ฟเวอร์ - + Signed out ออกจากระบบ - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. การเพิ่มโฟลเดอร์ถูกยกเลิกเพราะคุณได้ประสานไฟล์ทั้งหมดของคุณอยู่แล้ว หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์โปรดลบโฟลเดอร์รากกำหนดค่าในปัจจุบัน - + Fetching folder list from server... กำลังดึงรายการโฟลเดอร์จากเซิร์ฟเวอร์ ... - + There are unresolved conflicts. Click for details. มีข้อขัดแย้งที่ยังไม่ได้รับการแก้ไข คลิกเพื่อดูรายละเอียด - + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" กำลังประสานข้อมูล %1 - - + + , หรือ - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ดาวน์โหลด %1/วินาที - + u2193 %1/s u2193 %1/วินาที - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) อัพโหลด - + u2191 %1/s u2191 %1/วินาที - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ของ %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" เหลืออีก %5 ไฟล์, %1 ไฟล์จาก %2, %3 ไฟล์จาก %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 จาก %2, %3 จาก %4 ไฟล์ - + file %1 of %2 ไฟล์ %1 จาก %2 - + Waiting... กรุณารอซักครู่... - + Waiting for %n other folder(s)... กำลังรออีก (%n) โฟลเดอร์... - + Preparing to sync... กำลังเตรียมพร้อมในการประสานข้อมูล @@ -1111,12 +1111,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Add Sync Connection เพิ่มการประสานข้อมูลให้ตรงกัน @@ -1142,52 +1142,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder สร้างโฟลเดอร์รีโมท - + Enter the name of the new folder to be created below '%1': ใส่ชื่อของโฟลเดอร์ใหม่ที่จะถูกสร้างขึ้นดังต่อไปนี้ '%1': - + Folder was successfully created on %1. โฟลเดอร์ถูกสร้างขึ้นเรียบร้อยแล้วเมื่อ %1... - + Authentication failed accessing %1 รับรองความถูกต้องล้มเหลวขณะกำลังเข้าถึง %1 - + Failed to create the folder on %1. Please check manually. ไม่สามารถสร้างโฟลเดอร์บน %1 กรุณาตรวจสอบด้วยตนเอง - + Failed to list a folder. Error: %1 รายการโฟลเดอร์ล้มเหลว ข้อผิดพลาด: %1 - + Choose this to sync the entire account เลือกตัวเลือกนี้เพื่อประสานข้อมูลบัญชีทั้งหมด - + This folder is already being synced. โฟลเดอร์นี้ถูกประสานข้อมูลอยู่แล้ว - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. คุณประสานข้อมูล <i>%1</i> อยู่แล้ว ซึ่งมีโฟลเดอร์หลักเป็น <i>%2</i> - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. คุณกำลังผสานข้อมูลไฟลืทั้งหมดอยู่แล้ว การผสานข้อมูลโฟลเดอร์อื่นๆ<b>ไม่</b>ได้รับการสนับสนุน หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์ กรุณาลบการกำหนดค่าผสานข้อมูลโฟลเดอร์รากในปัจจุบัน @@ -1433,7 +1433,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder แฟ้มเอกสาร @@ -1458,17 +1458,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from คัดลอก - + Time เวลา - + File ไฟล์ - + Issue ปัญหา @@ -1534,12 +1534,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error ข้อผิดพลาด - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>ไฟล์ '%1'<br/>ไม่สามารถเปิดขึ้นมาเพื่อเขียนข้อมูลได้<br/><br/>ผลลัพธ์ของไฟล์ log <b>ไม่สามารถ</b> บันทึกข้อมูลได้!</nobr> @@ -1547,27 +1547,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available มีรุ่นใหม่ที่สามารถใช้งานได้ - + <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> <p>%1 มีรุ่นใหม่ของไคลเอ็นต์แล้ว</p><p><b>%2</b> สามารถดาวน์โหลดได้ รุ่นที่ติดตั้งคือ %3 - + Skip this version ข้ามรุ่นนี้ - + Skip this time ข้ามเวลานี้ - + Get update ได้รับการอัพเดท @@ -1679,11 +1679,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy พร็อกซี SOCKS5 - - - Qt >= 5.4 is required in order to use the bandwidth limit - Qt >= 5.4 เป็นสิ่งจำเป็นเพื่อช่วยจำกัดแบนด์วิดธ์ - OCC::NotificationWidget @@ -1713,32 +1708,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1746,58 +1741,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready มี %1 พร้อมอัพเดทใหม่ - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. มีการอัพเดทใหม่สำหรับ %1 มันเกี่ยวกับการติดตั้ง การอัพเดทอาจจะถามสิทธิประโยชน์เพิ่มเติมในระหว่างกระบวนการ - + Downloading version %1. Please wait... กำลังดาวน์โหลดรุ่น %1 กรุณารอสักครู่... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. ไม่สามารถดาวน์โหลดการอัพเดท กรุณาคลิก<a href='%1'>ที่นี่</a> เพื่อดาวน์โหลดการอัพเดทด้วยตนเอง - + Could not check for new updates. ไม่สามารถตรวจสอบการอัพเดทใหม่ - + %1 version %2 available. Restart application to start the update. มี %1 รุ่น %2 พร้อมใช้งานแล้ว เริ่มต้นแอพพลิเคชันใหม่เพื่อเริ่มต้นการอัพเดท - + New %1 version %2 available. Please use the system's update tool to install it. มี %1 รุ่น %2 พร้อมใช้งานแล้ว กรุณาใช้เครื่องมืออัพเดทระบบเพื่อติดตั้ง - + Checking update server... กำลังตรวจสอบการอัพเดทเซิร์ฟเวอร์... - + Update status is unknown: Did not check for new updates. สถานะการอัพเดทที่ไม่รู้จัก: จะไม่มีการตรวจสอบการอัพเดทใหม่ - + No updates available. Your installation is at the latest version. ไม่พบการอัพเดท ตัวที่ติดตั้งเป็นเวอร์ชั่นล่าสุด - + Update Check ตรวจสอบการอัพเดท @@ -1874,7 +1869,7 @@ for additional privileges during the process. กำหนดค่าใบรับรอง TLS ฝั่งไคลเอ็นต์ - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>ไม่สามารถเชื่อมต่อไปยังที่อยู่เซิร์ฟเวอร์ที่ปลอดภัย<em>%1</em> คุณต้องการที่จะดำเนินการต่อไป?</p></body></html> @@ -1943,144 +1938,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">เชื่อมต่อกับ %1: %2 รุ่น %3 (%4) เสร็จเรียบร้อยแล้ว</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 ล้มเหลวในการเชื่อมต่อไปยัง %1 ที่ %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. หมดเวลาขณะที่พยายามเชื่อมต่อไปยัง %1 ที่ %2 - + Trying to connect to %1 at %2... กำลังพยายามเชื่อมต่อไปที่ %1 ที่ %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. คำขอการรับรองความถูกต้องไปยังเซิร์ฟเวอร์ที่ถูกเปลี่ยนเส้นทางไปยัง - + There was an invalid response to an authenticated webdav request มีการตอบสนองที่ไม่ถูกต้องที่จะร้องขอการรับรองความถูกต้องของ WebDAV - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. การเข้าถึงถูกระงับโดยเซิร์ฟเวอร์ เพื่อตรวจสอบว่าคุณมีการเข้าถึงที่เหมาะสม <a href="%1">คลิกที่นี่</a> เพื่อรเข้าถึงบริการกับเบราว์เซอร์ของคุณ - + Invalid URL URL ไม่ถูกต้อง - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> ประสานข้อมูลโฟลเดอร์ต้นทาง %1 มีอยู่แล้ว กรุณาตั้งค่าเพื่อถ่ายข้อมูล <br/<br/> - + Creating local sync folder %1... สร้างประสานข้อมูลโฟลเดอร์ต้นทาง %1... - + ok ตกลง - + failed. ล้มเหลว - + Could not create local folder %1 ไม่สามารถสร้างผสานข้อมูลโฟลเดอร์ต้นทาง %1... - + No remote folder specified! ไม่มีโฟลเดอร์รีโมทที่ระบุ! - + Error: %1 ข้อผิดพลาด: %1 - + creating folder on ownCloud: %1 กำลังสร้างโฟลเดอร์ใหม่บน ownCloud: %1 - + Remote folder %1 created successfully. โฟลเดอร์รีโมท %1 ถูกสร้างเรียบร้อยแล้ว - + The remote folder %1 already exists. Connecting it for syncing. โฟลเดอร์รีโมทมี %1 อยู่แล้ว กำลังเชื่อมต่อเพื่อถ่ายโอนข้อมูล - - + + The folder creation resulted in HTTP error code %1 การสร้างโฟลเดอร์ดังกล่าวส่งผลให้เกิดรหัสข้อผิดพลาด HTTP error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> สร้างโฟลเดอร์ระยะไกลล้มเหลวเนื่องจากมีข้อมูลผิดพลาด! - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">การสร้างโฟลเดอร์รีโมทล้มเหลว ซึ่งอาจมีสาเหตุมาจากการกรอกข้อมูลส่วนตัวเพื่อเข้าใช้งานไม่ถูกต้อง.</font><br/>กรุณาย้อนกลับไปแล้วตรวจสอบข้อมูลส่วนตัวของคุณอีกครั้ง.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. การสร้างโฟลเดอร์ระยะไกล %1 ล้มเหลวเนื่องข้อผิดพลาด <tt>%2</tt> - + A sync connection from %1 to remote directory %2 was set up. การเชื่อมต่อเผื่อประสานข้อมูลจาก %1 ไปที่ไดเร็กทอรี่ระยะไกล %2 ได้ถูกติดตั้งแล้ว - + Successfully connected to %1! เชื่อมต่อไปที่ %1! สำเร็จ - + Connection to %1 could not be established. Please check again. การเชื่อมต่อกับ %1 ไม่สามารถดำเนินการได้ กรุณาตรวจสอบอีกครั้ง - + Folder rename failed เปลี่ยนชื่อโฟลเดอร์ล้มเหลว - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. ไม่สามารถลบและสำรองข้อมูลโฟลเดอร์เพราะโฟลเดอร์หรือไฟล์ในนั้นจะเปิดในโปรแกรมอื่นอยู่ กรุณาปิดโฟลเดอร์หรือไฟล์และกดลองใหม่อีกครั้งหรือยกเลิกการติดตั้ง - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>ประสานข้อมูลโฟลเดอร์ต้นทาง %1 ได้ถูกสร้างขึ้นเรียบร้อยแล้ว!</b></font> @@ -2127,7 +2122,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2183,12 +2178,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; ฟื้นฟูล้มเหลว: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ไฟล์หรือโฟลเดอร์ที่ถูกลบออกจากส่วนการอ่านเพียงอย่างเดียว แต่ล้มเหลวในการฟื้นฟู: %1 @@ -2196,22 +2191,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 ไม่สามารถลบไฟล์ %1, ข้อผิดพลาด: %2 - + Attention, possible case sensitivity clash with %1 คำเตือน เคสที่เป็นไปไม่ได้มีผลกับ %1 - + could not create folder %1 ไม่สามารถสร้างโฟลเดอร์ %1 - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2219,17 +2214,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; ข้อผิดพลาดขณะกำลังลบ '%1': %2; - + Could not remove folder '%1' ไม่สามารถลบโฟลเดอร์ '%1' - + Could not remove %1 because of a local file name clash ไม่สามารถลบ %1 เพราะชื่อไฟล์ต้นทางเหมือนกัน! @@ -2237,13 +2232,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash ไฟล์ %1 ไม่สามารถเปลี่ยนชื่อเป็น %2 เพราะชื่อไฟล์ต้นทางตรงกัน! - - + + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2311,27 +2306,28 @@ It is not advisable to use it. ไม่สามารถอัพโหลดไฟล์ %1 เนื่องจากมีไฟล์อื่นที่มีชื่อเดียวกันอยู่แล้ว - + File Removed ไฟล์ถูกลบไปแล้ว - + Local file changed during syncing. It will be resumed. ไฟล์ต้นทางถูกเปลี่ยนแปลงในระหว่างการซิงค์ มันจะกลับมา - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2339,32 +2335,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - บังคับให้ยกเลิกงานในการตั้งค่าการเชื่อมต่อ HTTP กับ Qt < 5.4.2 - - - + The local file was removed during sync. ไฟล์ต้นทางถูกลบออกในระหว่างการประสานข้อมูล - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + Unexpected return code from server (%1) มีรหัสข้อผิดพลาดตอบกลับมาจากเซิร์ฟเวอร์ (%1) - + Missing File ID from server ไฟล์ไอดีได้หายไปจากเซิร์ฟเวอร์ - + Missing ETag from server ETag ได้หายไปจากเซิร์ฟเวอร์ @@ -2372,32 +2363,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - บังคับให้ยกเลิกงานในการตั้งค่าการเชื่อมต่อ HTTP กับ Qt < 5.4.2 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. ไฟล์ต้นทางได้ถูกแก้ไขแต่เป็นส่วนหนึ่งของการแชร์ให้สามารถอ่านได้อย่างเดียว มันถูกกู้คืนและการแก้ไขของคุณอยู่ในไฟล์ที่มีปัญหา - + Poll URL missing URL แบบสำรวจความคิดเห็นหายไป - + The local file was removed during sync. ไฟล์ต้นทางถูกลบออกในระหว่างการประสานข้อมูล - + Local file changed during sync. ไฟล์ต้นทางถูกเปลี่ยนแปลงขณะกำลังประสานข้อมูล - + The server did not acknowledge the last chunk. (No e-tag was present) เซิร์ฟเวอร์ไม่ยอมรับส่วนสุดท้าย (ไม่มี e-tag ในปัจจุบัน) @@ -2415,42 +2401,42 @@ It is not advisable to use it. ป้ายข้อความ - + Time เวลา - + File ไฟล์ - + Folder แฟ้มเอกสาร - + Action การกระทำ - + Size ขนาด - + Local sync protocol โปรโตคอลการประสานข้อมูลต้นทาง - + Copy คัดลอก - + Copy the activity list to the clipboard. คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด @@ -2491,7 +2477,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync เลือกสิ่งที่ต้องการประสานข้อมูล @@ -2509,23 +2495,23 @@ It is not advisable to use it. ไม่ต้องเลือกรีโมทโฟลเดอร์ที่คุณไม่ต้องการประสานข้อมูล - + Name ชื่อ - + Size ขนาด - - + + No subfolders currently on the server. ไม่มีโฟลเดอร์ย่อยอยู่บนเซิร์ฟเวอร์ - + An error occurred while loading the list of sub folders. เกิดข้อผิดพลาดขณะโหลดรายชื่อของโฟลเดอร์ย่อย @@ -2553,7 +2539,7 @@ It is not advisable to use it. เครือข่าย - + Account บัญชี @@ -2872,12 +2858,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error เข้าสู่ระบบผิดพลาด - + You must sign in as user %1 คุณต้องเข้าสู่ระบบเป็นผู้ใช้ %1 @@ -2908,28 +2894,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud แชร์กับ %1 - + I shared something with you ฉันแชร์บางอย่างกับคุณ - + Share... แชร์... - + Copy private link to clipboard คัดลอกลิงค์ส่วนตัวไปยังคลิปบอร์ด - + Send private link by email... ส่งลิงค์ส่วนตัวทางอีเมล... @@ -2937,118 +2923,113 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>รายละเอียดใบรับรองความถูกต้อง</h3> - + Common Name (CN): ชื่อทั่วไป (Common Name): - + Subject Alternative Names: ชื่อเรื่องทางเลือก: - + Organization (O): องค์กร (Organization): - + Organizational Unit (OU): หน่วยองค์กร (Organizational Unit): - + State/Province: รัฐ/จังหวัด: - + Country: ประเทศ: - + Serial: Serial: - + <h3>Issuer</h3> <h3>แจ้งปัญหา</h3> - + Issuer: ผู้แจ้งปัญหา: - + Issued on: ออกเมื่อวันที่: - + Expires on: หมดอายุในวันที่: - + <h3>Fingerprints</h3> <h3>ลายนิ้วมือ</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>หมายเหตุ:</b> ใบรับรองนี้ได้รับการอนุมัติด้วยตนเอง</p> - + %1 (self-signed) %1 (ลงนามด้วยตนเอง) - + %1 %1 - + This connection is encrypted using %1 bit %2. การเชื่อมต่อนี้ถูกเข้ารหัสโดยใช้ %1 บิต %2 - + No support for SSL session tickets/identifiers ไม่มีการสนับสนุนสำหรับเซสชั่นตั๋ว SSL/ตัวบ่งชี้ - + Certificate information: ข้อมูลการรับรอง: - + This connection is NOT secure as it is not encrypted. การเชื่อมต่อนี้ไม่มีความปลอดภัยเพราะมันไม่ได้เข้ารหัส @@ -3067,67 +3048,67 @@ It is not advisable to use it. เชื่อถือในใบรับรองความปลอดภัยนี้ไม่ว่าอย่างไร - + Untrusted Certificate ใบรับรองไม่น่าเชื่อถือ - + Cannot connect securely to <i>%1</i>: ไม่สามารถเชื่อมต่อแบบปลอดภัยไปยัง <i>%1</i>: - + with Certificate %1 ด้วยใบรับรองความปลอดภัย %1 + + - - &lt;not specified&gt; &lt;ยังไม่ได้ถูกระบุ&gt; - - + + Organization: %1 หน่วยงาน: %1 - - + + Unit: %1 หน่วย: %1 - - + + Country: %1 ประเทศ: %1 - + Fingerprint (MD5): <tt>%1</tt> ลายนิ้วมือ (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> ลายนิ้วมือ (SHA1): <tt>%1</tt> - + Effective Date: %1 วันที่บังคับใช้: %1 - + Expiration Date: %1 หมดอายุวันที่: %1 - + Issuer: %1 ผู้รับรอง: %1 @@ -3241,27 +3222,27 @@ It is not advisable to use it. มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3366,69 +3347,69 @@ It is not advisable to use it. ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา @@ -3452,17 +3433,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>รุ่น %1 สำหรับข้อมูลเพิ่มเติมกรุณาเยี่ยมชม <a href='%2'>%3</a></p> - + <p>Copyright ownCloud GmbH</p> <p>ลิขสิทธิ์ ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>เผยแพร่โดย %1 และมีใบอนุญาตภายใต้ GNU General Public License (GPL) รุ่น 2.0 <br/>%2 และการลงทะเบียนโลโก้ %2 เครื่องหมายการค้าของ %1 ในประเทศสหรัฐอเมริกา ประเทศอื่นๆ หรือทั้งสองอย่าง</p> @@ -3875,48 +3856,40 @@ It is not advisable to use it. ปุ่มกด - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future ในอนาคต - + %n day(s) ago %n วันที่ผ่านมา - + %n hour(s) ago %n ชั่วโมงที่ผ่านมา - + now ตอนนี้ - + Less than a minute ago ไม่กี่นาทีที่ผ่านมา - + %n minute(s) ago %n นาทีที่ผ่านมา - + Some time ago บางเวลาที่ผ่านมา @@ -3930,57 +3903,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 กิกะไบต์ - + %L1 MB %L1 เมกะไบต์ - + %L1 KB %L1 กิโลไบต์ - + %L1 B %L1 B - + %n year(s) %n ปี - + %n month(s) %n เดือน - + %n day(s) %n วัน - + %n hour(s) %n ชั่วโมง - + %n minute(s) %n นาที - + %n second(s) %n วินาที - + %1 %2 %1 %2 @@ -4001,7 +3974,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>ที่สร้างขึ้นจากการแก้ไข Git <a href="%1">%2</a> บน %3, %4 กำลังใช้ Qt %5, %6</small></p> diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 902a68b48..9dacf7b3a 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Hedef dosya beklenilmeyen boyuta veya düzenlenme tarihine sahip @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Bağlantı zaman aşımına uğradı - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel İptal @@ -174,184 +174,184 @@ Hesap - + Choose what to sync Ne eşitleneceğini seçin - + Force sync now Şimdi eşitlemeye zorla - + Restart sync Eşitlemeyi yeniden başlat - + Remove folder sync connection Klasör eşitleme bağlantısını sil - + Folder creation failed Klasör oluşturma başarısız oldu - + <p>Could not create local folder <i>%1</i>. <p><i>%1</i> yerel klasörü oluşturulamadı. - + Confirm Folder Sync Connection Removal Klasör Eşitleme Bağlantısının Silinmesini Onaylayın - + Remove Folder Sync Connection Klasör Eşitleme Bağlantısını Sil - + Sync Running Eşitleme Çalışıyor - + The syncing operation is running.<br/>Do you want to terminate it? Eşitleme işlemi devam ediyor.<br/>Durdurmak istiyor musunuz? - + %1 in use %1 kullanımda - + %1 as <i>%2</i> %1 <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Sunucu sürümü %1 eski ve desteklenmiyor! Kendi riskinizle devam edin. - + Connected to %1. %1 ile bağlı. - + Server %1 is temporarily unavailable. %1 sunucusu geçici olarak ulaşılamaz durumda. - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1 oturumu sonlandırıldı. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. %1 ile %2 bağlantısı yok. - + Log in Giriş yap - + There are folders that were not synchronized because they are too big: Çok büyük oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are external storages: Harici depolama diskinde oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are too big or external storages: Çok büyük oldukları için ya da harici depolama alanında oldukları için eşitlenmeyen klasörler var: - + Confirm Account Removal Hesap Silinmesini Onaylayın - + <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> <p><i>%1</i> hesabının bağlantısını kaldırmayı gerçekten istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmeyecektir</b>.</p> - + Remove connection Bağlantıyı kaldır - - + + Open folder Klasörü aç - + Log out Çıkış yap - + Resume sync Eşitlemeye devam et - + Pause sync Eşitlemeyi duraklat - + <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> <p><i>%1</i> klasörünün eşitlemesini durdurmayı gerçekten istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmeyecektir</b>.</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) / %2 kullanımda. Ağdan bağlanmış veya paylaşılan dizinlerin farklı sınırları olabilir. - + %1 of %2 in use %1 / %2 kullanımda - + Currently there is no storage usage information available. Şu anda depolama kullanım bilgisi mevcut değil. - + No %1 connection configured. Hiç %1 bağlantısı yapılandırılmamış. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Sunucu Etkinliği - + Sync Protocol Eşitleme Protokolü - + Not Synced Eşitlenmedi - + Not Synced (%1) %1 is the number of not synced files. Eşitlenmedi (%1) - + The server activity list has been copied to the clipboard. Sunucu etkinlik listesi panoya kopyalandı. - + The sync activity list has been copied to the clipboard. Eşitleme etkinlik listesi panoya kopyalandı. - + The list of unsynced items has been copied to the clipboard. Eşitlenmemiş ögelerin listesi panoya kopyalandı. - + Copied to clipboard Panoya kopyalandı @@ -477,47 +477,47 @@ MetinEtiketi - + Server Activities Sunucu Etkinlikleri - + Copy Kopyala - + Copy the activity list to the clipboard. Etkinlik listesini panoya kopyala. - + Action Required: Notifications Eylem Gerekiyor: Bildirimler - + <br/>Account %1 does not have activities enabled. <br/>%1 hesabının geçerli kılınmış etkinlikleri bulunmamakta. - + You received %n new notification(s) from %2. %2 için %n yeni bildiriminiz var.%2 için %n yeni bildiriminiz var. - + You received %n new notification(s) from %1 and %2. %2 ve %1 için %n yeni bildiriminiz var.%2 ve %1 için %n yeni bildiriminiz var. - + You received new notifications from %1, %2 and other accounts. %2, %1 ve diğer hesaplardan %n yeni bildiriminiz var. - + %1 Notifications - Action Required %1 Bildirim - Eylem Gerekiyor @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud ownCloud'dan çık @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -752,24 +752,24 @@ Sistem hariç tutulma dosyası okunamadı - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Tüm Dosyalar Kaldırılsın mı? - + Remove all files Tüm dosyaları kaldır - + Keep files Dosyaları koru - + This sync would reset the files to an earlier 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? - + Backup detected Yedek bulundu - + Normal Synchronisation Normal Eşitleme - + Keep Local Files as Conflict Çakışma Durumunda Yerel Dosyaları Tut @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Klasör Eşitleme Bağlantısı Ekle - + Synchronizing with local folder Yerel klasör ile eşitleniyor - + File Dosya @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Bir klasör eklemek için bağlı olmanız gerekir - + Click this button to add a folder to synchronize. Bir klasörü eşitlemeye dahil etmek için bu düğmeye tıklayın. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Sunucudan klasörlerin listesi yüklenirken hata oluştu. - + Signed out Oturum sonlandırıldı - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. Klasör ekleme devre dışı, çünkü şu anda bütün dosyalarınızı eşitliyorsunuz. Çoklu klasör eşitlemesi yapmak istiyorsanız, lütfen geçerli yapılandırılmış kök klasörünü silin. - + Fetching folder list from server... Sunucudan klasör listesi alınıyor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' %1 üzerindeki değişiklikler denetleniyor - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 eşitleniyor - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) indirme %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) gönderme %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Kalan %5, %1/%2, dosya %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, %3/%4 dosya - + file %1 of %2 dosya %1/%2 - + Waiting... Bekleniyor... - + Waiting for %n other folder(s)... Diğer %n klasör bekleniyor...Diğer %n klasör bekleniyor... - + Preparing to sync... Eşitleme için hazırlanıyor... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Klasör Eşitleme Bağlantısı Ekle - + Add Sync Connection Eşitleme Bağlantısı Ekle @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Uzak Klasör Oluştur - + Enter the name of the new folder to be created below '%1': '%1' altında oluşturulacak yeni klasörün adını girin: - + Folder was successfully created on %1. Klasör %1 üzerinde başarıyla oluşturuldu. - + Authentication failed accessing %1 %1 erişimi için giriş başarısız - + Failed to create the folder on %1. Please check manually. %1 üzerinde klasör oluşturma başarısız. Lütfen elle denetleyin. - + Failed to list a folder. Error: %1 Bir klasörün listelenmesi başarısız oldu. Hata: %1 - + Choose this to sync the entire account Tüm hesabı eşitlemek için bunu seçin - + This folder is already being synced. Bu klasör zaten eşitleniyor. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i> zaten eşitleniyor. Bu, <i>%2</i> klasörünün üst klasörü. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Zaten tüm dosyalarınızı eşitliyorsunuz. Farklı bir klasör eşitlemek <b>desteklenmiyor</b>. Eğer çoklu klasörleri eşitlemek isterseniz, lütfen şu anda yapılandırılmış kök klasör eşitlemesini kaldırın. @@ -1422,7 +1422,7 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s - + Folder Klasör @@ -1447,17 +1447,17 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s Kopyala - + Time Zaman - + File Dosya - + Issue @@ -1523,12 +1523,12 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::Logger - + Error Hata - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>'%1' dosyası<br/>yazmak üzere açılamadı.<br/><br/>Günlük çıktısı <b>kaydedilemez</b>!</nobr> @@ -1536,27 +1536,27 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::NSISUpdater - + New Version Available Yeni Sürüm Mevcut - + <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> <p>%1 İstemcisi yeni sürümü mevcut.</p><p><b>%2</b> artık indirilebilir. Kurulu sürüm %3.</p> - + Skip this version Bu sürümü atla - + Skip this time Bu kez atla - + Get update Güncellemeyi al @@ -1668,11 +1668,6 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s SOCKS5 proxy SOCKS5 vekil sunucusu - - - Qt >= 5.4 is required in order to use the bandwidth limit - Bant genişliği sınırlaması için Qt >= 5.4 gerekmektedir - OCC::NotificationWidget @@ -1702,32 +1697,32 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1735,58 +1730,58 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::OCUpdater - + New %1 Update Ready Yeni %1 Güncellemesi Hazır - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. %1 için yeni bir güncelleme yüklenmek üzere. İşlem sürerken güncelleyici başka yetkiler isteyebilir. - + Downloading version %1. Please wait... %1 sürümü indirilyor. Lütfen bekleyin... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Güncelleme indirilemedi. Lütfen güncellemeyi elle indirmek için <a href='%1'>buraya</a> tıklayın. - + Could not check for new updates. Yeni güncellemeler denetlenemedi. - + %1 version %2 available. Restart application to start the update. %1 sürümü mevcut. Güncellemeyi başlatmak için uygulamayı yeniden başlatın. - + New %1 version %2 available. Please use the system's update tool to install it. Yeni %1 sürüm mevcut. Lütfen kurulum için sistem güncelleştirme aracını kullanın. - + Checking update server... Güncelleme sunucusu denetleniyor... - + Update status is unknown: Did not check for new updates. Güncelleme durumu bilinmiyor: Yeni güncellemeler denetlenemedi. - + No updates available. Your installation is at the latest version. Güncelleme yok. Kurulumunuz son sürümde. - + Update Check Güncelleme Denetimi @@ -1863,7 +1858,7 @@ for additional privileges during the process. İstemci taraflı TLS sertifikasını yapılandır - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p><em>%1</em> güvenli sunucu adresine bağlantı başarısız. Nasıl devam etmek istersiniz?</p></body></html> @@ -1932,144 +1927,144 @@ Kullanmanız önerilmez. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">%1 bağlantısı başarılı: %2 sürüm %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 %2 üzerinde %1 adresine bağlanılamadı:<br/>%3 - + Timeout while trying to connect to %1 at %2. %2 üzerinde %1 bağlantısı yapılırken zaman aşımı. - + Trying to connect to %1 at %2... %2 üzerinde %1 bağlantısı deneniyor... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Sunucuda giriş sırasında istek '%1' adresine yönlendirilmiş. Adres hatalı veya sunucu yanlış ayarlanmış. - + There was an invalid response to an authenticated webdav request Yetkilendirilmiş webdav isteği geçersiz bir cevap alındı - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Erişim sunucu tarafından yasaklandı. Geçerli erişime sahip olup olmadığınızı doğrulamak için hizmete web tarayıcınızla erişmek üzere <a href="%1">buraya tıklayın</a>. - + Invalid URL Geçersiz URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Yerel eşitleme klasörü %1 zaten mevcut, eşitlemek için ayarlanıyor.<br/><br/> - + Creating local sync folder %1... Yerel eşitleme klasörü %1 oluşturuluyor... - + ok tamam - + failed. başarısız. - + Could not create local folder %1 %1 yerel klasörü oluşturulamadı - + No remote folder specified! Uzak klasör belirtilmemiş! - + Error: %1 Hata: %1 - + creating folder on ownCloud: %1 ownCloud üzerinde klasör oluşturuluyor: %1 - + Remote folder %1 created successfully. %1 uzak klasörü başarıyla oluşturuldu. - + The remote folder %1 already exists. Connecting it for syncing. Uzak klasör %1 zaten mevcut. Eşitlemek için bağlanılıyor. - - + + The folder creation resulted in HTTP error code %1 Klasör oluşturma %1 HTTP hata kodu ile sonuçlandı - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Uzak klasör oluşturması, geçersiz kimlik bilgileri nedeniyle başarısız!<br/>Lütfen geri gidin ve bilgileri denetleyin.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Uzak klasör oluşturma muhtemelen hatalı kimlik bilgilerinden dolayı başarısız oldu.</font><br/>Lütfen geri gidip kimlik bilgilerini doğrulayın.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Uzak klasör %1 oluşturma işlemi <tt>%2</tt> hatası ile başarısız oldu. - + A sync connection from %1 to remote directory %2 was set up. %1 kaynaklı %2 uzak dizinine bir eşitleme bağlantısı ayarlandı. - + Successfully connected to %1! %1 bağlantısı başarılı! - + Connection to %1 could not be established. Please check again. %1 bağlantısı kurulamadı. Lütfen tekrar denetleyin. - + Folder rename failed Klasör adlandırma başarısız - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Klasör veya içerisindeki bir dosya farklı bir program içerisinde açık olduğundan, kaldırma ve yedekleme işlemi yapılamıyor. Lütfen klasör veya dosyayı kapatıp yeniden deneyin veya kurulumu iptal edin. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Yerel eşitleme klasörü %1 başarıyla oluşturuldu!</b></font> @@ -2116,7 +2111,7 @@ Kullanmanız önerilmez. OCC::PropagateDirectory - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2172,12 +2167,12 @@ Kullanmanız önerilmez. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Geri Yükleme Başarısız: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Bir dosya veya dizin bir salt okunur paylaşımdan kaldırılmıştı, ancak geri yükleme başarısız oldu: %1 @@ -2185,22 +2180,22 @@ Kullanmanız önerilmez. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 %1 dosyası silinemedi, hata: %2 - + Attention, possible case sensitivity clash with %1 Uyarı, %1 ile muhtemel harf duyarlılığı çatışması - + could not create folder %1 %1 klasörü oluşturulamadı - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2208,17 +2203,17 @@ Kullanmanız önerilmez. OCC::PropagateLocalRemove - + Error removing '%1': %2; '%1' silme hatası: %2; - + Could not remove folder '%1' '%1' klasörü silinemiyor - + Could not remove %1 because of a local file name clash %1 dosyası yerel bir dosya adı çakışması nedeniyle kaldırılamadı @@ -2226,13 +2221,13 @@ Kullanmanız önerilmez. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash Yerel bir dosya adı çakışması nedeniyle %1 dosyası %2 olarak adlandırılamadı - - + + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2300,27 +2295,28 @@ Kullanmanız önerilmez. - + File Removed Dosya Kaldırıldı - + Local file changed during syncing. It will be resumed. Eşitleme sırasında yerel dosya değişti. Devam edilecek. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2328,32 +2324,27 @@ Kullanmanız önerilmez. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Qt < 5.4.2 ile HTTP bağlantı sıfırlamasında görev iptali zorlanıyor. - - - + The local file was removed during sync. Eşitleme sırasında yerel dosya kaldırıldı. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + Unexpected return code from server (%1) (%1) Sunucusundan bilinmeyen dönüş kodu - + Missing File ID from server - + Missing ETag from server @@ -2361,32 +2352,27 @@ Kullanmanız önerilmez. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Qt < 5.4.2 ile HTTP bağlantı sıfırlamasında görev iptali zorlanıyor. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Dosya yerel olarak düzenlendi ancak salt okunur paylaşımın bir parçası. Geri yüklendi ve düzenlemeniz çakışan dosyada. - + Poll URL missing Getirme URL'si eksik - + The local file was removed during sync. Eşitleme sırasında yerel dosya kaldırıldı. - + Local file changed during sync. Eşitleme sırasında yerel dosya değişti. - + The server did not acknowledge the last chunk. (No e-tag was present) Sunucu son yığını onaylamadı. (Mevcut e-etiket bulunamadı) @@ -2404,42 +2390,42 @@ Kullanmanız önerilmez. MetinEtiketi - + Time Zaman - + File Dosya - + Folder Klasör - + Action Eylem - + Size Boyut - + Local sync protocol Yerel eşitleme protokolü - + Copy Kopyala - + Copy the activity list to the clipboard. Etkinlik listesini panoya kopyala. @@ -2480,7 +2466,7 @@ Kullanmanız önerilmez. OCC::SelectiveSyncDialog - + Choose What to Sync Ne Eşitleneceğini Seçin @@ -2498,23 +2484,23 @@ Kullanmanız önerilmez. - + Name Ad - + Size Boyut - - + + No subfolders currently on the server. Sunucuda şu anda alt dizin bulunmuyor. - + An error occurred while loading the list of sub folders. Alt klasör listesi alınırken bir hata oluştu. @@ -2542,7 +2528,7 @@ Kullanmanız önerilmez. - + Account Hesap @@ -2861,12 +2847,12 @@ Kullanmanız önerilmez. OCC::ShibbolethCredentials - + Login Error Oturum Açma Hatası - + You must sign in as user %1 %1 kullanıcısı olarak oturum açmalısınız @@ -2897,28 +2883,28 @@ Kullanmanız önerilmez. OCC::SocketApi - + Share with %1 parameter is ownCloud %1 ile paylaş - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2926,119 +2912,114 @@ Kullanmanız önerilmez. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Sertifika Ayrıntıları</h3> - + Common Name (CN): Ortak Ad (CN): - + Subject Alternative Names: Konu Alternatif İsimleri: - + Organization (O): Kurum (O): - + Organizational Unit (OU): Kuruluş Birimi (OU): - + State/Province: Bölge/İlçe: - + Country: Ülke: - + Serial: Seri No: - + <h3>Issuer</h3> <h3>Veren</h3> - + Issuer: Veren: - + Issued on: Verilme: - + Expires on: Bitiş: - + <h3>Fingerprints</h3> <h3>Parmak İzleri</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Not:</b> Bu sertifika el ile onaylandı</p> - + %1 (self-signed) %1 (kendinden imzalı) - + %1 %1 - + This connection is encrypted using %1 bit %2. Bu bağlantı %1 bit %2 kullanılarak şifrelenmiştir. - + No support for SSL session tickets/identifiers SSL oturum biletleri/tanımlayıcıları desteklenmiyor - + Certificate information: Sertifika bilgisi: - + This connection is NOT secure as it is not encrypted. Bu bağlantı şifrelenmediğinden güvenli DEĞİL. @@ -3058,67 +3039,67 @@ Kullanmanız önerilmez. Yine de bu sertifikaya güven - + Untrusted Certificate Güvensiz Sertifika - + Cannot connect securely to <i>%1</i>: <i>%1</i> sunucusuna güvenli şekilde bağlanılamıyor: - + with Certificate %1 Sertifika: %1 + + - - &lt;not specified&gt; &lt;belirtilmemiş&gt; - - + + Organization: %1 Kurum: %1 - - + + Unit: %1 Birim: %1 - - + + Country: %1 Ülke: %1 - + Fingerprint (MD5): <tt>%1</tt> Parmak izi (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Parmak izi (SHA1): <tt>%1</tt> - + Effective Date: %1 Etkili Tarih: %1 - + Expiration Date: %1 Son Kullanım Tarihi: %1 - + Issuer: %1 Veren: %1 @@ -3232,27 +3213,27 @@ Kullanmanız önerilmez. Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3357,69 +3338,69 @@ Kullanmanız önerilmez. Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak @@ -3443,17 +3424,17 @@ Kullanmanız önerilmez. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Sürüm %1. Daha fazla bilgi için lütfen <a href='%2'>%3</a> adresini ziyaret edin.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 tarafından dağıtılmış ve GNU Genel Kamu Lisansı (GPL) Sürüm 2.0 ile lisanslanmıştır.<br/>%2 ve %2 logoları ABD ve/veya diğer ülkelerde %1 tescili markalarıdır.</p> @@ -3866,48 +3847,40 @@ Kullanmanız önerilmez. BasılırDüğme - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future gelecekte - + %n day(s) ago %n gün önce%n gün önce - + %n hour(s) ago %n saat önce%n saat önce - + now şimdi - + Less than a minute ago 1 dakika önce - + %n minute(s) ago %n dakika önce%n dakika önce - + Some time ago Bir süre önce @@ -3921,57 +3894,57 @@ Kullanmanız önerilmez. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n yıl%n yıl - + %n month(s) %n ay%n ay - + %n day(s) %n gün%n gün - + %n hour(s) %n saat%n saat - + %n minute(s) %n dakika%n dakika - + %n second(s) %n saniye%n saniye - + %1 %2 %1 %2 @@ -3992,7 +3965,7 @@ Kullanmanız önerilmez. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small><a href="%1">%2</a> Git gözden geçirmesi ile %3, %4 tarihinde, Qt %5, %6 kullanılarak derlendi.</small></p> diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 05b137f90..27f00aae3 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time Файл призначення має неочікуваний розмір або час редагування @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out Час очікування з'єднання вичерпано - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel Скасувати @@ -174,184 +174,184 @@ Обліковий запис - + Choose what to sync Оберіть, що хочете синхронізувати - + Force sync now Примусово синхронізувати зараз - + Restart sync Перезапустити синхронізацію - + Remove folder sync connection - + Folder creation failed Не вдалося створити теку - + <p>Could not create local folder <i>%1</i>. - + Confirm Folder Sync Connection Removal - + Remove Folder Sync Connection - + Sync Running Виконується синхронізація - + The syncing operation is running.<br/>Do you want to terminate it? Виконується процедура синхронізації.<br/>Бажаєте зупинити? - + %1 in use %1 використовується - + %1 as <i>%2</i> %1 як <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Підключено до %1. - + Server %1 is temporarily unavailable. Сервер %1 тимчасово недоступний. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Увійти - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Підтвердіть видалення облікового запису - + <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> - + Remove connection - - + + Open folder Відкрити каталог - + Log out Вихід - + Resume sync Відновити синхронізацію - + Pause sync Призупинити синхронізацію - + <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> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. Використовується %1 (%3%) з %2. Деякі теки, включаючи мережеві змонтовані чи спільні, можуть мати інші обмеження. - + %1 of %2 in use Використовується %1 з %2 - + Currently there is no storage usage information available. На даний час немає відомостей про наповнення сховища. - + No %1 connection configured. Жодного %1 підключення не налаштовано. @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity Серверна активність - + Sync Protocol Протокол Синхронізації - + Not Synced Не синхронізовано - + Not Synced (%1) %1 is the number of not synced files. Not Synced (%1) - + The server activity list has been copied to the clipboard. Список серверних операцій скопійовано до буферу обміну. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Скопійовано в буфер обміну @@ -477,47 +477,47 @@ Мітка - + Server Activities Серверні операції - + Copy Копіювати - + Copy the activity list to the clipboard. Скопіювати протокол синхронізації до буферу обміну. - + Action Required: Notifications Необхідна Дія: Сповіщення - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. Ви отримали %n нове сповіщення від %2.Ви отримали %n нових сповіщень від %2.Ви отримали %n нових сповіщень від %2. - + You received %n new notification(s) from %1 and %2. Ви отримали %n нове сповіщення від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2. - + You received new notifications from %1, %2 and other accounts. Ви отримали нові сповіщення від %1, %2 та інших облікових записів. - + %1 Notifications - Action Required %1 Сповіщень - Необхідна Дія @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -752,24 +752,24 @@ Неможливо прочитати виключений системний файл - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Видалити усі файли? - + Remove all files Видалити усі файли - + Keep files Зберегти файли - + This sync would reset the files to an earlier 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? - + Backup detected Резервну копію знайдено - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Synchronizing with local folder Синхронізується з локальною текою - + File Файл @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Вийшов - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) завантаження %1/с - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) відвантаження %1/с - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 файл %1 з %2 - + Waiting... Очікування... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder Створити Віддалену Теку - + Enter the name of the new folder to be created below '%1': Введіть ім'я нової теки, яка буде створена тут '%1': - + Folder was successfully created on %1. Теку успішно створено на %1. - + Authentication failed accessing %1 Помилка аутентифікації при доступі до %1 - + Failed to create the folder on %1. Please check manually. Не вдалося створити теку на %1. Будь ласка, перевірте вручну. - + Failed to list a folder. Error: %1 - + Choose this to sync the entire account Оберіть це для синхронізації всього облікового запису - + This folder is already being synced. Тека вже синхронізується. - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Тека <i>%1</i> вже синхронізується, та вона є батьківською для <i>%2</i>. - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. Всі ваші файли синхронізуються. Синхронізація інших тек в цьому режимі <b>не</b> підтримується. Якщо вам необхідно синхронізувати декілька локальних каталогів, спочатку видаліть синхронізацію батьківської теки. @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder Тека @@ -1445,17 +1445,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from Копіювати - + Time Час - + File Файл - + Issue @@ -1521,12 +1521,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error Помилка - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>Файл '%1'<br/>не вдається відкрити на запис.<br/><br/>Журнал <b>не</b> можливо зберегти!</nobr> @@ -1534,27 +1534,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available Доступна Нова Версія - + <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> <p>Доступна нова версія додатку %1.</p><p><b>%2</b> доступна для завантаження. Встановлена версія: %3.</p> - + Skip this version Пропустити цю версію - + Skip this time Пропустити цього разу - + Get update Отримати оновлення @@ -1666,11 +1666,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 проксі - - - Qt >= 5.4 is required in order to use the bandwidth limit - - OCC::NotificationWidget @@ -1700,32 +1695,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1733,58 +1728,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready Доступне оновлення %1 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. Буде встановлено оновлення для %1. Програма оновлення може запитати додаткові привілеї. - + Downloading version %1. Please wait... Завантаження файлів %1. Будь ласка, почекайте... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. Неможливо завантажити оновлення. Будь ласка, натисніть <a href='%1'>тут</a>, щоб самостійно завантажити оновлення. - + Could not check for new updates. Не вдалося перевірити наявність оновлень. - + %1 version %2 available. Restart application to start the update. - + New %1 version %2 available. Please use the system's update tool to install it. - + Checking update server... Перевірка оновлень на сервері... - + Update status is unknown: Did not check for new updates. Статус оновлення невідомий: Не вдалося перевірити наявність оновлень. - + No updates available. Your installation is at the latest version. У вас встановленно останню версію. - + Update Check @@ -1861,7 +1856,7 @@ for additional privileges during the process. Налаштувати TLS сертифікат клієнта - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>Не вдалося підключитися до безпечного серверу за адресою <em>%1</em>. Як Ви хочете продовжити?</p></body></html> @@ -1930,144 +1925,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">Успішно підключено до %1: %2 версія %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 Не вдалося з'єднатися з %1 в %2:<br/>%3 - + Timeout while trying to connect to %1 at %2. Перевищено час очікування з'єднання до %1 на %2. - + Trying to connect to %1 at %2... Спроба підключення до %1 на %2... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. Запит аутентифікації до серверу було переадресовано до '%1'. Поганий URL, сервер сконфігуровано неправильно. - + There was an invalid response to an authenticated webdav request Неправильна відповідь на автентифікований запит webdav - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. Доступ заборонений сервером. Щоб довести, що у Вас є права доступу, <a href="%1">клікніть тут</a> для входу через Ваш браузер. - + Invalid URL Невірний URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> Локальна тека синхронізації %1 вже існує, налаштування її для синхронізації.<br/><br/> - + Creating local sync folder %1... Створення локальної теки для синхронізації %1... - + ok ok - + failed. не вдалося. - + Could not create local folder %1 Не вдалося створити локальну теку $1 - + No remote folder specified! Не вказано віддалену теку! - + Error: %1 Помилка: %1 - + creating folder on ownCloud: %1 створення теки на ownCloud: %1 - + Remote folder %1 created successfully. Віддалена тека %1 успішно створена. - + The remote folder %1 already exists. Connecting it for syncing. Віддалена тека %1 вже існує. Під'єднання для синхронізації. - - + + The folder creation resulted in HTTP error code %1 Створення теки завершилось HTTP помилкою %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> Створити віддалену теку не вдалося через невірно вказані облікові дані.<br/>Поверніться назад та перевірте облікові дані.</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">Створити віддалену теку не вдалося, можливо, через невірно вказані облікові дані.</font><br/>Будь ласка, поверніться назад та перевірте облікові дані.</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. Не вдалося створити віддалену теку %1 через помилку <tt>%2</tt>. - + A sync connection from %1 to remote directory %2 was set up. З'єднання для синхронізації %1 з віддаленою текою %2 було встановлено. - + Successfully connected to %1! Успішно під'єднано до %1! - + Connection to %1 could not be established. Please check again. Підключення до %1 встановити не вдалося. Будь ласка, перевірте ще раз. - + Folder rename failed Не вдалося перейменувати теку - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. Неможливо видалити теку та створити її резервну копію, оскільки тека або файли, що в ній розташовані, використовуються. Будь ласка, закрийте всі програми, що можуть використовувати цю теку та спробуйте ще раз, або скасуйте встановлення. - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>Локальна тека синхронізації %1 успішно створена!</b></font> @@ -2114,7 +2109,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2170,12 +2165,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Відновлення не вдалося: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -2183,22 +2178,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 - + Attention, possible case sensitivity clash with %1 Увага, можливий конфлікт чутливості до реєстру з %1 - + could not create folder %1 - + Error writing metadata to the database @@ -2206,17 +2201,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; Помилка видалення '%1': %2; - + Could not remove folder '%1' - + Could not remove %1 because of a local file name clash Неможливо видалити %1 через локальний конфлікт назви файлу @@ -2224,13 +2219,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash %1 не можна перейменувати на %2 через локальний конфлікт назви файлу - - + + Error writing metadata to the database @@ -2298,27 +2293,28 @@ It is not advisable to use it. - + File Removed Файл видалено - + Local file changed during syncing. It will be resumed. Локальний файл змінився під час синхронізації. Його буде відновлено. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database @@ -2326,32 +2322,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Примусове припинення завдання при скиданні HTTP з’єднання з Qt < 5.4.2. - - - + The local file was removed during sync. Локальний файл було видалено під час синхронізації. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2359,32 +2350,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Примусове припинення завдання при скиданні HTTP з’єднання з Qt < 5.4.2. - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. Файл було змінено локально, але він розташований в теці з правами лише на перегляд. Файл відновлено, а ваші зміни розташовані в теці конфліктів. - + Poll URL missing Не вистачає сформованого URL - + The local file was removed during sync. Локальний файл було видалено під час синхронізації. - + Local file changed during sync. Локальний файл змінився під час синхронізації. - + The server did not acknowledge the last chunk. (No e-tag was present) @@ -2402,42 +2388,42 @@ It is not advisable to use it. Мітка - + Time Час - + File Файл - + Folder Тека - + Action Дія - + Size Розмір - + Local sync protocol - + Copy Копіювати - + Copy the activity list to the clipboard. Скопіювати протокол синхронізації до буферу обміну. @@ -2478,7 +2464,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync Оберіть, що хочете синхронізувати @@ -2496,23 +2482,23 @@ It is not advisable to use it. - + Name Ім’я - + Size Розмір - - + + No subfolders currently on the server. На сервері зараз немає підтек. - + An error occurred while loading the list of sub folders. @@ -2540,7 +2526,7 @@ It is not advisable to use it. Мережа - + Account Обліковий запис @@ -2859,12 +2845,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error Помилка входу - + You must sign in as user %1 Ви маєте увійти як %1 @@ -2895,28 +2881,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud Поділитися з %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2924,119 +2910,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>Деталі сертифікату</h3> - + Common Name (CN): Загальне Ім'я (CN): - + Subject Alternative Names: Альтернативне Ім'я: - + Organization (O): Організація (O): - + Organizational Unit (OU): Підрозділ (OU): - + State/Province: Область: - + Country: Країна: - + Serial: Серія: - + <h3>Issuer</h3> <h3>Видавець</h3> - + Issuer: Видавець: - + Issued on: Видано для: - + Expires on: Закінчується: - + <h3>Fingerprints</h3> <h3>Відбитки пальців</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>Примітка:</b> Цей сертифікат був схвалений вручну</p> - + %1 (self-signed) %1 (самопідписаний) - + %1 %1 - + This connection is encrypted using %1 bit %2. З'єднання зашифроване %1-бітним %2. - + No support for SSL session tickets/identifiers - + Certificate information: Інформація про сертифікат: - + This connection is NOT secure as it is not encrypted. З'єднання НЕ зашифровано. @@ -3056,67 +3037,67 @@ It is not advisable to use it. Все одно довіряти цьому сертифікату - + Untrusted Certificate Недовірений сертифікат - + Cannot connect securely to <i>%1</i>: - + with Certificate %1 з Сертифікатом %1 + + - - &lt;not specified&gt; &lt;не вказано&gt; - - + + Organization: %1 Організація: %1 - - + + Unit: %1 Підрозділ: %1 - - + + Country: %1 Країна: %1 - + Fingerprint (MD5): <tt>%1</tt> Відбиток (MD5): <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> Відбиток (SHA1): <tt>%1</tt> - + Effective Date: %1 Дата введення в дію: %1 - + Expiration Date: %1 Термін Дії: %1 - + Issuer: %1 Емітент: %1 @@ -3230,27 +3211,27 @@ It is not advisable to use it. Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3355,69 +3336,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело @@ -3441,17 +3422,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>Версія %1. Для отримання більш детальної інформації, будь ласка, відвідайте <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>Поширюється через %1 і під ліцензією GNU General Public License (GPL) версії 2.0<br/>%2 логотип %2 є зареєстрованими торговими марками %1 у Сполучених Штатах та інших країнах, або обох.</p> @@ -3864,48 +3845,40 @@ It is not advisable to use it. НатиснітьКнопку - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future у майбутньому - + %n day(s) ago - + %n hour(s) ago - + now зараз - + Less than a minute ago Менше хвилини тому - + %n minute(s) ago - + Some time ago Деякий час тому @@ -3919,57 +3892,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3990,7 +3963,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>Зібрано з Git ревізії <a href="%1">%2</a> %3, %4, використовуючи Qt %5, %6</small></p> diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index ec9b3afe0..967b73324 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 目标文件的大小和修改时间无法预料 @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out 连接超时 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel 取消 @@ -174,184 +174,184 @@ 账户 - + Choose what to sync 选择同步内容 - + Force sync now 强制同步 - + Restart sync 重新开始同步 - + Remove folder sync connection 断开文件夹同步 - + Folder creation failed 文件夹创建失败 - + <p>Could not create local folder <i>%1</i>. <p>无法创建文件夹 <i>%1</i>。 - + Confirm Folder Sync Connection Removal 确定断开文件夹同步 - + Remove Folder Sync Connection 断开文件夹同步 - + Sync Running 正在同步 - + The syncing operation is running.<br/>Do you want to terminate it? 正在执行同步。<br />您确定要关闭它吗? - + %1 in use %1 使用中 - + %1 as <i>%2</i> %1, <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. 服务器版本 %1 很旧且不支持,继续操作将自行承担风险。 - + Connected to %1. 连接到 %1。 - + Server %1 is temporarily unavailable. 远程服务器%1暂时不可用。 - + Server %1 is currently in maintenance mode. - + Signed out from %1. 从 %1 退出 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. 没有到位于%2中的%1的连接 - + Log in 登录 - + There are folders that were not synchronized because they are too big: 以下目录由于太大而没有同步: - + There are folders that were not synchronized because they are external storages: 以下目录由于是外部存储而没有同步: - + There are folders that were not synchronized because they are too big or external storages: 以下目录由于太大或是外部存储而没有同步: - + Confirm Account Removal 确认删除账号 - + <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> <p>你确定要删除账号的连接? <i>%1</i>?</p><p><b>Note:</b> 这 <b>不会</b> 删除任何文件</p> - + Remove connection 删除连接 - - + + Open folder 打开文件夹 - + Log out 注销 - + Resume sync 恢复同步 - + Pause sync 暂停同步 - + <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> <p>你确定要停止文件夹同步? <i>%1</i>?</p><p><b>Note:</b> 这 <b>不会</b> 删除任何文件</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) of %2 使用中。一些文件夹,例如网络挂载的和共享的文件夹,可能有不同的限制。 - + %1 of %2 in use 使用量 %1 / %2 - + Currently there is no storage usage information available. 目前没有储存使用量信息可用。 - + No %1 connection configured. 没有 %1 连接配置。 @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity 服务器动态 - + Sync Protocol 同步协议 - + Not Synced 未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步 (%1) - + The server activity list has been copied to the clipboard. 服务器动态已被复制到剪贴板。 - + The sync activity list has been copied to the clipboard. 同步动态已被复制到剪贴板。 - + The list of unsynced items has been copied to the clipboard. 未同步列表已复制到剪贴板。 - + Copied to clipboard 复制到剪贴板 @@ -477,47 +477,47 @@ 文本标签 - + Server Activities 服务器动态 - + Copy 复制 - + Copy the activity list to the clipboard. 复制动态列表到剪贴板。 - + Action Required: Notifications 需采取的操作:通知 - + <br/>Account %1 does not have activities enabled. <br/>帐户%1没有同步活动。 - + You received %n new notification(s) from %2. 你收到 %n 新的通知来自于 %2. - + You received %n new notification(s) from %1 and %2. 你收到 %n 新的通知来自 %1 和 %2。 - + You received new notifications from %1, %2 and other accounts. 你收到新的通知 %1, %2 和其它账户。 - + %1 Notifications - Action Required %1 通知 - 需要采取行动 @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file 访问配置文件时发生错误 - + There was an error while accessing the configuration file at %1. 访问配置文件 %1 时发生错误。 - + Quit ownCloud 退出 ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 向数据库写入元数据错误 @@ -752,26 +752,26 @@ 无法读取系统排除的文件 - + A new folder larger than %1 MB has been added: %2. 一个大于 %1 MB 的新文件夹 %2 已被添加。 - + A folder from an external storage has been added. 一个来自外部存储的文件夹已被添加。 - + Please go in the settings to select it if you wish to download it. 如果您想下载,请到设置页面选择它。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -782,7 +782,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 如果您决定删除这些文件,它们将不再可用,除非您是其所有者。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -791,22 +791,22 @@ If this was an accident and you decide to keep your files, they will be re-synce 如果这是一个意外而您想要保留这些文件,他们会被重新从服务器同步过来。 - + Remove All Files? 删除所有文件? - + Remove all files 删除所有文件 - + Keep files 保持所有文件 - + This sync would reset the files to an earlier 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? @@ -815,17 +815,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an 继续正常同步将导致您全部文件被更早状态的旧文件覆盖。您想要保留冲突文件的本地最新版本吗? - + Backup detected 备份已删除 - + Normal Synchronisation 正常同步 - + Keep Local Files as Conflict 保留本地文件为冲突文件 @@ -951,12 +951,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an 添加同步文件夹 - + Synchronizing with local folder 与本地文件夹同步 - + File 文件 @@ -964,144 +964,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 请先登录后再添加文件夹 - + Click this button to add a folder to synchronize. 点击选择进行同步的本地文件夹。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 载入文件夹列表时发生错误。 - + Signed out 已登出 - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 - + Fetching folder list from server... 获取文件夹列表... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' 在 %1 检查更改 - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 正在同步 %1 - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下载 %1/s - + u2193 %1/s u2193 %1/秒 - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上传 %1/s - + u2191 %1/s u2191 %1/秒 - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 剩余: %5,%1 / %2, 文件数量 %3 / %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, file %3 of %4 - + file %1 of %2 第 %1 个文件,共 %2 个 - + Waiting... 请稍等... - + Waiting for %n other folder(s)... 等待 %n 个其他文件(文件夹) - + Preparing to sync... 准备同步... @@ -1109,12 +1109,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 添加同步文件夹 - + Add Sync Connection 添加同步连接 @@ -1140,52 +1140,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder 创建远程文件夹 - + Enter the name of the new folder to be created below '%1': 输入 %1 中的新文件夹的名称: - + Folder was successfully created on %1. 文件夹在 %1 上创建成功。 - + Authentication failed accessing %1 访问 %1 时认证失败 - + Failed to create the folder on %1. Please check manually. 无法在 %1 处创建文件夹。请自行检查。 - + Failed to list a folder. Error: %1 列表失败。错误: %1 - + Choose this to sync the entire account 选择此项以同步整个账户 - + This folder is already being synced. 文件夹已在同步中。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 你已经在同步 <i>%1</i>,<i>%2</i> 是它的一个子文件夹。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 @@ -1431,7 +1431,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder 文件夹 @@ -1456,17 +1456,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from 复制 - + Time 时间 - + File 文件 - + Issue @@ -1532,12 +1532,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error 错误 - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>文件 '%1'<br/>不能写入。<br/><br/>将<b>不</b>能保存日志输出!</nobr> @@ -1545,27 +1545,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available 新版本可用 - + <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> <p>新版本的 %1 客户端可用。</p><p><b>%2</b> 已经开放下载。已安装的版本是 %3。</p> - + Skip this version 跳过这个版本 - + Skip this time 本次跳过 - + Get update 获取更新 @@ -1677,11 +1677,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 代理 - - - Qt >= 5.4 is required in order to use the bandwidth limit - 速度限制需要 QT>=5.4 - OCC::NotificationWidget @@ -1712,32 +1707,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1745,58 +1740,58 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready 新的 %1 更新就绪 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. 新版本&1已经可以更新。更新过程会请求额外的权限。 - + Downloading version %1. Please wait... 正在下载版本 %1,请稍候(“稍后”和“稍候”请分清楚,OK?)... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. 无法下载更新,请点击<a href='%1'>此处</a>手动下载更新。 - + Could not check for new updates. 无法检查新更新。 - + %1 version %2 available. Restart application to start the update. %1 版本 %2 现在可用,请重启应用以开始更新。 - + New %1 version %2 available. Please use the system's update tool to install it. %1 新版本 %2 已经可用,使用系统更新工具升级。 - + Checking update server... 检查更新服务器 - + Update status is unknown: Did not check for new updates. 还没有检查过更新。 - + No updates available. Your installation is at the latest version. 亲,你使用的已经是最新的版本了 - + Update Check 检查更新 @@ -1873,7 +1868,7 @@ for additional privileges during the process. 设置客户端 TLS 证书 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>无法连接到指定地址的安全服务器 <em>%1</em>。请问是否继续?</p></body></html> @@ -1941,144 +1936,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">成功连接到 %1:%2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 连接到 %1 (%2)失败:<br />%3 - + Timeout while trying to connect to %1 at %2. 连接到 %1 (%2) 时超时。 - + Trying to connect to %1 at %2... 尝试连接位于 %2 的 %1... - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. 被发送到服务器的认证请求被重定向到'%1'。此URL无效,服务器配置错误。 - + There was an invalid response to an authenticated webdav request 对于一个验证的 webdav 请求,有一个无效的响应 - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. 服务器拒绝了访问。<a href="%1">点击这里打开浏览器</a> 来确认您是否有权访问。 - + Invalid URL 无效URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步文件夹 %1 已存在,将使用它来同步。<br/><br/> - + Creating local sync folder %1... 创建本地同步目录%1 - + ok 成功 - + failed. 失败 - + Could not create local folder %1 不能创建本地文件夹 %1 - + No remote folder specified! 未指定远程文件夹! - + Error: %1 错误:%1 - + creating folder on ownCloud: %1 在 ownCloud 创建文件夹:%1 - + Remote folder %1 created successfully. 远程目录%1成功创建。 - + The remote folder %1 already exists. Connecting it for syncing. 远程文件夹 %1 已存在。连接它以供同步。 - - + + The folder creation resulted in HTTP error code %1 创建文件夹出现 HTTP 错误代码 %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 远程文件夹创建失败,因为提供的凭证有误!<br/>请返回并检查您的凭证。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">远程文件夹创建失败,可能是由于提供的用户名密码不正确。</font><br/>请返回并检查它们。</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 创建远程文件夹 %1 失败,错误为 <tt>%2</tt>。 - + A sync connection from %1 to remote directory %2 was set up. 已经设置了一个 %1 到远程文件夹 %2 的同步连接 - + Successfully connected to %1! 成功连接到了 %1! - + Connection to %1 could not be established. Please check again. 无法建立到 %1的链接,请稍后重试(这里“稍后”用对了,赞!)。 - + Folder rename failed 文件夹更名失败 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 无法移除和备份文件夹,由于文件夹或文件正在被另一程序占用。请关闭程序后重试,或取消安装。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步目录 %1 已成功创建</b></font> @@ -2125,7 +2120,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2181,12 +2176,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ;恢复失败:%1 - + A file or folder was removed from a read only share, but restoring failed: %1 文件(夹)移除了只读共享,但恢复失败:%1 @@ -2194,22 +2189,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 不能删除文件 %1, 错误: %2 - + Attention, possible case sensitivity clash with %1 小心!%1 的文件名可能有大小写冲突 - + could not create folder %1 无法创建文件夹 %1 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2217,17 +2212,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; 删除'%1'错误:%2 - + Could not remove folder '%1' 无法删除文件夹 %1 - + Could not remove %1 because of a local file name clash 由于本地文件名冲突,不能删除 %1 @@ -2235,13 +2230,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash 由于本地文件名冲突,文件 %1 无法更名为 %2 - - + + Error writing metadata to the database 向数据库写入元数据错误 @@ -2309,27 +2304,28 @@ It is not advisable to use it. 文件 %1 无法上传,因为存在同名文件,文件名仅有大小写不同。 - + File Removed 已移除文件 - + Local file changed during syncing. It will be resumed. 本地文件在同步时已修改,完成后会再次同步 - + Local file changed during sync. 本地文件在同步时已修改。 - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2337,32 +2333,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Qt < 5.4.2 时强制中止连接重置。 - - - + The local file was removed during sync. 本地文件在同步时已删除。 - + Local file changed during sync. 本地文件在同步时已修改。 - + Unexpected return code from server (%1) 从服务器得到了意外的返回值(%1) - + Missing File ID from server 服务器端文件 ID缺失 - + Missing ETag from server 服务器端ETag缺失 @@ -2370,32 +2361,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - Qt < 5.4.2 时强制中止连接重置。 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 文件已经在本地修改,但这是某个只读分享的一部分,原文件已经恢复。您的修改已保存在冲突文件中。 - + Poll URL missing 缺少轮询 URL - + The local file was removed during sync. 本地文件在同步时已删除。 - + Local file changed during sync. 本地文件在同步时已修改。 - + The server did not acknowledge the last chunk. (No e-tag was present) 服务器未确认上一分块。(找不到 E-tag) @@ -2413,42 +2399,42 @@ It is not advisable to use it. 文本标签 - + Time 时间 - + File 文件 - + Folder 文件夹 - + Action 动作 - + Size 大小 - + Local sync protocol 本地同步协议 - + Copy 复制 - + Copy the activity list to the clipboard. 复制动态列表到剪贴板。 @@ -2489,7 +2475,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 选择同步内容 @@ -2507,23 +2493,23 @@ It is not advisable to use it. 反选您不想同步的那些远端文件夹 - + Name 名称 - + Size 大小 - - + + No subfolders currently on the server. 这个服务器上暂不存在子文件夹。 - + An error occurred while loading the list of sub folders. 载入子文件夹列表时发生错误。 @@ -2551,7 +2537,7 @@ It is not advisable to use it. 网络 - + Account 账户 @@ -2870,12 +2856,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error 登录错误 - + You must sign in as user %1 你必须以用户'%1'身份登录 @@ -2906,28 +2892,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud 使用 %1 共享 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2935,119 +2921,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>证书信息</h3> - + Common Name (CN): 常用名 (CN): - + Subject Alternative Names: 主体备用名称: - + Organization (O): 组织 (O): - + Organizational Unit (OU): 单位 (OU): - + State/Province: 州/省: - + Country: 国家: - + Serial: 序列号: - + <h3>Issuer</h3> <h3>颁发者</h3> - + Issuer: 颁发者: - + Issued on: 颁发于: - + Expires on: 过期于: - + <h3>Fingerprints</h3> <h3>证书指纹</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>注意:</b>此证书经手动批准</p> - + %1 (self-signed) %1 (自签署) - + %1 %1 - + This connection is encrypted using %1 bit %2. 此连接通过 %1 位的 %2 加密。 - + No support for SSL session tickets/identifiers 没有支持的 SSL 标识 - + Certificate information: 证书信息: - + This connection is NOT secure as it is not encrypted. 此连接未经过加密。 @@ -3067,67 +3048,67 @@ It is not advisable to use it. 总是信任该证书 - + Untrusted Certificate 不被信任的证书 - + Cannot connect securely to <i>%1</i>: 无法安全连接到 <i>%1</i>: - + with Certificate %1 使用证书 %1 + + - - &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 组织:%1 - - + + Unit: %1 单位:%1 - - + + Country: %1 国家: %1 - + Fingerprint (MD5): <tt>%1</tt> MD5指纹: <tt>%1</tt> - + Fingerprint (SHA1): <tt>%1</tt> SHA1指纹: <tt>%1</tt> - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 过期日期:%1 - + Issuer: %1 签发人:%1 @@ -3241,27 +3222,27 @@ It is not advisable to use it. 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3366,69 +3347,69 @@ It is not advisable to use it. 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source @@ -3452,17 +3433,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>版本 %1。详情请见 <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> <p>ownCloud GmbH 版权所有</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> <p>%1 使用GNU通用公共许可证 (GPL) 2.0。<br/>%2 以及 %2 标识已由 %1 注册使用。</p> @@ -3875,48 +3856,40 @@ It is not advisable to use it. 按钮 - - QApplication - - - QT_LAYOUT_DIRECTION - QT_LAYOUT_DIRECTION - - QObject - + in the future 将来 - + %n day(s) ago %n 天前 - + %n hour(s) ago %n 小时前 - + now 现在 - + Less than a minute ago 刚刚 - + %n minute(s) ago %n 分钟前 - + Some time ago 之前 @@ -3930,57 +3903,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n 月 - + %n day(s) %n 天 - + %n hour(s) %n 小时 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 @@ -4001,7 +3974,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>从 Git 版本 <a href="%1">%2</a> 在 %3 上构建, %4 使用了 Qt %5, %6</small></p> diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 0543c1b13..cd44bf6f4 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -2,7 +2,7 @@ FileSystem - + The destination file has an unexpected size or modification time 目的地的檔案大小或修改時間產生異常 @@ -84,17 +84,17 @@ OCC::AbstractNetworkJob - + Connection timed out 連線逾時 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -143,8 +143,8 @@ - - + + Cancel 取消 @@ -174,184 +174,184 @@ 帳號 - + Choose what to sync 選擇要同步的項目 - + Force sync now - + Restart sync - + Remove folder sync connection 移除資料夾同步連線 - + Folder creation failed 資料夾建立失敗 - + <p>Could not create local folder <i>%1</i>. <p>無法建立本地資料夾 <i>%1</i> - + Confirm Folder Sync Connection Removal 確認移除資料夾同步連線 - + Remove Folder Sync Connection 移除資料夾同步連線 - + Sync Running 正在同步中 - + The syncing operation is running.<br/>Do you want to terminate it? 正在同步中<br/>你真的想要中斷? - + %1 in use %1 正在使用 - + %1 as <i>%2</i> %1 如 <i>%2<i> - + The server version %1 is old and unsupported! Proceed at your own risk. 伺服器版本%1過舊,已不支援。繼續的風險請自負。 - + Connected to %1. 已連線到 %1 - + Server %1 is temporarily unavailable. 伺服器 %1 暫時無法使用。 - + Server %1 is currently in maintenance mode. - + Signed out from %1. 從 %1 登出 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. 沒有從 %2 連線到 %1 - + Log in 登入 - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal 確認移除帳號 - + <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> <p>您確定要中斷此帳號 <i>%1</i> 的連線?</p><p><b>注意:</b>此操作 <b>不會</b> 刪除任何的檔案。</p> - + Remove connection 移除連線 - - + + Open folder 開啟資料夾 - + Log out 登出 - + Resume sync 繼續同步 - + Pause sync 暫停同步 - + <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> <p>您確定要停止同步資料夾 <i>%1</i>?</p><p><b>注意:</b> 此操作 <b>不會</b> 刪除任何檔案</p> - + %1 (%3%) of %2 in use. Some folders, including network mounted or shared folders, might have different limits. %1 (%3%) 中的 %2 正在使用, 有些資料夾,包括網路掛載或分享資料夾,可能有不同的限制。 - + %1 of %2 in use 已使用 %2 中的 %1% - + Currently there is no storage usage information available. 目前無法查詢儲存空間使用資訊。 - + No %1 connection configured. 沒有 %1 連線設置。 @@ -420,44 +420,44 @@ OCC::ActivitySettings - - + + Server Activity 伺服器活動 - + Sync Protocol 同步協定 - + Not Synced 尚未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步(%1) - + The server activity list has been copied to the clipboard. 伺服器活動列表已經被複製到剪貼簿。 - + The sync activity list has been copied to the clipboard. 同步活動列表已經被複製到剪貼簿。 - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard 複製至剪貼簿中 @@ -477,47 +477,47 @@ 文字標籤 - + Server Activities 伺服器活動 - + Copy 複製 - + Copy the activity list to the clipboard. 複製活動列表到剪貼簿。 - + Action Required: Notifications 需要動作: 通知 - + <br/>Account %1 does not have activities enabled. <br/> 帳號 %1 尚未啟用紀錄行為功能 - + You received %n new notification(s) from %2. 您收到 %n 新的通知從 %2 - + You received %n new notification(s) from %1 and %2. 您收到 %n 新的通知從 %1 跟 %2 - + You received new notifications from %1, %2 and other accounts. 您收到 %n 新的通知從 %1, %2 跟其他帳戶 - + %1 Notifications - Action Required %1 通知 - 需要動作 @@ -563,17 +563,17 @@ OCC::Application - + Error accessing the configuration file - + There was an error while accessing the configuration file at %1. - + Quit ownCloud @@ -604,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -752,24 +752,24 @@ 無法讀取系統的排除檔案 - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -777,46 +777,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? 移除所有檔案? - + Remove all files 移除所有檔案 - + Keep files 保留檔案 - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -942,12 +942,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an 新增資料夾同步功能的連線 - + Synchronizing with local folder - + File 檔案 @@ -955,144 +955,144 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 您必須連上伺服器才能新增資料夾 - + Click this button to add a folder to synchronize. 點擊此按鈕來新增同步資料夾 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 從伺服器端同步資料夾清單時發生錯誤。 - + Signed out 已登出 - + Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. 新增資料夾失敗,您已經同步您擁有的所有檔案,如果您想要同步多個資料夾,請移除當前設定的根目錄資料夾。 - + Fetching folder list from server... 從伺服器抓取資料夾清單中... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' 檢查 '%1' 的變動 - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同步 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下載 %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上傳 %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 的 %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 的 %2, 檔案 %3 的 %4 - + file %1 of %2 檔案 %1 的 %2 - + Waiting... 等待中... - + Waiting for %n other folder(s)... 正在等候 %n 的資料夾(可能不只一個) - + Preparing to sync... 正在準備同步... @@ -1100,12 +1100,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Add Sync Connection 新增同步連線 @@ -1131,52 +1131,52 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizardRemotePath - + Create Remote Folder 建立遠端資料夾 - + Enter the name of the new folder to be created below '%1': 請輸入欲創建在 '%1' 底下的新資料夾名稱: - + Folder was successfully created on %1. 資料夾成功建立在%1 - + Authentication failed accessing %1 存取 %1 認証失敗 - + Failed to create the folder on %1. Please check manually. 在 %1 建立資料夾失敗,請手動檢查 - + Failed to list a folder. Error: %1 取得資料夾清單失敗,錯誤: %1 - + Choose this to sync the entire account 請選擇這個功能用來同步整個帳號 - + This folder is already being synced. 這個資料夾已經被同步了。 - + You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 您已經同步了 <i>%1</i>, 這個資料夾是 <i>%2</i> 的母資料夾。 - + You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. 您已經同步了所有的檔案。同步另一個資料夾的功能是<b>不支援</b> 的。如果您想要同步多個資料夾,請移除目前設定的根目錄資料夾。 @@ -1422,7 +1422,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from - + Folder 資料夾 @@ -1447,17 +1447,17 @@ Items where deletion is allowed will be deleted if they prevent a directory from 複製 - + Time 時間 - + File 檔案 - + Issue @@ -1523,12 +1523,12 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::Logger - + Error 錯誤 - + <nobr>File '%1'<br/>cannot be opened for writing.<br/><br/>The log output can <b>not</b> be saved!</nobr> <nobr>檔案 '%1'<br/>無法開啟與寫入<br/><br/>記錄 <b>無法</b> 被儲存</nobr> @@ -1536,27 +1536,27 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::NSISUpdater - + New Version Available 有新版本 - + <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> <p>%1 客戶端有新版本了。</p><p><b>%2</b> 可供下載, 目前安裝的版本是 %3.</p> - + Skip this version 跳過這個版本 - + Skip this time 跳過這次更新 - + Get update 取得更新 @@ -1668,11 +1668,6 @@ Items where deletion is allowed will be deleted if they prevent a directory from SOCKS5 proxy SOCKS5 代理伺服器 - - - Qt >= 5.4 is required in order to use the bandwidth limit - 要使用頻寬限制,Qt版本要求 >= 5.4 - OCC::NotificationWidget @@ -1702,32 +1697,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -1735,59 +1730,59 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OCUpdater - + New %1 Update Ready 新 %1 更新已經就緒 - + A new update for %1 is about to be installed. The updater may ask for additional privileges during the process. 一個新的 %1 更新已經安裝完成。更新也許會詢問 要求給予權限在安裝的過程中。 - + Downloading version %1. Please wait... 正在下載版本 %1,請稍候... - + Could not download update. Please click <a href='%1'>here</a> to download the update manually. 無法下載更新檔,請點選連結 <a href='%1'>按這裡</a> 手動下載更新檔。 - + Could not check for new updates. 無法檢查是否有新更新檔。 - + %1 version %2 available. Restart application to start the update. %1 的版本 %2 已經可以安裝,請重新啟動應用程式開始安裝更新。 - + New %1 version %2 available. Please use the system's update tool to install it. 新 %1 版本 %2 已經可以安裝了, 請使用系統的安裝工具來安裝。 - + Checking update server... 檢查更新伺服器中... - + Update status is unknown: Did not check for new updates. 無法取得更新狀態: 無法檢查是否有新更新檔。 - + No updates available. Your installation is at the latest version. 目前沒有可用的更新檔,您安裝的版本是最新的了。 - + Update Check 更新檢查 @@ -1864,7 +1859,7 @@ for additional privileges during the process. 設定客戶端 TLS 憑證 - + <html><head/><body><p>Failed to connect to the secure server address <em>%1</em>. How do you wish to proceed?</p></body></html> <html><head/><body><p>無法連線到安全伺服器 <em>%1</em>,您想要如何處理?</p></body></html> @@ -1933,144 +1928,144 @@ It is not advisable to use it. OCC::OwncloudSetupWizard - + <font color="green">Successfully connected to %1: %2 version %3 (%4)</font><br/><br/> <font color="green">成功連線到 %1: %2 版本 %3 (%4)</font><br/><br/> - + Failed to connect to %1 at %2:<br/>%3 從 %2 連線到 %1 失敗:<br/>%3 - + Timeout while trying to connect to %1 at %2. 從 %2 嘗試連線到 %1 逾時。 - + Trying to connect to %1 at %2... 嘗試連線到%1從%2 - + The authenticated request to the server was redirected to '%1'. The URL is bad, the server is misconfigured. 伺服器要求的認證請求被導向 '%1',這個URL可能不安全,此伺服器可能設定有錯。 - + There was an invalid response to an authenticated webdav request 從webdav的認證要求中有無效的回傳值 - + Access forbidden by server. To verify that you have proper access, <a href="%1">click here</a> to access the service with your browser. 從伺服器存取被拒絕。為了正確驗證您的存取資訊 <a href="%1">請點選這裡</a> 透過瀏覽器來存取服務 - + Invalid URL - + Local sync folder %1 already exists, setting it up for sync.<br/><br/> 本地同步資料夾%1已存在, 將其設置為同步<br/><br/> - + Creating local sync folder %1... 建立本地同步資料夾 %1... - + ok ok - + failed. 失敗 - + Could not create local folder %1 無法建立本地資料夾 %1 - + No remote folder specified! 沒有指定遠端資料夾! - + Error: %1 錯誤: %1 - + creating folder on ownCloud: %1 在 ownCloud 建立資料夾: %1 - + Remote folder %1 created successfully. 遠端資料夾%1建立成功! - + The remote folder %1 already exists. Connecting it for syncing. 遠端資料夾%1已存在,連線同步中 - - + + The folder creation resulted in HTTP error code %1 在HTTP建立資料夾失敗, error code %1 - + The remote folder creation failed because the provided credentials are wrong!<br/>Please go back and check your credentials.</p> 由於帳號或密碼錯誤,遠端資料夾建立失敗<br/>請檢查您的帳號密碼。</p> - + <p><font color="red">Remote folder creation failed probably because the provided credentials are wrong.</font><br/>Please go back and check your credentials.</p> <p><font color="red">遠端資料夾建立失敗,也許是因為所提供的帳號密碼錯誤</font><br/>請重新檢查您的帳號密碼</p> - - + + Remote folder %1 creation failed with error <tt>%2</tt>. 建立遠端資料夾%1發生錯誤<tt>%2</tt>失敗 - + A sync connection from %1 to remote directory %2 was set up. 從%1到遠端資料夾%2的連線已建立 - + Successfully connected to %1! 成功連接到 %1 ! - + Connection to %1 could not be established. Please check again. 無法建立連線%1, 請重新檢查 - + Folder rename failed 重新命名資料夾失敗 - + Can't remove and back up the folder because the folder or a file in it is open in another program. Please close the folder or file and hit retry or cancel the setup. 無法移除與備份此資料夾,因為有其他的程式正在使用其中的資料夾或者檔案。請關閉使用中的資料夾或檔案並重試或者取消設定。 - + <font color="green"><b>Local sync folder %1 successfully created!</b></font> <font color="green"><b>本地同步資料夾 %1 建立成功!</b></font> @@ -2117,7 +2112,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2173,12 +2168,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 重新儲存失敗 %1 - + A file or folder was removed from a read only share, but restoring failed: %1 檔案或目錄已經從只供讀取的分享中被移除,但是復原失敗: %1 @@ -2186,22 +2181,22 @@ It is not advisable to use it. OCC::PropagateLocalMkdir - + could not delete file %1, error: %2 無法刪除檔案 %1,錯誤: %2 - + Attention, possible case sensitivity clash with %1 注意! %1 的名稱可能有大小寫衝突。 - + could not create folder %1 無法建立資料夾 %1 - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2209,17 +2204,17 @@ It is not advisable to use it. OCC::PropagateLocalRemove - + Error removing '%1': %2; 移除時發生錯誤 '%1': %2; - + Could not remove folder '%1' 無法移除資料夾 '%1' - + Could not remove %1 because of a local file name clash 無法刪除 %1 ,因為本地端的檔案名稱已毀損! @@ -2227,13 +2222,13 @@ It is not advisable to use it. OCC::PropagateLocalRename - + File %1 can not be renamed to %2 because of a local file name clash 檔案 %1 無法更名成 %2,因為本地端的檔案名稱已毀損 - - + + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2301,27 +2296,28 @@ It is not advisable to use it. - + File Removed 檔案已移除 - + Local file changed during syncing. It will be resumed. 本地端的檔案在同步的過程中被更改,此檔案將會被還原。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + + Upload of %1 exceeds the quota for the folder - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2329,32 +2325,27 @@ It is not advisable to use it. OCC::PropagateUploadFileNG - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - HTTP連線工作被強制中斷,Qt版本< 5.4.2 - - - + The local file was removed during sync. 本地端的檔案在同步過程中被刪除。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + Unexpected return code from server (%1) - + Missing File ID from server - + Missing ETag from server @@ -2362,32 +2353,27 @@ It is not advisable to use it. OCC::PropagateUploadFileV1 - - Forcing job abort on HTTP connection reset with Qt < 5.4.2. - HTTP連線工作被強制中斷,Qt版本< 5.4.2 - - - + The file was edited locally but is part of a read only share. It is restored and your edit is in the conflict file. 檔案已經在本機上修改,但這檔案是只供讀取的分享,您的修改已還原並保存在衝突檔案中。 - + Poll URL missing 缺少輪詢的超連結 - + The local file was removed during sync. 本地端的檔案在同步過程中被刪除。 - + Local file changed during sync. 本地端的檔案在同步過程中被更改。 - + The server did not acknowledge the last chunk. (No e-tag was present) 伺服器不承認檔案的最後一個分割檔。(e-tag不存在) @@ -2405,42 +2391,42 @@ It is not advisable to use it. 文字標籤 - + Time 時間 - + File 檔案 - + Folder 資料夾 - + Action 動作 - + Size 大小 - + Local sync protocol 本機同步協定 - + Copy 複製 - + Copy the activity list to the clipboard. 複製活動列表到剪貼簿。 @@ -2481,7 +2467,7 @@ It is not advisable to use it. OCC::SelectiveSyncDialog - + Choose What to Sync 選擇要同步的項目 @@ -2499,23 +2485,23 @@ It is not advisable to use it. - + Name 名稱 - + Size 大小 - - + + No subfolders currently on the server. 目前沒有子資料夾在伺服器上。 - + An error occurred while loading the list of sub folders. @@ -2543,7 +2529,7 @@ It is not advisable to use it. 網路 - + Account 帳號 @@ -2862,12 +2848,12 @@ It is not advisable to use it. OCC::ShibbolethCredentials - + Login Error 登入錯誤 - + You must sign in as user %1 您必須以 %1 使用者登入 @@ -2898,28 +2884,28 @@ It is not advisable to use it. OCC::SocketApi - + Share with %1 parameter is ownCloud 與 %1 分享 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -2927,119 +2913,114 @@ It is not advisable to use it. OCC::SslButton - + <h3>Certificate Details</h3> <h3>憑證細節</h3> - + Common Name (CN): (通用名): - + Subject Alternative Names: 主題備用名稱: - + Organization (O): 組織 (O): - + Organizational Unit (OU): 組織部門 (OU): - + State/Province: 州或省: - + Country: 國家: - + Serial: 序號: - + <h3>Issuer</h3> <h3>簽發者</h3> - + Issuer: 簽發者: - + Issued on: 簽發於: - + Expires on: 過期於: - + <h3>Fingerprints</h3> <h3>指紋</h3> - - MD 5: - MD 5: - - - + SHA-256: SHA-256: - + SHA-1: SHA-1: - + <p><b>Note:</b> This certificate was manually approved</p> <p><b>注意:</b> 此憑證已被手動核准</p> - + %1 (self-signed) %1 (自我簽章) - + %1 %1 - + This connection is encrypted using %1 bit %2. 這個連線已經使用 %1 bit %2 加密。 - + No support for SSL session tickets/identifiers - + Certificate information: 憑證資訊: - + This connection is NOT secure as it is not encrypted. 這個連線沒有經過加密,是不安全的。 @@ -3059,67 +3040,67 @@ It is not advisable to use it. 信任此憑證 - + Untrusted Certificate 不信任的憑證 - + Cannot connect securely to <i>%1</i>: 無法安全的連線到 <i>%1</i>: - + with Certificate %1 與憑證 %1 + + - - &lt;not specified&gt; &lt;未指定&gt; - - + + Organization: %1 組織:%1 - - + + Unit: %1 單位:%1 - - + + Country: %1 國家:%1 - + Fingerprint (MD5): <tt>%1</tt> 指紋 (MD5): &lt;tt&gt;%1&lt;/tt&gt; - + Fingerprint (SHA1): <tt>%1</tt> 指紋 (SHA1): &lt;tt&gt;%1&lt;/tt&gt; - + Effective Date: %1 有效日期:%1 - + Expiration Date: %1 到期日: %1 - + Issuer: %1 簽發者: %1 @@ -3233,27 +3214,27 @@ It is not advisable to use it. 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3358,69 +3339,69 @@ It is not advisable to use it. 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 @@ -3444,17 +3425,17 @@ It is not advisable to use it. OCC::Theme - + <p>Version %1. For more information please visit <a href='%2'>%3</a>.</p> <p>版本 %1. 如欲得知更多資訊,請到此拜訪 <a href='%2'>%3</a>.</p> - + <p>Copyright ownCloud GmbH</p> - + <p>Distributed by %1 and licensed under the GNU General Public License (GPL) Version 2.0.<br/>%2 and the %2 logo are registered trademarks of %1 in the United States, other countries, or both.</p> @@ -3867,48 +3848,40 @@ It is not advisable to use it. 按鈕 - - QApplication - - - QT_LAYOUT_DIRECTION - - - QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago 不到一分鐘前 - + %n minute(s) ago - + Some time ago 前一段時間 @@ -3922,57 +3895,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 @@ -3993,7 +3966,7 @@ It is not advisable to use it. ownCloudTheme::about() - + <p><small>Built from Git revision <a href="%1">%2</a> on %3, %4 using Qt %5, %6</small></p> <p><small>根據Git版本號<a href="%1">%2</a>在 %3建置, %4 使用了Qt %5,%6</small></p> From c05ca51238964ca1d891b6e01149dbf8b65caba9 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 17 Sep 2017 02:18:29 +0200 Subject: [PATCH 056/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_cs.ts | 4 ++-- translations/client_th.ts | 35 ++++++++++++++++++----------------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 223e22c11..3cea9a662 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -126,6 +126,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_cs.ts b/translations/client_cs.ts index edb8b01ec..678cf659d 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + server %1 je v režimu údržby. @@ -381,7 +381,7 @@ Maintenance mode - + režim údržby diff --git a/translations/client_th.ts b/translations/client_th.ts index 25b0532dc..e654ea41c 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -261,7 +261,7 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + กำลังได้รับอนุญาตจากเบราเซอร์ <a href='%1'>คลิกที่นี่</a> เพื่อเปิดเบราเซอร์อีกครั้ง @@ -1015,7 +1015,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Reconciling changes - + คืนค่าการเปลี่ยนแปลง @@ -1710,32 +1710,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Error returned from the server: <em>%1</em> - + เกิดข้อผิดพลาดจากเซิร์ฟเวอร์: <em>%1</em> There was an error accessing the 'token' endpoint: <br><em>%1</em> - + เกิดข้อผิดพลาดในการเข้าถึง 'โทเค็น' ปลายทาง: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> - + ไม่สามารถแยกวิเคราะห์ JSON ที่ส่งมาจากเซิร์ฟเวอร์: <br><em>%1</em> The reply from the server did not contain all expected fields - + การตอบกลับจากเซิร์ฟเวอร์ไม่ได้มีฟิลด์ที่ต้องการ <h1>Login Error</h1><p>%1</p> - + <h1>เข้าสู่ระบบล้มเหลว</h1>%1<p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + <h1>บัญผู้ใช้ไม่ถูกต้อง</h1> <p>คุณลงชื่อเข้าใช้ด้วยบัญชีผู้ใช้ <em>%1</em> คุณจะต้องลงชื่อเข้าใช้ด้วยบัญชี <em>%2</em> <br>โปรดออกจากระบบ %3 ในแท็บอื่นแล้ว <a href='%4'>คลิกที่นี่</a> เพื่อเข้าสู่ระบบในฐานะผู้ใช้ </p> @@ -2137,7 +2137,7 @@ It is not advisable to use it. The download would reduce free local disk space below the limit - + การดาวน์โหลดจะช่วยลดพืนที่จัดเก็บภายในเครื่องที่ต่ำกว่าขีดจำกัด @@ -2324,7 +2324,7 @@ It is not advisable to use it. Upload of %1 exceeds the quota for the folder - + การอัพโหลด %1 เกินโควต้าของโฟลเดอร์ @@ -2779,7 +2779,7 @@ It is not advisable to use it. <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> - + <html><head/><body><p>คุณสามารถทำให้คนอื่นเข้าถึงไฟล์หรือโฟลเดอร์ที่คุณแชร์นี้ได้<a href="private link menu"> <span style=" text-decoration: underline; color:#0000ff;">โดยส่งลิงก์ส่วนตัวไปให้คนที่คุณต้องการแชร์</span></a></p></body></html> @@ -3198,7 +3198,7 @@ It is not advisable to use it. %1 (skipped due to earlier error, trying again in %2) - + %1 (ข้ามไปเนื่องจากข้อผิดพลาดก่อนหน้านี้ กำลังลองอีกครั้งใน %2) @@ -3213,7 +3213,7 @@ It is not advisable to use it. Conflict: Server version downloaded, local copy renamed and not uploaded. - + เกิดปัญหาความขัดแย้ง: สำเนาที่อยู่ในเครื่องถูกเปลี่ยนชื่อและไม่ได้ถูกอัพโหลด เลยไม่ตรงกับข้อมูลที่เคยอัพโหลดไว้ในเซิฟเวอร์ @@ -3224,7 +3224,8 @@ It is not advisable to use it. Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + +ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ @@ -3239,12 +3240,12 @@ It is not advisable to use it. Disk space is low: Downloads that would reduce free space below %1 were skipped. - + พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป There is insufficient space available on the server for some uploads. - + มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ @@ -4132,7 +4133,7 @@ It is not advisable to use it. There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + เกิดข้อผิดพลาดขณะเปิดเบราว์เซอร์เพื่อไปที่ URL %1 อาจยังไม่มีการกำหนดค่าเบราเซอร์เริ่มต้น From 0806e0466c2bdaeeb575c21e676e9511d6978c8e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 18 Sep 2017 02:18:30 +0200 Subject: [PATCH 057/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_es.ts | 58 +++++++++++++++++++-------------------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 3cea9a662..5a74099ef 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -129,6 +129,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_es.ts b/translations/client_es.ts index f044f30fb..cb8e3088f 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -91,12 +91,12 @@ Unknown error: network reply was deleted - + Error desconocido: la respuesta de red fue eliminada Server replied "%1 %2" to "%3 %4" - + El servidor respondió "%1 %2" a "%3 %4" @@ -251,7 +251,7 @@ Server %1 is currently in maintenance mode. - + El servidor %1 está actualmente en modo mantenimiento. @@ -261,12 +261,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Obteniendo autorización desde el navegador. <a href='%1'>Haga click aqui</a> para re-abrir el navegador . Connecting to %1... - + Conectando a %1... @@ -381,7 +381,7 @@ Maintenance mode - + Modo mantenimiento @@ -396,7 +396,7 @@ Asking Credentials - + Solicitando Credenciales @@ -1003,7 +1003,7 @@ Si continua con la sincronización todos los archivos serán remplazados por su There are unresolved conflicts. Click for details. - + Hay conflictos sin resolver. Haz click para mas detalles. @@ -1013,7 +1013,7 @@ Si continua con la sincronización todos los archivos serán remplazados por su Reconciling changes - + Reconciliando cambios @@ -1416,7 +1416,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que List of issues - + Lista de problemas @@ -1427,7 +1427,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que <no filter> - + <no filter> @@ -1438,17 +1438,17 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Show warnings - + Mostrar advertencias Show ignored files - + Mostrar archivos ignorados Copy the issues list to the clipboard. - + Copiar la lista de problemas al portapapeles. @@ -1468,7 +1468,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Issue - + Problema @@ -1491,7 +1491,7 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que &Capture debug messages - + &Capturar mensajes de depuración @@ -1708,32 +1708,32 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que Error returned from the server: <em>%1</em> - + Error devuelto desde el servidor: <em>%1</em> There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Ha ocurrido un error accediendo al Token endpoint:: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> - + No puedo procesar el código JSON recibido del servidor: <br><em>%1</em> The reply from the server did not contain all expected fields - + La respuesta del servidor no contiene todos los campos esperados <h1>Login Error</h1><p>%1</p> - + <h1>Error de Login</h1><p>%1</p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + <h1>Usuario incorrecto</h1><p>Se ha intentado logar con el usuario: <em>%1</em>, pero debe logarse con el usuario: <em>%2</em>.<br>Por favor des-loguese de %3 en otra pestaña, entonces<a href='%4'>click aqui</a> y loguese como el usuario %2</p> @@ -1900,7 +1900,7 @@ for additional privileges during the process. Login in your browser - + Inicia sesión en tu navegador de internet @@ -2322,7 +2322,7 @@ No se recomienda usarla. Upload of %1 exceeds the quota for the folder - + La subida %1 excede la quota de la carpeta @@ -2653,12 +2653,12 @@ No se recomienda usarla. Enter a name to create a new public link... - + Introduzca un nombre para crear un nuevo enlace público... &Create new - + &Crear nuevo @@ -2673,7 +2673,7 @@ No se recomienda usarla. Link properties: - + Propiedades del Link: @@ -2709,12 +2709,12 @@ No se recomienda usarla. %1 link - + %1 Enlace Link shares have been disabled - + Se ha deshabilitado la compartición de enlaces From 72e44ce3d7029c5d8823932ae9dc6b0945a4a449 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 17 Aug 2017 19:06:58 +0200 Subject: [PATCH 058/166] csync: Keep the csync_file_stat_t instances created during discovery Now that they use the same structure, avoid _csync_detect_update having to recreate another instance and transfer everything manually. Any instance created during discovery should now be used all the way up to SyncEngine::treewalkFile. This also makes sure that the path and types are properly set in that object instead of having to pass everything as separate parameters. This gets rid of csync_ftw_flags_e which was now converted from, and to csync_ftw_type_e, already in the csync_file_stat_t. Issue #1817 --- src/csync/csync_update.cpp | 315 +++++++----------- src/csync/csync_update.h | 19 +- test/csync/csync_tests/check_csync_update.cpp | 44 +-- 3 files changed, 121 insertions(+), 257 deletions(-) diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index d3cdfab89..91afc8eb6 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -51,26 +51,6 @@ #define __STDC_FORMAT_MACROS #include -/* calculate the hash of a given uri */ -static uint64_t _hash_of_file(CSYNC *ctx, const char *file) { - const char *path; - int len; - uint64_t h = 0; - - if( ctx && file ) { - path = file; - if (ctx->current == LOCAL_REPLICA) { - if (strlen(path) <= strlen(ctx->local.uri)) { - return 0; - } - path += strlen(ctx->local.uri) + 1; - } - len = strlen(path); - h = c_jhash64((uint8_t *) path, len, 0); - } - return h; -} - #ifdef NO_RENAME_EXTENSION /* Return true if the two path have the same extension. false otherwise. */ static bool _csync_sameextension(const char *p1, const char *p2) { @@ -96,6 +76,10 @@ static bool _last_db_return_error(CSYNC* ctx) { return ctx->statedb.lastReturnValue != SQLITE_OK && ctx->statedb.lastReturnValue != SQLITE_DONE && ctx->statedb.lastReturnValue != SQLITE_ROW; } +static QByteArray _rel_to_abs(CSYNC* ctx, const QByteArray &relativePath) { + return QByteArray() % const_cast(ctx->local.uri) % '/' % relativePath; +} + /* Return true if two mtime are considered equal * We consider mtime that are one hour difference to be equal if they are one hour appart * because on some system (FAT) the date is changing when the daylight saving is changing */ @@ -124,34 +108,21 @@ static bool _csync_mtime_equal(time_t a, time_t b) * * See doc/dev/sync-algorithm.md for an overview. */ -static int _csync_detect_update(CSYNC *ctx, const char *file, - const csync_file_stat_t *fs, enum csync_ftw_type_e type) { - uint64_t h = 0; - const char *path = NULL; - std::unique_ptr st; +static int _csync_detect_update(CSYNC *ctx, std::unique_ptr fs) { std::unique_ptr tmp; CSYNC_EXCLUDE_TYPE excluded; - if ((file == NULL) || (fs == NULL)) { + if (fs == NULL) { errno = EINVAL; ctx->status_code = CSYNC_STATUS_PARAM_ERROR; return -1; } - path = file; - if (ctx->current == LOCAL_REPLICA) { - if (strlen(path) <= strlen(ctx->local.uri)) { - ctx->status_code = CSYNC_STATUS_PARAM_ERROR; - return -1; - } - path += strlen(ctx->local.uri) + 1; - } - - if (type == CSYNC_FTW_TYPE_SKIP) { + if (fs->type == CSYNC_FTW_TYPE_SKIP) { excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED; } else { /* Check if file is excluded */ - excluded = csync_excluded_traversal(ctx->excludes, path, type); + excluded = csync_excluded_traversal(ctx->excludes, fs->path, fs->type); } if( excluded == CSYNC_NOT_EXCLUDED ) { @@ -160,12 +131,12 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, * This code should probably be in csync_exclude, but it does not have the fs parameter. * Keep it here for now */ if (ctx->ignore_hidden_files && (fs->is_hidden)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", fs->path.constData()); excluded = CSYNC_FILE_EXCLUDE_HIDDEN; } } else { /* File is ignored because it's matched by a user- or system exclude pattern. */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", path, excluded); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", fs->path.constData(), excluded); if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) { return 1; } @@ -175,26 +146,19 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } if (ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncBlackListHook) { - if (ctx->callbacks.checkSelectiveSyncBlackListHook(ctx->callbacks.update_callback_userdata, path)) { + if (ctx->callbacks.checkSelectiveSyncBlackListHook(ctx->callbacks.update_callback_userdata, fs->path)) { return 1; } } - h = _hash_of_file(ctx, file ); - if( h == 0 ) { - return -1; - } - - st.reset(new csync_file_stat_t); - - if (type == CSYNC_FTW_TYPE_FILE ) { + if (fs->type == CSYNC_FTW_TYPE_FILE ) { if (fs->modtime == 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", fs->path.constData()); } } - if (excluded > CSYNC_NOT_EXCLUDED || type == CSYNC_FTW_TYPE_SLINK) { - st->instruction = CSYNC_INSTRUCTION_IGNORE; + if (excluded > CSYNC_NOT_EXCLUDED || fs->type == CSYNC_FTW_TYPE_SLINK) { + fs->instruction = CSYNC_INSTRUCTION_IGNORE; if (ctx->current_fs) { ctx->current_fs->has_ignored_files = true; } @@ -208,14 +172,14 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, * does not change on rename. */ if (csync_get_statedb_exists(ctx)) { - tmp = csync_statedb_get_stat_by_hash(ctx, h); + tmp = csync_statedb_get_stat_by_hash(ctx, fs->phash); if(_last_db_return_error(ctx)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } - if(tmp && tmp->phash == h ) { /* there is an entry in the database */ + if(tmp && tmp->phash == fs->phash ) { /* there is an entry in the database */ /* we have an update! */ CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 @@ -224,11 +188,11 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm.constData(), tmp->remotePerm.constData(), tmp->has_ignored_files ); if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { - st->instruction = CSYNC_INSTRUCTION_EVAL; + fs->instruction = CSYNC_INSTRUCTION_EVAL; // Preserve the EVAL flag later on if the type has changed. if (tmp->type != fs->type) { - st->child_modified = true; + fs->child_modified = true; } goto out; @@ -240,57 +204,57 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, // Checksum comparison at this stage is only enabled for .eml files, // check #4754 #4755 - bool isEmlFile = csync_fnmatch("*.eml", file, FNM_CASEFOLD) == 0; + bool isEmlFile = csync_fnmatch("*.eml", fs->path, FNM_CASEFOLD) == 0; if (isEmlFile && fs->size == tmp->size && !tmp->checksumHeader.isEmpty()) { if (ctx->callbacks.checksum_hook) { - st->checksumHeader = ctx->callbacks.checksum_hook( - file, tmp->checksumHeader, + fs->checksumHeader = ctx->callbacks.checksum_hook( + _rel_to_abs(ctx, fs->path), tmp->checksumHeader, ctx->callbacks.checksum_userdata); } bool checksumIdentical = false; - if (!st->checksumHeader.isEmpty()) { - checksumIdentical = st->checksumHeader == tmp->checksumHeader; + if (!fs->checksumHeader.isEmpty()) { + checksumIdentical = fs->checksumHeader == tmp->checksumHeader; } if (checksumIdentical) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", path); - st->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; goto out; } } // Preserve the EVAL flag later on if the type has changed. if (tmp->type != fs->type) { - st->child_modified = true; + fs->child_modified = true; } - st->instruction = CSYNC_INSTRUCTION_EVAL; + fs->instruction = CSYNC_INSTRUCTION_EVAL; goto out; } bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != tmp->file_id || fs->remotePerm != tmp->remotePerm)) || (ctx->current == LOCAL_REPLICA && fs->inode != tmp->inode); - if (type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA + if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && !metadata_differ && ctx->read_remote_from_db) { /* If both etag and file id are equal for a directory, read all contents from * the database. * The metadata comparison ensure that we fetch all the file id or permission when * upgrading owncloud */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Reading from database: %s", path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Reading from database: %s", fs->path.constData()); ctx->remote.read_from_db = true; } /* If it was remembered in the db that the remote dir has ignored files, store * that so that the reconciler can make advantage of. */ if( ctx->current == REMOTE_REPLICA ) { - st->has_ignored_files = tmp->has_ignored_files; + fs->has_ignored_files = tmp->has_ignored_files; } if (metadata_differ) { /* file id or permissions has changed. Which means we need to update them in the DB. */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", path); - st->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; } else { - st->instruction = CSYNC_INSTRUCTION_NONE; + fs->instruction = CSYNC_INSTRUCTION_NONE; } } else { /* check if it's a file and has been renamed */ @@ -305,13 +269,13 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, } // Default to NEW unless we're sure it's a rename. - st->instruction = CSYNC_INSTRUCTION_NEW; + fs->instruction = CSYNC_INSTRUCTION_NEW; bool isRename = tmp && tmp->inode == fs->inode && tmp->type == fs->type && (tmp->modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) #ifdef NO_RENAME_EXTENSION - && _csync_sameextension(tmp->path, path) + && _csync_sameextension(tmp->path, fs->path) #endif ; @@ -319,21 +283,21 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, // Verify the checksum where possible if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook && fs->type == CSYNC_FTW_TYPE_FILE) { - st->checksumHeader = ctx->callbacks.checksum_hook( - file, tmp->checksumHeader, - ctx->callbacks.checksum_userdata); - if (!st->checksumHeader.isEmpty()) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", path, st->checksumHeader.constData(), tmp->checksumHeader.constData()); - isRename = st->checksumHeader == tmp->checksumHeader; + fs->checksumHeader = ctx->callbacks.checksum_hook( + _rel_to_abs(ctx, fs->path), tmp->checksumHeader, + ctx->callbacks.checksum_userdata); + if (!fs->checksumHeader.isEmpty()) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); + isRename = fs->checksumHeader == tmp->checksumHeader; } } if (isRename) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); /* inode found so the file has been renamed */ - st->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; + fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, path); + csync_rename_record(ctx, tmp->path, fs->path); } } goto out; @@ -349,28 +313,28 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, if(tmp ) { /* tmp existing at all */ if (tmp->type != fs->type) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); - st->instruction = CSYNC_INSTRUCTION_NEW; + fs->instruction = CSYNC_INSTRUCTION_NEW; goto out; } - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s %s", tmp->path.constData(), file); - st->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, path); + csync_rename_record(ctx, tmp->path, fs->path); } else { if( tmp->etag != fs->etag ) { /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ETags are different!"); */ /* File with different etag, don't do a rename, but download the file again */ - st->instruction = CSYNC_INSTRUCTION_NEW; + fs->instruction = CSYNC_INSTRUCTION_NEW; } } goto out; } else { /* file not found in statedb */ - st->instruction = CSYNC_INSTRUCTION_NEW; + fs->instruction = CSYNC_INSTRUCTION_NEW; if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) { - if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, path, fs->remotePerm)) { + if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, fs->path, fs->remotePerm)) { return 1; } } @@ -387,66 +351,47 @@ static int _csync_detect_update(CSYNC *ctx, const char *file, out: /* Set the ignored error string. */ - if (st->instruction == CSYNC_INSTRUCTION_IGNORE) { - if( type == CSYNC_FTW_TYPE_SLINK ) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK; /* Symbolic links are ignored. */ + if (fs->instruction == CSYNC_INSTRUCTION_IGNORE) { + if( fs->type == CSYNC_FTW_TYPE_SLINK ) { + fs->error_status = CSYNC_STATUS_INDIVIDUAL_IS_SYMLINK; /* Symbolic links are ignored. */ } else { if (excluded == CSYNC_FILE_EXCLUDE_LIST) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */ + fs->error_status = CSYNC_STATUS_INDIVIDUAL_IGNORE_LIST; /* File listed on ignore list. */ } else if (excluded == CSYNC_FILE_EXCLUDE_INVALID_CHAR) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS; /* File contains invalid characters. */ + fs->error_status = CSYNC_STATUS_INDIVIDUAL_IS_INVALID_CHARS; /* File contains invalid characters. */ } else if (excluded == CSYNC_FILE_EXCLUDE_TRAILING_SPACE) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_TRAILING_SPACE; /* File ends with a trailing space. */ + fs->error_status = CSYNC_STATUS_INDIVIDUAL_TRAILING_SPACE; /* File ends with a trailing space. */ } else if (excluded == CSYNC_FILE_EXCLUDE_LONG_FILENAME) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME; /* File name is too long. */ + fs->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_LONG_FILENAME; /* File name is too long. */ } else if (excluded == CSYNC_FILE_EXCLUDE_HIDDEN ) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN; + fs->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN; } else if (excluded == CSYNC_FILE_EXCLUDE_STAT_FAILED) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_STAT_FAILED; + fs->error_status = CSYNC_STATUS_INDIVIDUAL_STAT_FAILED; } else if (excluded == CSYNC_FILE_EXCLUDE_CONFLICT) { - st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE; + fs->error_status = CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE; } } } - if (st->instruction != CSYNC_INSTRUCTION_NONE - && st->instruction != CSYNC_INSTRUCTION_IGNORE - && st->instruction != CSYNC_INSTRUCTION_UPDATE_METADATA - && type != CSYNC_FTW_TYPE_DIR) { - st->child_modified = true; + if (fs->instruction != CSYNC_INSTRUCTION_NONE + && fs->instruction != CSYNC_INSTRUCTION_IGNORE + && fs->instruction != CSYNC_INSTRUCTION_UPDATE_METADATA + && fs->type != CSYNC_FTW_TYPE_DIR) { + fs->child_modified = true; } - ctx->current_fs = st.get(); + ctx->current_fs = fs.get(); - st->inode = fs->inode; - st->size = fs->size; - st->modtime = fs->modtime; - st->type = type; - st->is_hidden = fs->is_hidden; - st->etag = fs->etag; - st->file_id = fs->file_id; - st->directDownloadUrl = fs->directDownloadUrl; - st->directDownloadCookies = fs->directDownloadCookies; - st->remotePerm = fs->remotePerm; - - // For the remote: propagate the discovered checksum - if (ctx->current == REMOTE_REPLICA) { - st->checksumHeader = fs->checksumHeader; - } - - st->phash = h; - st->path = path; - - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", st->path.constData(), - csync_instruction_str(st->instruction)); + CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", fs->path.constData(), + csync_instruction_str(fs->instruction)); switch (ctx->current) { case LOCAL_REPLICA: - if (c_rbtree_insert(ctx->local.tree, (void *) st.release()) < 0) { + if (c_rbtree_insert(ctx->local.tree, (void *) fs.release()) < 0) { ctx->status_code = CSYNC_STATUS_TREE_ERROR; return -1; } break; case REMOTE_REPLICA: - if (c_rbtree_insert(ctx->remote.tree, (void *) st.release()) < 0) { + if (c_rbtree_insert(ctx->remote.tree, (void *) fs.release()) < 0) { ctx->status_code = CSYNC_STATUS_TREE_ERROR; return -1; } @@ -458,12 +403,8 @@ out: return 0; } -int csync_walker(CSYNC *ctx, const char *file, const csync_file_stat_t *fs, - int flag) { +int csync_walker(CSYNC *ctx, std::unique_ptr fs) { int rc = -1; - enum csync_ftw_type_e type = CSYNC_FTW_TYPE_SKIP; - std::unique_ptr st; - uint64_t h; if (ctx->abort) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Aborted!"); @@ -471,51 +412,30 @@ int csync_walker(CSYNC *ctx, const char *file, const csync_file_stat_t *fs, return -1; } - switch (flag) { - case CSYNC_FTW_FLAG_FILE: + switch (fs->type) { + case CSYNC_FTW_TYPE_FILE: if (ctx->current == REMOTE_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=%" PRIu64 "]", file, fs->file_id.constData(), fs->size); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=%" PRIu64 "]", fs->path.constData(), fs->file_id.constData(), fs->size); } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [inode=%" PRIu64 " size=%" PRIu64 "]", file, fs->inode, fs->size); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [inode=%" PRIu64 " size=%" PRIu64 "]", fs->path.constData(), fs->inode, fs->size); } - type = CSYNC_FTW_TYPE_FILE; break; - case CSYNC_FTW_FLAG_DIR: /* enter directory */ + case CSYNC_FTW_TYPE_DIR: /* enter directory */ if (ctx->current == REMOTE_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [file_id=%s]", file, fs->file_id.constData()); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [file_id=%s]", fs->path.constData(), fs->file_id.constData()); } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [inode=%" PRIu64 "]", file, fs->inode); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [inode=%" PRIu64 "]", fs->path.constData(), fs->inode); } - type = CSYNC_FTW_TYPE_DIR; break; - case CSYNC_FTW_FLAG_NSTAT: /* not statable file */ - /* if file was here before and now is not longer stat-able, still - * add it to the db, otherwise not. */ - h = _hash_of_file( ctx, file ); - if( h == 0 ) { - return 0; - } - st = csync_statedb_get_stat_by_hash(ctx, h); - if( !st ) { - return 0; - } - st.reset(); - - type = CSYNC_FTW_TYPE_SKIP; + case CSYNC_FTW_TYPE_SLINK: + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "symlink: %s - not supported", fs->path.constData()); break; - case CSYNC_FTW_FLAG_SLINK: - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "symlink: %s - not supported", file); - type = CSYNC_FTW_TYPE_SLINK; - break; - case CSYNC_FTW_FLAG_DNR: - case CSYNC_FTW_FLAG_DP: - case CSYNC_FTW_FLAG_SLN: default: return 0; break; } - rc = _csync_detect_update(ctx, file, fs, type ); + rc = _csync_detect_update(ctx, std::move(fs)); return rc; } @@ -554,13 +474,12 @@ static bool mark_current_item_ignored( CSYNC *ctx, csync_file_stat_t *previous_f int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, unsigned int depth) { QByteArray filename; - QByteArray d_name; + QByteArray fullpath; csync_vio_handle_t *dh = NULL; std::unique_ptr dirent; csync_file_stat_t *previous_fs = NULL; int read_from_db = 0; int rc = 0; - int res = 0; bool do_read_from_db = (ctx->current == REMOTE_REPLICA && ctx->remote.read_from_db); @@ -628,8 +547,6 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, } while ((dirent = csync_vio_readdir(ctx, dh))) { - int flag; - /* Conversion error */ if (dirent->path.isEmpty() && !dirent->original_path.isEmpty()) { ctx->status_code = CSYNC_STATUS_INVALID_CHARACTERS; @@ -638,65 +555,58 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, goto error; } - d_name = dirent->path; - if (d_name.isEmpty()) { + // At this point dirent->path only contains the file name. + filename = dirent->path; + if (filename.isEmpty()) { ctx->status_code = CSYNC_STATUS_READDIR_ERROR; goto error; } /* skip "." and ".." */ - if ( d_name == "." || d_name == "..") { - dirent.reset(); + if ( filename == "." || filename == "..") { continue; } - if (uri[0] == '\0') { - filename = d_name; - } else { - /* For the local replica, dirent->path only contains the file name */ - filename = uri; - filename += '/'; - filename += d_name; - } - + fullpath = uri; + if (!fullpath.isEmpty()) + fullpath += '/'; + fullpath += filename; /* Only for the local replica we have to stat(), for the remote one we have all data already */ if (ctx->current == LOCAL_REPLICA) { - res = csync_vio_stat(ctx, filename, dirent.get()); - } else { - res = 0; + if (csync_vio_stat(ctx, fullpath, dirent.get()) != 0) { + // Will get excluded by _csync_detect_update. + dirent->type = CSYNC_FTW_TYPE_SKIP; + } } /* if the filename starts with a . we consider it a hidden file * For windows, the hidden state is also discovered within the vio * local stat function. */ - if( d_name[0] == '.' ) { - if (d_name == ".sys.admin#recall#") { /* recall file shall not be ignored (#4420) */ + if( filename[0] == '.' ) { + if (filename == ".sys.admin#recall#") { /* recall file shall not be ignored (#4420) */ dirent->is_hidden = true; } } - flag = CSYNC_FTW_FLAG_NSTAT; - if( res == 0) { - switch (dirent->type) { - case CSYNC_FTW_TYPE_SLINK: - flag = CSYNC_FTW_FLAG_SLINK; - break; - case CSYNC_FTW_TYPE_DIR: - flag = CSYNC_FTW_FLAG_DIR; - break; - case CSYNC_FTW_TYPE_FILE: - flag = CSYNC_FTW_FLAG_FILE; - break; - default: - break; - }; + // Now process to have a relative path to the sync root for the local replica, or to the data root on the remote. + dirent->path = fullpath; + if (ctx->current == LOCAL_REPLICA) { + if (dirent->path.size() <= (int)strlen(ctx->local.uri)) { + ctx->status_code = CSYNC_STATUS_PARAM_ERROR; + goto error; + } + // "len + 1" to include the slash in-between. + dirent->path = dirent->path.mid(strlen(ctx->local.uri) + 1); } + // We calculate the phash using the relative path. + dirent->phash = c_jhash64((const uint8_t*)dirent->path.constData(), dirent->path.size(), 0); previous_fs = ctx->current_fs; + bool recurse = dirent->type == CSYNC_FTW_TYPE_DIR; /* Call walker function for each file */ - rc = fn(ctx, filename, dirent.get(), flag); + rc = fn(ctx, std::move(dirent)); /* this function may update ctx->current and ctx->read_from_db */ if (rc < 0) { @@ -708,9 +618,9 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, goto error; } - if (flag == CSYNC_FTW_FLAG_DIR && rc == 0 + if (recurse && rc == 0 && (!ctx->current_fs || ctx->current_fs->instruction != CSYNC_INSTRUCTION_IGNORE)) { - rc = csync_ftw(ctx, filename, fn, depth - 1); + rc = csync_ftw(ctx, fullpath, fn, depth - 1); if (rc < 0) { ctx->current_fs = previous_fs; goto error; @@ -738,7 +648,6 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, ctx->current_fs = previous_fs; ctx->remote.read_from_db = read_from_db; - dirent.reset(); } csync_vio_closedir(ctx, dh); diff --git a/src/csync/csync_update.h b/src/csync/csync_update.h index b1de56dee..1b4c50995 100644 --- a/src/csync/csync_update.h +++ b/src/csync/csync_update.h @@ -37,22 +37,7 @@ * @{ */ -/** - * Types for files - */ -enum csync_ftw_flags_e { - CSYNC_FTW_FLAG_FILE, /* Regular file. */ - CSYNC_FTW_FLAG_DIR, /* Directory. */ - CSYNC_FTW_FLAG_DNR, /* Unreadable directory. */ - CSYNC_FTW_FLAG_NSTAT, /* Unstatable file. */ - CSYNC_FTW_FLAG_SLINK, /* Symbolic link. */ - /* These flags are only passed from the `nftw' function. */ - CSYNC_FTW_FLAG_DP, /* Directory, all subdirs have been visited. */ - CSYNC_FTW_FLAG_SLN /* Symbolic link naming non-existing file. */ -}; - -typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, - const csync_file_stat_t *fs, int flag); +typedef int (*csync_walker_fn) (CSYNC *ctx, std::unique_ptr fs); /** * @brief The walker function to use in the file tree walker. @@ -67,7 +52,7 @@ typedef int (*csync_walker_fn) (CSYNC *ctx, const char *file, * * @return 0 on success, < 0 on error. */ -int csync_walker(CSYNC *ctx, const char *file, const csync_file_stat_t *fs, int flag); +int csync_walker(CSYNC *ctx, std::unique_ptr fs); /** * @brief The file tree walker. diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index 184f6877e..f8329465f 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -205,14 +205,10 @@ static std::unique_ptr create_fstat(const char *name, } static int failing_fn(CSYNC *ctx, - const char *file, - const csync_file_stat_t *fs, - int flag) + std::unique_ptr fs) { (void) ctx; - (void) file; (void) fs; - (void) flag; return -1; } @@ -227,10 +223,7 @@ static void check_csync_detect_update(void **state) fs = create_fstat("file.txt", 0, 1217597845); - rc = _csync_detect_update(csync, - "/tmp/check_csync1/file.txt", - fs.get(), - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); /* the instruction should be set to new */ @@ -253,10 +246,7 @@ static void check_csync_detect_update_db_none(void **state) fs = create_fstat("file.txt", 0, 1217597845); - rc = _csync_detect_update(csync, - "/tmp/check_csync1/file.txt", - fs.get(), - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); /* the instruction should be set to new */ @@ -277,10 +267,7 @@ static void check_csync_detect_update_db_eval(void **state) fs = create_fstat("file.txt", 0, 42); - rc = _csync_detect_update(csync, - "/tmp/check_csync1/file.txt", - fs.get(), - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); /* the instruction should be set to new */ @@ -303,10 +290,7 @@ static void check_csync_detect_update_db_rename(void **state) fs = create_fstat("wurst.txt", 0, 42); csync_set_statedb_exists(csync, 1); - rc = _csync_detect_update(csync, - "/tmp/check_csync1/wurst.txt", - fs.get(), - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); /* the instruction should be set to rename */ @@ -330,10 +314,7 @@ static void check_csync_detect_update_db_new(void **state) fs = create_fstat("file.txt", 42000, 0); - rc = _csync_detect_update(csync, - "/tmp/check_csync1/file.txt", - fs.get(), - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); /* the instruction should be set to new */ @@ -351,18 +332,7 @@ static void check_csync_detect_update_null(void **state) std::unique_ptr fs; int rc; - fs = create_fstat("file.txt", 0, 0); - - rc = _csync_detect_update(csync, - NULL, - fs.get(), - CSYNC_FTW_TYPE_FILE); - assert_int_equal(rc, -1); - - rc = _csync_detect_update(csync, - "/tmp/check_csync1/file.txt", - NULL, - CSYNC_FTW_TYPE_FILE); + rc = _csync_detect_update(csync, NULL); assert_int_equal(rc, -1); } From d66c2b5faecc689c52df23d7dbc44c894b92febc Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 23 Aug 2017 19:16:12 +0200 Subject: [PATCH 059/166] Replace the custom rbtree by a std::map --- src/csync/csync.cpp | 183 +---- src/csync/csync_private.h | 28 +- src/csync/csync_reconcile.cpp | 110 +-- src/csync/csync_rename.cpp | 36 +- src/csync/csync_rename.h | 6 +- src/csync/csync_statedb.cpp | 9 +- src/csync/csync_update.cpp | 11 +- src/csync/std/CMakeLists.txt | 1 - src/csync/std/c_lib.h | 1 - src/csync/std/c_rbtree.c | 743 ------------------ src/csync/std/c_rbtree.h | 318 -------- src/libsync/discoveryphase.cpp | 17 +- src/libsync/discoveryphase.h | 8 +- src/libsync/syncengine.cpp | 11 +- test/csync/CMakeLists.txt | 1 - .../csync_tests/check_csync_statedb_query.cpp | 15 +- test/csync/csync_tests/check_csync_update.cpp | 10 +- test/csync/std_tests/check_std_c_rbtree.c | 366 --------- 18 files changed, 153 insertions(+), 1721 deletions(-) delete mode 100644 src/csync/std/c_rbtree.c delete mode 100644 src/csync/std/c_rbtree.h delete mode 100644 test/csync/std_tests/check_std_c_rbtree.c diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index b37e2bdcd..ac096ae2b 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -51,36 +51,6 @@ #include "csync_rename.h" #include "c_jhash.h" -static int _key_cmp(const void *key, const void *data) { - uint64_t a; - csync_file_stat_t *b; - - a = *(uint64_t *) (key); - b = (csync_file_stat_t *) data; - - if (a < b->phash) { - return -1; - } else if (a > b->phash) { - return 1; - } - - return 0; -} - -static int _data_cmp(const void *key, const void *data) { - csync_file_stat_t *a, *b; - - a = (csync_file_stat_t *) key; - b = (csync_file_stat_t *) data; - - if (a->phash < b->phash) { - return -1; - } else if (a->phash > b->phash) { - return 1; - } - - return 0; -} csync_s::csync_s(const char *localUri, const char *db_file) { size_t len = 0; @@ -91,9 +61,6 @@ csync_s::csync_s(const char *localUri, const char *db_file) { local.uri = c_strndup(localUri, len); - c_rbtree_create(&local.tree, _key_cmp, _data_cmp); - c_rbtree_create(&remote.tree, _key_cmp, _data_cmp); - statedb.file = c_strdup(db_file); } @@ -137,7 +104,7 @@ int csync_update(CSYNC *ctx) { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Update detection for local replica took %.2f seconds walking %zu files.", - c_secdiff(finish, start), c_rbtree_size(ctx->local.tree)); + c_secdiff(finish, start), ctx->local.files.size()); csync_memstat_check(); /* update detection for remote replica */ @@ -157,7 +124,7 @@ int csync_update(CSYNC *ctx) { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Update detection for remote replica took %.2f seconds " "walking %zu files.", - c_secdiff(finish, start), c_rbtree_size(ctx->remote.tree)); + c_secdiff(finish, start), ctx->remote.files.size()); csync_memstat_check(); ctx->status |= CSYNC_STATUS_UPDATE; @@ -195,7 +162,7 @@ int csync_reconcile(CSYNC *ctx) { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Reconciliation for local replica took %.2f seconds visiting %zu files.", - c_secdiff(finish, start), c_rbtree_size(ctx->local.tree)); + c_secdiff(finish, start), ctx->local.files.size()); if (rc < 0) { if (!CSYNC_STATUS_IS_OK(ctx->status_code)) { @@ -215,7 +182,7 @@ int csync_reconcile(CSYNC *ctx) { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Reconciliation for remote replica took %.2f seconds visiting %zu files.", - c_secdiff(finish, start), c_rbtree_size(ctx->remote.tree)); + c_secdiff(finish, start), ctx->remote.files.size()); if (rc < 0) { if (!CSYNC_STATUS_IS_OK(ctx->status_code)) { @@ -236,17 +203,11 @@ out: /* * local visitor which calls the user visitor with repacked stat info. */ -static int _csync_treewalk_visitor(void *obj, void *data) { +static int _csync_treewalk_visitor(csync_file_stat_t *cur, CSYNC * ctx) { int rc = 0; - csync_file_stat_t *cur = NULL; - CSYNC *ctx = NULL; csync_treewalk_visit_func *visitor = NULL; _csync_treewalk_context *twctx = NULL; - c_rbtree_t *other_tree = NULL; - c_rbnode_t *other_node = NULL; - - cur = (csync_file_stat_t *) obj; - ctx = (CSYNC *) data; + csync_s::FileMap *other_tree = nullptr; if (ctx == NULL) { return -1; @@ -255,51 +216,33 @@ static int _csync_treewalk_visitor(void *obj, void *data) { /* we need the opposite tree! */ switch (ctx->current) { case LOCAL_REPLICA: - other_tree = ctx->remote.tree; + other_tree = &ctx->remote.files; break; case REMOTE_REPLICA: - other_tree = ctx->local.tree; + other_tree = &ctx->local.files; break; default: break; } - other_node = c_rbtree_find(other_tree, &cur->phash); + csync_s::FileMap::const_iterator other_file_it = other_tree->find(cur->path); - if (!other_node) { + if (other_file_it == other_tree->cend()) { /* Check the renamed path as well. */ - int len; - uint64_t h = 0; - char *renamed_path = csync_rename_adjust_path(ctx, cur->path); - - if (!c_streq(renamed_path, cur->path)) { - len = strlen( renamed_path ); - h = c_jhash64((uint8_t *) renamed_path, len, 0); - other_node = c_rbtree_find(other_tree, &h); - } - SAFE_FREE(renamed_path); + QByteArray renamed_path = csync_rename_adjust_path(ctx, cur->path); + if (renamed_path != cur->path) + other_file_it = other_tree->find(renamed_path); } - if (!other_node) { + if (other_file_it == other_tree->cend()) { /* Check the source path as well. */ - int len; - uint64_t h = 0; - char *renamed_path = csync_rename_adjust_path_source(ctx, cur->path); - - if (!c_streq(renamed_path, cur->path)) { - len = strlen( renamed_path ); - h = c_jhash64((uint8_t *) renamed_path, len, 0); - other_node = c_rbtree_find(other_tree, &h); - } - SAFE_FREE(renamed_path); + QByteArray renamed_path = csync_rename_adjust_path_source(ctx, cur->path); + if (renamed_path != cur->path) + other_file_it = other_tree->find(renamed_path); } - csync_file_stat_t *other = other_node ? (csync_file_stat_t*)other_node->data : NULL; + csync_file_stat_t *other = (other_file_it != other_tree->cend()) ? other_file_it->second.get() : NULL; - if (obj == NULL || data == NULL) { - ctx->status_code = CSYNC_STATUS_PARAM_ERROR; - return -1; - } ctx->status_code = CSYNC_STATUS_OK; twctx = (_csync_treewalk_context*) ctx->callbacks.userdata; @@ -331,28 +274,24 @@ static int _csync_treewalk_visitor(void *obj, void *data) { * which calls the local _csync_treewalk_visitor in this module. * The user visitor is called from there. */ -static int _csync_walk_tree(CSYNC *ctx, c_rbtree_t *tree, csync_treewalk_visit_func *visitor, int filter) +static int _csync_walk_tree(CSYNC *ctx, csync_s::FileMap *tree, csync_treewalk_visit_func *visitor, int filter) { _csync_treewalk_context tw_ctx; - int rc = -1; + int rc = 0; - if (ctx == NULL) { - errno = EBADF; - return rc; - } - - if (visitor == NULL || tree == NULL) { - ctx->status_code = CSYNC_STATUS_PARAM_ERROR; - return rc; - } - tw_ctx.userdata = ctx->callbacks.userdata; tw_ctx.user_visitor = visitor; tw_ctx.instruction_filter = filter; ctx->callbacks.userdata = &tw_ctx; - rc = c_rbtree_walk(tree, (void*) ctx, _csync_treewalk_visitor); + for (auto &pair : *tree) { + if (_csync_treewalk_visitor(pair.second.get(), ctx) < 0) { + rc = -1; + break; + } + } + if( rc < 0 ) { if( ctx->status_code == CSYNC_STATUS_OK ) ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_TREE_ERROR); @@ -367,18 +306,9 @@ static int _csync_walk_tree(CSYNC *ctx, c_rbtree_t *tree, csync_treewalk_visit_f */ int csync_walk_remote_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter) { - c_rbtree_t *tree = NULL; - int rc = -1; - - if(ctx != NULL) { - ctx->status_code = CSYNC_STATUS_OK; - ctx->current = REMOTE_REPLICA; - tree = ctx->remote.tree; - } - - /* all error handling in the called function */ - rc = _csync_walk_tree(ctx, tree, visitor, filter); - return rc; + ctx->status_code = CSYNC_STATUS_OK; + ctx->current = REMOTE_REPLICA; + return _csync_walk_tree(ctx, &ctx->remote.files, visitor, filter); } /* @@ -386,25 +316,9 @@ int csync_walk_remote_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int */ int csync_walk_local_tree(CSYNC *ctx, csync_treewalk_visit_func *visitor, int filter) { - c_rbtree_t *tree = NULL; - int rc = -1; - - if (ctx != NULL) { - ctx->status_code = CSYNC_STATUS_OK; - ctx->current = LOCAL_REPLICA; - tree = ctx->local.tree; - } - - /* all error handling in the called function */ - rc = _csync_walk_tree(ctx, tree, visitor, filter); - return rc; -} - -static void _tree_destructor(void *data) { - csync_file_stat_t *freedata = NULL; - - freedata = (csync_file_stat_t *) data; - delete freedata; + ctx->status_code = CSYNC_STATUS_OK; + ctx->current = LOCAL_REPLICA; + return _csync_walk_tree(ctx, &ctx->local.files, visitor, filter); } int csync_s::reinitialize() { @@ -419,26 +333,12 @@ int csync_s::reinitialize() { } statedb.db = NULL; - /* destroy the rbtrees */ - if (c_rbtree_size(local.tree) > 0) { - c_rbtree_destroy(local.tree, _tree_destructor); - } - - if (c_rbtree_size(remote.tree) > 0) { - c_rbtree_destroy(remote.tree, _tree_destructor); - } - - /* free memory */ - c_rbtree_free(local.tree); - c_rbtree_free(remote.tree); - remote.read_from_db = 0; read_remote_from_db = true; db_is_empty = false; - /* Create new trees */ - c_rbtree_create(&local.tree, _key_cmp, _data_cmp); - c_rbtree_create(&remote.tree, _key_cmp, _data_cmp); + local.files.clear(); + remote.files.clear(); status = CSYNC_STATUS_INIT; SAFE_FREE(error_string); @@ -454,19 +354,6 @@ csync_s::~csync_s() { } statedb.db = NULL; - /* destroy the rbtrees */ - if (c_rbtree_size(local.tree) > 0) { - c_rbtree_destroy(local.tree, _tree_destructor); - } - - if (c_rbtree_size(remote.tree) > 0) { - c_rbtree_destroy(remote.tree, _tree_destructor); - } - - /* free memory */ - c_rbtree_free(local.tree); - c_rbtree_free(remote.tree); - SAFE_FREE(statedb.file); SAFE_FREE(local.uri); SAFE_FREE(error_string); diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 605e1b252..53383db89 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -36,6 +36,7 @@ #include #include #include +#include #include "config_csync.h" #include "std/c_lib.h" @@ -69,6 +70,14 @@ enum csync_replica_e { * @brief csync public structure */ struct OCSYNC_EXPORT csync_s { + class FileMap : public std::map> { + public: + csync_file_stat_t *findFile(const QByteArray &key) const { + auto it = find(key); + return it != end() ? it->second.get() : nullptr; + } + }; + struct { csync_auth_callback auth_function = nullptr; void *userdata = nullptr; @@ -76,8 +85,8 @@ struct OCSYNC_EXPORT csync_s { void *update_callback_userdata = nullptr; /* hooks for checking the white list (uses the update_callback_userdata) */ - int (*checkSelectiveSyncBlackListHook)(void*, const char*) = nullptr; - int (*checkSelectiveSyncNewFolderHook)(void*, const char* /* path */, const char* /* remotePerm */) = nullptr; + int (*checkSelectiveSyncBlackListHook)(void*, const QByteArray &) = nullptr; + int (*checkSelectiveSyncNewFolderHook)(void*, const QByteArray &/* path */, const QByteArray &/* remotePerm */) = nullptr; csync_vio_opendir_hook remote_opendir_hook = nullptr; @@ -105,17 +114,17 @@ struct OCSYNC_EXPORT csync_s { } statedb; struct { - std::map folder_renamed_to; // map from->to - std::map folder_renamed_from; // map to->from + std::map folder_renamed_to; // map from->to + std::map folder_renamed_from; // map to->from } renames; struct { char *uri = nullptr; - c_rbtree_t *tree = nullptr; + FileMap files; } local; struct { - c_rbtree_t *tree = nullptr; + FileMap files; bool read_from_db = false; QByteArray root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ } remote; @@ -151,6 +160,13 @@ struct OCSYNC_EXPORT csync_s { csync_s(const char *localUri, const char *db_file); ~csync_s(); int reinitialize(); + + // For some reason MSVC references the copy constructor and/or the assignment operator + // if a class is exported. This is a problem since unique_ptr isn't copyable. + // Explicitly disable them to fix the issue. + // https://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/e39ab33d-1aaf-4125-b6de-50410d9ced1d + csync_s(const csync_s &) = delete; + csync_s &operator=(const csync_s &) = delete; }; /* diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 760c5ca46..ee7eee7a1 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -37,33 +37,28 @@ /* Check if a file is ignored because one parent is ignored. * return the node of the ignored directoy if it's the case, or NULL if it is not ignored */ -static c_rbnode_t *_csync_check_ignored(c_rbtree_t *tree, const char *path, int pathlen) { - uint64_t h = 0; - c_rbnode_t *node = NULL; - +static csync_file_stat_t *_csync_check_ignored(csync_s::FileMap *tree, const QByteArray &path) { /* compute the size of the parent directory */ - int parentlen = pathlen - 1; - while (parentlen > 0 && path[parentlen] != '/') { + int parentlen = path.size() - 1; + while (parentlen > 0 && path.at(parentlen) != '/') { parentlen--; } if (parentlen <= 0) { - return NULL; + return nullptr; } - - h = c_jhash64((uint8_t *) path, parentlen, 0); - node = c_rbtree_find(tree, &h); - if (node) { - csync_file_stat_t *n = (csync_file_stat_t*)node->data; - if (n->instruction == CSYNC_INSTRUCTION_IGNORE) { + QByteArray parentPath = path.left(parentlen); + csync_file_stat_t *fs = tree->findFile(parentPath); + if (fs) { + if (fs->instruction == CSYNC_INSTRUCTION_IGNORE) { /* Yes, we are ignored */ - return node; + return fs; } else { /* Not ignored */ - return NULL; + return nullptr; } } else { /* Try if the parent itself is ignored */ - return _csync_check_ignored(tree, path, parentlen); + return _csync_check_ignored(tree, parentPath); } } @@ -83,7 +78,7 @@ static bool _csync_is_collision_safe_hash(const char *checksum_header) /** * The main function in the reconcile pass. * - * It's called for each entry in the local and remote rbtrees by + * It's called for each entry in the local and remote files by * csync_reconcile() * * Before the reconcile phase the trees already know about changes @@ -107,52 +102,37 @@ static bool _csync_is_collision_safe_hash(const char *checksum_header) * (timestamp is newer), it is not overwritten. If both files, on the * source and the destination, have been changed, the newer file wins. */ -static int _csync_merge_algorithm_visitor(void *obj, void *data) { - csync_file_stat_t *cur = NULL; - csync_file_stat_t *other = NULL; +static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { std::unique_ptr tmp; - uint64_t h = 0; - int len = 0; - CSYNC *ctx = NULL; - c_rbtree_t *tree = NULL; - c_rbnode_t *node = NULL; - - cur = (csync_file_stat_t *) obj; - ctx = (CSYNC *) data; + csync_s::FileMap *other_tree = nullptr; /* we need the opposite tree! */ switch (ctx->current) { case LOCAL_REPLICA: - tree = ctx->remote.tree; + other_tree = &ctx->remote.files; break; case REMOTE_REPLICA: - tree = ctx->local.tree; + other_tree = &ctx->local.files; break; default: break; } - node = c_rbtree_find(tree, &cur->phash); + csync_file_stat_t *other = other_tree->findFile(cur->path);; - if (!node) { + if (!other) { /* Check the renamed path as well. */ - char *renamed_path = csync_rename_adjust_path(ctx, cur->path); - if (renamed_path != cur->path) { - len = strlen( renamed_path ); - h = c_jhash64((uint8_t *) renamed_path, len, 0); - node = c_rbtree_find(tree, &h); - } - SAFE_FREE(renamed_path); + other = other_tree->findFile(csync_rename_adjust_path(ctx, cur->path)); } - if (!node) { + if (!other) { /* Check if it is ignored */ - node = _csync_check_ignored(tree, cur->path, cur->path.size()); + other = _csync_check_ignored(other_tree, cur->path); /* If it is ignored, other->instruction will be IGNORE so this one will also be ignored */ } /* file only found on current replica */ - if (node == NULL) { + if (!other) { switch(cur->instruction) { /* file has been modified */ case CSYNC_INSTRUCTION_EVAL: @@ -187,26 +167,20 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { } if( tmp ) { - len = strlen( tmp->path ); - if( len > 0 ) { - h = c_jhash64((uint8_t *) tmp->path.constData(), len, 0); + if( !tmp->path.isEmpty() ) { /* First, check that the file is NOT in our tree (another file with the same name was added) */ - node = c_rbtree_find(ctx->current == REMOTE_REPLICA ? ctx->remote.tree : ctx->local.tree, &h); - if (node) { + csync_s::FileMap *our_tree = ctx->current == REMOTE_REPLICA ? &ctx->remote.files : &ctx->local.files; + if (our_tree->findFile(tmp->path)) { CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Origin found in our tree : %s", tmp->path.constData()); } else { - /* Find the temporar file in the other tree. */ - node = c_rbtree_find(tree, &h); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "PHash of temporary opposite (%s): %" PRIu64 " %s", - tmp->path.constData() , h, node ? "found": "not found" ); - if (node) { - other = (csync_file_stat_t*)node->data; - } else { - /* the renamed file could not be found in the opposite tree. That is because it - * is not longer existing there, maybe because it was renamed or deleted. - * The journal is cleaned up later after propagation. - */ - } + /* Find the temporar file in the other tree. + * If the renamed file could not be found in the opposite tree, that is because it + * is not longer existing there, maybe because it was renamed or deleted. + * The journal is cleaned up later after propagation. + */ + other = other_tree->findFile(tmp->path); + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Temporary opposite (%s) %s", + tmp->path.constData() , other ? "found": "not found" ); } } @@ -250,7 +224,6 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { /* * file found on the other replica */ - other = (csync_file_stat_t *) node->data; switch (cur->instruction) { case CSYNC_INSTRUCTION_UPDATE_METADATA: @@ -395,25 +368,26 @@ static int _csync_merge_algorithm_visitor(void *obj, void *data) { } int csync_reconcile_updates(CSYNC *ctx) { - int rc; - c_rbtree_t *tree = NULL; + csync_s::FileMap *tree = nullptr; switch (ctx->current) { case LOCAL_REPLICA: - tree = ctx->local.tree; + tree = &ctx->local.files; break; case REMOTE_REPLICA: - tree = ctx->remote.tree; + tree = &ctx->remote.files; break; default: break; } - rc = c_rbtree_walk(tree, (void *) ctx, _csync_merge_algorithm_visitor); - if( rc < 0 ) { - ctx->status_code = CSYNC_STATUS_RECONCILE_ERROR; + for (auto &pair : *tree) { + if (_csync_merge_algorithm_visitor(pair.second.get(), ctx) < 0) { + ctx->status_code = CSYNC_STATUS_RECONCILE_ERROR; + return -1; + } } - return rc; + return 0; } /* vim: set ts=8 sw=2 et cindent: */ diff --git a/src/csync/csync_rename.cpp b/src/csync/csync_rename.cpp index 5196020ee..ef825a606 100644 --- a/src/csync/csync_rename.cpp +++ b/src/csync/csync_rename.cpp @@ -21,45 +21,43 @@ #include "csync_private.h" #include "csync_rename.h" -#include -#include #include -static std::string _parentDir(const std::string &path) { +static QByteArray _parentDir(const QByteArray &path) { int len = path.length(); - while(len > 0 && path[len-1]!='/') len--; - while(len > 0 && path[len-1]=='/') len--; - return path.substr(0, len); + while(len > 0 && path.at(len-1)!='/') len--; + while(len > 0 && path.at(len-1)=='/') len--; + return path.left(len); } -void csync_rename_record(CSYNC* ctx, const char* from, const char* to) +void csync_rename_record(CSYNC* ctx, const QByteArray &from, const QByteArray &to) { ctx->renames.folder_renamed_to[from] = to; ctx->renames.folder_renamed_from[to] = from; } -char* csync_rename_adjust_path(CSYNC* ctx, const char* path) +QByteArray csync_rename_adjust_path(CSYNC* ctx, const QByteArray &path) { - for (std::string p = _parentDir(path); !p.empty(); p = _parentDir(p)) { - std::map< std::string, std::string >::iterator it = ctx->renames.folder_renamed_to.find(p); + for (QByteArray p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { + std::map< QByteArray, QByteArray >::iterator it = ctx->renames.folder_renamed_to.find(p); if (it != ctx->renames.folder_renamed_to.end()) { - std::string rep = it->second + (path + p.length()); - return c_strdup(rep.c_str()); + QByteArray rep = it->second + path.mid(p.length()); + return rep; } } - return c_strdup(path); + return path; } -char* csync_rename_adjust_path_source(CSYNC* ctx, const char* path) +QByteArray csync_rename_adjust_path_source(CSYNC* ctx, const QByteArray &path) { - for (std::string p = _parentDir(path); !p.empty(); p = _parentDir(p)) { - std::map< std::string, std::string >::iterator it = ctx->renames.folder_renamed_from.find(p); + for (QByteArray p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { + std::map< QByteArray, QByteArray >::iterator it = ctx->renames.folder_renamed_from.find(p); if (it != ctx->renames.folder_renamed_from.end()) { - std::string rep = it->second + (path + p.length()); - return c_strdup(rep.c_str()); + QByteArray rep = it->second + path.mid(p.length()); + return rep; } } - return c_strdup(path); + return path; } bool csync_rename_count(CSYNC *ctx) { diff --git a/src/csync/csync_rename.h b/src/csync/csync_rename.h index 509b78afc..194f4256c 100644 --- a/src/csync/csync_rename.h +++ b/src/csync/csync_rename.h @@ -23,9 +23,9 @@ #include "csync.h" /* Return the final destination path of a given patch in case of renames */ -char OCSYNC_EXPORT *csync_rename_adjust_path(CSYNC *ctx, const char *path); +QByteArray OCSYNC_EXPORT csync_rename_adjust_path(CSYNC *ctx, const QByteArray &path); /* Return the source of a given path in case of renames */ -char OCSYNC_EXPORT *csync_rename_adjust_path_source(CSYNC *ctx, const char *path); -void OCSYNC_EXPORT csync_rename_record(CSYNC *ctx, const char *from, const char *to); +QByteArray OCSYNC_EXPORT csync_rename_adjust_path_source(CSYNC *ctx, const QByteArray &path); +void OCSYNC_EXPORT csync_rename_record(CSYNC *ctx, const QByteArray &from, const QByteArray &to); /* Return the amount of renamed item recorded */ bool OCSYNC_EXPORT csync_rename_count(CSYNC *ctx); diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 4d2598f79..ca5b61537 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -486,18 +486,15 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { } /* store into result list. */ - if (c_rbtree_insert(ctx->remote.tree, (void *) st.release()) < 0) { - st.reset(); - ctx->status_code = CSYNC_STATUS_TREE_ERROR; - break; - } + QByteArray path = st->path; + ctx->remote.files[path] = std::move(st); cnt++; } } while( rc == SQLITE_ROW ); ctx->statedb.lastReturnValue = rc; if( rc != SQLITE_DONE ) { - ctx->status_code = CSYNC_STATUS_TREE_ERROR; + ctx->status_code = CSYNC_STATUS_STATEDB_LOAD_ERROR; } else { CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "%" PRId64 " entries read below path %s from db.", cnt, path); } diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 91afc8eb6..f63757242 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -383,18 +383,13 @@ out: CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", fs->path.constData(), csync_instruction_str(fs->instruction)); + QByteArray path = fs->path; switch (ctx->current) { case LOCAL_REPLICA: - if (c_rbtree_insert(ctx->local.tree, (void *) fs.release()) < 0) { - ctx->status_code = CSYNC_STATUS_TREE_ERROR; - return -1; - } + ctx->local.files[path] = std::move(fs); break; case REMOTE_REPLICA: - if (c_rbtree_insert(ctx->remote.tree, (void *) fs.release()) < 0) { - ctx->status_code = CSYNC_STATUS_TREE_ERROR; - return -1; - } + ctx->remote.files[path] = std::move(fs); break; default: break; diff --git a/src/csync/std/CMakeLists.txt b/src/csync/std/CMakeLists.txt index ef7a25bd3..fddd02e99 100644 --- a/src/csync/std/CMakeLists.txt +++ b/src/csync/std/CMakeLists.txt @@ -17,7 +17,6 @@ set(CSTDLIB_LINK_LIBRARIES set(cstdlib_SRCS c_alloc.c c_path.c - c_rbtree.c c_string.c c_time.c c_utf8.cpp diff --git a/src/csync/std/c_lib.h b/src/csync/std/c_lib.h index b9c1ea8d3..43f352ff4 100644 --- a/src/csync/std/c_lib.h +++ b/src/csync/std/c_lib.h @@ -24,7 +24,6 @@ #include "c_macro.h" #include "c_alloc.h" #include "c_path.h" -#include "c_rbtree.h" #include "c_string.h" #include "c_time.h" #include "c_private.h" diff --git a/src/csync/std/c_rbtree.c b/src/csync/std/c_rbtree.c deleted file mode 100644 index 9a38fd0a6..000000000 --- a/src/csync/std/c_rbtree.c +++ /dev/null @@ -1,743 +0,0 @@ -/* - * cynapses libc functions - * - * Copyright (c) 2003-2004 by Andrew Suffield - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/* - * This code was originally released under GPL but Andrew Suffield agreed to - * change it to LGPL. - */ - -/* - * static function don't have NULL pointer checks, segfaults are intended. - */ - -#include -#include -#include - -#include "c_alloc.h" -#include "c_rbtree.h" - -#define NIL &_sentinel /* all leafs are sentinels */ -static c_rbnode_t _sentinel = {NULL, NIL, NIL, NULL, NULL, BLACK}; - -void c_rbtree_create(c_rbtree_t **rbtree, c_rbtree_compare_func *key_compare, c_rbtree_compare_func *data_compare) { - assert(rbtree); - assert(key_compare); - assert(data_compare); - - c_rbtree_t *tree = NULL; - - tree = c_malloc(sizeof(*tree)); - tree->root = NIL; - tree->key_compare = key_compare; - tree->data_compare = data_compare; - tree->size = 0; - - *rbtree = tree; -} - -static c_rbnode_t *_rbtree_subtree_dup(const c_rbnode_t *node, c_rbtree_t *new_tree, c_rbnode_t *new_parent) { - c_rbnode_t *new_node = NULL; - - new_node = (c_rbnode_t*) c_malloc(sizeof(c_rbnode_t)); - - new_node->tree = new_tree; - new_node->data = node->data; - new_node->color = node->color; - new_node->parent = new_parent; - - if (node->left == NIL) { - new_node->left = NIL; - } else { - new_node->left = _rbtree_subtree_dup(node->left, new_tree, new_node); - } - - if (node->right == NIL) { - new_node->right = NIL; - } else { - new_node->right = _rbtree_subtree_dup(node->right, new_tree, new_node); - } - - return new_node; -} - -c_rbtree_t *c_rbtree_dup(const c_rbtree_t *tree) { - c_rbtree_t *new_tree = NULL; - - new_tree = (c_rbtree_t*) c_malloc(sizeof(c_rbtree_t)); - - new_tree->key_compare = tree->key_compare; - new_tree->data_compare = tree->data_compare; - new_tree->size = tree->size; - new_tree->root = _rbtree_subtree_dup(tree->root, new_tree, NULL); - - return new_tree; -} - -static int _rbtree_subtree_free(c_rbnode_t *node) { - assert(node); - - if (node->left != NIL) { - if (_rbtree_subtree_free(node->left) < 0) { - /* TODO: set errno? ECANCELED? */ - return -1; - } - } - - if (node->right != NIL) { - if (_rbtree_subtree_free(node->right) < 0) { - /* TODO: set errno? ECANCELED? */ - return -1; - } - } - - SAFE_FREE(node); - - return 0; -} - -int c_rbtree_free(c_rbtree_t *tree) { - if (tree == NULL) { - errno = EINVAL; - return -1; - } - - if (tree->root != NIL) { - _rbtree_subtree_free(tree->root); - } - - SAFE_FREE(tree); - - return 0; -} - -static int _rbtree_subtree_walk(c_rbnode_t *node, void *data, c_rbtree_visit_func *visitor) { - assert(node); - assert(data); - assert(visitor); - - if (node == NIL) { - return 0; - } - - if (_rbtree_subtree_walk(node->left, data, visitor) < 0) { - return -1; - } - - if ((*visitor)(node->data, data) < 0) { - return -1; - } - - if (_rbtree_subtree_walk(node->right, data, visitor) < 0) { - return -1; - } - - return 0; -} - -int c_rbtree_walk(c_rbtree_t *tree, void *data, c_rbtree_visit_func *visitor) { - if (tree == NULL || data == NULL || visitor == NULL) { - errno = EINVAL; - return -1; - } - - if (_rbtree_subtree_walk(tree->root, data, visitor) < 0) { - return -1; - } - - return 0; -} - -static c_rbnode_t *_rbtree_subtree_head(c_rbnode_t *node) { - assert(node); - - if (node == NIL) { - return node; - } - - while (node->left != NIL) { - node = node->left; - } - - return node; -} - -static c_rbnode_t *_rbtree_subtree_tail(c_rbnode_t *node) { - assert(node); - - if (node == NIL) { - return node; - } - - while (node->right != NIL) { - node = node->right; - } - - return node; -} - -c_rbnode_t *c_rbtree_head(c_rbtree_t *tree) { - c_rbnode_t *node = NULL; - - if (tree == NULL) { - errno = EINVAL; - return NULL; - } - - node = _rbtree_subtree_head(tree->root); - - return node != NIL ? node : NULL; -} - -c_rbnode_t *c_rbtree_tail(c_rbtree_t *tree) { - c_rbnode_t *node = NULL; - - if (tree == NULL) { - errno = EINVAL; - return NULL; - } - - node = _rbtree_subtree_tail(tree->root); - - return node != NIL ? node : NULL; -} - -c_rbnode_t *c_rbtree_node_next(c_rbnode_t *node) { - c_rbnode_t *parent = NULL; - - if (node == NULL) { - errno = EINVAL; - return NULL; - } - - if (node->right != NIL) { - c_rbnode_t *next = NULL; - next = _rbtree_subtree_head(node->right); - - return next != NIL ? next : NULL; - } - - parent = node->parent; - while (parent && node == parent->right) { - node = parent; - parent = node->parent; - } - - return parent != NULL ? parent : NULL; -} - -c_rbnode_t *c_rbtree_node_prev(c_rbnode_t *node) { - c_rbnode_t *parent = NULL; - - if (node == NULL) { - return NULL; - } - - if (node->left != NIL) { - c_rbnode_t *prev = NULL; - prev = _rbtree_subtree_tail(node->left); - return prev != NIL ? prev : NULL; - } - - parent = node->parent; - while (parent && node == parent->left) { - node = parent; - parent = node->parent; - } - - return parent != NULL ? parent : NULL; -} - -c_rbnode_t *c_rbtree_find(c_rbtree_t *tree, const void *key) { - int cmp = 0; - c_rbnode_t *node = NULL; - - if (tree == NULL) { - errno = EINVAL; - return NULL; - } - node = tree->root; - - while (node != NIL) { - cmp = tree->key_compare(key, node->data); - if (cmp == 0) { - return node; - } - - if (cmp < 0) { - node = node->left; - } else { - node = node->right; - } - } - - return NULL; -} - -static void _rbtree_subtree_left_rotate(c_rbnode_t *x) { - c_rbnode_t *y = NULL; - - assert(x); - - y = x->right; - - /* establish x-right link */ - x->right = y->left; - - if (y->left != NIL) { - y->left->parent = x; - } - - /* establish y->parent link */ - if (y != NIL) { - y->parent = x->parent; - } - - if (x->parent) { - if (x == x->parent->left) { - x->parent->left = y; - } else { - x->parent->right = y; - } - } else { - x->tree->root = y; - } - - /* link x and y */ - y->left = x; - if (x != NIL) { - x->parent = y; - } -} - -/* rotat node x to the right */ -static void _rbtree_subtree_right_rotate(c_rbnode_t *x) { - c_rbnode_t *y = NULL; - - assert(x); - - y = x->left; - - /* establish x->left link */ - x->left = y->right; - - if (y->right != NIL) { - y->right->parent = x; - } - - /* establish y->parent link */ - if (y != NIL) { - y->parent = x->parent; - } - - if (x->parent) { - if (x == x->parent->right) { - x->parent->right = y; - } else { - x->parent->left = y; - } - } else { - x->tree->root = y; - } - - /* link x and y */ - y->right = x; - if (x != NIL) { - x->parent = y; - } -} - -int c_rbtree_insert(c_rbtree_t *tree, void *data) { - int cmp = 0; - c_rbnode_t *current = NULL; - c_rbnode_t *parent = NULL; - c_rbnode_t *x = NULL; - - if (tree == NULL) { - errno = EINVAL; - return -1; - } - - /* First we do a classic binary tree insert */ - current = tree->root; - parent = NULL; - - while (current != NIL) { - cmp = tree->data_compare(data, current->data); - parent = current; - if (cmp == 0) { - return 1; - } else if (cmp < 0) { - current = current->left; - } else { - current = current->right; - } - } - - x = (c_rbnode_t *) c_malloc(sizeof(c_rbnode_t)); - - x->tree = tree; - x->data = data; - x->parent = parent; - x->left = NIL; - x->right = NIL; - x->color = RED; - - if (parent) { - /* Note that cmp still contains the comparison of data with - * parent->data, from the last pass through the loop above - */ - if (cmp < 0) { - parent->left = x; - } else { - parent->right = x; - } - } else { - tree->root = x; - } - - /* Insert fixup - check red-black properties */ - while (x != tree->root && x->parent->color == RED) { - /* we have a violation */ - if (x->parent == x->parent->parent->left) { - c_rbnode_t *y = NULL; - - y = x->parent->parent->right; - if (y->color == RED) { - x->parent->color = BLACK; - y->color = BLACK; - x->parent->parent->color = RED; - x = x->parent->parent; - } else { - /* uncle is back */ - if (x == x->parent->right) { - /* make x a left child */ - x = x->parent; - _rbtree_subtree_left_rotate(x); - } - x->parent->color = BLACK; - x->parent->parent->color = RED; - _rbtree_subtree_right_rotate(x->parent->parent); - } - } else { - c_rbnode_t *y = NULL; - - y = x->parent->parent->left; - if (y->color == RED) { - x->parent->color = BLACK; - y->color = BLACK; - x->parent->parent->color = RED; - x = x->parent->parent; - } else { - /* uncle is back */ - if (x == x->parent->left) { - x = x->parent; - _rbtree_subtree_right_rotate(x); - } - x->parent->color = BLACK; - x->parent->parent->color = RED; - _rbtree_subtree_left_rotate(x->parent->parent); - } - } - } /* end while */ - tree->root->color = BLACK; - - tree->size++; - - return 0; -} - -int c_rbtree_node_delete(c_rbnode_t *node) { - c_rbtree_t *tree; - c_rbnode_t *y; - c_rbnode_t *x; - - if (node == NULL || node == NIL) { - errno = EINVAL; - return -1; - } - - tree = node->tree; - - if (node->left == NIL || node->right == NIL) { - /* y has a NIL node as a child */ - y = node; - } else { - /* find tree successor with a NIL node as a child */ - y = node; - while(y->left != NIL) { - y = y->left; - } - } - - /* x is y's only child */ - if (y->left != NIL) { - x = y->left; - } else { - x = y->right; - } - - /* remove y from the parent chain */ - x->parent = y->parent; - - if (y->parent) { - if (y == y->parent->left) { - y->parent->left = x; - } else { - y->parent->right = x; - } - } else { - y->tree->root = x; - } - - /* If y is not the node we're deleting, splice it in place of that - * node - * - * The traditional code would call for us to simply copy y->data, but - * that would invalidate the wrong pointer - there might be external - * references to this node, and we must preserve its address. - */ - if (y != node) { - /* Update y */ - y->parent = node->parent; - y->left = node->left; - y->right = node->right; - - /* Update the children and the parent */ - if (y->left != NIL) { - y->left->parent = y; - } - if (y->right != NIL) { - y->right->parent = y; - } - if (y->parent != NULL) { - if (node == y->parent->left) { - y->parent->left = y; - } else { - y->parent->right = y; - } - } else { - y->tree->root = y; - } - } - - if (y->color == BLACK) { - while (x != y->tree->root && x->color == BLACK) { - if (x == x->parent->left) { - c_rbnode_t *w = NULL; - - w = x->parent->right; - - if (w->color == RED) { - w->color = BLACK; - x->parent->color = RED; - _rbtree_subtree_left_rotate(x->parent); - w = x->parent->right; - } - - if (w->left->color == BLACK && w->right->color == BLACK) { - w->color = RED; - x = x->parent; - } else { - if (w->right->color == BLACK) { - w->left->color = BLACK; - w->color = RED; - _rbtree_subtree_right_rotate(w); - w = x->parent->right; - } - w->color = x->parent->color; - x->parent->color = BLACK; - w->right->color = BLACK; - _rbtree_subtree_left_rotate(x->parent); - x = y->tree->root; - } - } else { - c_rbnode_t *w = NULL; - - w = x->parent->left; - if (w->color == RED) { - w->color = BLACK; - x->parent->color = RED; - _rbtree_subtree_right_rotate(x->parent); - w = x->parent->left; - } - - if (w->right->color == BLACK && w->left->color == BLACK) { - w->color = RED; - x = x->parent; - } else { - if (w->left->color == BLACK) { - w->right->color = BLACK; - w->color = RED; - _rbtree_subtree_left_rotate(w); - w = x->parent->left; - } - w->color = x->parent->color; - x->parent->color = BLACK; - w->left->color = BLACK; - _rbtree_subtree_right_rotate(x->parent); - x = y->tree->root; - } - } - } - x->color = BLACK; - } /* end if: y->color == BLACK */ - - /* node has now been spliced out of the tree */ - SAFE_FREE(y); - tree->size--; - - return 0; -} - -static int _rbtree_subtree_check_black_height(c_rbnode_t *node) { - int left = 0; - int right = 0; - - assert(node); - - if (node == NIL) { - return 0; - } - - left = _rbtree_subtree_check_black_height(node->left); - right = _rbtree_subtree_check_black_height(node->right); - if (left != right) { - return -1; - } - - return left + (node->color == BLACK); -} - -int c_rbtree_check_sanity(c_rbtree_t *tree) { - c_rbnode_t *node = NULL; - c_rbnode_t *prev = NULL; - c_rbnode_t *next = NULL; - c_rbnode_t *tail = NULL; - size_t size = 0; - - if (tree == NULL) { - errno = EINVAL; - return -1; - } - - if (! tree->key_compare || ! tree->data_compare) { - errno = EINVAL; - return -2; - } - - /* Iterate the tree */ - tail = c_rbtree_tail(tree); - for (node = c_rbtree_head(tree); node; node = next) { - if (node->tree != tree) { - return -4; - } - - /* We should never see a nil while iterating */ - if (node == NIL) { - return -5; - } - - /* node == tree-root iff node->parent == NIL */ - if (node == tree->root) { - if (node->parent != NULL) { - return -6; - } - } else { - if (node->parent == NULL) { - return -7; - } - } - - /* Invertability of the iterate functions */ - if (prev != c_rbtree_node_prev(node)) { - return -8; - } - - /* Check the iteration sequence */ - if (prev) { - if (tree->data_compare(prev->data, node->data) > 0) { - return -9; - } - - /* And the other way around, to make sure data_compare is stable */ - if (tree->data_compare(node->data, prev->data) < 0) { - return -10; - } - } - - /* The binary tree property */ - if (node->left != NIL) { - if (tree->data_compare(node->left->data, node->data) > 0) { - return -11; - } - - if (tree->data_compare(node->data, node->left->data) < 0) { - return -11; - } - } - - if (node->right != NIL) { - if (tree->data_compare(node->data, node->right->data) > 0) { - return -12; - } - - if (tree->data_compare(node->right->data, node->data) < 0) { - return -13; - } - } - - /* Red-black tree property 3: red nodes have black children */ - if (node->color == RED) { - if (node->left->color == RED) { - return -14; - } - if (node->right->color == RED) { - return -15; - } - } - - /* next == NULL if node == tail */ - next = c_rbtree_node_next(node); - if (next) { - if (node == tail) { - return -16; - } - } else { - if (node != tail) { - return -17; - } - } - - prev = node; - size++; - } /* end for loop */ - - if (size != tree->size) { - return -18; - } - - if (_rbtree_subtree_check_black_height(tree->root) < 0) { - return -19; - } - - return 0; -} diff --git a/src/csync/std/c_rbtree.h b/src/csync/std/c_rbtree.h deleted file mode 100644 index 69b4c0d73..000000000 --- a/src/csync/std/c_rbtree.h +++ /dev/null @@ -1,318 +0,0 @@ -/* - * cynapses libc functions - * - * Copyright (c) 2003-2004 by Andrew Suffield - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file c_rbtree.h - * - * @brief Interface of the cynapses libc red-black tree implementation - * - * A red-black tree is a type of self-balancing binary search tree. It is - * complex, but has good worst-case running time for its operations and is - * efficient in practice: it can search, insert, and delete in O(log n) - * time, where n is the number of elements in the tree. - * - * In red-black trees, the leaf nodes are not relevant and do not contain - * data. Therefore we use a sentinal node to save memory. All references - * from internal nodes to leaf nodes instead point to the sentinel node. - * - * In a red-black tree each node has a color attribute, the value of which - * is either red or black. In addition to the ordinary requirements imposed - * on binary search trees, the following additional requirements of any - * valid red-black tree apply: - * - * 1. A node is either red or black. - * 2. The root is black. - * 3. All leaves are black, even when the parent is black - * (The leaves are the null children.) - * 4. Both children of every red node are black. - * 5. Every simple path from a node to a descendant leaf contains the same - * number of black nodes, either counting or not counting the null black - * nodes. (Counting or not counting the null black nodes does not affect - * the structure as long as the choice is used consistently.). - * - * These constraints enforce a critical property of red-black trees: that the - * longest path from the root to a leaf is no more than twice as long as the - * shortest path from the root to a leaf in that tree. The result is that the - * tree is roughly balanced. Since operations such as inserting, deleting, and - * finding values requires worst-case time proportional to the height of the - * tree, this theoretical upper bound on the height allows red-black trees to - * be efficient in the worst-case, unlike ordinary binary search trees. - * - * http://en.wikipedia.org/wiki/Red-black_tree - * - * @defgroup cynRBTreeInternals cynapses libc red-black tree functions - * @ingroup cynLibraryAPI - * - * @{ - */ -#ifndef _C_RBTREE_H -#define _C_RBTREE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Forward declarations */ -struct c_rbtree_s; typedef struct c_rbtree_s c_rbtree_t; -struct c_rbnode_s; typedef struct c_rbnode_s c_rbnode_t; - -/** - * Define the two colors for the red-black tree - */ -enum xrbcolor_e { BLACK = 0, RED }; typedef enum xrbcolor_e xrbcolor_t; - -/** - * @brief Callback function to compare a key with the data from a - * red-black tree node. - * - * @param key key as a generic pointer - * @param data data as a generic pointer - * - * @return It returns an integer less than, equal to, or greater than zero - * depending on the key or data you use. The function is similar - * to strcmp(). - */ -typedef int c_rbtree_compare_func(const void *key, const void *data); - -/** - * @brief Visit function for the c_rbtree_walk() function. - * - * This function will be called by c_rbtree_walk() for every node. It is up to - * the developer what the function does. The fist parameter is a node object - * the second can be of any kind. - * - * @param obj The node data that will be passed by c_rbtree_walk(). - * @param data Generic data pointer. - * - * @return 0 on success, < 0 on error. You should set errno. - * - */ -typedef int c_rbtree_visit_func(void *, void *); - -/** - * Structure that represents a red-black tree - */ -struct c_rbtree_s { - c_rbnode_t *root; - c_rbtree_compare_func *key_compare; - c_rbtree_compare_func *data_compare; - size_t size; -}; - -/** - * Structure that represents a node of a red-black tree - */ -struct c_rbnode_s { - c_rbtree_t *tree; - c_rbnode_t *left; - c_rbnode_t *right; - c_rbnode_t *parent; - void *data; - xrbcolor_t color; -}; - -/** - * @brief Create the red-black tree - * - * @param rbtree The pointer to assign the allocated memory. - * - * @param key_compare Callback function to compare a key with the data - * inside a reb-black tree node. - * - * @param data_compare Callback function to compare a key as data with thee - * data inside a red-black tree node. - */ -void c_rbtree_create(c_rbtree_t **rbtree, c_rbtree_compare_func *key_compare, c_rbtree_compare_func *data_compare); - -/** - * @brief Duplicate a red-black tree. - * - * @param tree Tree to duplicate. - * - * @return Pointer to a new allocated duplicated rbtree. NULL if an error - * occurred. - */ -c_rbtree_t *c_rbtree_dup(const c_rbtree_t *tree); - -/** - * @brief Free the structure of a red-black tree. - * - * You should call c_rbtree_destroy() before you call this function. - * - * @param tree The tree to free. - * - * @return 0 on success, less than 0 if an error occurred. - */ -int c_rbtree_free(c_rbtree_t *tree); - -/** - * @brief Destroy the content and the nodes of an red-black tree. - * - * This is far from the most efficient way to walk a tree, but it is - * the *safest* way to destroy a tree - the destructor can do almost - * anything (as long as it does not create an infinite loop) to the - * tree structure without risk. - * - * If for some strange reason you need a faster destructor (think - * twice - speed and memory deallocation don't mix well) then consider - * stashing an llist of dataects and destroying that instead, and just - * using c_rbtree_free() on your tree. - * - * @param T The tree to destroy. - * @param DESTRUCTOR The destructor to call on a node to destroy. - */ -#define c_rbtree_destroy(T, DESTRUCTOR) \ - do { \ - if (T) { \ - c_rbnode_t *_c_rbtree_temp; \ - while ((_c_rbtree_temp = c_rbtree_head(T))) { \ - (DESTRUCTOR)(_c_rbtree_temp->data); \ - if (_c_rbtree_temp == c_rbtree_head(T)) { \ - c_rbtree_node_delete(_c_rbtree_temp); \ - } \ - } \ - } \ - SAFE_FREE(T); \ - } while (0); - -/** - * @brief Inserts a node into a red black tree. - * - * @param tree The red black tree to insert the node. - * @param data The data to insert into the tree. - * - * @return 0 on success, 1 if a duplicate has been found and < 0 if an error - * occurred with errno set. - * EINVAL if a null pointer has been passed as the tree. - * ENOMEM if there is no memory left. - */ -int c_rbtree_insert(c_rbtree_t *tree, void *data); - -/** - * @brief Find a node in a red-black tree. - * - * c_rbtree_find() is searching for the given key in a red-black tree and - * returns the node if the key has been found. - * - * @param tree The tree to search. - * @param key The key to search for. - * - * @return If the key was found the node will be returned. On error NULL - * will be returned. - */ -c_rbnode_t *c_rbtree_find(c_rbtree_t *tree, const void *key); - -/** - * @brief Get the head of the red-black tree. - * - * @param tree The tree to get the head for. - * - * @return The head node. NULL if an error occurred. - */ -c_rbnode_t *c_rbtree_head(c_rbtree_t *tree); - -/** - * @brief Get the tail of the red-black tree. - * - * @param tree The tree to get the tail for. - * - * @return The tail node. NULL if an error occurred. - */ -c_rbnode_t *c_rbtree_tail(c_rbtree_t *tree); - -/** - * @brief Get the size of the red-black tree. - * - * @param T The tree to get the size from. - * - * @return The size of the red-black tree. - */ -#define c_rbtree_size(T) (T) == NULL ? 0 : ((T)->size) - -/** - * @brief Walk over a red-black tree. - * - * Walk over a red-black tree calling a visitor function for each node found. - * - * @param tree Tree to walk. - * @param data Data which should be passed to the visitor function. - * @param visitor Visitor function. This will be called for each node passed. - * - * @return 0 on sucess, less than 0 if an error occurred. - */ -int c_rbtree_walk(c_rbtree_t *tree, void *data, c_rbtree_visit_func *visitor); - -/** - * @brief Delete a node in a red-black tree. - * - * @param node Node which should be deleted. - * - * @return 0 on success, -1 if an error occurred. - */ -int c_rbtree_node_delete(c_rbnode_t *node); - -/** - * @brief Get the next node. - * - * @param node The node of which you want the next node. - * - * @return The next node, NULL if an error occurred. - */ -c_rbnode_t *c_rbtree_node_next(c_rbnode_t *node); - -/** - * @brief Get the previous node. - * - * @param node The node of which you want the previous node. - * - * @return The previous node, NULL if an error occurred. - */ -c_rbnode_t *c_rbtree_node_prev(c_rbnode_t *node); - -/** - * @brief Get the data of a node. - * - * @param N The node to get the data from. - * - * @return The data, NULL if an error occurred. - */ -#define c_rbtree_node_data(N) ((N) ? ((N)->data) : NULL) - -/** - * @brief Perform a sanity check for a red-black tree. - * - * This is mostly for testing purposes. - * - * @param tree The tree to check. - * - * @return 0 on success, less than 0 if an error occurred. - */ -int c_rbtree_check_sanity(c_rbtree_t *tree); - -/** - * }@ - */ - -#ifdef __cplusplus -} -#endif - -#endif /* _C_RBTREE_H */ diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index db846e691..9ebcd7fa8 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -59,7 +59,7 @@ static bool findPathInList(const QStringList &list, const QString &path) return pathSlash.startsWith(*it); } -bool DiscoveryJob::isInSelectiveSyncBlackList(const char *path) const +bool DiscoveryJob::isInSelectiveSyncBlackList(const QByteArray &path) const { if (_selectiveSyncBlackList.isEmpty()) { // If there is no black list, everything is allowed @@ -73,24 +73,23 @@ bool DiscoveryJob::isInSelectiveSyncBlackList(const char *path) const // Also try to adjust the path if there was renames if (csync_rename_count(_csync_ctx)) { - QScopedPointer adjusted( - csync_rename_adjust_path_source(_csync_ctx, path)); - if (strcmp(adjusted.data(), path) != 0) { - return findPathInList(_selectiveSyncBlackList, QString::fromUtf8(adjusted.data())); + QByteArray adjusted = csync_rename_adjust_path_source(_csync_ctx, path); + if (adjusted != path) { + return findPathInList(_selectiveSyncBlackList, QString::fromUtf8(adjusted)); } } return false; } -int DiscoveryJob::isInSelectiveSyncBlackListCallback(void *data, const char *path) +int DiscoveryJob::isInSelectiveSyncBlackListCallback(void *data, const QByteArray &path) { return static_cast(data)->isInSelectiveSyncBlackList(path); } -bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, const char *remotePerm) +bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, const QByteArray &remotePerm) { - if (_syncOptions._confirmExternalStorage && std::strchr(remotePerm, 'M')) { + if (_syncOptions._confirmExternalStorage && remotePerm.contains('M')) { // 'M' in the permission means external storage. /* Note: DiscoverySingleDirectoryJob::directoryListingIteratedSlot make sure that only the @@ -145,7 +144,7 @@ bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, const char * } } -int DiscoveryJob::checkSelectiveSyncNewFolderCallback(void *data, const char *path, const char *remotePerm) +int DiscoveryJob::checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, const QByteArray &remotePerm) { return static_cast(data)->checkSelectiveSyncNewFolder(QString::fromUtf8(path), remotePerm); } diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index 4a09c3462..c3d44405b 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -210,10 +210,10 @@ class DiscoveryJob : public QObject * return true if the given path should be ignored, * false if the path should be synced */ - bool isInSelectiveSyncBlackList(const char *path) const; - static int isInSelectiveSyncBlackListCallback(void *, const char *); - bool checkSelectiveSyncNewFolder(const QString &path, const char *remotePerm); - static int checkSelectiveSyncNewFolderCallback(void *data, const char *path, const char *remotePerm); + bool isInSelectiveSyncBlackList(const QByteArray &path) const; + static int isInSelectiveSyncBlackListCallback(void *, const QByteArray &); + bool checkSelectiveSyncNewFolder(const QString &path, const QByteArray &remotePerm); + static int checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, const QByteArray &remotePerm); // Just for progress static void update_job_update_callback(bool local, diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index a6599751e..ebb745f70 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -128,9 +128,6 @@ QString SyncEngine::csyncErrorToString(CSYNC_STATUS err) case CSYNC_STATUS_NO_MODULE: errStr = tr("

The %1 plugin for csync could not be loaded.
Please verify the installation!

").arg(qApp->applicationName()); break; - case CSYNC_STATUS_TREE_ERROR: - errStr = tr("CSync got an error while processing internal trees."); - break; case CSYNC_STATUS_PARAM_ERROR: errStr = tr("CSync fatal parameter error."); break; @@ -347,7 +344,7 @@ int SyncEngine::treewalkRemote(csync_file_stat_t *file, csync_file_stat_t *other * Called on each entry in the local and remote trees by * csync_walk_local_tree()/csync_walk_remote_tree(). * - * It merges the two csync rbtrees into a single map of SyncFileItems. + * It merges the two csync file trees into a single map of SyncFileItems. * * See doc/dev/sync-algorithm.md for an overview. */ @@ -359,7 +356,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, QTextCodec::ConverterState utf8State; static QTextCodec *codec = QTextCodec::codecForName("UTF-8"); ASSERT(codec); - QString fileUtf8 = codec->toUnicode(file->path, qstrlen(file->path), &utf8State); + QString fileUtf8 = codec->toUnicode(file->path, file->path.size(), &utf8State); QString renameTarget; QString key = fileUtf8; @@ -368,7 +365,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, qCWarning(lcEngine) << "File ignored because of invalid utf-8 sequence: " << file->path; instruction = CSYNC_INSTRUCTION_IGNORE; } else { - renameTarget = codec->toUnicode(file->rename_path, qstrlen(file->rename_path), &utf8State); + renameTarget = codec->toUnicode(file->rename_path, file->rename_path.size(), &utf8State); if (utf8State.invalidChars > 0 || utf8State.remainingChars > 0) { qCWarning(lcEngine) << "File ignored because of invalid utf-8 sequence in the rename_path: " << file->path << file->rename_path; instruction = CSYNC_INSTRUCTION_IGNORE; @@ -937,7 +934,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) _backInTimeFiles = 0; bool walkOk = true; _remotePerms.clear(); - _remotePerms.reserve(c_rbtree_size(_csync_ctx->remote.tree)); + _remotePerms.reserve(_csync_ctx->remote.files.size()); _seenFiles.clear(); _temporarilyUnavailablePaths.clear(); _renamedFolders.clear(); diff --git a/test/csync/CMakeLists.txt b/test/csync/CMakeLists.txt index a735f8a0b..237c52e27 100644 --- a/test/csync/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -23,7 +23,6 @@ set(TEST_TARGET_LIBRARIES ${TORTURE_LIBRARY}) add_cmocka_test(check_std_c_alloc std_tests/check_std_c_alloc.c ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_std_c_jhash std_tests/check_std_c_jhash.c ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_std_c_path std_tests/check_std_c_path.c ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_std_c_rbtree std_tests/check_std_c_rbtree.c ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_std_c_str std_tests/check_std_c_str.c ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_std_c_time std_tests/check_std_c_time.c ${TEST_TARGET_LIBRARIES}) diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp index d507c7108..208e2c524 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -146,19 +146,18 @@ static void check_csync_statedb_drop_tables(void **state) static void check_csync_statedb_insert_metadata(void **state) { CSYNC *csync = (CSYNC*)*state; - csync_file_stat_t *st; + std::unique_ptr st; int i, rc = 0; // rc = csync_statedb_create_tables(csync->statedb.db); assert_int_equal(rc, 0); for (i = 0; i < 100; i++) { - st = new csync_file_stat_t; + st.reset(new csync_file_stat_t); st->path = QString("file_%1").arg(i).toUtf8(); st->phash = i; - rc = c_rbtree_insert(csync->local.tree, (void *) st); - assert_int_equal(rc, 0); + csync->local.files[st->path] = std::move(st); } // rc = csync_statedb_insert_metadata(csync, csync->statedb.db); @@ -168,15 +167,15 @@ static void check_csync_statedb_insert_metadata(void **state) static void check_csync_statedb_write(void **state) { CSYNC *csync = (CSYNC*)*state; - csync_file_stat_t *st; - int i, rc; + std::unique_ptr st; + int i, rc = 0; for (i = 0; i < 100; i++) { - st = new csync_file_stat_t; + st.reset(new csync_file_stat_t); st->path = QString("file_%1").arg(i).toUtf8(); st->phash = i; - rc = c_rbtree_insert(csync->local.tree, (void *) st); + csync->local.files[st->path] = std::move(st); assert_int_equal(rc, 0); } diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index f8329465f..4fae4e1a7 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -227,7 +227,7 @@ static void check_csync_detect_update(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + st = csync->local.files.begin()->second.get(); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); /* create a statedb */ @@ -250,7 +250,7 @@ static void check_csync_detect_update_db_none(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + st = csync->local.files.begin()->second.get(); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); @@ -271,7 +271,7 @@ static void check_csync_detect_update_db_eval(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + st = csync->local.files.begin()->second.get(); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); /* create a statedb */ @@ -296,7 +296,7 @@ static void check_csync_detect_update_db_rename(void **state) /* the instruction should be set to rename */ /* * temporarily broken. - st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + st = csync->local.files.begin()->second.get(); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_RENAME); st->instruction = CSYNC_INSTRUCTION_UPDATED; @@ -318,7 +318,7 @@ static void check_csync_detect_update_db_new(void **state) assert_int_equal(rc, 0); /* the instruction should be set to new */ - st = (csync_file_stat_t*)c_rbtree_node_data(csync->local.tree->root); + st = csync->local.files.begin()->second.get(); assert_int_equal(st->instruction, CSYNC_INSTRUCTION_NEW); diff --git a/test/csync/std_tests/check_std_c_rbtree.c b/test/csync/std_tests/check_std_c_rbtree.c deleted file mode 100644 index a493ae3c9..000000000 --- a/test/csync/std_tests/check_std_c_rbtree.c +++ /dev/null @@ -1,366 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include -#include - -#include "torture.h" - -#include "std/c_alloc.h" -#include "std/c_rbtree.h" - -typedef struct test_s { - int key; - int number; -} test_t; - -static int data_cmp(const void *key, const void *data) { - test_t *a, *b; - - a = (test_t *) key; - b = (test_t *) data; - - if (a->key < b->key) { - return -1; - } else if (a->key > b->key) { - return 1; - } - - return 0; -} - -static int key_cmp(const void *key, const void *data) { - int a; - test_t *b; - - a = POINTER_TO_INT(key); - b = (test_t *) data; - - if (a < b->key) { - return -1; - } else if (a > b->key) { - return 1; - } - - return 0; -} - -static int visitor(void *obj, void *data) { - test_t *a; - test_t *b; - - a = (test_t *) obj; - b = (test_t *) data; - - if (a->key == b->key) { - a->number = 42; - } - - return 0; -} - -static void destructor(void *data) { - test_t *freedata = NULL; - - freedata = (test_t *) data; - SAFE_FREE(freedata); -} - -static int setup(void **state) { - c_rbtree_t *tree = NULL; - - c_rbtree_create(&tree, key_cmp, data_cmp); - - *state = tree; - return 0; -} - -static int setup_complete_tree(void **state) { - c_rbtree_t *tree = NULL; - int i = 0; - int rc; - - c_rbtree_create(&tree, key_cmp, data_cmp); - - for (i = 0; i < 100; i++) { - test_t *testdata = NULL; - - testdata = c_malloc(sizeof(test_t)); - assert_non_null(testdata); - - testdata->key = i; - - rc = c_rbtree_insert(tree, (void *) testdata); - assert_int_equal(rc, 0); - } - - *state = tree; - return 0; -} - -static int teardown(void **state) { - c_rbtree_t *tree = *state; - - c_rbtree_destroy(tree, destructor); - c_rbtree_free(tree); - - *state = NULL; - return 0; -} - -static void check_c_rbtree_create_free(void **state) -{ - c_rbtree_t *tree = NULL; - int rc; - - (void) state; /* unused */ - - c_rbtree_create(&tree, key_cmp, data_cmp); - assert_int_equal(tree->size, 0); - - rc = c_rbtree_free(tree); - assert_int_equal(rc, 0); -} - -static void check_c_rbtree_free_null(void **state) -{ - int rc; - - (void) state; /* unused */ - - rc = c_rbtree_free(NULL); - assert_int_equal(rc, -1); -} - -static void check_c_rbtree_insert_delete(void **state) -{ - c_rbtree_t *tree = NULL; - c_rbnode_t *node = NULL; - test_t *testdata = NULL; - int rc; - - (void) state; /* unused */ - - c_rbtree_create(&tree, key_cmp, data_cmp); - - testdata = malloc(sizeof(test_t)); - testdata->key = 42; - - rc = c_rbtree_insert(tree, (void *) testdata); - assert_int_equal(rc, 0); - - node = c_rbtree_head(tree); - assert_non_null(node); - - testdata = c_rbtree_node_data(node); - SAFE_FREE(testdata); - rc = c_rbtree_node_delete(node); - assert_int_equal(rc, 0); - - c_rbtree_free(tree); -} - -static void check_c_rbtree_insert_random(void **state) -{ - c_rbtree_t *tree = *state; - int i = 0, rc; - - for (i = 0; i < 100; i++) { - test_t *testdata = NULL; - - testdata = malloc(sizeof(test_t)); - assert_non_null(testdata); - - testdata->key = i; - - rc = c_rbtree_insert(tree, testdata); - assert_int_equal(rc, 0); - - } - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); -} - -static void check_c_rbtree_insert_duplicate(void **state) -{ - c_rbtree_t *tree = *state; - test_t *testdata; - int rc; - - testdata = malloc(sizeof(test_t)); - assert_non_null(testdata); - - testdata->key = 42; - - rc = c_rbtree_insert(tree, (void *) testdata); - assert_int_equal(rc, 0); - - /* add again */ - testdata = malloc(sizeof(test_t)); - assert_non_null(testdata); - - testdata->key = 42; - - /* check for duplicate */ - rc = c_rbtree_insert(tree, (void *) testdata); - assert_int_equal(rc, 1); - - free(testdata); -} - -static void check_c_rbtree_find(void **state) -{ - c_rbtree_t *tree = *state; - int rc, i = 42; - c_rbnode_t *node; - test_t *testdata; - - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); - - /* find the node with the key 42 */ - node = c_rbtree_find(tree, (void *) &i); - assert_non_null(node); - - testdata = (test_t *) c_rbtree_node_data(node); - assert_int_equal(testdata->key, 42); -} - -static void check_c_rbtree_delete(void **state) -{ - c_rbtree_t *tree = *state; - int rc, i = 42; - c_rbnode_t *node = NULL; - test_t *freedata = NULL; - - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); - - node = c_rbtree_find(tree, (void *) &i); - assert_non_null(node); - - freedata = (test_t *) c_rbtree_node_data(node); - free(freedata); - rc = c_rbtree_node_delete(node); - assert_int_equal(rc, 0); - - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); -} - -static void check_c_rbtree_walk(void **state) -{ - c_rbtree_t *tree = *state; - int rc, i = 42; - test_t *testdata; - c_rbnode_t *node; - - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); - - testdata = (test_t *) c_malloc(sizeof(test_t)); - testdata->key = 42; - - rc = c_rbtree_walk(tree, testdata, visitor); - assert_int_equal(rc, 0); - - /* find the node with the key 42 */ - node = c_rbtree_find(tree, (void *) &i); - assert_non_null(node); - free(testdata); - - testdata = (test_t *) c_rbtree_node_data(node); - assert_int_equal(testdata->number, 42); -} - -static void check_c_rbtree_walk_null(void **state) -{ - c_rbtree_t *tree = *state; - int rc, i = 42; - test_t *testdata; - c_rbnode_t *node; - - rc = c_rbtree_check_sanity(tree); - assert_int_equal(rc, 0); - - testdata = (test_t *) malloc(sizeof(test_t)); - testdata->key = 42; - - rc = c_rbtree_walk(NULL, testdata, visitor); - assert_int_equal(rc, -1); - assert_int_equal(errno, EINVAL); - - rc = c_rbtree_walk(tree, NULL, visitor); - assert_int_equal(rc, -1); - assert_int_equal(errno, EINVAL); - - rc = c_rbtree_walk(tree, testdata, NULL); - assert_int_equal(rc, -1); - assert_int_equal(errno, EINVAL); - - /* find the node with the key 42 */ - node = c_rbtree_find(tree, (void *) &i); - assert_non_null(node); - - free(testdata); -} - -static void check_c_rbtree_dup(void **state) -{ - c_rbtree_t *tree = *state; - c_rbtree_t *duptree = NULL; - int rc = -1; - - duptree = c_rbtree_dup(tree); - assert_non_null(duptree); - - rc = c_rbtree_check_sanity(duptree); - assert_int_equal(rc, 0); - - c_rbtree_free(duptree); -} - -#if 0 -static void check_c_rbtree_x) -{ - int rc = -1; - - rc = c_rbtree_check_sanity(tree); - fail_unless(rc == 0, "c_rbtree_check_sanity failed with return code %d", rc); -} -#endif - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test(check_c_rbtree_create_free), - cmocka_unit_test(check_c_rbtree_free_null), - cmocka_unit_test(check_c_rbtree_insert_delete), - cmocka_unit_test_setup_teardown(check_c_rbtree_insert_random, setup, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_insert_duplicate, setup, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_find, setup_complete_tree, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_delete, setup_complete_tree, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_walk, setup_complete_tree, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_walk_null, setup_complete_tree, teardown), - cmocka_unit_test_setup_teardown(check_c_rbtree_dup, setup_complete_tree, teardown), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - From bfacac868309d72fb20cac9b558cbc93c9988663 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 23 Aug 2017 19:30:55 +0200 Subject: [PATCH 060/166] Remove the usage of phash in csync Only store the path since they represent the same thing, and do the phash conversion during DB lookup like done in libsync. We could get rid of everything since we also have an index on the path column, but since it's the primary key this makes the migration non-trivial. --- src/csync/csync.h | 4 +-- src/csync/csync_statedb.cpp | 30 +++++++++---------- src/csync/csync_statedb.h | 2 +- src/csync/csync_update.cpp | 7 ++--- .../csync_tests/check_csync_statedb_query.cpp | 8 ++--- test/testcsyncsqlite.cpp | 7 ++--- 6 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/csync/csync.h b/src/csync/csync.h index 1bda232ff..9eaba2ab4 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -160,7 +160,6 @@ enum csync_ftw_type_e { typedef struct csync_file_stat_s csync_file_stat_t; struct OCSYNC_EXPORT csync_file_stat_s { - uint64_t phash; time_t modtime; int64_t size; uint64_t inode; @@ -189,8 +188,7 @@ struct OCSYNC_EXPORT csync_file_stat_s { enum csync_instructions_e instruction; /* u32 */ csync_file_stat_s() - : phash(0) - , modtime(0) + : modtime(0) , size(0) , inode(0) , type(CSYNC_FTW_TYPE_SKIP) diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index ca5b61537..7f7ed0c29 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -231,7 +231,7 @@ int csync_statedb_close(CSYNC *ctx) { } #define METADATA_QUERY \ - "phash, path, inode, modtime, type, md5, fileid, remotePerm, " \ + "path, inode, modtime, type, md5, fileid, remotePerm, " \ "filesize, ignoredChildrenRemote, " \ "contentchecksumtype.name || ':' || contentChecksum " \ "FROM metadata " \ @@ -251,25 +251,23 @@ static int _csync_file_stat_from_metadata_table( std::unique_ptrphash = sqlite3_column_int64(stmt, 0); - st->path = (char*)sqlite3_column_text(stmt, 1); - st->inode = sqlite3_column_int64(stmt, 2); - st->modtime = strtoul((char*)sqlite3_column_text(stmt, 3), NULL, 10); - st->type = static_cast(sqlite3_column_int(stmt, 4)); - st->etag = (char*)sqlite3_column_text(stmt, 5); - st->file_id = (char*)sqlite3_column_text(stmt, 6); - st->remotePerm = (char*)sqlite3_column_text(stmt, 7); - st->size = sqlite3_column_int64(stmt, 8); - st->has_ignored_files = sqlite3_column_int(stmt, 9); - st->checksumHeader = (char *)sqlite3_column_text(stmt, 10); + st->path = (char*)sqlite3_column_text(stmt, 0); + st->inode = sqlite3_column_int64(stmt, 1); + st->modtime = strtoul((char*)sqlite3_column_text(stmt, 2), NULL, 10); + st->type = static_cast(sqlite3_column_int(stmt, 3)); + st->etag = (char*)sqlite3_column_text(stmt, 4); + st->file_id = (char*)sqlite3_column_text(stmt, 5); + st->remotePerm = (char*)sqlite3_column_text(stmt, 6); + st->size = sqlite3_column_int64(stmt, 7); + st->has_ignored_files = sqlite3_column_int(stmt, 8); + st->checksumHeader = (char *)sqlite3_column_text(stmt, 9); } else { if( rc != SQLITE_DONE ) { CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Query results in %d", rc); @@ -279,8 +277,7 @@ static int _csync_file_stat_from_metadata_table( std::unique_ptr csync_statedb_get_stat_by_hash(CSYNC *ctx, - uint64_t phash) +std::unique_ptr csync_statedb_get_stat_by_path(CSYNC *ctx, const QByteArray &path) { std::unique_ptr st; int rc; @@ -304,6 +301,7 @@ std::unique_ptr csync_statedb_get_stat_by_hash(CSYNC *ctx, return NULL; } + uint64_t phash = c_jhash64((const uint8_t*)path.constData(), path.size(), 0); sqlite3_bind_int64(ctx->statedb.by_hash_stmt, 1, (long long signed int)phash); rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_hash_stmt); diff --git a/src/csync/csync_statedb.h b/src/csync/csync_statedb.h index 8ef2235af..28c1cc823 100644 --- a/src/csync/csync_statedb.h +++ b/src/csync/csync_statedb.h @@ -56,7 +56,7 @@ OCSYNC_EXPORT int csync_statedb_load(CSYNC *ctx, const char *statedb, sqlite3 ** OCSYNC_EXPORT int csync_statedb_close(CSYNC *ctx); -OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_hash(CSYNC *ctx, uint64_t phash); +OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_path(CSYNC *ctx, const QByteArray &path); OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_inode(CSYNC *ctx, uint64_t inode); diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index f63757242..96e13fd86 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -32,7 +32,6 @@ #include #include "c_lib.h" -#include "c_jhash.h" #include "csync_private.h" #include "csync_exclude.h" @@ -172,14 +171,14 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * does not change on rename. */ if (csync_get_statedb_exists(ctx)) { - tmp = csync_statedb_get_stat_by_hash(ctx, fs->phash); + tmp = csync_statedb_get_stat_by_path(ctx, fs->path); if(_last_db_return_error(ctx)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } - if(tmp && tmp->phash == fs->phash ) { /* there is an entry in the database */ + if(tmp && tmp->path == fs->path ) { /* there is an entry in the database */ /* we have an update! */ CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 @@ -594,8 +593,6 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, // "len + 1" to include the slash in-between. dirent->path = dirent->path.mid(strlen(ctx->local.uri) + 1); } - // We calculate the phash using the relative path. - dirent->phash = c_jhash64((const uint8_t*)dirent->path.constData(), dirent->path.size(), 0); previous_fs = ctx->current_fs; bool recurse = dirent->type == CSYNC_FTW_TYPE_DIR; diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp index 208e2c524..7f3988a71 100644 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ b/test/csync/csync_tests/check_csync_statedb_query.cpp @@ -155,7 +155,6 @@ static void check_csync_statedb_insert_metadata(void **state) for (i = 0; i < 100; i++) { st.reset(new csync_file_stat_t); st->path = QString("file_%1").arg(i).toUtf8(); - st->phash = i; csync->local.files[st->path] = std::move(st); } @@ -173,7 +172,6 @@ static void check_csync_statedb_write(void **state) for (i = 0; i < 100; i++) { st.reset(new csync_file_stat_t); st->path = QString("file_%1").arg(i).toUtf8(); - st->phash = i; csync->local.files[st->path] = std::move(st); assert_int_equal(rc, 0); @@ -184,12 +182,12 @@ static void check_csync_statedb_write(void **state) } -static void check_csync_statedb_get_stat_by_hash_not_found(void **state) +static void check_csync_statedb_get_stat_by_path_not_found(void **state) { CSYNC *csync = (CSYNC*)*state; std::unique_ptr tmp; - tmp = csync_statedb_get_stat_by_hash(csync, (uint64_t) 666); + tmp = csync_statedb_get_stat_by_path(csync, "666"); assert_null(tmp.get()); } @@ -210,7 +208,7 @@ int torture_run_tests(void) cmocka_unit_test_setup_teardown(check_csync_statedb_drop_tables, setup, teardown), cmocka_unit_test_setup_teardown(check_csync_statedb_insert_metadata, setup, teardown), cmocka_unit_test_setup_teardown(check_csync_statedb_write, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_get_stat_by_hash_not_found, setup_db, teardown), + cmocka_unit_test_setup_teardown(check_csync_statedb_get_stat_by_path_not_found, setup_db, teardown), cmocka_unit_test_setup_teardown(check_csync_statedb_get_stat_by_inode_not_found, setup_db, teardown), }; diff --git a/test/testcsyncsqlite.cpp b/test/testcsyncsqlite.cpp index 4a470e7b0..093ee43cb 100644 --- a/test/testcsyncsqlite.cpp +++ b/test/testcsyncsqlite.cpp @@ -27,9 +27,8 @@ private slots: } void testFullResult() { - std::unique_ptr st = csync_statedb_get_stat_by_hash( _ctx, 2081025720555645157 ); + std::unique_ptr st = csync_statedb_get_stat_by_path( _ctx, "test2/zu/zuzu" ); QVERIFY(st.get()); - QCOMPARE( QString::number(st->phash), QString::number(2081025720555645157) ); QCOMPARE( QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu") ); QCOMPARE( QString::number(st->inode), QString::number(1709554)); QCOMPARE( QString::number(st->modtime), QString::number(1384415006)); @@ -40,11 +39,11 @@ private slots: } void testByHash() { - std::unique_ptr st = csync_statedb_get_stat_by_hash(_ctx, -7147279406142960289); + std::unique_ptr st = csync_statedb_get_stat_by_path(_ctx, "documents/c1"); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1")); - st = csync_statedb_get_stat_by_hash(_ctx, 5426481156826978940); + st = csync_statedb_get_stat_by_path(_ctx, "documents/c1/c2"); QVERIFY(st.get()); QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1/c2")); } From 3d7bd7583b45a7f3ba7394a4daa58793053b5558 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 24 Aug 2017 16:48:40 +0200 Subject: [PATCH 061/166] Remove SyncEngine::_remotePerms Now that csync is using a more convenient data structure for its file trees, wait a little bit longer before destroying them and fetch the remote permissions from the remote tree there instead. --- src/libsync/syncengine.cpp | 29 ++++++++++++++++------------- src/libsync/syncengine.h | 3 --- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index ebb745f70..a2475a243 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -412,8 +412,6 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, } if (!file->remotePerm.isEmpty()) { item->_remotePerm = file->remotePerm; - if (remote) - _remotePerms[item->_file] = item->_remotePerm; } /* The flag "serverHasIgnoredFiles" is true if item in question is a directory @@ -933,8 +931,6 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) _hasForwardInTimeFiles = false; _backInTimeFiles = 0; bool walkOk = true; - _remotePerms.clear(); - _remotePerms.reserve(_csync_ctx->remote.files.size()); _seenFiles.clear(); _temporarilyUnavailablePaths.clear(); _renamedFolders.clear(); @@ -947,13 +943,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) qCWarning(lcEngine) << "Error in remote treewalk."; } - if (!_csync_ctx->remote.root_perms.isEmpty()) { - _remotePerms[QLatin1String("")] = _csync_ctx->remote.root_perms; - qCInfo(lcEngine) << "Permissions of the root folder: " << _remotePerms[QLatin1String("")]; - } - - // Re-init the csync context to free memory - _csync_ctx->reinitialize(); + qCInfo(lcEngine) << "Permissions of the root folder: " << _csync_ctx->remote.root_perms; // The map was used for merging trees, convert it to a list: SyncFileItemVector syncItems = _syncItemMap.values().toVector(); @@ -1016,6 +1006,9 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) // make sure everything is allowed checkForPermission(syncItems); + // Re-init the csync context to free memory + _csync_ctx->reinitialize(); + // To announce the beginning of the sync emit aboutToPropagate(syncItems); @@ -1150,7 +1143,6 @@ void SyncEngine::finalize(bool success) // Delete the propagator only after emitting the signal. _propagator.clear(); - _remotePerms.clear(); _seenFiles.clear(); _temporarilyUnavailablePaths.clear(); _renamedFolders.clear(); @@ -1460,7 +1452,18 @@ QByteArray SyncEngine::getPermissions(const QString &file) const return rx.cap(1).toLatin1(); } } - return _remotePerms.value(file); + + // Fetch from the csync context while we still have it. + ASSERT(_csync_ctx->status != CSYNC_STATUS_INIT); + + if (file == QLatin1String("")) + return _csync_ctx->remote.root_perms; + + auto it = _csync_ctx->remote.files.find(file.toUtf8()); + if (it != _csync_ctx->remote.files.end()) { + return it->second->remotePerm; + } + return QByteArray(); } void SyncEngine::restoreOldFiles(SyncFileItemVector &syncItems) diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index 30de1f631..3bc6da984 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -259,9 +259,6 @@ private: int _downloadLimit; SyncOptions _syncOptions; - // hash containing the permissions on the remote directory - QHash _remotePerms; - /// Hook for computing checksums from csync_update CSyncChecksumHook _checksum_hook; From 0e97770c47e6000f6ef11251c81e48a9879d7760 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 24 Aug 2017 17:07:22 +0200 Subject: [PATCH 062/166] Remove SyncFileItem::log This remove the remaining "other" fields of the sync log to save a bit of memory. other_etag and other_fileId don't give much information to the users and other_instruction will always be INST_NONE anyway. other_modtime and other_size are kept since they are sometimes used. They were renamed to have a bit more meaningful name. SyncEngine::checkPermissions will now fetch its information from the csync trees since they are now preserved until right after this point. Fixes #3213 --- src/gui/syncrunfilelog.cpp | 10 +++++----- src/libsync/propagatedownload.cpp | 8 ++++---- src/libsync/syncengine.cpp | 22 ++++++++++++---------- src/libsync/syncfileitem.h | 15 ++++++--------- test/testsyncengine.cpp | 12 ++++++------ 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/gui/syncrunfilelog.cpp b/src/gui/syncrunfilelog.cpp index 79099cd66..51396cbb0 100644 --- a/src/gui/syncrunfilelog.cpp +++ b/src/gui/syncrunfilelog.cpp @@ -161,11 +161,11 @@ void SyncRunFileLog::logItem(const SyncFileItem &item) _out << item._status << L; _out << item._errorString << L; _out << QString::number(item._httpErrorCode) << L; - _out << QString::number(item.log._other_size) << L; - _out << QString::number(item.log._other_modtime) << L; - _out << item.log._other_etag << L; - _out << item.log._other_fileId << L; - _out << instructionToStr(item.log._other_instruction) << L; + _out << QString::number(item._previousSize) << L; + _out << QString::number(item._previousModtime) << L; + _out /* << other etag (removed) */ << L; + _out /* << other fileId (removed) */ << L; + _out /* << other instruction (removed) */ << L; _out << endl; } diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index e98278e0c..0168713f4 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -350,8 +350,8 @@ void PropagateDownloadFile::start() // compare the remote checksum to the local one. // Maybe it's not a real conflict and no download is necessary! if (_item->_instruction == CSYNC_INSTRUCTION_CONFLICT - && _item->_size == _item->log._other_size - && _item->_modtime == _item->log._other_modtime + && _item->_size == _item->_previousSize + && _item->_modtime == _item->_previousModtime && !_item->_checksumHeader.isEmpty()) { qCDebug(lcPropagateDownload) << _item->_file << "may not need download, computing checksum"; auto computeChecksum = new ComputeChecksum(this); @@ -813,8 +813,8 @@ void PropagateDownloadFile::downloadFinished() // phase by comparing size and mtime to the previous values. This // is necessary to avoid overwriting user changes that happened between // the discovery phase and now. - const qint64 expectedSize = _item->log._other_size; - const time_t expectedMtime = _item->log._other_modtime; + const qint64 expectedSize = _item->_previousSize; + const time_t expectedMtime = _item->_previousModtime; if (!FileSystem::verifyFileUnchanged(fn, expectedSize, expectedMtime)) { propagator()->_anotherSyncNeeded = true; done(SyncFileItem::SoftError, tr("File has changed since discovery")); diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index a2475a243..38353f9eb 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -667,11 +667,8 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, _needsUpdate = true; if (other) { - item->log._other_etag = other->etag; - item->log._other_fileId = other->file_id; - item->log._other_instruction = other->instruction; - item->log._other_modtime = other->modtime; - item->log._other_size = other->size; + item->_previousModtime = other->modtime; + item->_previousSize = other->size; } _syncItemMap.insert(key, item); @@ -1293,11 +1290,16 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_instruction = CSYNC_INSTRUCTION_CONFLICT; (*it)->_direction = SyncFileItem::Down; (*it)->_isRestoration = true; - // take the things to write to the db from the "other" node (i.e: info from server) - (*it)->_modtime = (*it)->log._other_modtime; - (*it)->_size = (*it)->log._other_size; - (*it)->_fileId = (*it)->log._other_fileId; - (*it)->_etag = (*it)->log._other_etag; + // Take the things to write to the db from the "other" node (i.e: info from server). + // Do a lookup into the csync remote tree to get the metadata we need to restore. + ASSERT(_csync_ctx->status != CSYNC_STATUS_INIT); + auto csyncIt = _csync_ctx->remote.files.find((*it)->_file.toUtf8()); + if (csyncIt != _csync_ctx->remote.files.end()) { + (*it)->_modtime = csyncIt->second->modtime; + (*it)->_size = csyncIt->second->size; + (*it)->_fileId = csyncIt->second->file_id; + (*it)->_etag = csyncIt->second->etag; + } (*it)->_errorString = tr("Not allowed to upload this file because it is read-only on the server, restoring"); continue; } diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index 45660f83f..9ea4e4d45 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -101,6 +101,8 @@ public: , _modtime(0) , _size(0) , _inode(0) + , _previousSize(0) + , _previousModtime(0) { } @@ -217,17 +219,12 @@ public: // - for conflicts (remote checksum) (what about eval_rename/new reconcile?) QByteArray _checksumHeader; + // The size and modtime of the file getting overwritten (on the disk for downloads, on the server for uploads). + quint64 _previousSize; + time_t _previousModtime; + QString _directDownloadUrl; QString _directDownloadCookies; - - struct - { - quint64 _other_size; - time_t _other_modtime; - QByteArray _other_etag; - QByteArray _other_fileId; - enum csync_instructions_e _other_instruction BITFIELD(16); - } log; }; typedef QSharedPointer SyncFileItemPtr; diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 716bc5329..4baa43a13 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -441,8 +441,8 @@ private slots: QCOMPARE(a1->_size, quint64(5)); QCOMPARE(Utility::qDateTimeFromTime_t(a1->_modtime), changedMtime); - QCOMPARE(a1->log._other_size, quint64(4)); - QCOMPARE(Utility::qDateTimeFromTime_t(a1->log._other_modtime), initialMtime); + QCOMPARE(a1->_previousSize, quint64(4)); + QCOMPARE(Utility::qDateTimeFromTime_t(a1->_previousModtime), initialMtime); // b2: should have remote size and modtime QVERIFY(b1); @@ -450,8 +450,8 @@ private slots: QCOMPARE(b1->_direction, SyncFileItem::Down); QCOMPARE(b1->_size, quint64(17)); QCOMPARE(Utility::qDateTimeFromTime_t(b1->_modtime), changedMtime); - QCOMPARE(b1->log._other_size, quint64(16)); - QCOMPARE(Utility::qDateTimeFromTime_t(b1->log._other_modtime), initialMtime); + QCOMPARE(b1->_previousSize, quint64(16)); + QCOMPARE(Utility::qDateTimeFromTime_t(b1->_previousModtime), initialMtime); // c1: conflicts are downloads, so remote size and modtime QVERIFY(c1); @@ -459,8 +459,8 @@ private slots: QCOMPARE(c1->_direction, SyncFileItem::None); QCOMPARE(c1->_size, quint64(25)); QCOMPARE(Utility::qDateTimeFromTime_t(c1->_modtime), changedMtime2); - QCOMPARE(c1->log._other_size, quint64(26)); - QCOMPARE(Utility::qDateTimeFromTime_t(c1->log._other_modtime), changedMtime); + QCOMPARE(c1->_previousSize, quint64(26)); + QCOMPARE(Utility::qDateTimeFromTime_t(c1->_previousModtime), changedMtime); }); QVERIFY(fakeFolder.syncOnce()); From a8ea7b08587b058589c11cd869b0bcc6f44c9b7d Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 24 Aug 2017 17:31:46 +0200 Subject: [PATCH 063/166] Remove SyncFileItem::_isDirectory It's always equivalent to _type == SyncFileItem::Directory. --- src/gui/folder.cpp | 4 ++-- src/libsync/owncloudpropagator.cpp | 8 ++++---- src/libsync/progressdispatcher.h | 2 +- src/libsync/propagateremotedelete.cpp | 2 +- src/libsync/propagateremotedelete.h | 2 +- src/libsync/propagateremotemove.cpp | 2 +- src/libsync/propagateremotemove.h | 2 +- src/libsync/propagatorjobs.cpp | 6 +++--- src/libsync/propagatorjobs.h | 2 +- src/libsync/syncengine.cpp | 22 ++++++++++------------ src/libsync/syncfileitem.h | 7 +++++-- src/libsync/syncresult.cpp | 2 +- test/testsyncengine.cpp | 2 +- 13 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index f5374b257..961e8754c 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -840,10 +840,10 @@ void Folder::slotTransmissionProgress(const ProgressInfo &pi) void Folder::slotItemCompleted(const SyncFileItemPtr &item) { // add new directories or remove gone away dirs to the watcher - if (item->_isDirectory && item->_instruction == CSYNC_INSTRUCTION_NEW) { + if (item->isDirectory() && item->_instruction == CSYNC_INSTRUCTION_NEW) { FolderMan::instance()->addMonitorPath(alias(), path() + item->_file); } - if (item->_isDirectory && item->_instruction == CSYNC_INSTRUCTION_REMOVE) { + if (item->isDirectory() && item->_instruction == CSYNC_INSTRUCTION_REMOVE) { FolderMan::instance()->removeMonitorPath(alias(), path() + item->_file); } diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 7550838e7..7af77926c 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -291,7 +291,7 @@ bool PropagateItemJob::checkForProblemsWithShared(int httpStatusCode, const QStr PropagateItemJob *newJob = NULL; if (httpStatusCode == 403 && propagator()->isInSharedDirectory(_item->_file)) { - if (!_item->_isDirectory) { + if (!_item->isDirectory()) { SyncFileItemPtr downloadItem(new SyncFileItem(*_item)); if (downloadItem->_instruction == CSYNC_INSTRUCTION_NEW || downloadItem->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE) { @@ -363,7 +363,7 @@ PropagateItemJob *OwncloudPropagator::createJob(const SyncFileItemPtr &item) return new PropagateRemoteDelete(this, item); case CSYNC_INSTRUCTION_NEW: case CSYNC_INSTRUCTION_TYPE_CHANGE: - if (item->_isDirectory) { + if (item->isDirectory()) { if (item->_direction == SyncFileItem::Down) { auto job = new PropagateLocalMkdir(this, item); job->setDeleteExistingFile(deleteExisting); @@ -439,7 +439,7 @@ void OwncloudPropagator::start(const SyncFileItemVector &items) delDirJob->increaseAffectedCount(); } continue; - } else if (item->_isDirectory + } else if (item->isDirectory() && (item->_instruction == CSYNC_INSTRUCTION_NEW || item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE)) { // create a new directory within a deleted directory? That can happen if the directory @@ -463,7 +463,7 @@ void OwncloudPropagator::start(const SyncFileItemVector &items) directories.pop(); } - if (item->_isDirectory) { + if (item->isDirectory()) { PropagateDirectory *dir = new PropagateDirectory(this, item); if (item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE diff --git a/src/libsync/progressdispatcher.h b/src/libsync/progressdispatcher.h index f7015f6c5..b51be9810 100644 --- a/src/libsync/progressdispatcher.h +++ b/src/libsync/progressdispatcher.h @@ -103,7 +103,7 @@ public: /** Return true if the size needs to be taken in account in the total amount of time */ static inline bool isSizeDependent(const SyncFileItem &item) { - return !item._isDirectory && (item._instruction == CSYNC_INSTRUCTION_CONFLICT + return !item.isDirectory() && (item._instruction == CSYNC_INSTRUCTION_CONFLICT || item._instruction == CSYNC_INSTRUCTION_SYNC || item._instruction == CSYNC_INSTRUCTION_NEW || item._instruction == CSYNC_INSTRUCTION_TYPE_CHANGE); diff --git a/src/libsync/propagateremotedelete.cpp b/src/libsync/propagateremotedelete.cpp index d66cb2d91..73f5c8240 100644 --- a/src/libsync/propagateremotedelete.cpp +++ b/src/libsync/propagateremotedelete.cpp @@ -120,7 +120,7 @@ void PropagateRemoteDelete::slotDeleteJobFinished() return; } - propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory); + propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->isDirectory()); propagator()->_journal->commit("Remote Remove"); done(SyncFileItem::Success); } diff --git a/src/libsync/propagateremotedelete.h b/src/libsync/propagateremotedelete.h index c4367b3ac..6246f7cbf 100644 --- a/src/libsync/propagateremotedelete.h +++ b/src/libsync/propagateremotedelete.h @@ -54,7 +54,7 @@ public: void start() Q_DECL_OVERRIDE; void abort() Q_DECL_OVERRIDE; - bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return !_item->_isDirectory; } + bool isLikelyFinishedQuickly() Q_DECL_OVERRIDE { return !_item->isDirectory(); } private slots: void slotDeleteJobFinished(); diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 69979b1a9..a45736564 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -187,7 +187,7 @@ void PropagateRemoteMove::finalize() return; } - if (_item->_isDirectory) { + if (_item->isDirectory()) { if (!adjustSelectiveSync(propagator()->_journal, _item->_file, _item->_renameTarget)) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; diff --git a/src/libsync/propagateremotemove.h b/src/libsync/propagateremotemove.h index 3180712df..bf6661a65 100644 --- a/src/libsync/propagateremotemove.h +++ b/src/libsync/propagateremotemove.h @@ -57,7 +57,7 @@ public: } void start() Q_DECL_OVERRIDE; void abort() Q_DECL_OVERRIDE; - JobParallelism parallelism() Q_DECL_OVERRIDE { return _item->_isDirectory ? WaitForFinished : FullParallelism; } + JobParallelism parallelism() Q_DECL_OVERRIDE { return _item->isDirectory() ? WaitForFinished : FullParallelism; } /** * Rename the directory in the selective sync list diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 769408dfb..de9339996 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -121,7 +121,7 @@ void PropagateLocalRemove::start() return; } - if (_item->_isDirectory) { + if (_item->isDirectory()) { if (QDir(filename).exists() && !removeRecursively(QString())) { done(SyncFileItem::NormalError, _error); return; @@ -135,7 +135,7 @@ void PropagateLocalRemove::start() } } propagator()->reportProgress(*_item, 0); - propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->_isDirectory); + propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->isDirectory()); propagator()->_journal->commit("Local remove"); done(SyncFileItem::Success); } @@ -245,7 +245,7 @@ void PropagateLocalRename::start() record._checksumHeader = oldRecord._checksumHeader; } - if (!_item->_isDirectory) { // Directories are saved at the end + if (!_item->isDirectory()) { // Directories are saved at the end if (!propagator()->_journal->setFileRecord(record)) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; diff --git a/src/libsync/propagatorjobs.h b/src/libsync/propagatorjobs.h index 2f7c53df7..04c09cd48 100644 --- a/src/libsync/propagatorjobs.h +++ b/src/libsync/propagatorjobs.h @@ -91,6 +91,6 @@ public: { } void start() Q_DECL_OVERRIDE; - JobParallelism parallelism() Q_DECL_OVERRIDE { return _item->_isDirectory ? WaitForFinished : FullParallelism; } + JobParallelism parallelism() Q_DECL_OVERRIDE { return _item->isDirectory() ? WaitForFinished : FullParallelism; } }; } diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 38353f9eb..f42b5d2d7 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -564,7 +564,6 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, dir = SyncFileItem::None; // For directories, metadata-only updates will be done after all their files are propagated. if (!isDirectory) { - item->_isDirectory = isDirectory; emit syncItemDiscovered(*item); // Update the database now already: New remote fileid or Etag or RemotePerm @@ -655,7 +654,6 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, } item->_direction = dir; - item->_isDirectory = isDirectory; if (instruction != CSYNC_INSTRUCTION_NONE) { // check for blacklisting of this item. // if the item is on blacklist, the instruction was set to ERROR @@ -1196,7 +1194,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_status = SyncFileItem::FileIgnored; (*it)->_errorString = tr("Ignored because of the \"choose what to sync\" blacklist"); - if ((*it)->_isDirectory) { + if ((*it)->isDirectory()) { auto it_base = it; for (SyncFileItemVector::iterator it_next = it + 1; it_next != syncItems.end() && (*it_next)->_file.startsWith(path); ++it_next) { it = it_next; @@ -1221,7 +1219,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) if (parent_it == syncItems.end() || (*parent_it)->destination() != parentDir) { break; } - ASSERT((*parent_it)->_isDirectory); + ASSERT((*parent_it)->isDirectory()); if ((*parent_it)->_instruction != CSYNC_INSTRUCTION_IGNORE) { break; // already changed } @@ -1249,7 +1247,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) if (perms.isNull()) { // No permissions set break; - } else if ((*it)->_isDirectory && !perms.contains("K")) { + } else if ((*it)->isDirectory() && !perms.contains("K")) { qCWarning(lcEngine) << "checkForPermission: ERROR" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_ERROR; (*it)->_status = SyncFileItem::NormalError; @@ -1271,7 +1269,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_errorString = tr("Not allowed because you don't have permission to add parent folder"); } - } else if (!(*it)->_isDirectory && !perms.contains("C")) { + } else if (!(*it)->isDirectory() && !perms.contains("C")) { qCWarning(lcEngine) << "checkForPermission: ERROR" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_ERROR; (*it)->_status = SyncFileItem::NormalError; @@ -1318,7 +1316,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_isRestoration = true; (*it)->_errorString = tr("Not allowed to remove, restoring"); - if ((*it)->_isDirectory) { + if ((*it)->isDirectory()) { // restore all sub items for (SyncFileItemVector::iterator it_next = it + 1; it_next != syncItems.end() && (*it_next)->_file.startsWith(path); ++it_next) { @@ -1345,7 +1343,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) // not delete permission we fast forward the iterator and leave the // delete jobs intact. It is not physically tried to remove this files // underneath, propagator sees that. - if ((*it)->_isDirectory) { + if ((*it)->isDirectory()) { // put a more descriptive message if a top level share dir really is removed. if (it == syncItems.begin() || !(path.startsWith((*(it - 1))->_file))) { (*it)->_errorString = tr("Local files and share folder removed."); @@ -1375,9 +1373,9 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) if (isRename || destPerms.isNull()) { // no need to check for the destination dir permission destinationOK = true; - } else if ((*it)->_isDirectory && !destPerms.contains("K")) { + } else if ((*it)->isDirectory() && !destPerms.contains("K")) { destinationOK = false; - } else if (!(*it)->_isDirectory && !destPerms.contains("C")) { + } else if (!(*it)->isDirectory() && !destPerms.contains("C")) { destinationOK = false; } @@ -1398,7 +1396,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) #ifdef OWNCLOUD_RESTORE_RENAME /* We don't like the idea of renaming behind user's back, as the user may be working with the files */ if (!sourceOK && (!destinationOK || isRename) // (not for directory because that's more complicated with the contents that needs to be adjusted) - && !(*it)->_isDirectory) { + && !(*it)->isDirectory()) { // Both the source and the destination won't allow move. Move back to the original std::swap((*it)->_file, (*it)->_renameTarget); (*it)->_direction = SyncFileItem::Down; @@ -1426,7 +1424,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) _anotherSyncNeeded = ImmediateFollowUp; - if ((*it)->_isDirectory) { + if ((*it)->isDirectory()) { for (SyncFileItemVector::iterator it_next = it + 1; it_next != syncItems.end() && (*it_next)->destination().startsWith(path); ++it_next) { it = it_next; diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index 9ea4e4d45..88ef5ee6d 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -89,7 +89,6 @@ public: SyncFileItem() : _type(UnknownType) , _direction(None) - , _isDirectory(false) , _serverHasIgnoredFiles(false) , _hasBlacklistEntry(false) , _errorMayBeBlacklisted(false) @@ -158,6 +157,11 @@ public: return _file.isEmpty(); } + bool isDirectory() const + { + return _type == SyncFileItem::Directory; + } + /** * True if the item had any kind of error. * @@ -179,7 +183,6 @@ public: QString _renameTarget; Type _type BITFIELD(3); Direction _direction BITFIELD(3); - bool _isDirectory BITFIELD(1); bool _serverHasIgnoredFiles BITFIELD(1); /// Whether there's an entry in the blacklist table. diff --git a/src/libsync/syncresult.cpp b/src/libsync/syncresult.cpp index 88e78320b..52ce018d1 100644 --- a/src/libsync/syncresult.cpp +++ b/src/libsync/syncresult.cpp @@ -132,7 +132,7 @@ void SyncResult::processCompletedItem(const SyncFileItemPtr &item) _foundFilesNotSynced = true; } - if (item->_isDirectory && (item->_instruction == CSYNC_INSTRUCTION_NEW + if (item->isDirectory() && (item->_instruction == CSYNC_INSTRUCTION_NEW || item->_instruction == CSYNC_INSTRUCTION_TYPE_CHANGE || item->_instruction == CSYNC_INSTRUCTION_REMOVE || item->_instruction == CSYNC_INSTRUCTION_RENAME)) { diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 4baa43a13..d96c40695 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -309,7 +309,7 @@ private slots: QSet seen; for(const QList &args : completeSpy) { auto item = args[0].value(); - qDebug() << item->_file << item->_isDirectory << item->_status; + qDebug() << item->_file << item->isDirectory() << item->_status; QVERIFY(!seen.contains(item->_file)); // signal only sent once per item seen.insert(item->_file); if (item->_file == "Y/Z/d2") { From 78212e03d6269a7e248529ddb132fd436e58e316 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 15 Sep 2017 13:30:29 +0200 Subject: [PATCH 064/166] Checksums: Clearer behavior and added testing --- src/libsync/syncengine.cpp | 10 +--------- src/libsync/syncfileitem.h | 4 +++- test/syncenginetestutils.h | 1 + test/testsyncengine.cpp | 19 +++++++++++++++++++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index f42b5d2d7..a2afbedde 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -391,6 +391,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, item->_instruction = instruction; item->_modtime = file->modtime; item->_size = file->size; + item->_checksumHeader = file->checksumHeader; } else { if (instruction != CSYNC_INSTRUCTION_NONE) { qCWarning(lcEngine) << "ERROR: Instruction" << item->_instruction << "vs" << instruction << "for" << fileUtf8; @@ -429,15 +430,6 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, item->_serverHasIgnoredFiles = file->has_ignored_files; } - // Sometimes the discovery computes checksums for local files - if (!remote && !file->checksumHeader.isEmpty()) { - item->_checksumHeader = file->checksumHeader; - } - // For conflicts, store the remote checksum there - if (remote && item->_instruction == CSYNC_INSTRUCTION_CONFLICT && !file->checksumHeader.isEmpty()) { - item->_checksumHeader = file->checksumHeader; - } - // record the seen files to be able to clean the journal later _seenFiles.insert(item->_file); if (!renameTarget.isEmpty()) { diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index 88ef5ee6d..8c546038a 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -216,10 +216,12 @@ public: QByteArray _fileId; QByteArray _remotePerm; + // This is the value for the 'new' side, matching with _size and _modtime. + // // When is this set, and is it the local or the remote checksum? // - if mtime or size changed locally for *.eml files (local checksum) // - for potential renames of local files (local checksum) - // - for conflicts (remote checksum) (what about eval_rename/new reconcile?) + // - for conflicts (remote checksum) QByteArray _checksumHeader; // The size and modtime of the file getting overwritten (on the disk for downloads, on the server for uploads). diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index c2a0c0c8b..3fb03324f 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -828,6 +828,7 @@ public: } OCC::SyncEngine &syncEngine() const { return *_syncEngine; } + OCC::SyncJournalDb &syncJournal() const { return *_journalDb; } FileModifier &localModifier() { return _localModifier; } FileInfo &remoteModifier() { return _fakeQnam->currentRemoteState(); } diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index d96c40695..9de20a015 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -103,18 +103,37 @@ private slots: fakeFolder.localModifier().insert("a1.eml", 64, 'A'); fakeFolder.localModifier().insert("a2.eml", 64, 'A'); fakeFolder.localModifier().insert("a3.eml", 64, 'A'); + fakeFolder.localModifier().insert("b3.txt", 64, 'A'); // Upload and calculate the checksums // fakeFolder.syncOnce(); fakeFolder.syncOnce(); + auto getDbChecksum = [&](QString path) { + auto record = fakeFolder.syncJournal().getFileRecord(path); + return record._checksumHeader; + }; + + // printf 'A%.0s' {1..64} | sha1sum - + QByteArray referenceChecksum("SHA1:30b86e44e6001403827a62c58b08893e77cf121f"); + QCOMPARE(getDbChecksum("a1.eml"), referenceChecksum); + QCOMPARE(getDbChecksum("a2.eml"), referenceChecksum); + QCOMPARE(getDbChecksum("a3.eml"), referenceChecksum); + QCOMPARE(getDbChecksum("b3.txt"), referenceChecksum); + QSignalSpy completeSpy(&fakeFolder.syncEngine(), SIGNAL(itemCompleted(const SyncFileItemPtr &))); // Touch the file without changing the content, shouldn't upload fakeFolder.localModifier().setContents("a1.eml", 'A'); // Change the content/size fakeFolder.localModifier().setContents("a2.eml", 'B'); fakeFolder.localModifier().appendByte("a3.eml"); + fakeFolder.localModifier().appendByte("b3.txt"); fakeFolder.syncOnce(); + QCOMPARE(getDbChecksum("a1.eml"), referenceChecksum); + QCOMPARE(getDbChecksum("a2.eml"), QByteArray("SHA1:84951fc23a4dafd10020ac349da1f5530fa65949")); + QCOMPARE(getDbChecksum("a3.eml"), QByteArray("SHA1:826b7e7a7af8a529ae1c7443c23bf185c0ad440c")); + QCOMPARE(getDbChecksum("b3.eml"), getDbChecksum("a3.txt")); + QVERIFY(!itemDidComplete(completeSpy, "a1.eml")); QVERIFY(itemDidCompleteSuccessfully(completeSpy, "a2.eml")); QVERIFY(itemDidCompleteSuccessfully(completeSpy, "a3.eml")); From 013eba0e79d3840ea60a3d36d71a82c6741424cd Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 15 Sep 2017 12:35:40 +0200 Subject: [PATCH 065/166] Update sync-algorithm.md The rbtree was replaced by a std::map. --- doc/dev/sync-algorithm.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/dev/sync-algorithm.md b/doc/dev/sync-algorithm.md index f16b0385b..61e8526a8 100644 --- a/doc/dev/sync-algorithm.md +++ b/doc/dev/sync-algorithm.md @@ -34,7 +34,7 @@ The discovery phase collects file and directory metadata from the local and remo Afterwards, we have two trees that tell us what happened relative to the journal. But there may still be conflicts if something happened to an entity both locally and on the remote. - Input: file system, server data, journal - - Output: two c_rbtree_t*, representing the local and remote trees + - Output: two FileMap (std::map>), representing the local and remote trees - Note on remote discovery: Since a change to a file on the server causes the etags of all parent folders to change, folders with an unchanged etag can be read from the journal directly and don't need to be walked into. @@ -52,12 +52,12 @@ The reconcile phase compares and adjusts the local and remote trees (in both dir Afterwards, there are still two trees, but conflicts are marked in them. - - Input: c_rbtree_t* for the local and remote trees, journal (for some rename-related queries) - - Output: changes c_rbtree_t* in-place + - Input: FileMap for the local and remote trees, journal (for some rename-related queries) + - Output: changes FileMap in-place - Details - csync_reconcile() runs csync_reconcile_updates() for the local and remote trees, one after the other. - - csync_reconcile_updates() uses c_rbtree_walk() to iterate through the entries, calling _csync_merge_algorithm_visitor() for each. + - csync_reconcile_updates() iterates through the entries, calling _csync_merge_algorithm_visitor() for each. - _csync_merge_algorithm_visitor() checks whether the other tree also has an entry for that node and merges the actions, detecting conflicts. This is the main function of this pass. @@ -67,7 +67,7 @@ The post-reconcile phase merges the two trees into one set of SyncFileItems. Afterwards, there is a list of items that can tell the propagator what needs to be done. - - Input: c_rbtree_t* for the local and remote trees + - Input: FileMap for the local and remote trees - Output: QMap - Note that some "propagations", specifically cheap metadata-only updates, are already done at this stage. From bd25225045d69f74495ff3173fc616fd296c4816 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 30 Aug 2017 19:34:41 +0200 Subject: [PATCH 066/166] Move non-csync-dependent parts of FileSystem to src/common This keep the csync-dependent parts in src/libsync, slitting the namespace over two files. This will allow moving SyncJournalDB to src/common as well. --- src/common/common.cmake | 1 + src/common/filesystembase.cpp | 488 +++++++++++++++++++ src/common/filesystembase.h | 189 +++++++ src/csync/CMakeLists.txt | 5 + src/csync/std/c_path.c | 60 --- src/csync/std/c_path.h | 28 -- src/csync/std/c_utf8.cpp | 16 + src/csync/std/c_utf8.h | 14 + src/libsync/CMakeLists.txt | 5 - src/libsync/filesystem.cpp | 487 ------------------ src/libsync/filesystem.h | 120 +---- src/libsync/syncjournaldb.cpp | 1 + test/csync/encoding_tests/check_encoding.cpp | 20 +- 13 files changed, 724 insertions(+), 710 deletions(-) create mode 100644 src/common/filesystembase.cpp create mode 100644 src/common/filesystembase.h diff --git a/src/common/common.cmake b/src/common/common.cmake index a26e76d74..ab1ca1e83 100644 --- a/src/common/common.cmake +++ b/src/common/common.cmake @@ -2,5 +2,6 @@ # Essentially they could be in the same directory but are separate to # help keep track of the different code licenses. set(common_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/filesystembase.cpp ${CMAKE_CURRENT_LIST_DIR}/utility.cpp ) diff --git a/src/common/filesystembase.cpp b/src/common/filesystembase.cpp new file mode 100644 index 000000000..879b2f85c --- /dev/null +++ b/src/common/filesystembase.cpp @@ -0,0 +1,488 @@ +/* + * Copyright (C) by Daniel Molkentin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "filesystembase.h" + +#include +#include +#include + +#include +#include + +#ifdef ZLIB_FOUND +#include +#endif + +#ifdef Q_OS_WIN +#include +#include +#include +#include +#include +#endif + +namespace OCC { + +Q_LOGGING_CATEGORY(lcFileSystem, "sync.filesystem", QtInfoMsg) + +QString FileSystem::longWinPath(const QString &inpath) +{ +#ifdef Q_OS_WIN + return pathtoUNC(inpath); +#else + return inpath; +#endif +} + +void FileSystem::setFileHidden(const QString &filename, bool hidden) +{ +#ifdef _WIN32 + QString fName = longWinPath(filename); + DWORD dwAttrs; + + dwAttrs = GetFileAttributesW((wchar_t *)fName.utf16()); + + if (dwAttrs != INVALID_FILE_ATTRIBUTES) { + if (hidden && !(dwAttrs & FILE_ATTRIBUTE_HIDDEN)) { + SetFileAttributesW((wchar_t *)fName.utf16(), dwAttrs | FILE_ATTRIBUTE_HIDDEN); + } else if (!hidden && (dwAttrs & FILE_ATTRIBUTE_HIDDEN)) { + SetFileAttributesW((wchar_t *)fName.utf16(), dwAttrs & ~FILE_ATTRIBUTE_HIDDEN); + } + } +#else + Q_UNUSED(filename); + Q_UNUSED(hidden); +#endif +} + +static QFile::Permissions getDefaultWritePermissions() +{ + QFile::Permissions result = QFile::WriteUser; +#ifndef Q_OS_WIN + mode_t mask = umask(0); + umask(mask); + if (!(mask & S_IWGRP)) { + result |= QFile::WriteGroup; + } + if (!(mask & S_IWOTH)) { + result |= QFile::WriteOther; + } +#endif + return result; +} + +void FileSystem::setFileReadOnly(const QString &filename, bool readonly) +{ + QFile file(filename); + QFile::Permissions permissions = file.permissions(); + + QFile::Permissions allWritePermissions = + QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther | QFile::WriteOwner; + static QFile::Permissions defaultWritePermissions = getDefaultWritePermissions(); + + permissions &= ~allWritePermissions; + if (!readonly) { + permissions |= defaultWritePermissions; + } + file.setPermissions(permissions); +} + +void FileSystem::setFolderMinimumPermissions(const QString &filename) +{ +#ifdef Q_OS_MAC + QFile::Permissions perm = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner; + QFile file(filename); + file.setPermissions(perm); +#else + Q_UNUSED(filename); +#endif +} + + +void FileSystem::setFileReadOnlyWeak(const QString &filename, bool readonly) +{ + QFile file(filename); + QFile::Permissions permissions = file.permissions(); + + if (!readonly && (permissions & QFile::WriteOwner)) { + return; // already writable enough + } + + setFileReadOnly(filename, readonly); +} + +bool FileSystem::rename(const QString &originFileName, + const QString &destinationFileName, + QString *errorString) +{ + bool success = false; + QString error; +#ifdef Q_OS_WIN + QString orig = longWinPath(originFileName); + QString dest = longWinPath(destinationFileName); + + if (isLnkFile(originFileName) || isLnkFile(destinationFileName)) { + success = MoveFileEx((wchar_t *)orig.utf16(), + (wchar_t *)dest.utf16(), + MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH); + if (!success) { + wchar_t *string = 0; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&string, 0, NULL); + + error = QString::fromWCharArray(string); + LocalFree((HLOCAL)string); + } + } else +#endif + { + QFile orig(originFileName); + success = orig.rename(destinationFileName); + if (!success) { + error = orig.errorString(); + } + } + + if (!success) { + qCWarning(lcFileSystem) << "Error renaming file" << originFileName + << "to" << destinationFileName + << "failed: " << error; + if (errorString) { + *errorString = error; + } + } + return success; +} + +bool FileSystem::uncheckedRenameReplace(const QString &originFileName, + const QString &destinationFileName, + QString *errorString) +{ +#ifndef Q_OS_WIN + bool success; + QFile orig(originFileName); + // We want a rename that also overwites. QFile::rename does not overwite. + // Qt 5.1 has QSaveFile::renameOverwrite we could use. + // ### FIXME + success = true; + bool destExists = fileExists(destinationFileName); + if (destExists && !QFile::remove(destinationFileName)) { + *errorString = orig.errorString(); + qCWarning(lcFileSystem) << "Target file could not be removed."; + success = false; + } + if (success) { + success = orig.rename(destinationFileName); + } + if (!success) { + *errorString = orig.errorString(); + qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString; + return false; + } + +#else //Q_OS_WIN + // You can not overwrite a read-only file on windows. + if (!QFileInfo(destinationFileName).isWritable()) { + setFileReadOnly(destinationFileName, false); + } + + BOOL ok; + QString orig = longWinPath(originFileName); + QString dest = longWinPath(destinationFileName); + + ok = MoveFileEx((wchar_t *)orig.utf16(), + (wchar_t *)dest.utf16(), + MOVEFILE_REPLACE_EXISTING + MOVEFILE_COPY_ALLOWED + MOVEFILE_WRITE_THROUGH); + if (!ok) { + wchar_t *string = 0; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&string, 0, NULL); + + *errorString = QString::fromWCharArray(string); + qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString; + LocalFree((HLOCAL)string); + return false; + } +#endif + return true; +} + +bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qint64 seek) +{ + QString errorDummy; + // avoid many if (errorOrNull) later. + QString &error = errorOrNull ? *errorOrNull : errorDummy; + error.clear(); + +#ifdef Q_OS_WIN + // + // The following code is adapted from Qt's QFSFileEnginePrivate::nativeOpen() + // by including the FILE_SHARE_DELETE share mode. + // + + // Enable full sharing. + DWORD shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; + + int accessRights = GENERIC_READ; + DWORD creationDisp = OPEN_EXISTING; + + // Create the file handle. + SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; + QString fName = longWinPath(file->fileName()); + + HANDLE fileHandle = CreateFileW( + (const wchar_t *)fName.utf16(), + accessRights, + shareMode, + &securityAtts, + creationDisp, + FILE_ATTRIBUTE_NORMAL, + NULL); + + // Bail out on error. + if (fileHandle == INVALID_HANDLE_VALUE) { + error = qt_error_string(); + return false; + } + + // Convert the HANDLE to an fd and pass it to QFile's foreign-open + // function. The fd owns the handle, so when QFile later closes + // the fd the handle will be closed too. + int fd = _open_osfhandle((intptr_t)fileHandle, _O_RDONLY); + if (fd == -1) { + error = "could not make fd from handle"; + return false; + } + if (!file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle)) { + error = file->errorString(); + return false; + } + + // Seek to the right spot + LARGE_INTEGER *li = reinterpret_cast(&seek); + DWORD newFilePointer = SetFilePointer(fileHandle, li->LowPart, &li->HighPart, FILE_BEGIN); + if (newFilePointer == 0xFFFFFFFF && GetLastError() != NO_ERROR) { + error = qt_error_string(); + return false; + } + + return true; +#else + if (!file->open(QFile::ReadOnly)) { + error = file->errorString(); + return false; + } + if (!file->seek(seek)) { + error = file->errorString(); + return false; + } + return true; +#endif +} + +#ifdef Q_OS_WIN +static bool fileExistsWin(const QString &filename) +{ + WIN32_FIND_DATA FindFileData; + HANDLE hFind; + QString fName = FileSystem::longWinPath(filename); + + hFind = FindFirstFileW((wchar_t *)fName.utf16(), &FindFileData); + if (hFind == INVALID_HANDLE_VALUE) { + return false; + } + FindClose(hFind); + return true; +} +#endif + +bool FileSystem::fileExists(const QString &filename, const QFileInfo &fileInfo) +{ +#ifdef Q_OS_WIN + if (isLnkFile(filename)) { + // Use a native check. + return fileExistsWin(filename); + } +#endif + bool re = fileInfo.exists(); + // if the filename is different from the filename in fileInfo, the fileInfo is + // not valid. There needs to be one initialised here. Otherwise the incoming + // fileInfo is re-used. + if (fileInfo.filePath() != filename) { + QFileInfo myFI(filename); + re = myFI.exists(); + } + return re; +} + +#ifdef Q_OS_WIN +QString FileSystem::fileSystemForPath(const QString &path) +{ + // See also QStorageInfo (Qt >=5.4) and GetVolumeInformationByHandleW (>= Vista) + QString drive = path.left(2); + if (!drive.endsWith(":")) + return QString(); + drive.append('\\'); + + const size_t fileSystemBufferSize = 4096; + TCHAR fileSystemBuffer[fileSystemBufferSize]; + + if (!GetVolumeInformationW( + reinterpret_cast(drive.utf16()), + NULL, 0, + NULL, NULL, NULL, + fileSystemBuffer, fileSystemBufferSize)) { + return QString(); + } + return QString::fromUtf16(reinterpret_cast(fileSystemBuffer)); +} +#endif + +#define BUFSIZE qint64(500 * 1024) // 500 KiB + +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); + QByteArray arr; + QCryptographicHash crypto(algo); + + if (file.open(QIODevice::ReadOnly)) { + qint64 size; + while (!file.atEnd()) { + size = file.read(buf.data(), bufSize); + if (size > 0) { + crypto.addData(buf.data(), size); + } + } + arr = crypto.result().toHex(); + } + return arr; +} + +QByteArray FileSystem::calcMd5(const QString &filename) +{ + return readToCrypto(filename, QCryptographicHash::Md5); +} + +QByteArray FileSystem::calcSha1(const QString &filename) +{ + return readToCrypto(filename, QCryptographicHash::Sha1); +} + +#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); + if (file.open(QIODevice::ReadOnly)) { + qint64 size; + while (!file.atEnd()) { + size = file.read(buf.data(), bufSize); + if (size > 0) + adler = adler32(adler, (const Bytef *)buf.data(), size); + } + } + + return QByteArray::number(adler, 16); +} +#endif + +QString FileSystem::makeConflictFileName(const QString &fn, const QDateTime &dt) +{ + QString conflictFileName(fn); + // Add _conflict-XXXX before the extension. + int dotLocation = conflictFileName.lastIndexOf('.'); + // If no extension, add it at the end (take care of cases like foo/.hidden or foo.bar/file) + if (dotLocation <= conflictFileName.lastIndexOf('/') + 1) { + dotLocation = conflictFileName.size(); + } + QString timeString = dt.toString("yyyyMMdd-hhmmss"); + + // Additional marker + QByteArray conflictFileUserName = qgetenv("CSYNC_CONFLICT_FILE_USERNAME"); + if (conflictFileUserName.isEmpty()) + conflictFileName.insert(dotLocation, "_conflict-" + timeString); + else + conflictFileName.insert(dotLocation, "_conflict_" + QString::fromUtf8(conflictFileUserName) + "-" + timeString); + + return conflictFileName; +} + +bool FileSystem::remove(const QString &fileName, QString *errorString) +{ +#ifdef Q_OS_WIN + // You cannot delete a read-only file on windows, but we want to + // allow that. + if (!QFileInfo(fileName).isWritable()) { + setFileReadOnly(fileName, false); + } +#endif + QFile f(fileName); + if (!f.remove()) { + if (errorString) { + *errorString = f.errorString(); + } + return false; + } + return true; +} + +bool FileSystem::isFileLocked(const QString &fileName) +{ +#ifdef Q_OS_WIN + const wchar_t *wuri = reinterpret_cast(fileName.utf16()); + // Check if file exists + DWORD attr = GetFileAttributesW(wuri); + if (attr != INVALID_FILE_ATTRIBUTES) { + // Try to open the file with as much access as possible.. + HANDLE win_h = CreateFileW( + wuri, + GENERIC_READ | GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, + NULL); + + if (win_h == INVALID_HANDLE_VALUE) { + /* could not be opened, so locked? */ + /* 32 == ERROR_SHARING_VIOLATION */ + return true; + } else { + CloseHandle(win_h); + } + } +#else + Q_UNUSED(fileName); +#endif + return false; +} + +bool FileSystem::isLnkFile(const QString &filename) +{ + return filename.endsWith(".lnk"); +} + +} // namespace OCC diff --git a/src/common/filesystembase.h b/src/common/filesystembase.h new file mode 100644 index 000000000..9568dac12 --- /dev/null +++ b/src/common/filesystembase.h @@ -0,0 +1,189 @@ +/* + * Copyright (C) by Olivier Goffart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include "config.h" + +#include +#include +#include +#include + +#include + +class QFile; + +namespace OCC { + +OCSYNC_EXPORT Q_DECLARE_LOGGING_CATEGORY(lcFileSystem) + +/** + * \addtogroup libsync + * @{ + */ + +/** + * @brief This file contains file system helper + */ +namespace FileSystem { + + /** + * @brief Mark the file as hidden (only has effects on windows) + */ + void OCSYNC_EXPORT setFileHidden(const QString &filename, bool hidden); + + /** + * @brief Marks the file as read-only. + * + * On linux this either revokes all 'w' permissions or restores permissions + * according to the umask. + */ + void OCSYNC_EXPORT setFileReadOnly(const QString &filename, bool readonly); + + /** + * @brief Marks the file as read-only. + * + * It's like setFileReadOnly(), but weaker: if readonly is false and the user + * already has write permissions, no change to the permissions is made. + * + * This means that it will preserve explicitly set rw-r--r-- permissions even + * when the umask is 0002. (setFileReadOnly() would adjust to rw-rw-r--) + */ + void OCSYNC_EXPORT setFileReadOnlyWeak(const QString &filename, bool readonly); + + /** + * @brief Try to set permissions so that other users on the local machine can not + * go into the folder. + */ + void OCSYNC_EXPORT setFolderMinimumPermissions(const QString &filename); + + /** convert a "normal" windows path into a path that can be 32k chars long. */ + QString OCSYNC_EXPORT longWinPath(const QString &inpath); + + /** + * @brief Checks whether a file exists. + * + * Use this over QFileInfo::exists() and QFile::exists() to avoid bugs with lnk + * files, see above. + */ + bool OCSYNC_EXPORT fileExists(const QString &filename, const QFileInfo & = QFileInfo()); + + /** + * @brief Rename the file \a originFileName to \a destinationFileName. + * + * It behaves as QFile::rename() but handles .lnk files correctly on Windows. + */ + bool OCSYNC_EXPORT rename(const QString &originFileName, + const QString &destinationFileName, + QString *errorString = NULL); + + /** + * Rename the file \a originFileName to \a destinationFileName, and + * overwrite the destination if it already exists - without extra checks. + */ + bool OCSYNC_EXPORT uncheckedRenameReplace(const QString &originFileName, + const QString &destinationFileName, + QString *errorString); + + /** + * Removes a file. + * + * Equivalent to QFile::remove(), except on Windows, where it will also + * successfully remove read-only files. + */ + bool OCSYNC_EXPORT remove(const QString &fileName, QString *errorString = 0); + + /** + * Replacement for QFile::open(ReadOnly) followed by a seek(). + * This version sets a more permissive sharing mode on Windows. + * + * Warning: The resulting file may have an empty fileName and be unsuitable for use + * with QFileInfo! Calling seek() on the QFile with >32bit signed values will fail! + */ + bool OCSYNC_EXPORT openAndSeekFileSharedRead(QFile *file, QString *error, qint64 seek); + +#ifdef Q_OS_WIN + /** + * Returns the file system used at the given path. + */ + QString fileSystemForPath(const QString &path); +#endif + + QByteArray OCSYNC_EXPORT calcMd5(const QString &fileName); + QByteArray OCSYNC_EXPORT calcSha1(const QString &fileName); +#ifdef ZLIB_FOUND + QByteArray OCSYNC_EXPORT calcAdler32(const QString &fileName); +#endif + + /** + * Returns a file name based on \a fn that's suitable for a conflict. + */ + QString OCSYNC_EXPORT makeConflictFileName(const QString &fn, const QDateTime &dt); + + /** + * Returns true when a file is locked. (Windows only) + */ + bool OCSYNC_EXPORT isFileLocked(const QString &fileName); + + bool OCSYNC_EXPORT isLnkFile(const QString &filename); + + /* + * This function takes a path and converts it to a UNC representation of the + * string. That means that it prepends a \\?\ (unless already UNC) and converts + * all slashes to backslashes. + * + * Note the following: + * - The string must be absolute. + * - it needs to contain a drive character to be a valid UNC + * - A conversion is only done if the path len is larger than 245. Otherwise + * the windows API functions work with the normal "unixoid" representation too. + */ + template + S pathtoUNC(const S &str) + { + int len = 0; + S longStr; + + len = str.length(); + longStr.reserve(len+4); + + // prepend \\?\ and convert '/' => '\' to support long names + if( str[0] == '/' || str[0] == '\\' ) { + // Don't prepend if already UNC + if( !(len > 1 && (str[1] == '/' || str[1] == '\\')) ) { + longStr.append("\\\\?"); + } + } else { + longStr.append("\\\\?\\"); // prepend string by this four magic chars. + } + longStr += str; + + /* replace all occurences of / with the windows native \ */ + + for (auto it = longStr.begin(); it != longStr.end(); ++it) { + if(*it == '/') { + *it = '\\'; + } + } + return longStr; + } +} + +/** @} */ +} diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index 7ab4f7326..e265b95d9 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -128,6 +128,11 @@ generate_export_header( ${CSYNC_LIBRARY} target_link_libraries(${CSYNC_LIBRARY} ${CSYNC_LINK_LIBRARIES}) #target_link_libraries(${CSYNC_LIBRARY}_static ${CSYNC_LINK_LIBRARIES}) +if(ZLIB_FOUND) + target_link_libraries(${CSYNC_LIBRARY} ${ZLIB_LIBRARIES}) + include_directories(${ZLIB_INCLUDE_DIRS}) +endif(ZLIB_FOUND) + find_package(Qt5Core REQUIRED) qt5_use_modules(${CSYNC_LIBRARY} Core) diff --git a/src/csync/std/c_path.c b/src/csync/std/c_path.c index 497ce411e..f81799c05 100644 --- a/src/csync/std/c_path.c +++ b/src/csync/std/c_path.c @@ -390,63 +390,3 @@ int c_parse_uri(const char *uri, return -1; } - - -/* - * This function takes a path and converts it to a UNC representation of the - * string. That means that it prepends a \\?\ (unless already UNC) and converts - * all slashes to backslashes. - * - * Note the following: - * - The string must be absolute. - * - it needs to contain a drive character to be a valid UNC - * - A conversion is only done if the path len is larger than 245. Otherwise - * the windows API functions work with the normal "unixoid" representation too. - * - * This function allocates memory that must be freed by the caller. - */ - const char *c_path_to_UNC(const char *str) - { - int len = 0; - char *longStr = NULL; - - len = strlen(str); - longStr = c_malloc(len+5); - *longStr = '\0'; - - // prepend \\?\ and convert '/' => '\' to support long names - if( str[0] == '/' || str[0] == '\\' ) { - // Don't prepend if already UNC - if( !(len > 1 && (str[1] == '/' || str[1] == '\\')) ) { - strcpy( longStr, "\\\\?"); - } - } else { - strcpy( longStr, "\\\\?\\"); // prepend string by this four magic chars. - } - strncat( longStr, str, len ); - - /* replace all occurences of / with the windows native \ */ - char *c = longStr; - for (; *c; ++c) { - if(*c == '/') { - *c = '\\'; - } - } - return longStr; - } - - mbchar_t* c_utf8_path_to_locale(const char *str) - { - if( str == NULL ) { - return NULL; - } else { - #ifdef _WIN32 - const char *unc_str = c_path_to_UNC(str); - mbchar_t *dst = c_utf8_string_to_locale(unc_str); - SAFE_FREE(unc_str); - return dst; - #else - return c_utf8_string_to_locale(str); - #endif - } - } diff --git a/src/csync/std/c_path.h b/src/csync/std/c_path.h index f17c5f480..d0dd43d9e 100644 --- a/src/csync/std/c_path.h +++ b/src/csync/std/c_path.h @@ -112,34 +112,6 @@ typedef struct char * extension; } C_PATHINFO; -/** - * @brief c_path_to_UNC converts a unixoid path to UNC format. - * - * It converts the '/' to '\' and prepends \\?\ to the path. - * - * A proper windows path has to have a drive letter, otherwise it is not - * valid UNC. - * - * @param str The path to convert - * - * @return a pointer to the converted string. Caller has to free it. - */ -const char *c_path_to_UNC(const char *str); - -/** - * @brief c_utf8_path_to_locale converts a unixoid path to the locale aware format - * - * On windows, it converts to UNC and multibyte. - * On Mac, it converts to the correct utf8 using iconv. - * On Linux, it returns utf8 - * - * @param str The path to convert - * - * @return a pointer to the converted string. Caller has to free it using the - * function c_free_locale_string. - */ -mbchar_t* c_utf8_path_to_locale(const char *str); - /** * }@ */ diff --git a/src/csync/std/c_utf8.cpp b/src/csync/std/c_utf8.cpp index ae61170a9..f4f5d1ac2 100644 --- a/src/csync/std/c_utf8.cpp +++ b/src/csync/std/c_utf8.cpp @@ -37,6 +37,7 @@ #include "c_alloc.h" #include "c_string.h" +#include "common/filesystembase.h" /* Convert a locale String to UTF8 */ QByteArray c_utf8_from_locale(const mbchar_t *wstr) @@ -99,4 +100,19 @@ mbchar_t* c_utf8_string_to_locale(const char *str) #endif } + mbchar_t* c_utf8_path_to_locale(const char *str) + { + if( str == NULL ) { + return NULL; + } else { + #ifdef _WIN32 + QByteArray unc_str = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(str, strlen(str))); + mbchar_t *dst = c_utf8_string_to_locale(unc_str); + return dst; + #else + return c_utf8_string_to_locale(str); + #endif + } + } + } diff --git a/src/csync/std/c_utf8.h b/src/csync/std/c_utf8.h index 522cab34d..6fbb8afe9 100644 --- a/src/csync/std/c_utf8.h +++ b/src/csync/std/c_utf8.h @@ -91,6 +91,20 @@ extern "C" { */ mbchar_t* c_utf8_string_to_locale(const char *wstr); +/** + * @brief c_utf8_path_to_locale converts a unixoid path to the locale aware format + * + * On windows, it converts to UNC and multibyte. + * On Mac, it converts to the correct utf8 using iconv. + * On Linux, it returns utf8 + * + * @param str The path to convert + * + * @return a pointer to the converted string. Caller has to free it using the + * function c_free_locale_string. + */ +mbchar_t* c_utf8_path_to_locale(const char *str); + /** * @brief Free buffer malloced by c_utf8_to_locale(). * diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index a475aa3c0..3015d7fe3 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -115,11 +115,6 @@ if(INOTIFY_FOUND) link_directories(${INOTIFY_LIBRARY_DIR}) endif() -if(ZLIB_FOUND) - list(APPEND libsync_LINK_TARGETS ${ZLIB_LIBRARIES}) - include_directories(${ZLIB_INCLUDE_DIRS}) -endif(ZLIB_FOUND) - add_library(${synclib_NAME} SHARED ${libsync_SRCS} ${syncMoc}) GENERATE_EXPORT_HEADER( ${synclib_NAME} BASE_NAME ${synclib_NAME} diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp index b027db4d7..69bbbe3f1 100644 --- a/src/libsync/filesystem.cpp +++ b/src/libsync/filesystem.cpp @@ -17,21 +17,6 @@ #include "common/utility.h" #include #include -#include -#include -#include - -#ifdef ZLIB_FOUND -#include -#endif - -#ifdef Q_OS_WIN -#include -#include -#include -#include -#include -#endif // We use some internals of csync: extern "C" int c_utimes(const char *, const struct timeval *); @@ -44,20 +29,6 @@ extern "C" int c_utimes(const char *, const struct timeval *); namespace OCC { -Q_LOGGING_CATEGORY(lcFileSystem, "sync.filesystem", QtInfoMsg) - -QString FileSystem::longWinPath(const QString &inpath) -{ -#ifdef Q_OS_WIN - const char *unc_str = c_path_to_UNC(inpath.toUtf8()); - QString path = QString::fromUtf8(unc_str); - free((void*)unc_str); - return path; -#else - return inpath; -#endif -} - bool FileSystem::fileEquals(const QString &fn1, const QString &fn2) { // compare two files with given filename and return true if they have the same content @@ -91,83 +62,6 @@ bool FileSystem::fileEquals(const QString &fn1, const QString &fn2) return false; } -void FileSystem::setFileHidden(const QString &filename, bool hidden) -{ -#ifdef _WIN32 - QString fName = longWinPath(filename); - DWORD dwAttrs; - - dwAttrs = GetFileAttributesW((wchar_t *)fName.utf16()); - - if (dwAttrs != INVALID_FILE_ATTRIBUTES) { - if (hidden && !(dwAttrs & FILE_ATTRIBUTE_HIDDEN)) { - SetFileAttributesW((wchar_t *)fName.utf16(), dwAttrs | FILE_ATTRIBUTE_HIDDEN); - } else if (!hidden && (dwAttrs & FILE_ATTRIBUTE_HIDDEN)) { - SetFileAttributesW((wchar_t *)fName.utf16(), dwAttrs & ~FILE_ATTRIBUTE_HIDDEN); - } - } -#else - Q_UNUSED(filename); - Q_UNUSED(hidden); -#endif -} - -static QFile::Permissions getDefaultWritePermissions() -{ - QFile::Permissions result = QFile::WriteUser; -#ifndef Q_OS_WIN - mode_t mask = umask(0); - umask(mask); - if (!(mask & S_IWGRP)) { - result |= QFile::WriteGroup; - } - if (!(mask & S_IWOTH)) { - result |= QFile::WriteOther; - } -#endif - return result; -} - -void FileSystem::setFileReadOnly(const QString &filename, bool readonly) -{ - QFile file(filename); - QFile::Permissions permissions = file.permissions(); - - QFile::Permissions allWritePermissions = - QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther | QFile::WriteOwner; - static QFile::Permissions defaultWritePermissions = getDefaultWritePermissions(); - - permissions &= ~allWritePermissions; - if (!readonly) { - permissions |= defaultWritePermissions; - } - file.setPermissions(permissions); -} - -void FileSystem::setFolderMinimumPermissions(const QString &filename) -{ -#ifdef Q_OS_MAC - QFile::Permissions perm = QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner; - QFile file(filename); - file.setPermissions(perm); -#else - Q_UNUSED(filename); -#endif -} - - -void FileSystem::setFileReadOnlyWeak(const QString &filename, bool readonly) -{ - QFile file(filename); - QFile::Permissions permissions = file.permissions(); - - if (!readonly && (permissions & QFile::WriteOwner)) { - return; // already writable enough - } - - setFileReadOnly(filename, readonly); -} - time_t FileSystem::getModTime(const QString &filename) { csync_file_stat_t stat; @@ -197,57 +91,6 @@ bool FileSystem::setModTime(const QString &filename, time_t modTime) return true; } -#ifdef Q_OS_WIN -static bool isLnkFile(const QString &filename) -{ - return filename.endsWith(".lnk"); -} -#endif - -bool FileSystem::rename(const QString &originFileName, - const QString &destinationFileName, - QString *errorString) -{ - bool success = false; - QString error; -#ifdef Q_OS_WIN - QString orig = longWinPath(originFileName); - QString dest = longWinPath(destinationFileName); - - if (isLnkFile(originFileName) || isLnkFile(destinationFileName)) { - success = MoveFileEx((wchar_t *)orig.utf16(), - (wchar_t *)dest.utf16(), - MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH); - if (!success) { - wchar_t *string = 0; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR)&string, 0, NULL); - - error = QString::fromWCharArray(string); - LocalFree((HLOCAL)string); - } - } else -#endif - { - QFile orig(originFileName); - success = orig.rename(destinationFileName); - if (!success) { - error = orig.errorString(); - } - } - - if (!success) { - qCWarning(lcFileSystem) << "Error renaming file" << originFileName - << "to" << destinationFileName - << "failed: " << error; - if (errorString) { - *errorString = error; - } - } - return success; -} - bool FileSystem::fileChanged(const QString &fileName, qint64 previousSize, time_t previousMtime) @@ -271,151 +114,6 @@ bool FileSystem::verifyFileUnchanged(const QString &fileName, return true; } -bool FileSystem::renameReplace(const QString &originFileName, - const QString &destinationFileName, - qint64 destinationSize, - time_t destinationMtime, - QString *errorString) -{ - if (fileExists(destinationFileName) - && fileChanged(destinationFileName, destinationSize, destinationMtime)) { - if (errorString) { - *errorString = qApp->translate("FileSystem", - "The destination file has an unexpected size or modification time"); - } - return false; - } - - return uncheckedRenameReplace(originFileName, destinationFileName, errorString); -} - -bool FileSystem::uncheckedRenameReplace(const QString &originFileName, - const QString &destinationFileName, - QString *errorString) -{ -#ifndef Q_OS_WIN - bool success; - QFile orig(originFileName); - // We want a rename that also overwites. QFile::rename does not overwite. - // Qt 5.1 has QSaveFile::renameOverwrite we could use. - // ### FIXME - success = true; - bool destExists = fileExists(destinationFileName); - if (destExists && !QFile::remove(destinationFileName)) { - *errorString = orig.errorString(); - qCWarning(lcFileSystem) << "Target file could not be removed."; - success = false; - } - if (success) { - success = orig.rename(destinationFileName); - } - if (!success) { - *errorString = orig.errorString(); - qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString; - return false; - } - -#else //Q_OS_WIN - // You can not overwrite a read-only file on windows. - if (!QFileInfo(destinationFileName).isWritable()) { - setFileReadOnly(destinationFileName, false); - } - - BOOL ok; - QString orig = longWinPath(originFileName); - QString dest = longWinPath(destinationFileName); - - ok = MoveFileEx((wchar_t *)orig.utf16(), - (wchar_t *)dest.utf16(), - MOVEFILE_REPLACE_EXISTING + MOVEFILE_COPY_ALLOWED + MOVEFILE_WRITE_THROUGH); - if (!ok) { - wchar_t *string = 0; - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, ::GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPWSTR)&string, 0, NULL); - - *errorString = QString::fromWCharArray(string); - qCWarning(lcFileSystem) << "Renaming temp file to final failed: " << *errorString; - LocalFree((HLOCAL)string); - return false; - } -#endif - return true; -} - -bool FileSystem::openAndSeekFileSharedRead(QFile *file, QString *errorOrNull, qint64 seek) -{ - QString errorDummy; - // avoid many if (errorOrNull) later. - QString &error = errorOrNull ? *errorOrNull : errorDummy; - error.clear(); - -#ifdef Q_OS_WIN - // - // The following code is adapted from Qt's QFSFileEnginePrivate::nativeOpen() - // by including the FILE_SHARE_DELETE share mode. - // - - // Enable full sharing. - DWORD shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE; - - int accessRights = GENERIC_READ; - DWORD creationDisp = OPEN_EXISTING; - - // Create the file handle. - SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; - QString fName = longWinPath(file->fileName()); - - HANDLE fileHandle = CreateFileW( - (const wchar_t *)fName.utf16(), - accessRights, - shareMode, - &securityAtts, - creationDisp, - FILE_ATTRIBUTE_NORMAL, - NULL); - - // Bail out on error. - if (fileHandle == INVALID_HANDLE_VALUE) { - error = qt_error_string(); - return false; - } - - // Convert the HANDLE to an fd and pass it to QFile's foreign-open - // function. The fd owns the handle, so when QFile later closes - // the fd the handle will be closed too. - int fd = _open_osfhandle((intptr_t)fileHandle, _O_RDONLY); - if (fd == -1) { - error = "could not make fd from handle"; - return false; - } - if (!file->open(fd, QIODevice::ReadOnly, QFile::AutoCloseHandle)) { - error = file->errorString(); - return false; - } - - // Seek to the right spot - LARGE_INTEGER *li = reinterpret_cast(&seek); - DWORD newFilePointer = SetFilePointer(fileHandle, li->LowPart, &li->HighPart, FILE_BEGIN); - if (newFilePointer == 0xFFFFFFFF && GetLastError() != NO_ERROR) { - error = qt_error_string(); - return false; - } - - return true; -#else - if (!file->open(QFile::ReadOnly)) { - error = file->errorString(); - return false; - } - if (!file->seek(seek)) { - error = file->errorString(); - return false; - } - return true; -#endif -} - #ifdef Q_OS_WIN static qint64 getSizeWithCsync(const QString &filename) { @@ -441,190 +139,5 @@ qint64 FileSystem::getSize(const QString &filename) return QFileInfo(filename).size(); } -#ifdef Q_OS_WIN -static bool fileExistsWin(const QString &filename) -{ - WIN32_FIND_DATA FindFileData; - HANDLE hFind; - QString fName = FileSystem::longWinPath(filename); - - hFind = FindFirstFileW((wchar_t *)fName.utf16(), &FindFileData); - if (hFind == INVALID_HANDLE_VALUE) { - return false; - } - FindClose(hFind); - return true; -} -#endif - -bool FileSystem::fileExists(const QString &filename, const QFileInfo &fileInfo) -{ -#ifdef Q_OS_WIN - if (isLnkFile(filename)) { - // Use a native check. - return fileExistsWin(filename); - } -#endif - bool re = fileInfo.exists(); - // if the filename is different from the filename in fileInfo, the fileInfo is - // not valid. There needs to be one initialised here. Otherwise the incoming - // fileInfo is re-used. - if (fileInfo.filePath() != filename) { - QFileInfo myFI(filename); - re = myFI.exists(); - } - return re; -} - -#ifdef Q_OS_WIN -QString FileSystem::fileSystemForPath(const QString &path) -{ - // See also QStorageInfo (Qt >=5.4) and GetVolumeInformationByHandleW (>= Vista) - QString drive = path.left(2); - if (!drive.endsWith(":")) - return QString(); - drive.append('\\'); - - const size_t fileSystemBufferSize = 4096; - TCHAR fileSystemBuffer[fileSystemBufferSize]; - - if (!GetVolumeInformationW( - reinterpret_cast(drive.utf16()), - NULL, 0, - NULL, NULL, NULL, - fileSystemBuffer, fileSystemBufferSize)) { - return QString(); - } - return QString::fromUtf16(reinterpret_cast(fileSystemBuffer)); -} -#endif - -#define BUFSIZE qint64(500 * 1024) // 500 KiB - -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); - QByteArray arr; - QCryptographicHash crypto(algo); - - if (file.open(QIODevice::ReadOnly)) { - qint64 size; - while (!file.atEnd()) { - size = file.read(buf.data(), bufSize); - if (size > 0) { - crypto.addData(buf.data(), size); - } - } - arr = crypto.result().toHex(); - } - return arr; -} - -QByteArray FileSystem::calcMd5(const QString &filename) -{ - return readToCrypto(filename, QCryptographicHash::Md5); -} - -QByteArray FileSystem::calcSha1(const QString &filename) -{ - return readToCrypto(filename, QCryptographicHash::Sha1); -} - -#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); - if (file.open(QIODevice::ReadOnly)) { - qint64 size; - while (!file.atEnd()) { - size = file.read(buf.data(), bufSize); - if (size > 0) - adler = adler32(adler, (const Bytef *)buf.data(), size); - } - } - - return QByteArray::number(adler, 16); -} -#endif - -QString FileSystem::makeConflictFileName(const QString &fn, const QDateTime &dt) -{ - QString conflictFileName(fn); - // Add _conflict-XXXX before the extension. - int dotLocation = conflictFileName.lastIndexOf('.'); - // If no extension, add it at the end (take care of cases like foo/.hidden or foo.bar/file) - if (dotLocation <= conflictFileName.lastIndexOf('/') + 1) { - dotLocation = conflictFileName.size(); - } - QString timeString = dt.toString("yyyyMMdd-hhmmss"); - - // Additional marker - QByteArray conflictFileUserName = qgetenv("CSYNC_CONFLICT_FILE_USERNAME"); - if (conflictFileUserName.isEmpty()) - conflictFileName.insert(dotLocation, "_conflict-" + timeString); - else - conflictFileName.insert(dotLocation, "_conflict_" + QString::fromUtf8(conflictFileUserName) + "-" + timeString); - - return conflictFileName; -} - -bool FileSystem::remove(const QString &fileName, QString *errorString) -{ -#ifdef Q_OS_WIN - // You cannot delete a read-only file on windows, but we want to - // allow that. - if (!QFileInfo(fileName).isWritable()) { - setFileReadOnly(fileName, false); - } -#endif - QFile f(fileName); - if (!f.remove()) { - if (errorString) { - *errorString = f.errorString(); - } - return false; - } - return true; -} - -bool FileSystem::isFileLocked(const QString &fileName) -{ -#ifdef Q_OS_WIN - mbchar_t *wuri = c_utf8_path_to_locale(fileName.toUtf8()); - - // Check if file exists - DWORD attr = GetFileAttributesW(wuri); - if (attr != INVALID_FILE_ATTRIBUTES) { - // Try to open the file with as much access as possible.. - HANDLE win_h = CreateFileW( - wuri, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS, - NULL); - - c_free_locale_string(wuri); - if (win_h == INVALID_HANDLE_VALUE) { - /* could not be opened, so locked? */ - /* 32 == ERROR_SHARING_VIOLATION */ - return true; - } else { - CloseHandle(win_h); - } - } else { - c_free_locale_string(wuri); - } -#else - Q_UNUSED(fileName); -#endif - return false; -} } // namespace OCC diff --git a/src/libsync/filesystem.h b/src/libsync/filesystem.h index 7494bdbd4..302a1790a 100644 --- a/src/libsync/filesystem.h +++ b/src/libsync/filesystem.h @@ -18,13 +18,12 @@ #include #include -#include -#include #include +// Chain in the base include and extend the namespace +#include "common/filesystembase.h" class QFile; -class QFileInfo; namespace OCC { @@ -43,39 +42,6 @@ namespace FileSystem { */ bool fileEquals(const QString &fn1, const QString &fn2); - /** - * @brief Mark the file as hidden (only has effects on windows) - */ - void OWNCLOUDSYNC_EXPORT setFileHidden(const QString &filename, bool hidden); - - /** - * @brief Marks the file as read-only. - * - * On linux this either revokes all 'w' permissions or restores permissions - * according to the umask. - */ - void OWNCLOUDSYNC_EXPORT setFileReadOnly(const QString &filename, bool readonly); - - /** - * @brief Marks the file as read-only. - * - * It's like setFileReadOnly(), but weaker: if readonly is false and the user - * already has write permissions, no change to the permissions is made. - * - * This means that it will preserve explicitly set rw-r--r-- permissions even - * when the umask is 0002. (setFileReadOnly() would adjust to rw-rw-r--) - */ - void OWNCLOUDSYNC_EXPORT setFileReadOnlyWeak(const QString &filename, bool readonly); - - /** - * @brief Try to set permissions so that other users on the local machine can not - * go into the folder. - */ - void OWNCLOUDSYNC_EXPORT setFolderMinimumPermissions(const QString &filename); - - /** convert a "normal" windows path into a path that can be 32k chars long. */ - QString OWNCLOUDSYNC_EXPORT longWinPath(const QString &inpath); - /** * @brief Get the mtime for a filepath * @@ -94,23 +60,6 @@ namespace FileSystem { */ qint64 OWNCLOUDSYNC_EXPORT getSize(const QString &filename); - /** - * @brief Checks whether a file exists. - * - * Use this over QFileInfo::exists() and QFile::exists() to avoid bugs with lnk - * files, see above. - */ - bool OWNCLOUDSYNC_EXPORT fileExists(const QString &filename, const QFileInfo & = QFileInfo()); - - /** - * @brief Rename the file \a originFileName to \a destinationFileName. - * - * It behaves as QFile::rename() but handles .lnk files correctly on Windows. - */ - bool OWNCLOUDSYNC_EXPORT rename(const QString &originFileName, - const QString &destinationFileName, - QString *errorString = NULL); - /** * @brief Check if \a fileName has changed given previous size and mtime * @@ -128,71 +77,6 @@ namespace FileSystem { bool verifyFileUnchanged(const QString &fileName, qint64 previousSize, time_t previousMtime); - - /** - * @brief renames a file, overriding the target if it exists - * - * Rename the file \a originFileName to \a destinationFileName, and - * overwrite the destination if it already exists - as long as the - * destination file has the expected \a destinationSize and - * \a destinationMtime. - * - * If the destination file does not exist, the given size and mtime are - * ignored. - */ - bool renameReplace(const QString &originFileName, - const QString &destinationFileName, - qint64 destinationSize, - time_t destinationMtime, - QString *errorString); - - /** - * Rename the file \a originFileName to \a destinationFileName, and - * overwrite the destination if it already exists - without extra checks. - */ - bool uncheckedRenameReplace(const QString &originFileName, - const QString &destinationFileName, - QString *errorString); - - /** - * Removes a file. - * - * Equivalent to QFile::remove(), except on Windows, where it will also - * successfully remove read-only files. - */ - bool OWNCLOUDSYNC_EXPORT remove(const QString &fileName, QString *errorString = 0); - - /** - * Replacement for QFile::open(ReadOnly) followed by a seek(). - * This version sets a more permissive sharing mode on Windows. - * - * Warning: The resulting file may have an empty fileName and be unsuitable for use - * with QFileInfo! Calling seek() on the QFile with >32bit signed values will fail! - */ - bool openAndSeekFileSharedRead(QFile *file, QString *error, qint64 seek); - -#ifdef Q_OS_WIN - /** - * Returns the file system used at the given path. - */ - QString fileSystemForPath(const QString &path); -#endif - - QByteArray OWNCLOUDSYNC_EXPORT calcMd5(const QString &fileName); - QByteArray OWNCLOUDSYNC_EXPORT calcSha1(const QString &fileName); -#ifdef ZLIB_FOUND - QByteArray OWNCLOUDSYNC_EXPORT calcAdler32(const QString &fileName); -#endif - - /** - * Returns a file name based on \a fn that's suitable for a conflict. - */ - QString OWNCLOUDSYNC_EXPORT makeConflictFileName(const QString &fn, const QDateTime &dt); - - /** - * Returns true when a file is locked. (Windows only) - */ - bool OWNCLOUDSYNC_EXPORT isFileLocked(const QString &fileName); } /** @} */ diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index d963b8667..5f344fa08 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -12,6 +12,7 @@ * for more details. */ +#include #include #include #include diff --git a/test/csync/encoding_tests/check_encoding.cpp b/test/csync/encoding_tests/check_encoding.cpp index 2f327a3b0..d2459b8d2 100644 --- a/test/csync/encoding_tests/check_encoding.cpp +++ b/test/csync/encoding_tests/check_encoding.cpp @@ -21,6 +21,8 @@ #include "c_string.h" #include "c_path.h" #include "c_utf8.h" +#include "common/filesystembase.h" +#include "torture.h" #ifdef _WIN32 #include @@ -116,41 +118,36 @@ static void check_long_win_path(void **state) { const char *path = "C://DATA/FILES/MUSIC/MY_MUSIC.mp3"; // check a short path const char *exp_path = "\\\\?\\C:\\\\DATA\\FILES\\MUSIC\\MY_MUSIC.mp3"; - const char *new_short = c_path_to_UNC(path); + QByteArray new_short = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(path, strlen(path))); assert_string_equal(new_short, exp_path); - SAFE_FREE(new_short); } { const char *path = "\\\\foo\\bar/MY_MUSIC.mp3"; const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3"; - const char *new_short = c_path_to_UNC(path); + QByteArray new_short = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(path, strlen(path))); assert_string_equal(new_short, exp_path); - SAFE_FREE(new_short); } { const char *path = "//foo\\bar/MY_MUSIC.mp3"; const char *exp_path = "\\\\foo\\bar\\MY_MUSIC.mp3"; - const char *new_short = c_path_to_UNC(path); + QByteArray new_short = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(path, strlen(path))); assert_string_equal(new_short, exp_path); - SAFE_FREE(new_short); } { const char *path = "\\foo\\bar"; const char *exp_path = "\\\\?\\foo\\bar"; - const char *new_short = c_path_to_UNC(path); + QByteArray new_short = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(path, strlen(path))); assert_string_equal(new_short, exp_path); - SAFE_FREE(new_short); } { const char *path = "/foo/bar"; const char *exp_path = "\\\\?\\foo\\bar"; - const char *new_short = c_path_to_UNC(path); + QByteArray new_short = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(path, strlen(path))); assert_string_equal(new_short, exp_path); - SAFE_FREE(new_short); } const char *longPath = "D://alonglonglonglong/blonglonglonglong/clonglonglonglong/dlonglonglonglong/" @@ -162,14 +159,13 @@ static void check_long_win_path(void **state) "jlonglonglonglong\\klonglonglonglong\\llonglonglonglong\\mlonglonglonglong\\nlonglonglonglong\\" "olonglonglonglong\\file.txt"; - const char *new_long = c_path_to_UNC(longPath); + QByteArray new_long = OCC::FileSystem::pathtoUNC(QByteArray::fromRawData(longPath, strlen(longPath))); // printf( "XXXXXXXXXXXX %s %d\n", new_long, mem_reserved); assert_string_equal(new_long, longPathConv); // printf( "YYYYYYYYYYYY %ld\n", strlen(new_long)); assert_int_equal( strlen(new_long), 286); - SAFE_FREE(new_long); } int torture_run_tests(void) From 5fbed0d1cd85f5bca4c865af543bda12af47226c Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 30 Aug 2017 11:17:23 +0200 Subject: [PATCH 067/166] Reverse the dependency between SyncJournalFileRecord and SyncFileItem This will allow us to also use the SyncJournalDB in csync. --- src/libsync/CMakeLists.txt | 1 + src/libsync/owncloudpropagator.cpp | 14 ++-- src/libsync/propagatedownload.cpp | 2 +- src/libsync/propagateremotemkdir.cpp | 2 +- src/libsync/propagateremotemove.cpp | 2 +- src/libsync/propagateupload.cpp | 2 +- src/libsync/propagatorjobs.cpp | 4 +- src/libsync/syncengine.cpp | 2 +- src/libsync/syncfileitem.cpp | 71 +++++++++++++++++++ src/libsync/syncfileitem.h | 15 +++- src/libsync/syncjournalfilerecord.cpp | 98 --------------------------- src/libsync/syncjournalfilerecord.h | 13 ---- 12 files changed, 103 insertions(+), 123 deletions(-) create mode 100644 src/libsync/syncfileitem.cpp diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 3015d7fe3..c7ac8ef08 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -51,6 +51,7 @@ set(libsync_SRCS propagateremotemove.cpp propagateremotemkdir.cpp syncengine.cpp + syncfileitem.cpp syncfilestatus.cpp syncfilestatustracker.cpp syncjournaldb.cpp diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 7af77926c..c8bd46cd4 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -133,7 +133,13 @@ static time_t getMaxBlacklistTime() static SyncJournalErrorBlacklistRecord createBlacklistEntry( const SyncJournalErrorBlacklistRecord &old, const SyncFileItem &item) { - auto entry = SyncJournalErrorBlacklistRecord::fromSyncFileItem(item); + SyncJournalErrorBlacklistRecord entry; + entry._file = item._file; + entry._errorString = item._errorString; + entry._lastTryModtime = item._modtime; + entry._lastTryEtag = item._etag; + entry._lastTryTime = Utility::qDateTimeToTime_t(QDateTime::currentDateTime()); + entry._renameTarget = item._renameTarget; entry._retryCount = old._retryCount + 1; static time_t minBlacklistTime(getMinBlacklistTime()); @@ -929,7 +935,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status) _item->_fileId = mkdir->_item->_fileId; } } - SyncJournalFileRecord record(*_item, propagator()->_localDir + _item->_file); + SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(propagator()->_localDir + _item->_file); bool ok = propagator()->_journal->setFileRecordMetadata(record); if (!ok) { status = _item->_status = SyncFileItem::FatalError; @@ -959,8 +965,8 @@ void CleanupPollsJob::start() auto info = _pollInfos.first(); _pollInfos.pop_front(); SyncJournalFileRecord record = _journal->getFileRecord(info._file); - SyncFileItemPtr item(new SyncFileItem(record.toSyncFileItem())); if (record.isValid()) { + SyncFileItemPtr item = SyncFileItem::fromSyncJournalFileRecord(record); PollJob *job = new PollJob(_account, info._url, item, _journal, _localPath, this); connect(job, SIGNAL(finishedSignal()), SLOT(slotPollFinished())); job->start(); @@ -978,7 +984,7 @@ void CleanupPollsJob::slotPollFinished() } else if (job->_item->_status != SyncFileItem::Success) { qCWarning(lcCleanupPolls) << "There was an error with file " << job->_item->_file << job->_item->_errorString; } else { - if (!_journal->setFileRecord(SyncJournalFileRecord(*job->_item, _localPath + job->_item->_file))) { + if (!_journal->setFileRecord(job->_item->toSyncJournalFileRecordWithInode(_localPath + job->_item->_file))) { qCWarning(lcCleanupPolls) << "database error"; job->_item->_status = SyncFileItem::FatalError; job->_item->_errorString = tr("Error writing metadata to the database"); diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 0168713f4..21af4d45c 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -873,7 +873,7 @@ void PropagateDownloadFile::updateMetadata(bool isConflict) { QString fn = propagator()->getFilePath(_item->_file); - if (!propagator()->_journal->setFileRecord(SyncJournalFileRecord(*_item, fn))) { + if (!propagator()->_journal->setFileRecord(_item->toSyncJournalFileRecordWithInode(fn))) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; } diff --git a/src/libsync/propagateremotemkdir.cpp b/src/libsync/propagateremotemkdir.cpp index f293fa0a9..92ba2b9a5 100644 --- a/src/libsync/propagateremotemkdir.cpp +++ b/src/libsync/propagateremotemkdir.cpp @@ -142,7 +142,7 @@ void PropagateRemoteMkdir::propfindError() void PropagateRemoteMkdir::success() { // save the file id already so we can detect rename or remove - SyncJournalFileRecord record(*_item, propagator()->_localDir + _item->destination()); + SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(propagator()->_localDir + _item->destination()); if (!propagator()->_journal->setFileRecord(record)) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index a45736564..7f0d8785b 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -170,7 +170,7 @@ void PropagateRemoteMove::finalize() // to the new record. It is not a problem to skip it here. propagator()->_journal->deleteFileRecord(_item->_originalFile); - SyncJournalFileRecord record(*_item, propagator()->getFilePath(_item->_renameTarget)); + SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(propagator()->getFilePath(_item->_renameTarget)); record._path = _item->_renameTarget; if (oldRecord.isValid()) { record._checksumHeader = oldRecord._checksumHeader; diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index f72d36ca7..c49be0785 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -614,7 +614,7 @@ void PropagateUploadFileCommon::finalize() quotaIt.value() -= _item->_size; // Update the database entry - if (!propagator()->_journal->setFileRecord(SyncJournalFileRecord(*_item, propagator()->getFilePath(_item->_file)))) { + if (!propagator()->_journal->setFileRecord(_item->toSyncJournalFileRecordWithInode(propagator()->getFilePath(_item->_file)))) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); return; } diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index de9339996..1d841abb4 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -178,7 +178,7 @@ void PropagateLocalMkdir::start() // Adding an entry with a dummy etag to the database still makes sense here // so the database is aware that this folder exists even if the sync is aborted // before the correct etag is stored. - SyncJournalFileRecord record(*_item, newDirStr); + SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(newDirStr); record._etag = "_invalid_"; if (!propagator()->_journal->setFileRecord(record)) { done(SyncFileItem::FatalError, tr("Error writing metadata to the database")); @@ -239,7 +239,7 @@ void PropagateLocalRename::start() const auto oldFile = _item->_file; _item->_file = _item->_renameTarget; - SyncJournalFileRecord record(*_item, targetFile); + SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(targetFile); record._path = _item->_renameTarget; if (oldRecord.isValid()) { record._checksumHeader = oldRecord._checksumHeader; diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index a2afbedde..5a0a56cf9 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -590,7 +590,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, FileSystem::setFileReadOnlyWeak(filePath, isReadOnly); } - _journal->setFileRecordMetadata(SyncJournalFileRecord(*item, filePath)); + _journal->setFileRecordMetadata(item->toSyncJournalFileRecordWithInode(filePath)); } else { // The local tree is walked first and doesn't have all the info from the server. // Update only outdated data from the disk. diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp new file mode 100644 index 000000000..681d703c9 --- /dev/null +++ b/src/libsync/syncfileitem.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (C) by Klaas Freitag + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include "syncfileitem.h" +#include "syncjournalfilerecord.h" +#include "common/utility.h" + +#include +#include "csync/vio/csync_vio_local.h" + +namespace OCC { + +Q_LOGGING_CATEGORY(lcFileItem, "sync.fileitem", QtInfoMsg) + +SyncJournalFileRecord SyncFileItem::toSyncJournalFileRecordWithInode(const QString &localFileName) +{ + SyncJournalFileRecord rec; + rec._path = _file; + rec._modtime = Utility::qDateTimeFromTime_t(_modtime); + rec._type = _type; + rec._etag = _etag; + rec._fileId = _fileId; + rec._fileSize = _size; + rec._remotePerm = _remotePerm; + rec._serverHasIgnoredFiles = _serverHasIgnoredFiles; + rec._checksumHeader = _checksumHeader; + + // Go through csync vio just to get the inode. + csync_file_stat_t fs; + if (csync_vio_local_stat(localFileName.toUtf8().constData(), &fs) == 0) { + rec._inode = fs.inode; + qCDebug(lcFileItem) << localFileName << "Retrieved inode " << _inode << "(previous item inode: " << _inode << ")"; + } else { + // use the "old" inode coming with the item for the case where the + // filesystem stat fails. That can happen if the the file was removed + // or renamed meanwhile. For the rename case we still need the inode to + // detect the rename though. + rec._inode = _inode; + qCWarning(lcFileItem) << "Failed to query the 'inode' for file " << localFileName; + } + return rec; +} + +SyncFileItemPtr SyncFileItem::fromSyncJournalFileRecord(const SyncJournalFileRecord &rec) +{ + SyncFileItemPtr item(new SyncFileItem); + item->_file = rec._path; + item->_inode = rec._inode; + item->_modtime = Utility::qDateTimeToTime_t(rec._modtime); + item->_type = static_cast(rec._type); + item->_etag = rec._etag; + item->_fileId = rec._fileId; + item->_size = rec._fileSize; + item->_remotePerm = rec._remotePerm; + item->_serverHasIgnoredFiles = rec._serverHasIgnoredFiles; + item->_checksumHeader = rec._checksumHeader; + return item; +} + +} diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index 8c546038a..ab9526a93 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -25,6 +25,10 @@ namespace OCC { +class SyncFileItem; +class SyncJournalFileRecord; +typedef QSharedPointer SyncFileItemPtr; + /** * @brief The SyncFileItem class * @ingroup libsync @@ -86,6 +90,16 @@ public: BlacklistedError }; + SyncJournalFileRecord toSyncJournalFileRecordWithInode(const QString &localFileName); + + /** Creates a basic SyncFileItem from a DB record + * + * This is intended in particular for read-update-write cycles that need + * to go through a a SyncFileItem, like PollJob. + */ + static SyncFileItemPtr fromSyncJournalFileRecord(const SyncJournalFileRecord &rec); + + SyncFileItem() : _type(UnknownType) , _direction(None) @@ -232,7 +246,6 @@ public: QString _directDownloadCookies; }; -typedef QSharedPointer SyncFileItemPtr; inline bool operator<(const SyncFileItemPtr &item1, const SyncFileItemPtr &item2) { return *item1 < *item2; diff --git a/src/libsync/syncjournalfilerecord.cpp b/src/libsync/syncjournalfilerecord.cpp index 9c68e646c..5936f0f50 100644 --- a/src/libsync/syncjournalfilerecord.cpp +++ b/src/libsync/syncjournalfilerecord.cpp @@ -13,23 +13,10 @@ */ #include "syncjournalfilerecord.h" -#include "syncfileitem.h" #include "common/utility.h" -#include "filesystem.h" - -#include -#include - -#ifdef Q_OS_WIN -#include -#else -#include -#endif namespace OCC { -Q_LOGGING_CATEGORY(lcFileRecord, "sync.database.filerecord", QtInfoMsg) - SyncJournalFileRecord::SyncJournalFileRecord() : _inode(0) , _type(0) @@ -38,77 +25,6 @@ SyncJournalFileRecord::SyncJournalFileRecord() { } -SyncJournalFileRecord::SyncJournalFileRecord(const SyncFileItem &item, const QString &localFileName) - : _path(item._file) - , _modtime(Utility::qDateTimeFromTime_t(item._modtime)) - , _type(item._type) - , _etag(item._etag) - , _fileId(item._fileId) - , _fileSize(item._size) - , _remotePerm(item._remotePerm) - , _serverHasIgnoredFiles(item._serverHasIgnoredFiles) - , _checksumHeader(item._checksumHeader) -{ - // use the "old" inode coming with the item for the case where the - // filesystem stat fails. That can happen if the the file was removed - // or renamed meanwhile. For the rename case we still need the inode to - // detect the rename though. - _inode = item._inode; - -#ifdef Q_OS_WIN - /* Query the inode: - based on code from csync_vio_local.c (csync_vio_local_stat) - Get the Windows file id as an inode replacement. */ - - HANDLE h = CreateFileW((wchar_t *)FileSystem::longWinPath(localFileName).utf16(), 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, - FILE_ATTRIBUTE_NORMAL + FILE_FLAG_BACKUP_SEMANTICS, NULL); - - if (h == INVALID_HANDLE_VALUE) { - qCWarning(lcFileRecord) << "Failed to query the 'inode' because CreateFileW failed for file " << localFileName; - } else { - BY_HANDLE_FILE_INFORMATION fileInfo; - - if (GetFileInformationByHandle(h, &fileInfo)) { - ULARGE_INTEGER FileIndex; - FileIndex.HighPart = fileInfo.nFileIndexHigh; - FileIndex.LowPart = fileInfo.nFileIndexLow; - FileIndex.QuadPart &= 0x0000FFFFFFFFFFFF; - - /* printf("Index: %I64i\n", FileIndex.QuadPart); */ - - _inode = FileIndex.QuadPart; - } else { - qCWarning(lcFileRecord) << "Failed to query the 'inode' for file " << localFileName; - } - CloseHandle(h); - } -#else - struct stat sb; - if (stat(QFile::encodeName(localFileName).constData(), &sb) < 0) { - qCWarning(lcFileRecord) << "Failed to query the 'inode' for file " << localFileName; - } else { - _inode = sb.st_ino; - } -#endif - qCDebug(lcFileRecord) << localFileName << "Retrieved inode " << _inode << "(previous item inode: " << item._inode << ")"; -} - -SyncFileItem SyncJournalFileRecord::toSyncFileItem() -{ - SyncFileItem item; - item._file = _path; - item._inode = _inode; - item._modtime = Utility::qDateTimeToTime_t(_modtime); - item._type = static_cast(_type); - item._etag = _etag; - item._fileId = _fileId; - item._size = _fileSize; - item._remotePerm = _remotePerm; - item._serverHasIgnoredFiles = _serverHasIgnoredFiles; - item._checksumHeader = _checksumHeader; - return item; -} - QByteArray SyncJournalFileRecord::numericFileId() const { // Use the id up until the first non-numeric character @@ -120,20 +36,6 @@ QByteArray SyncJournalFileRecord::numericFileId() const return _fileId; } -SyncJournalErrorBlacklistRecord SyncJournalErrorBlacklistRecord::fromSyncFileItem( - const SyncFileItem &item) -{ - SyncJournalErrorBlacklistRecord record; - record._file = item._file; - record._errorString = item._errorString; - record._lastTryModtime = item._modtime; - record._lastTryEtag = item._etag; - record._lastTryTime = Utility::qDateTimeToTime_t(QDateTime::currentDateTime()); - record._renameTarget = item._renameTarget; - record._retryCount = 1; - return record; -} - bool SyncJournalErrorBlacklistRecord::isValid() const { return !_file.isEmpty() diff --git a/src/libsync/syncjournalfilerecord.h b/src/libsync/syncjournalfilerecord.h index 6ef0ba169..86d214908 100644 --- a/src/libsync/syncjournalfilerecord.h +++ b/src/libsync/syncjournalfilerecord.h @@ -33,16 +33,6 @@ class OWNCLOUDSYNC_EXPORT SyncJournalFileRecord public: SyncJournalFileRecord(); - /// Creates a record from an existing item while updating the inode - SyncJournalFileRecord(const SyncFileItem &, const QString &localFileName); - - /** Creates a basic SyncFileItem from the record - * - * This is intended in particular for read-update-write cycles that need - * to go through a a SyncFileItem, like PollJob. - */ - SyncFileItem toSyncFileItem(); - bool isValid() { return !_path.isEmpty(); @@ -91,9 +81,6 @@ public: { } - /// Create a record based on an item. - static SyncJournalErrorBlacklistRecord fromSyncFileItem(const SyncFileItem &item); - /// The number of times the operation was unsuccessful so far. int _retryCount; From a1f1775d159c9ce3c7c0e569fe4f20f80a2bcf00 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 1 Sep 2017 18:11:43 +0200 Subject: [PATCH 068/166] Move SyncJournalDB to src/common --- src/cmd/cmd.cpp | 2 +- src/{libsync => common}/asserts.h | 0 src/{csync/std => common}/c_jhash.h | 2 +- src/{libsync => common}/checksums.cpp | 27 ++++++----- src/{libsync => common}/checksums.h | 47 ++++++++++++------- src/common/common.cmake | 4 ++ src/{libsync => common}/ownsql.cpp | 23 +++++---- src/{libsync => common}/ownsql.h | 26 +++++----- src/{libsync => common}/syncjournaldb.cpp | 34 +++++++------- src/{libsync => common}/syncjournaldb.h | 30 +++++++----- .../syncjournalfilerecord.cpp | 22 +++++---- .../syncjournalfilerecord.h | 28 ++++++----- src/csync/CMakeLists.txt | 3 +- src/csync/csync.cpp | 2 +- src/csync/csync_reconcile.cpp | 2 +- src/csync/csync_statedb.cpp | 2 +- src/csync/csync_util.cpp | 2 +- src/csync/vio/csync_vio.cpp | 2 +- src/gui/creds/httpcredentialsgui.cpp | 2 +- src/gui/folder.cpp | 2 +- src/gui/folder.h | 2 +- src/gui/folderman.cpp | 2 +- src/gui/folderstatusmodel.cpp | 2 +- src/gui/folderwizard.cpp | 2 +- src/gui/issueswidget.cpp | 2 +- src/gui/notificationwidget.cpp | 2 +- src/gui/owncloudgui.cpp | 2 +- src/gui/socketapi.cpp | 4 +- src/gui/socketapi.h | 2 +- src/libsync/CMakeLists.txt | 8 +--- src/libsync/account.cpp | 2 +- src/libsync/configfile.cpp | 2 +- src/libsync/creds/abstractcredentials.cpp | 2 +- src/libsync/discoveryphase.cpp | 2 +- src/libsync/owncloudpropagator.cpp | 6 +-- src/libsync/owncloudpropagator.h | 2 +- src/libsync/propagatedownload.cpp | 8 ++-- src/libsync/propagateremotedelete.cpp | 2 +- src/libsync/propagateremotemkdir.cpp | 4 +- src/libsync/propagateremotemove.cpp | 4 +- src/libsync/propagateupload.cpp | 8 ++-- src/libsync/propagateuploadng.cpp | 6 +-- src/libsync/propagateuploadv1.cpp | 8 ++-- src/libsync/propagatorjobs.cpp | 4 +- src/libsync/propagatorjobs.h | 10 +--- src/libsync/syncengine.cpp | 6 +-- src/libsync/syncengine.h | 2 +- src/libsync/syncfileitem.cpp | 2 +- src/libsync/syncfilestatustracker.cpp | 6 +-- src/libsync/syncfilestatustracker.h | 2 +- test/csync/std_tests/check_std_c_jhash.c | 2 +- test/syncenginetestutils.h | 2 +- test/testchecksumvalidator.cpp | 2 +- test/testownsql.cpp | 2 +- test/testsyncjournaldb.cpp | 4 +- test/testuploadreset.cpp | 2 +- 56 files changed, 209 insertions(+), 183 deletions(-) rename src/{libsync => common}/asserts.h (100%) rename src/{csync/std => common}/c_jhash.h (99%) rename src/{libsync => common}/checksums.cpp (89%) rename src/{libsync => common}/checksums.h (63%) rename src/{libsync => common}/ownsql.cpp (93%) rename src/{libsync => common}/ownsql.h (67%) rename src/{libsync => common}/syncjournaldb.cpp (98%) rename src/{libsync => common}/syncjournaldb.h (91%) rename src/{libsync => common}/syncjournalfilerecord.cpp (61%) rename src/{libsync => common}/syncjournalfilerecord.h (69%) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 60d54a1c4..d8d836ecf 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -31,7 +31,7 @@ #include "creds/httpcredentials.h" #include "simplesslerrorhandler.h" #include "syncengine.h" -#include "syncjournaldb.h" +#include "common/syncjournaldb.h" #include "config.h" #include "connectionvalidator.h" diff --git a/src/libsync/asserts.h b/src/common/asserts.h similarity index 100% rename from src/libsync/asserts.h rename to src/common/asserts.h diff --git a/src/csync/std/c_jhash.h b/src/common/c_jhash.h similarity index 99% rename from src/csync/std/c_jhash.h rename to src/common/c_jhash.h index 261a0a4a4..699244a0d 100644 --- a/src/csync/std/c_jhash.h +++ b/src/common/c_jhash.h @@ -12,7 +12,7 @@ */ /** - * @file c_jhash.h + * @file common/c_jhash.h * * @brief Interface of the cynapses jhash implementation * diff --git a/src/libsync/checksums.cpp b/src/common/checksums.cpp similarity index 89% rename from src/libsync/checksums.cpp rename to src/common/checksums.cpp index 448b5d477..6ffb57385 100644 --- a/src/libsync/checksums.cpp +++ b/src/common/checksums.cpp @@ -1,22 +1,23 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" -#include "filesystem.h" -#include "checksums.h" -#include "syncfileitem.h" -#include "propagatorjobs.h" -#include "account.h" +#include "filesystembase.h" +#include "common/checksums.h" #include #include diff --git a/src/libsync/checksums.h b/src/common/checksums.h similarity index 63% rename from src/libsync/checksums.h rename to src/common/checksums.h index 3c31c8c03..fa8bf3313 100644 --- a/src/libsync/checksums.h +++ b/src/common/checksums.h @@ -1,21 +1,24 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #pragma once -#include "owncloudlib.h" -#include "accountfwd.h" +#include "ocsynclib.h" #include #include @@ -23,29 +26,37 @@ namespace OCC { +/** + * Tags for checksum headers values. + * They are here for being shared between Upload- and Download Job + */ +static const char checkSumMD5C[] = "MD5"; +static const char checkSumSHA1C[] = "SHA1"; +static const char checkSumAdlerC[] = "Adler32"; + class SyncJournalDb; /// Creates a checksum header from type and value. -QByteArray makeChecksumHeader(const QByteArray &checksumType, const QByteArray &checksum); +OCSYNC_EXPORT QByteArray makeChecksumHeader(const QByteArray &checksumType, const QByteArray &checksum); /// Parses a checksum header -bool parseChecksumHeader(const QByteArray &header, QByteArray *type, QByteArray *checksum); +OCSYNC_EXPORT bool parseChecksumHeader(const QByteArray &header, QByteArray *type, QByteArray *checksum); /// Convenience for getting the type from a checksum header, null if none -QByteArray parseChecksumHeaderType(const QByteArray &header); +OCSYNC_EXPORT QByteArray parseChecksumHeaderType(const QByteArray &header); /// Checks OWNCLOUD_DISABLE_CHECKSUM_UPLOAD -bool uploadChecksumEnabled(); +OCSYNC_EXPORT bool uploadChecksumEnabled(); /// Checks OWNCLOUD_CONTENT_CHECKSUM_TYPE (default: SHA1) -QByteArray contentChecksumType(); +OCSYNC_EXPORT QByteArray contentChecksumType(); /** * Computes the checksum of a file. * \ingroup libsync */ -class OWNCLOUDSYNC_EXPORT ComputeChecksum : public QObject +class OCSYNC_EXPORT ComputeChecksum : public QObject { Q_OBJECT public: @@ -87,7 +98,7 @@ private: * Checks whether a file's checksum matches the expected value. * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT ValidateChecksumHeader : public QObject +class OCSYNC_EXPORT ValidateChecksumHeader : public QObject { Q_OBJECT public: @@ -118,7 +129,7 @@ private: * Hooks checksum computations into csync. * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT CSyncChecksumHook : public QObject +class OCSYNC_EXPORT CSyncChecksumHook : public QObject { Q_OBJECT public: diff --git a/src/common/common.cmake b/src/common/common.cmake index ab1ca1e83..e448868c6 100644 --- a/src/common/common.cmake +++ b/src/common/common.cmake @@ -2,6 +2,10 @@ # Essentially they could be in the same directory but are separate to # help keep track of the different code licenses. set(common_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/checksums.cpp ${CMAKE_CURRENT_LIST_DIR}/filesystembase.cpp + ${CMAKE_CURRENT_LIST_DIR}/ownsql.cpp + ${CMAKE_CURRENT_LIST_DIR}/syncjournaldb.cpp + ${CMAKE_CURRENT_LIST_DIR}/syncjournalfilerecord.cpp ${CMAKE_CURRENT_LIST_DIR}/utility.cpp ) diff --git a/src/libsync/ownsql.cpp b/src/common/ownsql.cpp similarity index 93% rename from src/libsync/ownsql.cpp rename to src/common/ownsql.cpp index e66fdfb3e..2bda1ab09 100644 --- a/src/libsync/ownsql.cpp +++ b/src/common/ownsql.cpp @@ -1,18 +1,21 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ - #include #include #include @@ -22,7 +25,7 @@ #include "ownsql.h" #include "common/utility.h" -#include "asserts.h" +#include "common/asserts.h" #define SQLITE_SLEEP_TIME_USEC 100000 #define SQLITE_REPEAT_COUNT 20 diff --git a/src/libsync/ownsql.h b/src/common/ownsql.h similarity index 67% rename from src/libsync/ownsql.h rename to src/common/ownsql.h index 72c749091..a7f3c2bf0 100644 --- a/src/libsync/ownsql.h +++ b/src/common/ownsql.h @@ -1,15 +1,19 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef OWNSQL_H @@ -20,7 +24,7 @@ #include #include -#include "owncloudlib.h" +#include "ocsynclib.h" namespace OCC { @@ -28,7 +32,7 @@ namespace OCC { * @brief The SqlDatabase class * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT SqlDatabase +class OCSYNC_EXPORT SqlDatabase { Q_DISABLE_COPY(SqlDatabase) public: @@ -56,7 +60,7 @@ private: * @brief The SqlQuery class * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT SqlQuery +class OCSYNC_EXPORT SqlQuery { Q_DISABLE_COPY(SqlQuery) public: diff --git a/src/libsync/syncjournaldb.cpp b/src/common/syncjournaldb.cpp similarity index 98% rename from src/libsync/syncjournaldb.cpp rename to src/common/syncjournaldb.cpp index 5f344fa08..d1dae8f66 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -1,15 +1,19 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -20,17 +24,13 @@ #include #include -#include "ownsql.h" - -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" -#include "common/utility.h" +#include "common/syncjournaldb.h" #include "version.h" -#include "filesystem.h" -#include "asserts.h" -#include "checksums.h" +#include "filesystembase.h" +#include "common/asserts.h" +#include "common/checksums.h" -#include "std/c_jhash.h" +#include "common/c_jhash.h" namespace OCC { diff --git a/src/libsync/syncjournaldb.h b/src/common/syncjournaldb.h similarity index 91% rename from src/libsync/syncjournaldb.h rename to src/common/syncjournaldb.h index da8054109..0afefebcf 100644 --- a/src/libsync/syncjournaldb.h +++ b/src/common/syncjournaldb.h @@ -1,15 +1,19 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SYNCJOURNALDB_H @@ -21,8 +25,8 @@ #include #include "common/utility.h" -#include "ownsql.h" -#include "syncjournalfilerecord.h" +#include "common/ownsql.h" +#include "common/syncjournalfilerecord.h" namespace OCC { class SyncJournalFileRecord; @@ -33,7 +37,7 @@ class SyncJournalFileRecord; * This class is thread safe. All public functions lock the mutex. * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT SyncJournalDb : public QObject +class OCSYNC_EXPORT SyncJournalDb : public QObject { Q_OBJECT public: @@ -265,10 +269,10 @@ private: QString _journalMode; }; -bool OWNCLOUDSYNC_EXPORT +bool OCSYNC_EXPORT operator==(const SyncJournalDb::DownloadInfo &lhs, const SyncJournalDb::DownloadInfo &rhs); -bool OWNCLOUDSYNC_EXPORT +bool OCSYNC_EXPORT operator==(const SyncJournalDb::UploadInfo &lhs, const SyncJournalDb::UploadInfo &rhs); diff --git a/src/libsync/syncjournalfilerecord.cpp b/src/common/syncjournalfilerecord.cpp similarity index 61% rename from src/libsync/syncjournalfilerecord.cpp rename to src/common/syncjournalfilerecord.cpp index 5936f0f50..c6a77b997 100644 --- a/src/libsync/syncjournalfilerecord.cpp +++ b/src/common/syncjournalfilerecord.cpp @@ -1,18 +1,22 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" namespace OCC { diff --git a/src/libsync/syncjournalfilerecord.h b/src/common/syncjournalfilerecord.h similarity index 69% rename from src/libsync/syncjournalfilerecord.h rename to src/common/syncjournalfilerecord.h index 86d214908..ca8430469 100644 --- a/src/libsync/syncjournalfilerecord.h +++ b/src/common/syncjournalfilerecord.h @@ -1,15 +1,19 @@ /* * Copyright (C) by Klaas Freitag * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef SYNCJOURNALFILERECORD_H @@ -18,7 +22,7 @@ #include #include -#include "owncloudlib.h" +#include "ocsynclib.h" namespace OCC { @@ -28,7 +32,7 @@ class SyncFileItem; * @brief The SyncJournalFileRecord class * @ingroup libsync */ -class OWNCLOUDSYNC_EXPORT SyncJournalFileRecord +class OCSYNC_EXPORT SyncJournalFileRecord { public: SyncJournalFileRecord(); @@ -58,11 +62,11 @@ public: QByteArray _checksumHeader; }; -bool OWNCLOUDSYNC_EXPORT +bool OCSYNC_EXPORT operator==(const SyncJournalFileRecord &lhs, const SyncJournalFileRecord &rhs); -class SyncJournalErrorBlacklistRecord +class OCSYNC_EXPORT SyncJournalErrorBlacklistRecord { public: enum Category { diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index e265b95d9..acb1cc7c2 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -1,4 +1,5 @@ project(libcsync) +set(CMAKE_AUTOMOC TRUE) # global needed variables set(APPLICATION_NAME "ocsync") @@ -134,7 +135,7 @@ if(ZLIB_FOUND) endif(ZLIB_FOUND) find_package(Qt5Core REQUIRED) -qt5_use_modules(${CSYNC_LIBRARY} Core) +qt5_use_modules(${CSYNC_LIBRARY} Core Concurrent) # For src/common/utility_mac.cpp if (APPLE) diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index ac096ae2b..6c36637b8 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -49,7 +49,7 @@ #include "csync_log.h" #include "csync_rename.h" -#include "c_jhash.h" +#include "common/c_jhash.h" csync_s::csync_s(const char *localUri, const char *db_file) { diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index ee7eee7a1..dd1cad68e 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -26,7 +26,7 @@ #include "csync_util.h" #include "csync_statedb.h" #include "csync_rename.h" -#include "c_jhash.h" +#include "common/c_jhash.h" #define CSYNC_LOG_CATEGORY_NAME "csync.reconciler" #include "csync_log.h" diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 7f7ed0c29..89ac83fd7 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -41,7 +41,7 @@ #include "csync_exclude.h" #include "c_string.h" -#include "c_jhash.h" +#include "common/c_jhash.h" #include "c_utf8.h" #include "csync_time.h" diff --git a/src/csync/csync_util.cpp b/src/csync/csync_util.cpp index 4fc13a471..d90a2eacc 100644 --- a/src/csync/csync_util.cpp +++ b/src/csync/csync_util.cpp @@ -30,7 +30,7 @@ #include #include -#include "c_jhash.h" +#include "common/c_jhash.h" #include "csync_util.h" #include "vio/csync_vio.h" diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index 57eb46c39..dab04d3df 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -31,7 +31,7 @@ #include "vio/csync_vio.h" #include "vio/csync_vio_local.h" #include "csync_statedb.h" -#include "std/c_jhash.h" +#include "common/c_jhash.h" #define CSYNC_LOG_CATEGORY_NAME "csync.vio.main" diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index 98e4df907..bc533db86 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -24,7 +24,7 @@ #include "account.h" #include "networkjobs.h" #include -#include "asserts.h" +#include "common/asserts.h" using namespace QKeychain; diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 961e8754c..864c496bf 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -22,7 +22,7 @@ #include "logger.h" #include "configfile.h" #include "networkjobs.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "syncresult.h" #include "clientproxy.h" #include "syncengine.h" diff --git a/src/gui/folder.h b/src/gui/folder.h index 1c67c0722..7b503a6d6 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -19,7 +19,7 @@ #include "syncresult.h" #include "progressdispatcher.h" -#include "syncjournaldb.h" +#include "common/syncjournaldb.h" #include "clientproxy.h" #include "networkjobs.h" diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index bb56db2ef..475eb4f1a 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -23,7 +23,7 @@ #include "accountmanager.h" #include "filesystem.h" #include "lockwatcher.h" -#include "asserts.h" +#include "common/asserts.h" #include #ifdef Q_OS_MAC diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index 16e2ab0e0..a7b38dc43 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -15,7 +15,7 @@ #include "folderstatusmodel.h" #include "folderman.h" #include "accountstate.h" -#include "asserts.h" +#include "common/asserts.h" #include #include #include "folderstatusdelegate.h" diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 26ce66dfd..283f34856 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -22,7 +22,7 @@ #include "accountstate.h" #include "creds/abstractcredentials.h" #include "wizard/owncloudwizard.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index 19e69c014..40f2822b7 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -29,7 +29,7 @@ #include "accountstate.h" #include "account.h" #include "accountmanager.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "elidedlabel.h" #include "ui_issueswidget.h" diff --git a/src/gui/notificationwidget.cpp b/src/gui/notificationwidget.cpp index 0457857b8..bcada1075 100644 --- a/src/gui/notificationwidget.cpp +++ b/src/gui/notificationwidget.cpp @@ -15,7 +15,7 @@ #include "notificationwidget.h" #include "QProgressIndicator.h" #include "common/utility.h" -#include "asserts.h" +#include "common/asserts.h" #include diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index cb0cafbd8..e5a398c8e 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -32,7 +32,7 @@ #include "accountstate.h" #include "openfilemanager.h" #include "accountmanager.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "creds/abstractcredentials.h" #include diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index fe7ca5f4d..9261cef83 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -21,7 +21,7 @@ #include "folderman.h" #include "folder.h" #include "theme.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "syncengine.h" #include "syncfileitem.h" #include "filesystem.h" @@ -30,7 +30,7 @@ #include "accountstate.h" #include "account.h" #include "capabilities.h" -#include "asserts.h" +#include "common/asserts.h" #include "guiutility.h" #include diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index d4f6e7bf8..2b7b4fe9f 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -18,7 +18,7 @@ #include "syncfileitem.h" #include "syncfilestatus.h" -#include "ownsql.h" +// #include "ownsql.h" #if defined(Q_OS_MAC) #include "socketapisocket_mac.h" diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index c7ac8ef08..be5cb885e 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -54,12 +54,8 @@ set(libsync_SRCS syncfileitem.cpp syncfilestatus.cpp syncfilestatustracker.cpp - syncjournaldb.cpp - syncjournalfilerecord.cpp syncresult.cpp theme.cpp - ownsql.cpp - checksums.cpp excludedfiles.cpp creds/dummycredentials.cpp creds/abstractcredentials.cpp @@ -125,9 +121,9 @@ GENERATE_EXPORT_HEADER( ${synclib_NAME} ) if(TOKEN_AUTH_ONLY) - qt5_use_modules(${synclib_NAME} Network Concurrent) + qt5_use_modules(${synclib_NAME} Network) else() - qt5_use_modules(${synclib_NAME} Widgets Network Concurrent) + qt5_use_modules(${synclib_NAME} Widgets Network) endif() set_target_properties( ${synclib_NAME} PROPERTIES diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index d70e7ac9e..7f2fadb29 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -20,7 +20,7 @@ #include "creds/abstractcredentials.h" #include "capabilities.h" #include "theme.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/configfile.cpp b/src/libsync/configfile.cpp index 0fa6b77ff..6fd3df6f0 100644 --- a/src/libsync/configfile.cpp +++ b/src/libsync/configfile.cpp @@ -17,7 +17,7 @@ #include "configfile.h" #include "theme.h" #include "common/utility.h" -#include "asserts.h" +#include "common/asserts.h" #include "creds/abstractcredentials.h" diff --git a/src/libsync/creds/abstractcredentials.cpp b/src/libsync/creds/abstractcredentials.cpp index 2dadc0793..f64b51fd2 100644 --- a/src/libsync/creds/abstractcredentials.cpp +++ b/src/libsync/creds/abstractcredentials.cpp @@ -15,7 +15,7 @@ #include #include -#include "asserts.h" +#include "common/asserts.h" #include "creds/abstractcredentials.h" namespace OCC { diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 9ebcd7fa8..a4345c58a 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -16,7 +16,7 @@ #include "account.h" #include "theme.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index c8bd46cd4..346d61e86 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -14,8 +14,8 @@ */ #include "owncloudpropagator.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "propagatedownload.h" #include "propagateupload.h" #include "propagateremotedelete.h" @@ -25,7 +25,7 @@ #include "configfile.h" #include "common/utility.h" #include "account.h" -#include "asserts.h" +#include "common/asserts.h" #ifdef Q_OS_WIN #include diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index 093fd8aac..f62fd58a9 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -27,7 +27,7 @@ #include "csync_util.h" #include "syncfileitem.h" -#include "syncjournaldb.h" +#include "common/syncjournaldb.h" #include "bandwidthmanager.h" #include "accountfwd.h" #include "discoveryphase.h" diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 21af4d45c..3e6b8898a 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -17,13 +17,13 @@ #include "propagatedownload.h" #include "networkjobs.h" #include "account.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" -#include "checksums.h" -#include "asserts.h" +#include "common/checksums.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/propagateremotedelete.cpp b/src/libsync/propagateremotedelete.cpp index 73f5c8240..0ace61790 100644 --- a/src/libsync/propagateremotedelete.cpp +++ b/src/libsync/propagateremotedelete.cpp @@ -15,7 +15,7 @@ #include "propagateremotedelete.h" #include "owncloudpropagator_p.h" #include "account.h" -#include "asserts.h" +#include "common/asserts.h" #include diff --git a/src/libsync/propagateremotemkdir.cpp b/src/libsync/propagateremotemkdir.cpp index 92ba2b9a5..4772f42eb 100644 --- a/src/libsync/propagateremotemkdir.cpp +++ b/src/libsync/propagateremotemkdir.cpp @@ -15,9 +15,9 @@ #include "propagateremotemkdir.h" #include "owncloudpropagator_p.h" #include "account.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "propagateremotedelete.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 7f0d8785b..b347b0ab0 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -16,9 +16,9 @@ #include "propagatorjobs.h" #include "owncloudpropagator_p.h" #include "account.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "filesystem.h" -#include "asserts.h" +#include "common/asserts.h" #include #include #include diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index c49be0785..05ec97a00 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -17,15 +17,15 @@ #include "owncloudpropagator_p.h" #include "networkjobs.h" #include "account.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" -#include "checksums.h" +#include "common/checksums.h" #include "syncengine.h" #include "propagateremotedelete.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index edeb43516..4afdad38b 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -17,15 +17,15 @@ #include "owncloudpropagator_p.h" #include "networkjobs.h" #include "account.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" #include "syncengine.h" #include "propagateremotemove.h" #include "propagateremotedelete.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index a5396c700..790023a64 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -17,15 +17,15 @@ #include "owncloudpropagator_p.h" #include "networkjobs.h" #include "account.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" #include "filesystem.h" #include "propagatorjobs.h" -#include "checksums.h" +#include "common/checksums.h" #include "syncengine.h" #include "propagateremotedelete.h" -#include "asserts.h" +#include "common/asserts.h" #include #include diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 1d841abb4..ecf46f285 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -17,8 +17,8 @@ #include "owncloudpropagator_p.h" #include "propagateremotemove.h" #include "common/utility.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "filesystem.h" #include #include diff --git a/src/libsync/propagatorjobs.h b/src/libsync/propagatorjobs.h index 04c09cd48..424685ab4 100644 --- a/src/libsync/propagatorjobs.h +++ b/src/libsync/propagatorjobs.h @@ -21,16 +21,10 @@ namespace OCC { /** - * Tags for checksum headers. - * They are here for being shared between Upload- and Download Job + * Tags for checksum header. + * It's here for being shared between Upload- and Download Job */ - -// the header itself static const char checkSumHeaderC[] = "OC-Checksum"; -// ...and it's values -static const char checkSumMD5C[] = "MD5"; -static const char checkSumSHA1C[] = "SHA1"; -static const char checkSumAdlerC[] = "Adler32"; /** * @brief Declaration of the other propagation jobs diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 5a0a56cf9..4b4836ad3 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -16,8 +16,8 @@ #include "syncengine.h" #include "account.h" #include "owncloudpropagator.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" #include "discoveryphase.h" #include "creds/abstractcredentials.h" #include "syncfilestatus.h" @@ -25,7 +25,7 @@ #include "filesystem.h" #include "propagateremotedelete.h" #include "propagatedownload.h" -#include "asserts.h" +#include "common/asserts.h" #ifdef Q_OS_WIN #include diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index 3bc6da984..7f96afef9 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -38,7 +38,7 @@ #include "syncfilestatustracker.h" #include "accountfwd.h" #include "discoveryphase.h" -#include "checksums.h" +#include "common/checksums.h" class QProcess; diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp index 681d703c9..0e6d8cb2a 100644 --- a/src/libsync/syncfileitem.cpp +++ b/src/libsync/syncfileitem.cpp @@ -13,7 +13,7 @@ */ #include "syncfileitem.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournalfilerecord.h" #include "common/utility.h" #include diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index c0b315372..7b40b6071 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -15,9 +15,9 @@ #include "syncfilestatustracker.h" #include "syncengine.h" -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" -#include "asserts.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" +#include "common/asserts.h" #include diff --git a/src/libsync/syncfilestatustracker.h b/src/libsync/syncfilestatustracker.h index 48ecfd5c2..f4b31a130 100644 --- a/src/libsync/syncfilestatustracker.h +++ b/src/libsync/syncfilestatustracker.h @@ -16,7 +16,7 @@ #ifndef SYNCFILESTATUSTRACKER_H #define SYNCFILESTATUSTRACKER_H -#include "ownsql.h" +// #include "ownsql.h" #include "syncfileitem.h" #include "syncfilestatus.h" #include diff --git a/test/csync/std_tests/check_std_c_jhash.c b/test/csync/std_tests/check_std_c_jhash.c index 29dc32207..de7d8e7d5 100644 --- a/test/csync/std_tests/check_std_c_jhash.c +++ b/test/csync/std_tests/check_std_c_jhash.c @@ -6,7 +6,7 @@ */ #include "torture.h" -#include "std/c_jhash.h" +#include "common/c_jhash.h" #define HASHSTATE 1 #define HASHLEN 1 diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 3fb03324f..cabac73bf 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -11,7 +11,7 @@ #include "logger.h" #include "filesystem.h" #include "syncengine.h" -#include "syncjournaldb.h" +#include "common/syncjournaldb.h" #include #include diff --git a/test/testchecksumvalidator.cpp b/test/testchecksumvalidator.cpp index d2d10096d..041dc193c 100644 --- a/test/testchecksumvalidator.cpp +++ b/test/testchecksumvalidator.cpp @@ -9,7 +9,7 @@ #include #include -#include "checksums.h" +#include "common/checksums.h" #include "networkjobs.h" #include "common/utility.h" #include "filesystem.h" diff --git a/test/testownsql.cpp b/test/testownsql.cpp index 0172468e8..77541794a 100644 --- a/test/testownsql.cpp +++ b/test/testownsql.cpp @@ -8,7 +8,7 @@ #include -#include "ownsql.h" +#include "common/ownsql.h" using namespace OCC; diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index e01a32f13..e3ea07cd9 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -8,8 +8,8 @@ #include -#include "syncjournaldb.h" -#include "syncjournalfilerecord.h" +#include "common/syncjournaldb.h" +#include "common/syncjournalfilerecord.h" using namespace OCC; diff --git a/test/testuploadreset.cpp b/test/testuploadreset.cpp index bf077ddee..9c92d9a1d 100644 --- a/test/testuploadreset.cpp +++ b/test/testuploadreset.cpp @@ -8,7 +8,7 @@ #include #include "syncenginetestutils.h" #include -#include +#include using namespace OCC; From 6e240a3e9c78ba5c9c1b864d7906179615edd154 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 14 Sep 2017 13:30:57 +0200 Subject: [PATCH 069/166] csync_update: Remove the check for csync_get_statedb_exists This always returns true since _csync_statedb_is_empty also always returns true. This function was initially intended to be a shortcut in case the database doesn't contain any row, but has been broken since 27fb5d9128c3d326191d5f9f01dac4f715000682 and now won't return false unless the statement fails. The _last_db_return_error in _csync_detect_update would take care of that code path in a more direct and clearer way anyway. --- src/csync/csync_update.cpp | 338 ++++++++++++++++++------------------- 1 file changed, 166 insertions(+), 172 deletions(-) diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 96e13fd86..e90c9dd19 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -170,183 +170,177 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * renamed, the db gets queried by the inode of the file as that one * does not change on rename. */ - if (csync_get_statedb_exists(ctx)) { - tmp = csync_statedb_get_stat_by_path(ctx, fs->path); + tmp = csync_statedb_get_stat_by_path(ctx, fs->path); - if(_last_db_return_error(ctx)) { - ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; - return -1; - } - - if(tmp && tmp->path == fs->path ) { /* there is an entry in the database */ - /* we have an update! */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 - ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 - ", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d", - ((int64_t) fs->modtime), ((int64_t) tmp->modtime), - fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, - (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm.constData(), tmp->remotePerm.constData(), tmp->has_ignored_files ); - if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { - fs->instruction = CSYNC_INSTRUCTION_EVAL; - - // Preserve the EVAL flag later on if the type has changed. - if (tmp->type != fs->type) { - fs->child_modified = true; - } - - goto out; - } - if (ctx->current == LOCAL_REPLICA && - (!_csync_mtime_equal(fs->modtime, tmp->modtime) - // zero size in statedb can happen during migration - || (tmp->size != 0 && fs->size != tmp->size))) { - - // Checksum comparison at this stage is only enabled for .eml files, - // check #4754 #4755 - bool isEmlFile = csync_fnmatch("*.eml", fs->path, FNM_CASEFOLD) == 0; - if (isEmlFile && fs->size == tmp->size && !tmp->checksumHeader.isEmpty()) { - if (ctx->callbacks.checksum_hook) { - fs->checksumHeader = ctx->callbacks.checksum_hook( - _rel_to_abs(ctx, fs->path), tmp->checksumHeader, - ctx->callbacks.checksum_userdata); - } - bool checksumIdentical = false; - if (!fs->checksumHeader.isEmpty()) { - checksumIdentical = fs->checksumHeader == tmp->checksumHeader; - } - if (checksumIdentical) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); - fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; - goto out; - } - } - - // Preserve the EVAL flag later on if the type has changed. - if (tmp->type != fs->type) { - fs->child_modified = true; - } - - fs->instruction = CSYNC_INSTRUCTION_EVAL; - goto out; - } - bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != tmp->file_id - || fs->remotePerm != tmp->remotePerm)) - || (ctx->current == LOCAL_REPLICA && fs->inode != tmp->inode); - if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA - && !metadata_differ && ctx->read_remote_from_db) { - /* If both etag and file id are equal for a directory, read all contents from - * the database. - * The metadata comparison ensure that we fetch all the file id or permission when - * upgrading owncloud - */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Reading from database: %s", fs->path.constData()); - ctx->remote.read_from_db = true; - } - /* If it was remembered in the db that the remote dir has ignored files, store - * that so that the reconciler can make advantage of. - */ - if( ctx->current == REMOTE_REPLICA ) { - fs->has_ignored_files = tmp->has_ignored_files; - } - if (metadata_differ) { - /* file id or permissions has changed. Which means we need to update them in the DB. */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", fs->path.constData()); - fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; - } else { - fs->instruction = CSYNC_INSTRUCTION_NONE; - } - } else { - /* check if it's a file and has been renamed */ - if (ctx->current == LOCAL_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); - - tmp = csync_statedb_get_stat_by_inode(ctx, fs->inode); - - if(_last_db_return_error(ctx)) { - ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; - return -1; - } - - // Default to NEW unless we're sure it's a rename. - fs->instruction = CSYNC_INSTRUCTION_NEW; - - bool isRename = - tmp && tmp->inode == fs->inode && tmp->type == fs->type - && (tmp->modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) -#ifdef NO_RENAME_EXTENSION - && _csync_sameextension(tmp->path, fs->path) -#endif - ; - - - // Verify the checksum where possible - if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook - && fs->type == CSYNC_FTW_TYPE_FILE) { - fs->checksumHeader = ctx->callbacks.checksum_hook( - _rel_to_abs(ctx, fs->path), tmp->checksumHeader, - ctx->callbacks.checksum_userdata); - if (!fs->checksumHeader.isEmpty()) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); - isRename = fs->checksumHeader == tmp->checksumHeader; - } - } - - if (isRename) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); - /* inode found so the file has been renamed */ - fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; - if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, fs->path); - } - } - goto out; - - } else { - /* Remote Replica Rename check */ - tmp = csync_statedb_get_stat_by_file_id(ctx, fs->file_id); - - if(_last_db_return_error(ctx)) { - ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; - return -1; - } - if(tmp ) { /* tmp existing at all */ - if (tmp->type != fs->type) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); - fs->instruction = CSYNC_INSTRUCTION_NEW; - goto out; - } - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); - fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; - if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, fs->path); - } else { - if( tmp->etag != fs->etag ) { - /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ETags are different!"); */ - /* File with different etag, don't do a rename, but download the file again */ - fs->instruction = CSYNC_INSTRUCTION_NEW; - } - } - goto out; - - } else { - /* file not found in statedb */ - fs->instruction = CSYNC_INSTRUCTION_NEW; - - if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) { - if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, fs->path, fs->remotePerm)) { - return 1; - } - } - goto out; - } - } - } - } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Unable to open statedb" ); + if(_last_db_return_error(ctx)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } + if(tmp && tmp->path == fs->path ) { /* there is an entry in the database */ + /* we have an update! */ + CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 + ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 + ", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d", + ((int64_t) fs->modtime), ((int64_t) tmp->modtime), + fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, + (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm.constData(), tmp->remotePerm.constData(), tmp->has_ignored_files ); + if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { + fs->instruction = CSYNC_INSTRUCTION_EVAL; + + // Preserve the EVAL flag later on if the type has changed. + if (tmp->type != fs->type) { + fs->child_modified = true; + } + + goto out; + } + if (ctx->current == LOCAL_REPLICA && + (!_csync_mtime_equal(fs->modtime, tmp->modtime) + // zero size in statedb can happen during migration + || (tmp->size != 0 && fs->size != tmp->size))) { + + // Checksum comparison at this stage is only enabled for .eml files, + // check #4754 #4755 + bool isEmlFile = csync_fnmatch("*.eml", fs->path, FNM_CASEFOLD) == 0; + if (isEmlFile && fs->size == tmp->size && !tmp->checksumHeader.isEmpty()) { + if (ctx->callbacks.checksum_hook) { + fs->checksumHeader = ctx->callbacks.checksum_hook( + _rel_to_abs(ctx, fs->path), tmp->checksumHeader, + ctx->callbacks.checksum_userdata); + } + bool checksumIdentical = false; + if (!fs->checksumHeader.isEmpty()) { + checksumIdentical = fs->checksumHeader == tmp->checksumHeader; + } + if (checksumIdentical) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; + goto out; + } + } + + // Preserve the EVAL flag later on if the type has changed. + if (tmp->type != fs->type) { + fs->child_modified = true; + } + + fs->instruction = CSYNC_INSTRUCTION_EVAL; + goto out; + } + bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != tmp->file_id + || fs->remotePerm != tmp->remotePerm)) + || (ctx->current == LOCAL_REPLICA && fs->inode != tmp->inode); + if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA + && !metadata_differ && ctx->read_remote_from_db) { + /* If both etag and file id are equal for a directory, read all contents from + * the database. + * The metadata comparison ensure that we fetch all the file id or permission when + * upgrading owncloud + */ + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Reading from database: %s", fs->path.constData()); + ctx->remote.read_from_db = true; + } + /* If it was remembered in the db that the remote dir has ignored files, store + * that so that the reconciler can make advantage of. + */ + if( ctx->current == REMOTE_REPLICA ) { + fs->has_ignored_files = tmp->has_ignored_files; + } + if (metadata_differ) { + /* file id or permissions has changed. Which means we need to update them in the DB. */ + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; + } else { + fs->instruction = CSYNC_INSTRUCTION_NONE; + } + } else { + /* check if it's a file and has been renamed */ + if (ctx->current == LOCAL_REPLICA) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); + + tmp = csync_statedb_get_stat_by_inode(ctx, fs->inode); + + if(_last_db_return_error(ctx)) { + ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; + return -1; + } + + // Default to NEW unless we're sure it's a rename. + fs->instruction = CSYNC_INSTRUCTION_NEW; + + bool isRename = + tmp && tmp->inode == fs->inode && tmp->type == fs->type + && (tmp->modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) +#ifdef NO_RENAME_EXTENSION + && _csync_sameextension(tmp->path, fs->path) +#endif + ; + + + // Verify the checksum where possible + if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook + && fs->type == CSYNC_FTW_TYPE_FILE) { + fs->checksumHeader = ctx->callbacks.checksum_hook( + _rel_to_abs(ctx, fs->path), tmp->checksumHeader, + ctx->callbacks.checksum_userdata); + if (!fs->checksumHeader.isEmpty()) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); + isRename = fs->checksumHeader == tmp->checksumHeader; + } + } + + if (isRename) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); + /* inode found so the file has been renamed */ + fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; + if (fs->type == CSYNC_FTW_TYPE_DIR) { + csync_rename_record(ctx, tmp->path, fs->path); + } + } + goto out; + + } else { + /* Remote Replica Rename check */ + tmp = csync_statedb_get_stat_by_file_id(ctx, fs->file_id); + + if(_last_db_return_error(ctx)) { + ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; + return -1; + } + if(tmp ) { /* tmp existing at all */ + if (tmp->type != fs->type) { + CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); + fs->instruction = CSYNC_INSTRUCTION_NEW; + goto out; + } + CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); + fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; + if (fs->type == CSYNC_FTW_TYPE_DIR) { + csync_rename_record(ctx, tmp->path, fs->path); + } else { + if( tmp->etag != fs->etag ) { + /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ETags are different!"); */ + /* File with different etag, don't do a rename, but download the file again */ + fs->instruction = CSYNC_INSTRUCTION_NEW; + } + } + goto out; + + } else { + /* file not found in statedb */ + fs->instruction = CSYNC_INSTRUCTION_NEW; + + if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && ctx->callbacks.checkSelectiveSyncNewFolderHook) { + if (ctx->callbacks.checkSelectiveSyncNewFolderHook(ctx->callbacks.update_callback_userdata, fs->path, fs->remotePerm)) { + return 1; + } + } + goto out; + } + } + } + out: /* Set the ignored error string. */ From 5e332983e2f40c8de3d70833f9ec52f32d489509 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 6 Sep 2017 11:36:45 +0200 Subject: [PATCH 070/166] SyncJournalDB: Only reset_and_clear_bindings once We only need to do it once between each query execution and that can be right before the first bind. --- src/common/syncjournaldb.cpp | 25 +------------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index d1dae8f66..65254fd72 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -936,7 +936,6 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) return false; } - _setFileRecordQuery->reset_and_clear_bindings(); return true; } else { qCWarning(lcDb) << "Failed to connect database."; @@ -960,15 +959,12 @@ bool SyncJournalDb::deleteFileRecord(const QString &filename, bool recursively) return false; } - _deleteFileRecordPhash->reset_and_clear_bindings(); if (recursively) { _deleteFileRecordRecursively->reset_and_clear_bindings(); _deleteFileRecordRecursively->bindValue(1, filename); if (!_deleteFileRecordRecursively->exec()) { return false; } - - _deleteFileRecordRecursively->reset_and_clear_bindings(); } return true; } else { @@ -1009,7 +1005,6 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) rec._fileSize = _getFileRecordQuery->int64Value(10); rec._serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0); rec._checksumHeader = _getFileRecordQuery->baValue(12); - _getFileRecordQuery->reset_and_clear_bindings(); } else { int errId = _getFileRecordQuery->errorId(); if (errId != SQLITE_DONE) { // only do this if the problem is different from SQLITE_DONE @@ -1020,9 +1015,6 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) locker.relock(); } } - if (_getFileRecordQuery) { - _getFileRecordQuery->reset_and_clear_bindings(); - } } return rec; } @@ -1126,7 +1118,6 @@ bool SyncJournalDb::updateFileRecordChecksum(const QString &filename, return false; } - query->reset_and_clear_bindings(); return true; } @@ -1156,7 +1147,6 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename, return false; } - query->reset_and_clear_bindings(); return true; } @@ -1204,7 +1194,6 @@ static bool deleteBatch(SqlQuery &query, const QStringList &entries, const QStri return false; } } - query.reset_and_clear_bindings(); // viel hilft viel ;-) return true; } @@ -1228,7 +1217,6 @@ SyncJournalDb::DownloadInfo SyncJournalDb::getDownloadInfo(const QString &file) } else { res._valid = false; } - _getDownloadInfoQuery->reset_and_clear_bindings(); } return res; } @@ -1251,9 +1239,6 @@ void SyncJournalDb::setDownloadInfo(const QString &file, const SyncJournalDb::Do if (!_setDownloadInfoQuery->exec()) { return; } - - _setDownloadInfoQuery->reset_and_clear_bindings(); - } else { _deleteDownloadInfoQuery->reset_and_clear_bindings(); _deleteDownloadInfoQuery->bindValue(1, file); @@ -1261,8 +1246,6 @@ void SyncJournalDb::setDownloadInfo(const QString &file, const SyncJournalDb::Do if (!_deleteDownloadInfoQuery->exec()) { return; } - - _deleteDownloadInfoQuery->reset_and_clear_bindings(); } } @@ -1343,7 +1326,6 @@ SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString &file) res._modtime = Utility::qDateTimeFromTime_t(_getUploadInfoQuery->int64Value(4)); res._valid = ok; } - _getUploadInfoQuery->reset_and_clear_bindings(); } return res; } @@ -1368,8 +1350,6 @@ void SyncJournalDb::setUploadInfo(const QString &file, const SyncJournalDb::Uplo if (!_setUploadInfoQuery->exec()) { return; } - - _setUploadInfoQuery->reset_and_clear_bindings(); } else { _deleteUploadInfoQuery->reset_and_clear_bindings(); _deleteUploadInfoQuery->bindValue(1, file); @@ -1377,8 +1357,6 @@ void SyncJournalDb::setUploadInfo(const QString &file, const SyncJournalDb::Uplo if (!_deleteUploadInfoQuery->exec()) { return; } - - _deleteUploadInfoQuery->reset_and_clear_bindings(); } } @@ -1438,7 +1416,6 @@ SyncJournalErrorBlacklistRecord SyncJournalDb::errorBlacklistEntry(const QString _getErrorBlacklistQuery->intValue(7)); entry._file = file; } - _getErrorBlacklistQuery->reset_and_clear_bindings(); } } @@ -1554,6 +1531,7 @@ void SyncJournalDb::setErrorBlacklistEntry(const SyncJournalErrorBlacklistRecord return; } + _setErrorBlacklistQuery->reset_and_clear_bindings(); _setErrorBlacklistQuery->bindValue(1, item._file); _setErrorBlacklistQuery->bindValue(2, item._lastTryEtag); _setErrorBlacklistQuery->bindValue(3, QString::number(item._lastTryModtime)); @@ -1564,7 +1542,6 @@ void SyncJournalDb::setErrorBlacklistEntry(const SyncJournalErrorBlacklistRecord _setErrorBlacklistQuery->bindValue(8, item._renameTarget); _setErrorBlacklistQuery->bindValue(9, item._errorCategory); _setErrorBlacklistQuery->exec(); - _setErrorBlacklistQuery->reset_and_clear_bindings(); } QVector SyncJournalDb::getPollInfos() From 8f5110900c1438ab208bb3fe1e4827d8f3ff8a49 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 14 Sep 2017 15:09:21 +0200 Subject: [PATCH 071/166] Gui: Allow to add multiple sync folder connection of the same folder ... or child folders There is also no real reason to forbid the user from syncing the same folder to multiple location on its hardrive. A real use case is when the user uncheck a big directory using "choose what to sync", but would still like to sync a folder within this disabled tree. The user can now do this with the "add folder" feature Since 2.3, we even support syncing the same local folder to multiple remote folder, so why not allow syncing the same remote folder several times? Relates to issue #3645 --- doc/navigating.rst | 3 +-- doc/visualtour.rst | 5 ----- src/gui/folderstatusmodel.cpp | 15 --------------- src/gui/folderwizard.cpp | 8 +------- 4 files changed, 2 insertions(+), 29 deletions(-) diff --git a/doc/navigating.rst b/doc/navigating.rst index b4cf52183..3d119d2eb 100644 --- a/doc/navigating.rst +++ b/doc/navigating.rst @@ -87,8 +87,7 @@ have the following features: **Log Out**, and **Remove**. * Used and available space on the server. * Current synchronization status. -* **Add Folder Sync Connection** button, which is active only when you have - removed synchronization on an account (see **Remove Sync** below). +* **Add Folder Sync Connection** button. The little button with three dots (the overflow menu) that sits to the right of the sync status bar offers four additional options: diff --git a/doc/visualtour.rst b/doc/visualtour.rst index f3a9402cb..0d2e29ba9 100644 --- a/doc/visualtour.rst +++ b/doc/visualtour.rst @@ -80,11 +80,6 @@ Adding a Folder Sync Connection Adding a new sync is initiated by clicking ``Add Folder Sync Connection`` in the ``Account`` settings. -..note:: To add a folder, you must not already sync a folder that contains this - folder. By default, the wizard sets up the root folder of the ownCloud - server to sync all of your ownCloud account. In consequence, you will - first need to remove this folder prior to specifying new syncs. - .. image:: images/folderwizard_local.png :scale: 50 % diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index a7b38dc43..d0c48eddc 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -113,12 +113,6 @@ Qt::ItemFlags FolderStatusModel::flags(const QModelIndex &index) const ret = Qt::ItemNeverHasChildren; if (!_accountState->isConnected()) { return ret; - } else if (_folders.count() == 1) { - auto remotePath = _folders.at(0)._folder->remotePath(); - // special case when syncing the entire owncloud: disable the add folder button (#3438) - if (remotePath.isEmpty() || remotePath == QLatin1String("/")) { - return ret; - } } return Qt::ItemIsEnabled | ret; } @@ -148,15 +142,6 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const if (!_accountState->isConnected()) { return tr("You need to be connected to add a folder"); } - if (_folders.count() == 1) { - auto remotePath = _folders.at(0)._folder->remotePath(); - if (remotePath.isEmpty() || remotePath == QLatin1String("/")) { - // Syncing the entire owncloud: disable the add folder button (#3438) - return tr("Adding folder is disabled because you are already syncing all your files. " - "If you want to sync multiple folders, please remove the currently " - "configured root folder."); - } - } return tr("Click this button to add a folder to synchronize."); } return QVariant(); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 283f34856..9c0128f59 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -445,16 +445,10 @@ bool FolderWizardRemotePath::isComplete() const } else if (dir.startsWith(curDir + QLatin1Char('/'))) { warnStrings.append(tr("You are already syncing %1, which is a parent folder of %2.").arg(Utility::escape(curDir), Utility::escape(dir))); } - - if (curDir == QLatin1String("/")) { - warnStrings.append(tr("You are already syncing all your files. Syncing another folder is not supported. " - "If you want to sync multiple folders, please remove the currently configured " - "root folder sync.")); - } } showWarn(formatWarnings(warnStrings)); - return warnStrings.isEmpty(); + return true; } void FolderWizardRemotePath::cleanupPage() From 2e90e9c35b4222dad8420e0a66a8b0baaee8bfd5 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Mon, 18 Sep 2017 15:30:35 +0200 Subject: [PATCH 072/166] Fix the build (make install) --- src/libsync/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index be5cb885e..77b32ba1a 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -76,7 +76,6 @@ set(owncloudsync_HEADERS networkjobs.h progressdispatcher.h syncfileitem.h - syncjournaldb.h syncresult.h ) From e1dfc38a90e93e33c427942ac972ecb2480b90b3 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 19 Sep 2017 02:18:38 +0200 Subject: [PATCH 073/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 205 ++++++++++++--------------- translations/client_cs.ts | 205 ++++++++++++--------------- translations/client_de.ts | 205 ++++++++++++--------------- translations/client_el.ts | 205 ++++++++++++--------------- translations/client_en.ts | 205 ++++++++++++--------------- translations/client_es.ts | 205 ++++++++++++--------------- translations/client_es_AR.ts | 205 ++++++++++++--------------- translations/client_et.ts | 205 ++++++++++++--------------- translations/client_eu.ts | 205 ++++++++++++--------------- translations/client_fa.ts | 205 ++++++++++++--------------- translations/client_fi.ts | 205 ++++++++++++--------------- translations/client_fr.ts | 205 ++++++++++++--------------- translations/client_gl.ts | 205 ++++++++++++--------------- translations/client_hu.ts | 205 ++++++++++++--------------- translations/client_it.ts | 205 ++++++++++++--------------- translations/client_ja.ts | 205 ++++++++++++--------------- translations/client_nb_NO.ts | 205 ++++++++++++--------------- translations/client_nl.ts | 205 ++++++++++++--------------- translations/client_pl.ts | 205 ++++++++++++--------------- translations/client_pt.ts | 205 ++++++++++++--------------- translations/client_pt_BR.ts | 205 ++++++++++++--------------- translations/client_ru.ts | 261 ++++++++++++++++------------------- translations/client_sk.ts | 205 ++++++++++++--------------- translations/client_sl.ts | 205 ++++++++++++--------------- translations/client_sr.ts | 205 ++++++++++++--------------- translations/client_sv.ts | 205 ++++++++++++--------------- translations/client_th.ts | 205 ++++++++++++--------------- translations/client_tr.ts | 205 ++++++++++++--------------- translations/client_uk.ts | 205 ++++++++++++--------------- translations/client_zh_CN.ts | 205 ++++++++++++--------------- translations/client_zh_TW.ts | 205 ++++++++++++--------------- 32 files changed, 2852 insertions(+), 3562 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 5a74099ef..3b9c170e5 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -132,6 +132,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 85cc07f06..849481b78 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - El fitxer de destinació té una mida o data de modificació inesperada - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Aturat per l'usuari @@ -959,144 +951,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Cal que tingueu connexió per afegir una carpeta - + Click this button to add a folder to synchronize. Cliqueu aquest botó per afegir una carpeta per sincronitzar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error en carregar la llista de carpetes del servidor. - + Signed out S'ha desconnectat - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - No es pot afegir carpetes perquè ja esteu sincronitzant tots els vostres fitxers. Si voleu sincronitzar múltiples carpetes, elimineu la carpeta arrel actualment configurada. - - - + Fetching folder list from server... Obtenint la llista de carpetes del servidor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" S'està sincronitzant %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descarrega %1/s - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pujada %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 pendent, %1 de %2, fitxer %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, fitxer %3 de %4 - + file %1 of %2 fitxer %1 de %2 - + Waiting... S'està esperant... - + Waiting for %n other folder(s)... S'està esperant %n altra carpeta...S'està esperant %n altres carpetes - + Preparing to sync... S'està preparant per sincronitzar... @@ -1104,12 +1091,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Afegeix connexions de carpetes sincronitzades - + Add Sync Connection Afegir una connexió de sincronització @@ -1179,11 +1166,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ja esteu sincronitzant <i>%1</i>, que és una carpeta dins de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Ja esteu sincronitzant tots els vostres fitxers. Sincronitzar una altra carpeta <b>no</b> està permes. Si voleu sincronitzar múltiples carpetes, elimineu la configuració de sincronització de la carpeta arrel. - OCC::FormatWarningsWizardPage @@ -2116,7 +2098,7 @@ No és aconsellada usar-la. OCC::PropagateDirectory - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -2172,12 +2154,12 @@ No és aconsellada usar-la. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ha fallat la restauració: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3128,137 +3110,132 @@ No és aconsellada usar-la.
- CSync got an error while processing internal trees. - CSync ha patit un error mentre processava els àrbres interns. - - - CSync fatal parameter error. Error fatal de paràmetre en CSync. - + CSync processing step update failed. El pas d'actualització del processat de CSync ha fallat. - + CSync processing step reconcile failed. El pas de reconciliació del processat de CSync ha fallat. - + CSync could not authenticate at the proxy. CSync no s'ha pogut acreditar amb el proxy. - + CSync failed to lookup proxy or server. CSync ha fallat en cercar el proxy o el servidor. - + CSync failed to authenticate at the %1 server. L'autenticació de CSync ha fallat al servidor %1. - + CSync failed to connect to the network. CSync ha fallat en connectar-se a la xarxa. - + A network connection timeout happened. Temps excedit en la connexió. - + A HTTP transmission error happened. S'ha produït un error en la transmissió HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder S'ha produït un error en obrir una carpeta - + Error while reading folder. Error en llegir la carpeta. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. El fitxer/carpeta s'ha ignorat perquè és ocult. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: No hi ha espai disponible al servidor %1. - + CSync unspecified error. Error inespecífic de CSync. - + Aborted by the user Aturat per l'usuari - + CSync failed to access @@ -3268,144 +3245,144 @@ No és aconsellada usar-la. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable El servei no està disponible temporalment - + Access is forbidden Accés prohibit - + An internal error number %1 occurred. S'ha produït l'error intern número %1. - + Symbolic links are not supported in syncing. La sincronització d'enllaços simbòlics no està implementada. - + File is listed on the ignore list. El fitxer està a la llista d'ignorats. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. El nom de fitxer és massa llarg. - + Stat failed. - + Filename encoding is not valid La codificació del nom de fitxer no és vàlida - + Invalid characters, please rename "%1" Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura + - Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen @@ -3447,17 +3424,17 @@ No és aconsellada usar-la. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. El fitxer descarregat no concorda amb la suma de verificació. Es reintentarà. diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 678cf659d..0f5ed7ecb 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Cílový soubor má neočekávanou velikost nebo čas změny - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušeno uživatelem @@ -962,144 +954,139 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderStatusModel - + You need to be connected to add a folder Pro přidání adresáře musíte být připojeni - + Click this button to add a folder to synchronize. Stisknutím tlačítka přidáte adresář k synchronizaci. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Chyba při načítání seznamu adresářů ze serveru. - + Signed out Odhlášeno - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Přidání adresáře je vypnuto, protože již synchronizujete všechny své soubory. Pokud chcete synchronizovat pouze některé adresáře, odstraňte aktuálně nastavený kořenový adresář. - - - + Fetching folder list from server... Načítání seznamu adresářů ze serveru... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrola změn v '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuji %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stahování %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrávání %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ze %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 zbývá, %1 ze %2, soubor %3 z %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, soubor %3 z %4 - + file %1 of %2 soubor %1 z %2 - + Waiting... Chvíli strpení... - + Waiting for %n other folder(s)... Čeká se na %n další adresář...Čeká se na %n další adresáře...Čeká se na %n dalších adresářů... - + Preparing to sync... Synchronizace se připravuje... @@ -1107,12 +1094,12 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st OCC::FolderWizard - + Add Folder Sync Connection Přidat synchronizaci adresáře - + Add Sync Connection Přidat synchronizační připojení @@ -1182,11 +1169,6 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Již synchronizujete adresář <i>%1</i>, který je adresáři <i>%2</i> nadřazený. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Již synchronizujete všechny své soubory. Synchronizování dalšího adresáře <b>není</b> podporováno. Pokud chcete synchronizovat více adresářů, odstraňte prosím synchronizaci aktuálního kořenového adresáře. - OCC::FormatWarningsWizardPage @@ -2119,7 +2101,7 @@ Nedoporučuje se jí používat. OCC::PropagateDirectory - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -2175,12 +2157,12 @@ Nedoporučuje se jí používat. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovení selhalo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Soubor nebo adresář by odebrán ze sdílení pouze pro čtení, ale jeho obnovení selhalo: %1 @@ -3131,137 +3113,132 @@ Nedoporučuje se jí používat. - CSync got an error while processing internal trees. - CSync obdrželo chybu při zpracování vnitřních struktur. - - - CSync fatal parameter error. CSync: kritická chyba parametrů. - + CSync processing step update failed. CSync se nezdařilo zpracovat krok aktualizace. - + CSync processing step reconcile failed. CSync se nezdařilo zpracovat krok sladění. - + CSync could not authenticate at the proxy. CSync se nemohlo přihlásit k proxy. - + CSync failed to lookup proxy or server. CSync se nezdařilo najít proxy server nebo cílový server. - + CSync failed to authenticate at the %1 server. CSync se nezdařilo přihlásit k serveru %1. - + CSync failed to connect to the network. CSync se nezdařilo připojit k síti. - + A network connection timeout happened. Došlo k vypršení časového limitu síťového spojení. - + A HTTP transmission error happened. Nastala chyba HTTP přenosu. - + The mounted folder is temporarily not available on the server Připojený adresář je na serveru dočasně nedostupný - + An error occurred while opening a folder Došlo k chybě při otvírání adresáře - + Error while reading folder. Chyba při čtení adresáře. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Soubor/adresář je ignorován, protože je skrytý. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Nedostatek volného místa na serveru %1. - + CSync unspecified error. Nespecifikovaná chyba CSync. - + Aborted by the user Zrušeno uživatelem - + CSync failed to access Selhal přístup pro CSync @@ -3271,144 +3248,144 @@ Nedoporučuje se jí používat. CSync se nepodařilo načíst či vytvořit soubor žurnálu. Ujistěte se, že máte oprávnění pro čtení a zápis do místního adresáře synchronizace. - + CSync failed due to unhandled permission denied. CSync selhalo z důvodu nezpracovaného zamítnutí oprávnění. - + CSync tried to create a folder that already exists. CSync se pokusil vytvořit adresář, který již existuje. - + The service is temporarily unavailable Služba je dočasně nedostupná - + Access is forbidden Přístup je zakázán - + An internal error number %1 occurred. Došlo k interní chybě číslo %1. - + Symbolic links are not supported in syncing. Symbolické odkazy nejsou při synchronizaci podporovány. - + File is listed on the ignore list. Soubor se nachází na seznamu ignorovaných. - + File names ending with a period are not supported on this file system. Jména souborů končících tečkou nejsou na tomto systému souborů podporována. - + File names containing the character '%1' are not supported on this file system. Názvy souborů obsahující znak '%1' nejsou na tomto souborovém systému podporovány. - + The file name is a reserved name on this file system. Jméno souboru je na tomto systému souborů rezervovaným jménem. - + Filename contains trailing spaces. Jméno souboru obsahuje mezery na konci řádky. - + Filename is too long. Jméno souboru je příliš dlouhé. - + Stat failed. Stat selhal. - + Filename encoding is not valid Kódování znaků jména soubor je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji + - Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj @@ -3450,17 +3427,17 @@ Nedoporučuje se jí používat. OCC::ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolního součtu je poškozena. - + The checksum header contained an unknown checksum type '%1' Hlavička kontrolního součtu obsahovala neznámý typ součtu '%1' - + The downloaded file does not match the checksum, it will be resumed. Stažený soubor neodpovídá kontrolnímu součtu, bude znovu stažen. diff --git a/translations/client_de.ts b/translations/client_de.ts index 09a812723..a24082e1d 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Die Zieldatei hat eine unerwartete Größe oder ein unerwartetes Änderungsdatum - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abbruch durch den Benutzer @@ -964,144 +956,139 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderStatusModel - + You need to be connected to add a folder Sie müssen verbunden sein, um einen Ordner hinzuzufügen - + Click this button to add a folder to synchronize. Wählen Sie diese Schaltfläche, um einen zu synchronisierenden Ordner hinzuzufügen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fehler beim Empfang der Ordnerliste vom Server. - + Signed out Abgemeldet - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Sie können keinen weiteren Ordner hinzufügen, da Sie bereits alle Dateien synchronisieren. Falls sie mehrere Ordner synchronisieren wollen, entferen Sie zunächst den konfigurierten Wurzel-Ordner. - - - + Fetching folder list from server... Empfange Orderliste vom Server... - + There are unresolved conflicts. Click for details. Es existieren ungelöste Konflikte. Für Details klicken. - + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + Reconciling changes Änderungen zusammenführen - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisiere %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 von %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 übrig, %1 von %2, Datei %3 von %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, Datei %3 von %4 - + file %1 of %2 Datei %1 von %2 - + Waiting... Warte... - + Waiting for %n other folder(s)... Warte auf einen anderen OrdnerWarte auf %n andere Ordner - + Preparing to sync... Bereite Synchronisation vor... @@ -1109,12 +1096,12 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter OCC::FolderWizard - + Add Folder Sync Connection Ordner-Synchronisation hinzufügen - + Add Sync Connection Ordner-Synchronisation hinzufügen @@ -1184,11 +1171,6 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sie synchronisieren bereits <i>%1</i>, das ein übergeordneten Ordner von <i>%2</i> ist. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Sie synchronisieren bereits alle Ihre Dateien. Die Synchronisation anderer Verzeichnisse wird <b>nicht</b> unterstützt. Wenn Sie mehrere Ordner synchronisieren möchten, entfernen Sie bitte das aktuell konfigurierte Wurzelverzeichnis zur Synchronisation. - OCC::FormatWarningsWizardPage @@ -2120,7 +2102,7 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateDirectory - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -2176,12 +2158,12 @@ Es ist nicht ratsam, diese zu benutzen. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Wiederherstellung fehlgeschlagen: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Eine Datei oder ein Ordner wurde von einer Nur-Lese-Freigabe wiederhergestellt, aber die Wiederherstellung ist mit folgendem Fehler fehlgeschlagen: %1 @@ -3132,137 +3114,132 @@ Es ist nicht ratsam, diese zu benutzen. - CSync got an error while processing internal trees. - CSync hatte einen Fehler bei der Verarbeitung von internen Strukturen. - - - CSync fatal parameter error. CSync hat einen schwerwiegender Parameterfehler festgestellt. - + CSync processing step update failed. CSync Verarbeitungsschritt "Aktualisierung" fehlgeschlagen. - + CSync processing step reconcile failed. CSync Verarbeitungsschritt "Abgleich" fehlgeschlagen. - + CSync could not authenticate at the proxy. CSync konnte sich nicht am Proxy authentifizieren. - + CSync failed to lookup proxy or server. CSync konnte den Proxy oder Server nicht auflösen. - + CSync failed to authenticate at the %1 server. CSync konnte sich nicht am Server %1 authentifizieren. - + CSync failed to connect to the network. CSync konnte sich nicht mit dem Netzwerk verbinden. - + A network connection timeout happened. Eine Zeitüberschreitung der Netzwerkverbindung ist aufgetreten. - + A HTTP transmission error happened. Es hat sich ein HTTP-Übertragungsfehler ereignet. - + The mounted folder is temporarily not available on the server Der auf dem Server eingehängte Ordner ist vorübergehend nicht verfügbar - + An error occurred while opening a folder Beim Öffnen eines Ordners ist ein Fehler aufgetreten. - + Error while reading folder. Fehler beim Lesen eines Ordners. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Datei wird ignoriert, weil sie versteckt ist. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Kein Platz auf Server %1 frei. - + CSync unspecified error. CSync unbekannter Fehler. - + Aborted by the user Abbruch durch den Benutzer - + CSync failed to access CSync-Zugriff fehlgeschlagen @@ -3272,144 +3249,144 @@ Es ist nicht ratsam, diese zu benutzen. CSync konnte das Journal nicht laden oder erstellen. Stellen Sie bitte sicher, dass Sie Lese- und Schreibrechte im lokalen Synchronisationsordner haben. - + CSync failed due to unhandled permission denied. CSync wegen fehlender Berechtigung fehlgeschlagen. - + CSync tried to create a folder that already exists. CSync versuchte einen Ordner anzulegen, der schon existiert. - + The service is temporarily unavailable Der Dienst ist vorübergehend nicht erreichbar - + Access is forbidden Zugriff verboten - + An internal error number %1 occurred. Ein interner Fehler mit der Fehlernummer %1 ist aufgetreten. - + Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisation nicht unterstützt. - + File is listed on the ignore list. Die Datei ist in der Ignorierliste geführt. - + File names ending with a period are not supported on this file system. Dateinamen enden mit einem Punkt, die in diesem Dateisystem nicht unterstützt wird. - + File names containing the character '%1' are not supported on this file system. Dateinamen beinhalten das Zeichen '%1' und diese werden in diesem Dateisystems nicht unterstützt. - + The file name is a reserved name on this file system. Der Dateiname ist ein reservierter Name in diesem Dateisystem. - + Filename contains trailing spaces. Dateiname endet mit Leerzeichen. - + Filename is too long. Der Dateiname ist zu lang. - + Stat failed. Stat fehlgeschlagen. - + Filename encoding is not valid Dateikodierung ist ungültig - + Invalid characters, please rename "%1" Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung + - Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle @@ -3451,17 +3428,17 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ValidateChecksumHeader - + The checksum header is malformed. Der Prüfsummen-Header hat ein fehlerhaftes Format. - + The checksum header contained an unknown checksum type '%1' Die Prüfsummen-Kopfzeile enthielt den unbekannten Prüfsummentypen '%1'. - + The downloaded file does not match the checksum, it will be resumed. Die heruntergeladene Datei entspricht nicht der Prüfsumme, das Herunterladen wird wiederaufgenommen. diff --git a/translations/client_el.ts b/translations/client_el.ts index 7d017bb27..15ab6081b 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Το αρχείο προορισμού έχει μη αναμενόμενο μέγεθος ή ημερομηνία τροποποίησης - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Ματαιώθηκε από το χρήστη @@ -964,144 +956,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Πρέπει να έχετε συνδεθεί για να προσθέσετε φάκελο - + Click this button to add a folder to synchronize. Κάντε κλικ σε αυτό το κουμπί για να προσθέσετε ένα φάκελο προς συγχρονισμό. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Σφάλμα κατά τη φόρτωση της λίστας φακέλων από το διακομιστή. - + Signed out Αποσύνδεση - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Η επιλογή προσθήκης φακέλου δεν είναι διαθέσιμη καθώς συγχρονίζονται ήδη όλα τα αρχεία. Για να επιλέξετε συγχρονισμό φακέλων, αφαιρέστε τον αρχικό φάκελο που έχει ρυθμιστεί. - - - + Fetching folder list from server... Λήψη λίστας φακέλων από το διακομιστή... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Συγχρονισμός %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) λήψη %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) μεταφόρτωση %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 από %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Απομένει %5, %1 από %2, αρχείο %3 από %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 από %2, αρχείο %3 από %4 - + file %1 of %2 αρχείο %1 από %2 - + Waiting... Αναμονή... - + Waiting for %n other folder(s)... Αναμονή για %n άλλο φάκελο...Αναμονή για %n άλλους φακέλους... - + Preparing to sync... Προετοιμασία για συγχρονισμό... @@ -1109,12 +1096,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού Φακέλου - + Add Sync Connection Προσθήκη Σύνδεσης Συγχρονισμού @@ -1184,11 +1171,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ο φάκελος <i>%1</i>, ο οποίος είναι γονεϊκός φάκελος του <i>%2</i>, συγχρονίζεται ήδη. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Συγχρονίζετε ήδη όλα σας τα αρχεία. Ο συγχρονισμός ενός ακόμα φακέλου <b>δεν</b> υποστηρίζεται. Εάν θέλετε να συγχρονίσετε πολλαπλούς φακέλους, παρακαλώ αφαιρέστε την τρέχουσα ρύθμιση συχρονισμού του βασικού φακέλου. - OCC::FormatWarningsWizardPage @@ -2121,7 +2103,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -2177,12 +2159,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Η Αποκατάσταση Απέτυχε: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Ένα αρχείο ή ένας κατάλογος αφαιρέθηκε από ένα διαμοιρασμένο κατάλογο μόνο για ανάγνωση, αλλά η επαναφορά απέτυχε: %1 @@ -3133,137 +3115,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - Το CSync έλαβε κάποιο μήνυμα λάθους κατά την επεξεργασία της εσωτερικής διεργασίας. - - - CSync fatal parameter error. Μοιραίο σφάλμα παράμετρου CSync. - + CSync processing step update failed. Η ενημέρωση του βήματος επεξεργασίας του CSync απέτυχε. - + CSync processing step reconcile failed. CSync στάδιο επεξεργασίας συμφιλίωση απέτυχε. - + CSync could not authenticate at the proxy. Το CSync δεν μπόρεσε να πιστοποιηθεί στο διακομιστή μεσολάβησης. - + CSync failed to lookup proxy or server. Το CSync απέτυχε να διερευνήσει το διαμεσολαβητή ή το διακομιστή. - + CSync failed to authenticate at the %1 server. Το CSync απέτυχε να πιστοποιηθεί στο διακομιστή 1%. - + CSync failed to connect to the network. Το CSync απέτυχε να συνδεθεί με το δίκτυο. - + A network connection timeout happened. Διακοπή σύνδεσης δικτύου λόγω παρέλευσης χρονικού ορίου. - + A HTTP transmission error happened. Ένα σφάλμα μετάδοσης HTTP συνέβη. - + The mounted folder is temporarily not available on the server Ο προσαρτημένος φάκελος δεν είναι διαθέσιμος στον δικομιστή προσωρινά - + An error occurred while opening a folder Παρουσιάστηκε σφάλμα κατά το άνοιγμα του φακέλου - + Error while reading folder. Σφάλμα κατά την ανάγνωση του φακέλου. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Το Αρχείο/ο Φάκελος αγνοήθηκε επειδή είναι κρυφό. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Δεν υπάρχει διαθέσιμος χώρος στο διακομιστή 1%. - + CSync unspecified error. Άγνωστο σφάλμα CSync. - + Aborted by the user Ματαιώθηκε από το χρήστη - + CSync failed to access Το CSync απέτυχε να αποκτήσει πρόσβαση @@ -3273,144 +3250,144 @@ It is not advisable to use it. Το CSync απέτυχε να φορτώσει ή να δημιουργήσει το αρχείο καταγραφής. Βεβαιωθείτε ότι έχετε άδεια ανάγνωσης και εγγραφής στον τοπικό κατάλογο συγχρονισμού. - + CSync failed due to unhandled permission denied. Το CSync απέτυχε λόγω κατάστασης "permission denied" - + CSync tried to create a folder that already exists. Το CSync προσπάθησε να δημιουργήσει φάκελο που υπάρχει ήδη. - + The service is temporarily unavailable Η υπηρεσία δεν είναι διαθέσιμη προσωρινά - + Access is forbidden Δεν επιτρέπεται η πρόσβαση - + An internal error number %1 occurred. Προέκυψε ένα εσωτερικό σφάλμα με αριθμό %1. - + Symbolic links are not supported in syncing. Οι συμβολικού σύνδεσμοι δεν υποστηρίζονται για το συγχρονισμό. - + File is listed on the ignore list. Το αρχείο περιέχεται στη λίστα αρχείων προς αγνόηση. - + File names ending with a period are not supported on this file system. Τα ονόματα αρχείων που διαρκούν μια ορισμένη χρονική περίοδο δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + File names containing the character '%1' are not supported on this file system. Τα ονόματα αρχείων που περιέχουν τον χαρακτήρα '% 1' δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + The file name is a reserved name on this file system. Το όνομα αρχείου είναι ένα κατοχυρωμένο όνομα σε αυτό το σύστημα αρχείων. - + Filename contains trailing spaces. Το όνομα του αρχείου περιέχει συνεχόμενα κενά. - + Filename is too long. Το όνομα αρχείου είνια πολύ μεγάλο. - + Stat failed. Απέτυχε. - + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Invalid characters, please rename "%1" Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη + - Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση @@ -3452,17 +3429,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Η κεφαλίδα του αθροίσματος ελέγχου δεν είναι σωστά διαμορφωμένη. - + The checksum header contained an unknown checksum type '%1' Το checksum header περιέχει άγνωστο τύπο checksum '%1' - + The downloaded file does not match the checksum, it will be resumed. Το αρχείο που μεταφορτώθηκε δεν επαληθεύει το άθροισμα ελέγχου, θα συγχρονιστεί πάλι. diff --git a/translations/client_en.ts b/translations/client_en.ts index c24fa61ca..fb512102b 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1,14 +1,6 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - - - FolderWizardSourcePage @@ -612,7 +604,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -653,7 +645,7 @@ OCC::DiscoveryMainThread - + Aborted by the user @@ -984,139 +976,134 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 - + Waiting... - + Waiting for %n other folder(s)... @@ -1124,7 +1111,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + Preparing to sync... @@ -1132,12 +1119,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1207,11 +1194,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - - OCC::FormatWarningsWizardPage @@ -2140,7 +2122,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2196,12 +2178,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3150,137 +3132,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - - - - CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. - + A network connection timeout happened. - + A HTTP transmission error happened. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. - + CSync unspecified error. - + Aborted by the user - + CSync failed to access @@ -3290,144 +3267,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring + - Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3469,17 +3446,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_es.ts b/translations/client_es.ts index cb8e3088f..4c82ad4ab 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - El archivo destino tiene un tamaño o fecha/hora de modificación no esperado. - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -964,144 +956,139 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderStatusModel - + You need to be connected to add a folder Necesita estar conectado para añadir una carpeta - + Click this button to add a folder to synchronize. Haga clic en este botón para añadir una carpeta a sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Error mientras se cargaba la lista de carpetas desde el servidor. - + Signed out Cerrar sesión - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Añadir carpetas está deshabilitado debido a que ya están sincronizándose todos sus archivos. Si desea sincronizar múltiples carpeta, elimine la carpeta raíz actualmente configurada. - - - + Fetching folder list from server... Obtención de lista de carpetas del servidor... - + There are unresolved conflicts. Click for details. Hay conflictos sin resolver. Haz click para mas detalles. - + Checking for changes in '%1' Buscando cambios en '%1' - + Reconciling changes Reconciliando cambios - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargando: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) cargar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 de %2, archivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n carpeta...Esperando por %n otras carpetas... - + Preparing to sync... Preparando para sincronizar... @@ -1109,12 +1096,12 @@ Si continua con la sincronización todos los archivos serán remplazados por su OCC::FolderWizard - + Add Folder Sync Connection Añadir Conexión para el Directorio de Sincronización - + Add Sync Connection Añadir Sincronización de Conexión @@ -1184,11 +1171,6 @@ Si continua con la sincronización todos los archivos serán remplazados por su You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya ha sincronizado <i>%1</i>, el cual es la carpeta de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Todavía se están sincronizando ficheros. <b>No</b> se admite la sincronización de otras carpetas. Si quiere sincronizar múltiples carpetas, por favor revise la carpeta raíz configurada. - OCC::FormatWarningsWizardPage @@ -2120,7 +2102,7 @@ No se recomienda usarla. OCC::PropagateDirectory - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -2176,12 +2158,12 @@ No se recomienda usarla. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falló la restauración: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un archivo o directorio fue eliminado de una carpeta de compartida de solo lectura pero la recuperación falló: %1 @@ -3132,137 +3114,132 @@ No se recomienda usarla. - CSync got an error while processing internal trees. - CSync encontró un error mientras procesaba los árboles de datos internos. - - - CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. El proceso de actualización de CSync ha fallado. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la búsqueda del proxy - + CSync failed to authenticate at the %1 server. CSync: Falló la autenticación con el servidor %1. - + CSync failed to connect to the network. CSync: Falló la conexión con la red. - + A network connection timeout happened. Se sobrepasó el tiempo de espera de la conexión de red. - + A HTTP transmission error happened. Se ha producido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server El directorio montado no está disponible temporalmente en el servidor - + An error occurred while opening a folder Se produjo un error al abrir un directorio - + Error while reading folder. Error al leer el directorio. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Se ignoran los Archivos/Carpetas ocultos. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: No queda espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access CSync ha fallado al acceder @@ -3272,144 +3249,144 @@ No se recomienda usarla. CSync falló al cargar o crear el archivo de diario. Asegúrese de tener permisos de lectura y escritura en el directorio local de sincronización. - + CSync failed due to unhandled permission denied. CSync falló debido a un permiso denegado. - + CSync tried to create a folder that already exists. CSync trató de crear un directorio que ya existe. - + The service is temporarily unavailable El servicio no está disponible temporalmente - + Access is forbidden Acceso prohibido - + An internal error number %1 occurred. Ocurrió un error interno número %1. - + Symbolic links are not supported in syncing. No se admiten enlaces simbólicos en la sincronización. - + File is listed on the ignore list. El fichero está en la lista de ignorados - + File names ending with a period are not supported on this file system. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. - + File names containing the character '%1' are not supported on this file system. Los nombres de archivo que contengan el caracter '%1' no son compatibles con este sistema de archivos. - + The file name is a reserved name on this file system. El nombre del archivo es una palabra reservada del sistema de archivos. - + Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - + Filename is too long. El nombre del archivo es demasiado largo. - + Stat failed. Stat ha fallado. - + Filename encoding is not valid Los caracteres del nombre de fichero no son válidos - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. + - Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen @@ -3451,17 +3428,17 @@ No se recomienda usarla. OCC::ValidateChecksumHeader - + The checksum header is malformed. La cabecera del archivo de comprobación es incorrecto. - + The checksum header contained an unknown checksum type '%1' La suma de comprobación de cabeceras contenía una suma de comprobación desconocida de tipo '%1' - + The downloaded file does not match the checksum, it will be resumed. El archivo descargado no coincide con el archivo de comprobación, será reanudado. diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index cbfacde06..dfc24f018 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - El archivo de destino tiene un tamaño o fecha de modificación inesperado - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. - + Signed out Desautentificado - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) Cargado %1/s - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, archivo %3 de %4 - + file %1 of %2 Archivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... - + Preparing to sync... Preparando para sincronizar... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Ya estás sincronizando <i>%1</i>, el cual es el directorio de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - - OCC::FormatWarningsWizardPage @@ -2108,7 +2090,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2164,12 +2146,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3118,137 +3100,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync tuvo un error mientras procesaba los árboles de datos internos. - - - CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. Falló el proceso de actualización de CSync. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la busqueda del proxy. - + CSync failed to authenticate at the %1 server. CSync: fallo al autenticarse en el servidor %1. - + CSync failed to connect to the network. CSync: fallo al conectarse a la red - + A network connection timeout happened. - + A HTTP transmission error happened. Ha ocurrido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: No hay más espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access @@ -3258,144 +3235,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Los vínculos simbólicos no está soportados al sincronizar. - + File is listed on the ignore list. El archivo está en la lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring + - Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3437,17 +3414,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_et.ts b/translations/client_et.ts index a89de78aa..c882b9c27 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Sihtkausta fail on ootamatu suuruse või muutmise ajaga - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kasutaja poolt tühistatud @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Kausta lisamiseks pead sa olema ühendatud - + Click this button to add a folder to synchronize. Sünkroniseeritava kausta lisamiseks kliki sellele nupule. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Välja logitud - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sünkroniseerimine %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) allalaadimine %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) üleslaadimine %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 / %2, fail %3 / %4 - + file %1 of %2 fail %1 / %2-st - + Waiting... Ootamine... - + Waiting for %n other folder(s)... - + Preparing to sync... Sünkroniseerimiseks valmistumine... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Sa juba sünkroniseerid <i>%1</i>, mis on <i>%2</i> ülemkataloog. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Sa juba sünkroniseerid kõiki oma faile. Teise kataloogi sünkroniseering <b>ei ole</b> toetatud. Kui soovid sünkroniseerida mitut kataloogi, palun eemalda hektel seadistatud sünkroniseeritav juurkataloog. - OCC::FormatWarningsWizardPage @@ -2109,7 +2091,7 @@ Selle kasutamine pole soovitatav. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2165,12 +2147,12 @@ Selle kasutamine pole soovitatav. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Taastamine ebaõnnestus: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3121,137 +3103,132 @@ Selle kasutamine pole soovitatav. - CSync got an error while processing internal trees. - CSync sai vea sisemiste andmestruktuuride töötlemisel. - - - CSync fatal parameter error. CSync parameetri saatuslik viga. - + CSync processing step update failed. CSync uuendusprotsess ebaõnnestus. - + CSync processing step reconcile failed. CSync tasakaalustuse protsess ebaõnnestus. - + CSync could not authenticate at the proxy. CSync ei suutnud puhverserveris autoriseerida. - + CSync failed to lookup proxy or server. Csync ei suuda leida puhverserverit. - + CSync failed to authenticate at the %1 server. CSync autoriseering serveris %1 ebaõnnestus. - + CSync failed to connect to the network. CSync võrguga ühendumine ebaõnnestus. - + A network connection timeout happened. Toimus võrgukatkestus. - + A HTTP transmission error happened. HTTP ülekande viga. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Serveris %1 on ruum otsas. - + CSync unspecified error. CSync tuvastamatu viga. - + Aborted by the user Kasutaja poolt tühistatud - + CSync failed to access CSyncile ligipääs ebaõnnestus @@ -3261,144 +3238,144 @@ Selle kasutamine pole soovitatav. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Teenus pole ajutiselt saadaval - + Access is forbidden Ligipääs on keelatud - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Sümboolsed lingid ei ole sünkroniseerimisel toetatud. - + File is listed on the ignore list. Fail on märgitud ignoreeritavate nimistus. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Faili nimi on liiga pikk. - + Stat failed. - + Filename encoding is not valid Failinime kodeering pole kehtiv - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan + - Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas @@ -3440,17 +3417,17 @@ Selle kasutamine pole soovitatav. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 1d1da8a86..f2f4cd6bc 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Helburuko fitxategiak espero ez den tamaina edo aldaketa data du - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Erabiltzaileak bertan behera utzita @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" - + Error while loading the list of folders from the server. Errorea zerbitzaritik karpeten zerrenda eskuratzean. - + Signed out Saioa bukatuta - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... Zerbitzaritik karpeta zerrenda eskuratzen... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 Sinkronizatzen - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) Deskargatu %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) igo %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 - %3tik) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1. fitxategia %2tik - + Waiting... Itxoiten... - + Waiting for %n other folder(s)... Itxoiten beste karpeta %n...Itxoiten beste %n karpeta... - + Preparing to sync... Sinkronizatzeko prestatzen... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Gehitu Karpeta Sinkronizatzeko Konexioa - + Add Sync Connection Gehitu Sinkronizazio Konexioa @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Dagoeneko <i>%1</i> sinkronizatzen ari zara, <i>%2</i>-ren guraso karpeta dena. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Dagoeneko fitxategi guztiak sinkronizatzen ari zara. <b>Ezin<b> da sinkronizatu beste karpeta bat. Hainbat karpeta batera sinkronizatu nahi baduzu ezaba ezazu orain konfiguratuta duzun sinkronizazio karpeta nagusia. - OCC::FormatWarningsWizardPage @@ -2111,7 +2093,7 @@ Ez da gomendagarria erabltzea. OCC::PropagateDirectory - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -2167,12 +2149,12 @@ Ez da gomendagarria erabltzea. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3121,137 +3103,132 @@ Ez da gomendagarria erabltzea. - CSync got an error while processing internal trees. - CSyncek errorea izan du barne zuhaitzak prozesatzerakoan. - - - CSync fatal parameter error. CSync parametro larri errorea. - + CSync processing step update failed. CSync prozesatzearen eguneratu urratsak huts egin du. - + CSync processing step reconcile failed. CSync prozesatzearen berdinkatze urratsak huts egin du. - + CSync could not authenticate at the proxy. CSyncek ezin izan du proxya autentikatu. - + CSync failed to lookup proxy or server. CSyncek huts egin du zerbitzaria edo proxia bilatzean. - + CSync failed to authenticate at the %1 server. CSyncek huts egin du %1 zerbitzarian autentikatzean. - + CSync failed to connect to the network. CSyncek sarera konektatzean huts egin du. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP transmisio errore bat gertatu da. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Errore bat egon da karpeta bat irekitzearkoan - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ez dago lekurik %1 zerbitzarian. - + CSync unspecified error. CSyncen zehaztugabeko errorea. - + Aborted by the user Erabiltzaileak bertan behera utzita - + CSync failed to access @@ -3261,144 +3238,144 @@ Ez da gomendagarria erabltzea. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Esteka sinbolikoak ezin dira sinkronizatu. - + File is listed on the ignore list. Fitxategia baztertutakoen zerrendan dago. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring + - Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria @@ -3440,17 +3417,17 @@ Ez da gomendagarria erabltzea. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 2d2e74e0d..0e78033f9 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - فایل مقصد دارای سایز و یا تاریخ ویرایش غیرمتعارف است - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user متوقف شده توسط کاربر @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. برای افزودن پوشه به همگام‌سازی روی این دکمه کلیک کنید. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out خارج شد - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" همگام‌سازی %1 - - + + , رشته های ترجمه نشده - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) دانلود %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) آپلود %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 از %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 فایل %1 از %2 - + Waiting... درحال انتظار... - + Waiting for %n other folder(s)... در انتظار برای %n پوشه‌‎ی دیگر ... - + Preparing to sync... آماده‌سازی همگام‌سازی ... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - - OCC::FormatWarningsWizardPage @@ -2108,7 +2090,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2164,12 +2146,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3118,137 +3100,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync هنگام پردازش درختان داخلی یک خطا دریافت نمود. - - - CSync fatal parameter error. - + CSync processing step update failed. مرحله به روز روسانی پردازش CSync ناموفق بود. - + CSync processing step reconcile failed. مرحله تطبیق پردازش CSync ناموفق بود. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. عدم موفقیت CSync برای مراجعه به پروکسی یا سرور. - + CSync failed to authenticate at the %1 server. عدم موفقیت CSync برای اعتبار دادن در %1 سرور. - + CSync failed to connect to the network. عدم موفقیت CSync برای اتصال به شبکه. - + A network connection timeout happened. - + A HTTP transmission error happened. خطا در انتقال HTTP اتفاق افتاده است. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder یک خطا در هنگام باز کردن یک پوشه رخ داده‌ است - + Error while reading folder. خطا در هنگام خواندن پوشه - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: فضا در %1 سرور در دسترس نیست. - + CSync unspecified error. خطای نامشخص CSync - + Aborted by the user متوقف شده توسط کاربر - + CSync failed to access @@ -3258,144 +3235,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable سرویس بصورت موقت خارج از دسترس است - + Access is forbidden - + An internal error number %1 occurred. یک خطای داخلی با شماره خطای %1 رخ داده است. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. نام فایل خیلی طولانی است. - + Stat failed. وضعیت ناموفق - + Filename encoding is not valid رمزگذاری نام فایل معتبر نیست - + Invalid characters, please rename "%1" کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن + - Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا @@ -3437,17 +3414,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_fi.ts b/translations/client_fi.ts index b924fb425..1d77b0c43 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Kohdetiedostolla on odottamaton koko tai muokkausaika - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Keskeytetty käyttäjän toimesta @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Yhteyden tulee olla muodostettu, jotta voit lisätä kansion - + Click this button to add a folder to synchronize. Napsauta valitaksesi synkronoitavan kansion. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Virhe ladatessa kansiolistausta palvelimelta. - + Signed out Kirjauduttu ulos - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Kansion lisääminen on poistettu käytöstä, koska synkronoit jo kaikki tiedostot. Jos haluat synkronoida useita kansioita, poista nykyisen juurikansion synkronointiyhteys. - - - + Fetching folder list from server... Haetaan kansioluetteloa palvelimelta... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkronoidaan %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 jäljellä, %1/%2, tiedosto %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, tiedosto %3/%4 - + file %1 of %2 tiedosto %1/%2 - + Waiting... Odotetaan... - + Waiting for %n other folder(s)... Odotetaan %n muuta kansiota...Odotetaan %n muuta kansiota... - + Preparing to sync... Valmistaudutaan synkronointiin... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Lisää kansion synkronointiyhteys - + Add Sync Connection Lisää synkronointiyhteys @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synkronoit jo kansiota <i>%1</i>, ja se on kansion <i>%2</i> yläkansio. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - - OCC::FormatWarningsWizardPage @@ -2111,7 +2093,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateDirectory - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -2167,12 +2149,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3123,137 +3105,132 @@ Osoitteen käyttäminen ei ole suositeltavaa. - CSync got an error while processing internal trees. - Csync-synkronointipalvelussa tapahtui virhe sisäisten puurakenteiden prosessoinnissa. - - - CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. CSync ei onnistunut yhdistämään verkkoon. - + A network connection timeout happened. Tapahtui verkon aikakatkaisu. - + A HTTP transmission error happened. Tapahtui HTTP-välitysvirhe. - + The mounted folder is temporarily not available on the server Liitetty kansio on väliaikaisesti pois käytöstä tällä palvelimella - + An error occurred while opening a folder Kansiota avatessa tapahtui virhe - + Error while reading folder. Kansiota lukiessa tapahtui virhe - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Tiedosto/kansi ohitetaan, koska se on piilotettu. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1-palvelimella ei ole tilaa vapaana. - + CSync unspecified error. CSync - määrittämätön virhe. - + Aborted by the user Keskeytetty käyttäjän toimesta - + CSync failed to access @@ -3263,144 +3240,144 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Palvelu ei ole juuri nyt käytettävissä - + Access is forbidden Pääsy estetty - + An internal error number %1 occurred. Sisäinen virhe, numero %1. - + Symbolic links are not supported in syncing. Symboliset linkit eivät ole tuettuja synkronoinnissa. - + File is listed on the ignore list. Tiedosto on ohituslistalla. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Tiedoston nimi on liian pitkä. - + Stat failed. Stat epäonnistui. - + Filename encoding is not valid Tiedostonimen merkistökoodaus ei ole kelvollista - + Invalid characters, please rename "%1" Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring + - Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde @@ -3442,17 +3419,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ValidateChecksumHeader - + The checksum header is malformed. Tarkistesumman otsake on muodostettu väärin. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 749c3e497..ecdd07d8d 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Le fichier de destination a une taille ou une date de modification inattendue - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompu par l'utilisateur @@ -965,144 +957,139 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderStatusModel - + You need to be connected to add a folder Vous devez être connecté pour ajouter un dossier - + Click this button to add a folder to synchronize. Cliquez ce bouton pour ajouter un dossier à synchroniser. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Une erreur est survenue lors du chargement de la liste des dossiers depuis le serveur. - + Signed out Session fermée - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - L'ajout de dossier est désactivé car vous synchronisez déjà tous vos fichiers. Si vous voulez synchroniser plusieurs dossiers, supprimez d'abord le dossier racine configuré actuellement. - - - + Fetching folder list from server... Récupération de la liste des dossiers depuis le serveur... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Recherche de modifications dans '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronisation de %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) réception %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) envoi %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 sur %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restantes, %1 sur %2, fichier %3 sur %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 sur %2, fichier %3 sur %4 - + file %1 of %2 fichier %1 sur %2 - + Waiting... En attente ... - + Waiting for %n other folder(s)... En attente de %n autre(s) dossier(s)En attente de %n autre(s) dossier(s) - + Preparing to sync... Préparation à la synchronisation @@ -1110,12 +1097,12 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi OCC::FolderWizard - + Add Folder Sync Connection Ajouter une synchronisation de dossier - + Add Sync Connection Ajouter une Synchronisation @@ -1185,11 +1172,6 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Vous synchronisez déja <i>%1</i>, qui est un dossier parent de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Vous sychronisez déjà tous vos fichiers. Synchroniser un autre dossier n'est <b>pas</b> pris en charge. Si vous voulez synchroniser plusieurs dossiers, veuillez supprimer la synchronisation du dossier racine qui est configurée actuellement. - OCC::FormatWarningsWizardPage @@ -2122,7 +2104,7 @@ Il est déconseillé de l'utiliser. OCC::PropagateDirectory - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -2178,12 +2160,12 @@ Il est déconseillé de l'utiliser. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Échec de la restauration : %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un fichier ou un dossier a été supprimé d'un partage en lecture seule, mais la restauration a échoué : %1 @@ -3134,137 +3116,132 @@ Il est déconseillé de l'utiliser. - CSync got an error while processing internal trees. - Erreur CSync lors du traitement des arbres internes. - - - CSync fatal parameter error. Erreur fatale CSync : mauvais paramètre. - + CSync processing step update failed. Erreur CSync lors de l'opération de mise à jour - + CSync processing step reconcile failed. Erreur CSync lors de l'opération de réconciliation - + CSync could not authenticate at the proxy. CSync n'a pu s'authentifier auprès du proxy. - + CSync failed to lookup proxy or server. CSync n'a pu trouver le proxy ou serveur auquel se connecter. - + CSync failed to authenticate at the %1 server. CSync n'a pu s'authentifier auprès du serveur %1. - + CSync failed to connect to the network. CSync n'a pu établir une connexion au réseau. - + A network connection timeout happened. Le délai d'attente de la connexion réseau a été dépassé. - + A HTTP transmission error happened. Une erreur de transmission HTTP s'est produite. - + The mounted folder is temporarily not available on the server Le dossier monté est temporairement indisponible sur le serveur - + An error occurred while opening a folder Une erreur est survenue lors de l'ouverture d'un dossier - + Error while reading folder. Erreur lors de la lecture du dossier. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Le fichier ou dossier a été ignoré car il est masqué. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync : Aucun espace disponible sur le serveur %1. - + CSync unspecified error. Erreur CSync inconnue. - + Aborted by the user Interrompu par l'utilisateur - + CSync failed to access CSync n'a pas pu accéder à @@ -3274,144 +3251,144 @@ Il est déconseillé de l'utiliser. CSync n’a pu charger ou créer le fichier de journalisation. Veuillez vérifier que vous possédez les droits en lecture/écriture dans le dossier de synchronisation local. - + CSync failed due to unhandled permission denied. CSync a échoué en raison d'un refus de permission non pris en charge. - + CSync tried to create a folder that already exists. CSync a tenté de créer un dossier déjà présent. - + The service is temporarily unavailable Le service est temporairement indisponible. - + Access is forbidden L'accès est interdit - + An internal error number %1 occurred. Une erreur interne numéro %1 est survenue. - + Symbolic links are not supported in syncing. Les liens symboliques ne sont pas pris en charge par la synchronisation. - + File is listed on the ignore list. Le fichier est présent dans la liste des fichiers à exclure. - + File names ending with a period are not supported on this file system. Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. - + File names containing the character '%1' are not supported on this file system. Les noms de fichier contenant le caractère '%1' ne sont pas pris en charge sur votre système. - + The file name is a reserved name on this file system. Le nom du fichier est réservé sur votre système. - + Filename contains trailing spaces. Le nom du fichier se fini par des espaces. - + Filename is too long. Le nom de fichier est trop long. - + Stat failed. Stat échoué. - + Filename encoding is not valid L'encodage du nom de fichier n'est pas valide - + Invalid characters, please rename "%1" Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration + - Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source @@ -3453,17 +3430,17 @@ Il est déconseillé de l'utiliser. OCC::ValidateChecksumHeader - + The checksum header is malformed. L'entête de somme de contrôle est mal formée. - + The checksum header contained an unknown checksum type '%1' L'en-tête de la somme de contrôle contenait un type de somme de contrôle inconnu '%1' - + The downloaded file does not match the checksum, it will be resumed. Le fichier téléchargé ne correspond pas à la somme de contrôle, il va être téléchargé à nouveau. diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 9fbee9738..f8f4ebb2f 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - O ficheiro de destino ten un tamaño ou unha hora de modificación non agardados - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompido polo usuario @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Ten que estar conectado para engadir un cartafol - + Click this button to add a folder to synchronize. Prema nesta botón para engadir un cartafol para sincronizar - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Desconectado - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) descargar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Xa está a sincronizar <i>%1</i>, é o cartafol pai de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Xa se están a sincronizar todos os ficheiros. Isto <b>non</b> é compatíbel co sincronización doutro cartafol. Se quere sincronizar varios cartafoles, retire a sincronización do cartafol raíz configurado actualmente. - OCC::FormatWarningsWizardPage @@ -2110,7 +2092,7 @@ Recomendámoslle que non o use. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2166,12 +2148,12 @@ Recomendámoslle que non o use. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Fallou a restauración: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3122,137 +3104,132 @@ Recomendámoslle que non o use. - CSync got an error while processing internal trees. - CSync tivo un erro ao procesar árbores internas. - - - CSync fatal parameter error. Produciuse un erro fatal de parámetro CSync. - + CSync processing step update failed. Produciuse un fallo ao procesar o paso de actualización de CSync. - + CSync processing step reconcile failed. Produciuse un fallo ao procesar o paso de reconciliación de CSync. - + CSync could not authenticate at the proxy. CSync non puido autenticarse no proxy. - + CSync failed to lookup proxy or server. CSYNC no puido atopar o servidor proxy. - + CSync failed to authenticate at the %1 server. CSync non puido autenticarse no servidor %1. - + CSync failed to connect to the network. CSYNC no puido conectarse á rede. - + A network connection timeout happened. Excedeuse do tempo de espera para a conexión á rede. - + A HTTP transmission error happened. Produciuse un erro na transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Non hai espazo dispoñíbel no servidor %1. - + CSync unspecified error. Produciuse un erro non especificado de CSync - + Aborted by the user Interrompido polo usuario - + CSync failed to access Produciuse un fallo ao reservar memoria para CSync. @@ -3262,144 +3239,144 @@ Recomendámoslle que non o use. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable O servizo está temporalmente inaccesíbel. - + Access is forbidden - + An internal error number %1 occurred. Produciuse un erro interno número %1. - + Symbolic links are not supported in syncing. As ligazóns simbolicas non son admitidas nas sincronizacións - + File is listed on the ignore list. O ficheiro está na lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. O nome de ficheiro é longo de máis. - + Stat failed. Fallou a obtención de estatísticas. - + Filename encoding is not valid O nome de ficheiro codificado non é correcto - + Invalid characters, please rename "%1" Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando + - Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe @@ -3441,17 +3418,17 @@ Recomendámoslle que non o use. OCC::ValidateChecksumHeader - + The checksum header is malformed. A cabeceira da suma de comprobación é incorrecta. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. O ficheiro descargado non coincide coa suma de comprobación. Retomase. diff --git a/translations/client_hu.ts b/translations/client_hu.ts index d4be19630..1f34a8cc0 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - A cél fájl váratlan méretű vagy módosítási dátumú - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Felhasználó megszakította @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Kijelentkezve - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 szinkronizálása - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) letöltés: %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) feltöltés: %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 maradt, %1 / %2, %3 / %4 fájl - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 %1 / %2 fájl - + Waiting... Várakozás... - + Waiting for %n other folder(s)... Várakozás %n további könyvtárra...Várakozás %n további könyvtárra... - + Preparing to sync... Felkészülés szinkronizálásra... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - - OCC::FormatWarningsWizardPage @@ -2108,7 +2090,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2164,12 +2146,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3119,137 +3101,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - A CSync hibába ütközött a belső adatok feldolgozása közben. - - - CSync fatal parameter error. CSync hibás paraméterhiba. - + CSync processing step update failed. CSync frissítés feldolgozása meghíusult. - + CSync processing step reconcile failed. CSync egyeztetési lépés meghíusult. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. A CSync nem találja a proxy kiszolgálót. - + CSync failed to authenticate at the %1 server. A CSync nem tuja azonosítani magát a %1 kiszolgálón. - + CSync failed to connect to the network. CSync hálózati kapcsolódási hiba. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP átviteli hiba történt. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Nincs szabad tárhely az %1 kiszolgálón. - + CSync unspecified error. CSync ismeretlen hiba. - + Aborted by the user Felhasználó megszakította - + CSync failed to access @@ -3259,144 +3236,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable A szolgáltatás ideiglenesen nem elérhető - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. Fájl a kizárási listán. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Fájlnév túl nagy. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring + - Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás @@ -3438,17 +3415,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_it.ts b/translations/client_it.ts index ff072d3af..0707c1f29 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Il file di destinazione ha una dimensione o un'ora di modifica inattesa - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrotto dall'utente @@ -960,144 +952,139 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderStatusModel - + You need to be connected to add a folder Devi essere connesso per aggiungere una cartella - + Click this button to add a folder to synchronize. Fai clic su questo pulsante per aggiungere una cartella da sincronizzare. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Errore durante il caricamento dell'elenco delle cartelle dal server. - + Signed out Disconnesso - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - L'aggiunta di una cartella è disabilitata perché stai già sincronizzando tutti i tuoi file. Se desideri sincronizzare più cartelle, rimuovi la cartella radice attualmente configurata. - - - + Fetching folder list from server... Recupero dell'elenco delle cartelle dal server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Controllo delle modifiche in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizzazione di %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ricezione %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) invio %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 di %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 rimanenti, %1 di %2, file %3 di %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 di %2, file %3 di %4 - + file %1 of %2 file %1 di %2 - + Waiting... Attendere... - + Waiting for %n other folder(s)... In attesa di %n altra cartella...In attesa di %n altre cartelle... - + Preparing to sync... Preparazione della sincronizzazione... @@ -1105,12 +1092,12 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut OCC::FolderWizard - + Add Folder Sync Connection Aggiungi connessioni di sincronizzazione cartelle - + Add Sync Connection Aggiungi connessione di sincronizzazione @@ -1180,11 +1167,6 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Stai già sincronizzando <i>%1</i>, che è la cartella superiore di <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Stai già sincronizzando tutti i tuoi file. La sincronizzazione di un'altra cartella <b>non</b> è supportata. Se vuoi sincronizzare più cartelle, rimuovi la configurazione della cartella principale di sincronizzazione. - OCC::FormatWarningsWizardPage @@ -2116,7 +2098,7 @@ Non è consigliabile utilizzarlo. OCC::PropagateDirectory - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -2172,12 +2154,12 @@ Non è consigliabile utilizzarlo. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Ripristino non riuscito: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Un file o una cartella è stato rimosso da una condivisione in sola lettura, ma il ripristino non è riuscito: %1 @@ -3128,137 +3110,132 @@ Non è consigliabile utilizzarlo. - CSync got an error while processing internal trees. - Errore di CSync durante l'elaborazione degli alberi interni. - - - CSync fatal parameter error. Errore grave di parametro di CSync. - + CSync processing step update failed. La fase di aggiornamento di CSync non è riuscita. - + CSync processing step reconcile failed. La fase di riconciliazione di CSync non è riuscita. - + CSync could not authenticate at the proxy. CSync non è in grado di autenticarsi al proxy. - + CSync failed to lookup proxy or server. CSync non è riuscito a trovare un proxy o server. - + CSync failed to authenticate at the %1 server. CSync non è riuscito ad autenticarsi al server %1. - + CSync failed to connect to the network. CSync non è riuscito a connettersi alla rete. - + A network connection timeout happened. Si è verificato un timeout della connessione di rete. - + A HTTP transmission error happened. Si è verificato un errore di trasmissione HTTP. - + The mounted folder is temporarily not available on the server La cartella montata è temporaneamente indisponibile sul server - + An error occurred while opening a folder Si è verificato un errore durante l'apertura di una cartella - + Error while reading folder. Errore durante la lettura della cartella. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Il file/cartella è ignorato poiché è nascosto. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: spazio insufficiente sul server %1. - + CSync unspecified error. Errore non specificato di CSync. - + Aborted by the user Interrotto dall'utente - + CSync failed to access CSync non è riuscito ad accedere @@ -3268,144 +3245,144 @@ Non è consigliabile utilizzarlo. CSync non è riuscito a caricare o a creare il file journal. Assicurati di avere i permessi di lettura e scrittura nella cartella di sincronizzazione locale. - + CSync failed due to unhandled permission denied. Problema di CSync a causa di un permesso negato non gestito. - + CSync tried to create a folder that already exists. CSync ha cercato di creare una cartella già esistente. - + The service is temporarily unavailable Il servizio è temporaneamente non disponibile - + Access is forbidden L'accesso è vietato - + An internal error number %1 occurred. SI è verificato un errore interno numero %1. - + Symbolic links are not supported in syncing. I collegamenti simbolici non sono supportati dalla sincronizzazione. - + File is listed on the ignore list. Il file è stato aggiunto alla lista ignorati. - + File names ending with a period are not supported on this file system. I nomi del file che terminano con un punto non sono supportati su questo file system. - + File names containing the character '%1' are not supported on this file system. I nomi del file che contengono il carattere '%1' non sono supportati su questo file system. - + The file name is a reserved name on this file system. Il nome del file è un nome riservato su questo file system. - + Filename contains trailing spaces. Il nome del file contiene spazi alla fine. - + Filename is too long. Il nome del file è troppo lungo. - + Stat failed. Stat non riuscita. - + Filename encoding is not valid La codifica del nome del file non è valida - + Invalid characters, please rename "%1" Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino + - Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine @@ -3447,17 +3424,17 @@ Non è consigliabile utilizzarlo. OCC::ValidateChecksumHeader - + The checksum header is malformed. L'intestazione del codice di controllo non è valida. - + The checksum header contained an unknown checksum type '%1' L'intestazione di controllo conteneva un tipo di codice di controllo '%1' sconosciuto - + The downloaded file does not match the checksum, it will be resumed. Il file scaricato non verifica il codice di controllo, sarà ripristinato. diff --git a/translations/client_ja.ts b/translations/client_ja.ts index fd2d4913f..c155e4390 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - 指定先のファイルは予期しないサイズまたは変更時間です - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ユーザーによって中止されました @@ -962,144 +954,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder フォルダーを追加するためには、接続している必要があります。 - + Click this button to add a folder to synchronize. このボタンをクリックして同期フォルダーを追加してください。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. サーバーからフォルダーのリスト取得時にエラー - + Signed out サインアウト - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - すでに同期対象のフォルダーのため、追加したフォルダーを無効にしました。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダーの同期設定を削除してください。 - - - + Fetching folder list from server... サーバーからフォルダーリストを取得中... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' '%1' の更新を確認しています - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同期中 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ダウンロード %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) アップロード %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%4 中 %3 完了) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 残り%5、%2中%1完了 、ファイル%4個中%3個完了 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, ファイル数 %3 of %4 - + file %1 of %2 %1 / %2 ファイル - + Waiting... 待機中... - + Waiting for %n other folder(s)... %n 他のフォルダーの完了待ち... - + Preparing to sync... 同期の準備中... @@ -1107,12 +1094,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 同期フォルダーを追加 - + Add Sync Connection 同期接続を追加 @@ -1182,11 +1169,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i>は、<i>%2</i>の親フォルダーですでに同期しています。 - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - すべてのファイルはすでに同期されています。他のフォルダーの同期は<b>サポートしていません</>。複数のフォルダーを同期したい場合は、現在設定されているルートフォルダー同期設定を削除してください。 - OCC::FormatWarningsWizardPage @@ -2117,7 +2099,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -2173,12 +2155,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 復元に失敗: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ファイルまたはフォルダーが読み込み専用の共有から削除されましたが、復元に失敗しました: %1 @@ -3129,137 +3111,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSyncは内部ツリーの処理中にエラーに遭遇しました。 - - - CSync fatal parameter error. CSyncの致命的なパラメータエラーです。 - + CSync processing step update failed. CSyncの処理ステップの更新に失敗しました。 - + CSync processing step reconcile failed. CSyncの処理ステップの調停に失敗しました。 - + CSync could not authenticate at the proxy. CSyncはそのプロキシで認証できませんでした。 - + CSync failed to lookup proxy or server. CSyncはプロキシもしくはサーバーの参照に失敗しました。 - + CSync failed to authenticate at the %1 server. CSyncは %1 サーバーでの認証に失敗しました。 - + CSync failed to connect to the network. CSyncはネットワークへの接続に失敗しました。 - + A network connection timeout happened. ネットワーク接続のタイムアウトが発生しました。 - + A HTTP transmission error happened. HTTPの伝送エラーが発生しました。 - + The mounted folder is temporarily not available on the server サーバー上のマウント済フォルダーが一時的に利用できません。 - + An error occurred while opening a folder フォルダーを開く際にエラーが発生しました - + Error while reading folder. フォルダーの読み込みエラー - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. 隠しファイル/フォルダーのため無視されました - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1 サーバーには利用可能な空き領域がありません。 - + CSync unspecified error. CSyncの未指定のエラーです。 - + Aborted by the user ユーザーによって中止されました - + CSync failed to access CSync は接続できませんでした @@ -3269,144 +3246,144 @@ It is not advisable to use it. CSyncはジャーナルファイルの読み込みや作成に失敗しました。ローカルの同期フォルダーに読み書きの権限があるか確認してください。 - + CSync failed due to unhandled permission denied. CSync が処理できないパーミション拒否により失敗しました - + CSync tried to create a folder that already exists. CSyncはすでに存在するフォルダーを作成しようとしました。 - + The service is temporarily unavailable サーバーは一時的に利用できません - + Access is forbidden アクセスが禁止されています - + An internal error number %1 occurred. 内部エラー番号 %1 が発生しました。 - + Symbolic links are not supported in syncing. 同期機能はシンボリックリンクをサポートしていません。 - + File is listed on the ignore list. ファイルは除外リストに登録されています。 - + File names ending with a period are not supported on this file system. 末尾にピリオドを使うファイル名はサポートされていません - + File names containing the character '%1' are not supported on this file system. ファイル名に使用できない文字列が含まれています: '%1' - + The file name is a reserved name on this file system. ファイル名はこのファイルシステムで予約されている名前です。 - + Filename contains trailing spaces. ファイル名末尾にスペースが含まれます。 - + Filename is too long. ファイル名が長すぎます - + Stat failed. 情報取得エラー - + Filename encoding is not valid ファイル名のエンコーディングが無効です。 - + Invalid characters, please rename "%1" 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています + - Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 @@ -3448,17 +3425,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. ヘッダーのチェックサムが異常です。 - + The checksum header contained an unknown checksum type '%1' チェックサムヘッダーに '%1' という未知のチェックサムが含まれていました - + The downloaded file does not match the checksum, it will be resumed. ダウンロードしたファイルがチェックサムエラーです。再ダウンロードします。 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index b056af6dd..32fd07322 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Målfilen har uventet størrelse eller endringstidspunkt - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbrutt av brukeren @@ -963,144 +955,139 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderStatusModel - + You need to be connected to add a folder Du må være tilkoblet for å legge til en mappe - + Click this button to add a folder to synchronize. Klikk denne knappen for å legge til en mappe som skal synkroniseres. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Feil ved innlasting av listen av mapper fra serveren. - + Signed out Logget ut - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Du kan ikke legge til en mappe fordi du allerede synkroniserer alle filene dine. Hvis du ønsker å synkronisere individuelle mapper, må du fjerne synkroniseringen av rotmappen som er konfigurert. - - - + Fetching folder list from server... Henter mappeliste fra server.. - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Ser etter endringer i '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserer %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) nedlasting %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) opplasting %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 igjen, %1 av %2, fil %3 of %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Venter.. - + Waiting for %n other folder(s)... Venter på %n annen mappe...Venter på %n andre mappe(r)... - + Preparing to sync... Forbereder synkronisering... @@ -1108,12 +1095,12 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev OCC::FolderWizard - + Add Folder Sync Connection Legg til mappe-synkronisering - + Add Sync Connection Legg til tilkobling for synkronisering @@ -1183,11 +1170,6 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkroniserer allerede <i>%1</i>, som er foreldremappe for <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Du synkroniserer allerede alle filene dine. Synkronisering av enda en mappe støttes <b>ikke</b>. Hvis du vil synkronisere flere mapper må du fjerne den konfigurerte synkroniseringen av rotmappe. - OCC::FormatWarningsWizardPage @@ -2120,7 +2102,7 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateDirectory - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -2176,12 +2158,12 @@ Det er ikke tilrådelig å bruke den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Gjenoppretting feilet: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mappe ble fjernet fra en deling med lesetilgang, men gjenoppretting feilet: %1 @@ -3132,137 +3114,132 @@ Det er ikke tilrådelig å bruke den. - CSync got an error while processing internal trees. - CSync fikk en feil under behandling av intern trestruktur. - - - CSync fatal parameter error. CSync fatal parmeterfeil. - + CSync processing step update failed. CSync-behandlingssteg oppdatering feilet. - + CSync processing step reconcile failed. CSync-behandlingssteg overensstemming feilet. - + CSync could not authenticate at the proxy. CSync klarte ikke å autentisere mot proxy. - + CSync failed to lookup proxy or server. CSync klarte ikke å slå opp proxy eller server. - + CSync failed to authenticate at the %1 server. CSync karte ikke å autentisere på serveren %1. - + CSync failed to connect to the network. CSync klarte ikke å koble seg til nettverket. - + A network connection timeout happened. Det oppstod et tidsavbrudd for en nettverksforbindelse. - + A HTTP transmission error happened. En HTTP-overføringsfeil oppstod. - + The mounted folder is temporarily not available on the server Den oppkoblede mappen er for tiden ikke tilgjengelig på serveren - + An error occurred while opening a folder Det oppstod en feil ved åpning av en mappe - + Error while reading folder. Feil ved lesing av mappe. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Filen/mappen ignoreres fordi den er skjult. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ikke ledig plass tilgjengelig på server %1. - + CSync unspecified error. CSync uspesifisert feil. - + Aborted by the user Avbrutt av brukeren - + CSync failed to access CSync klarte ikke å aksessere @@ -3272,144 +3249,144 @@ Det er ikke tilrådelig å bruke den. CSync klarte ikke å laste eller opprette journalfilen. Sjekk at du har lese- og skrivetilgang i den lokale synkroniseringsmappen. - + CSync failed due to unhandled permission denied. CSync feilet fordi nektet tilgang ikke ble håndtert. - + CSync tried to create a folder that already exists. CSync prøvde å opprette en mappe som finnes allerede. - + The service is temporarily unavailable Tjenesten er midlertidig utilgjengelig - + Access is forbidden Tilgang er nektet - + An internal error number %1 occurred. En intern feil nummer %1 oppstod. - + Symbolic links are not supported in syncing. Symbolske lenker støttes ikke i synkronisering. - + File is listed on the ignore list. Filen ligger på ignoreringslisten. - + File names ending with a period are not supported on this file system. Filnavn som slutter med punktum er ikke tillatt på dette filsystemet - + File names containing the character '%1' are not supported on this file system. Filnavn som inneholder '%1' er ikke tillatt på dette filsystemet - + The file name is a reserved name on this file system. Filnavnet er et reservert navn på dette filsystemet. - + Filename contains trailing spaces. Filnavn inneholder blanke på slutten. - + Filename is too long. Filnavn er for langt. - + Stat failed. Stat feilet. - + Filename encoding is not valid Filnavn-koding er ikke gyldig - + Invalid characters, please rename "%1" Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter + - Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden @@ -3451,17 +3428,17 @@ Det er ikke tilrådelig å bruke den. OCC::ValidateChecksumHeader - + The checksum header is malformed. Sjekksum-headeren har feil format. - + The checksum header contained an unknown checksum type '%1' Sjekksum-header inneholdt ukjent sjekksum-type '%1' - + The downloaded file does not match the checksum, it will be resumed. Den nedlastede filen passer ikke med sjekksummen, den vil bli gjenopptatt. diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 72c4b0494..491d6dc72 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Het doelbestand heeft een onverwachte omvang of tijdstempel - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Afgebroken door de gebruiker @@ -963,145 +955,140 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderStatusModel - + You need to be connected to add a folder U moet verbonden zijn om een map toe te voegen - + Click this button to add a folder to synchronize. Klik op deze knop om een te synchroniseren map toe te voegen. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Fout bij ophalen mappenlijst van de server. - + Signed out Afgemeld - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Het toevoegen van een map is uitgeschakeld, omdat u reeds al uw bestanden synchroniseert. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde hoofdmap verwijderen. - - - + Fetching folder list from server... Mappenlijst ophalen van de server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchroniseren %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) download %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) upload %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 van %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 over, %1 van %2, bestand %3 van %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 van %2, bestand %3 van %4 - + file %1 of %2 bestand %1 van %2 - + Waiting... Aan het wachten... - + Waiting for %n other folder(s)... Wacht op %n andere map...Wacht op %n andere mappen... - + Preparing to sync... Voorbereiden op sync... @@ -1109,12 +1096,12 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v OCC::FolderWizard - + Add Folder Sync Connection Toevoegen mapsync verbinding - + Add Sync Connection Toevoegen Sync verbinding @@ -1184,11 +1171,6 @@ Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere v You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. U synchroniseert <i>%1</i> al, dat is de bovenliggende map van <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - U bent al uw bestanden al aan het synchroniseren. Het synchroniseren van een andere map wordt <b>niet</b> ondersteund. Als u meerdere mappen wilt synchroniseren moet u de nu geconfigureerde synchronisatie hoofdmap verwijderen. - OCC::FormatWarningsWizardPage @@ -2125,7 +2107,7 @@ We adviseren deze site niet te gebruiken. OCC::PropagateDirectory - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -2181,12 +2163,12 @@ We adviseren deze site niet te gebruiken. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Herstel mislukte: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Er is een bestand of map verwijderd van een alleen-lezen share, maar herstellen is mislukt: %1 @@ -3137,137 +3119,132 @@ We adviseren deze site niet te gebruiken. - CSync got an error while processing internal trees. - CSync kreeg een fout tijdens het verwerken van de interne mappenstructuur. - - - CSync fatal parameter error. CSync fatale parameter fout. - + CSync processing step update failed. CSync verwerkingsstap bijwerken mislukt. - + CSync processing step reconcile failed. CSync verwerkingsstap verzamelen mislukt. - + CSync could not authenticate at the proxy. CSync kon niet authenticeren bij de proxy. - + CSync failed to lookup proxy or server. CSync kon geen proxy of server vinden. - + CSync failed to authenticate at the %1 server. CSync kon niet authenticeren bij de %1 server. - + CSync failed to connect to the network. CSync kon niet verbinden met het netwerk. - + A network connection timeout happened. Er trad een netwerk time-out op. - + A HTTP transmission error happened. Er trad een HTTP transmissiefout plaats. - + The mounted folder is temporarily not available on the server De gemounte map is tijdelijk niet beschikbaar op de server - + An error occurred while opening a folder Er trad een fout op bij het openen van een map - + Error while reading folder. Fout tijdens lezen map. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Geen ruimte op %1 server beschikbaar. - + CSync unspecified error. CSync ongedefinieerde fout. - + Aborted by the user Afgebroken door de gebruiker - + CSync failed to access CSync kreeg geen toegang @@ -3277,144 +3254,144 @@ We adviseren deze site niet te gebruiken. CSync kon het journal bestand niet maken of lezen. Controleer of u de juiste lees- en schrijfrechten in de lokale syncmap hebt. - + CSync failed due to unhandled permission denied. CSync mislukt omdat de benodigde toegang werd geweigerd. - + CSync tried to create a folder that already exists. CSync probeerde een al bestaande map aan te maken. - + The service is temporarily unavailable De dienst is tijdelijk niet beschikbaar - + Access is forbidden Toegang verboden - + An internal error number %1 occurred. Een interne fout met nummer %1 is opgetreden. - + Symbolic links are not supported in syncing. Symbolische links worden niet ondersteund bij het synchroniseren. - + File is listed on the ignore list. Het bestand is opgenomen op de negeerlijst. - + File names ending with a period are not supported on this file system. Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - + File names containing the character '%1' are not supported on this file system. Bestandsnamen met een '%1' symbool worden niet ondersteund door het bestandssysteem. - + The file name is a reserved name on this file system. De bestandsnaam is een gereserveerde naam op dit bestandssysteem. - + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - + Filename is too long. De bestandsnaam is te lang. - + Stat failed. Stat mislukt. - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + Invalid characters, please rename "%1" Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen + - Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron @@ -3456,17 +3433,17 @@ We adviseren deze site niet te gebruiken. OCC::ValidateChecksumHeader - + The checksum header is malformed. De header van het controlegetal is misvormd. - + The checksum header contained an unknown checksum type '%1' Het header controlegetal bevat een onbekend controlegetal type '%1' - + The downloaded file does not match the checksum, it will be resumed. Het gedownloade bestand komt niet overeen met het controlegetal. Het wordt opnieuw verwerkt. diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 2a00d2229..d8ed5538a 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Plik docelowy ma nieznaną wielkość lub datę modyfikacji - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Anulowane przez użytkownika @@ -957,144 +949,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Musisz być podłączony, by dodać folder. - + Click this button to add a folder to synchronize. Kliknij ten przycisk, by dodać folder do synchronizacji. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Wystąpił błąd podczas pobierania listy folderów z serwera. - + Signed out Odłączony - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Dodawanie folderu jest zablokowane, ponieważ już synchronizujesz wszystkie swoje pliki. Jeśli chcesz zsynchronizować wiele folderów, usuń folder aktualnie skonfigurowany. - - - + Fetching folder list from server... Pobieranie listy folderów z serwera. - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizowanie %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) pobieranie %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) wysyłanie %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 z %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Plik %3 z %4, pozostało czasu %5 (%1 z %2) - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, plik %3 z %4 - + file %1 of %2 plik %1 z %2 - + Waiting... Czekaj... - + Waiting for %n other folder(s)... Oczekiwanie na %n inny folder...Oczekiwanie na %n inne foldery...Oczekiwanie na %n innych folderów...Oczekiwanie na %n innych folderów... - + Preparing to sync... Przygotowanie do synchronizacji ... @@ -1102,12 +1089,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Dodaj folder połączenia synchronizacji - + Add Sync Connection Dodaj połączenie synchronizacji @@ -1177,11 +1164,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Synchronizujesz już <i>%1</i>, który jest folderem nadrzędnym <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Już aktualizujesz wszystkie pliku. Synchronizacja innego folderu <b>nie</b> jest wspierana. Jeśli chcesz synchronizować wiele folderów, proszę usuń aktualnie skonfigurowaną synchronizację folderu głównego. - OCC::FormatWarningsWizardPage @@ -2114,7 +2096,7 @@ Niezalecane jest jego użycie. OCC::PropagateDirectory - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -2170,12 +2152,12 @@ Niezalecane jest jego użycie. OCC::PropagateItemJob - + ; Restoration Failed: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3126,137 +3108,132 @@ Niezalecane jest jego użycie. - CSync got an error while processing internal trees. - CSync napotkał błąd podczas przetwarzania wewnętrznych drzew. - - - CSync fatal parameter error. Krytyczny błąd parametru CSync. - + CSync processing step update failed. Aktualizacja procesu przetwarzania CSync nie powiodła się. - + CSync processing step reconcile failed. Scalenie w procesie przetwarzania CSync nie powiodło się. - + CSync could not authenticate at the proxy. CSync nie mógł się uwierzytelnić przez proxy. - + CSync failed to lookup proxy or server. CSync nie mógł odnaleźć serwera proxy. - + CSync failed to authenticate at the %1 server. CSync nie mógł uwierzytelnić się na serwerze %1. - + CSync failed to connect to the network. CSync nie mógł połączyć się z siecią. - + A network connection timeout happened. Upłynął limit czasu połączenia. - + A HTTP transmission error happened. Wystąpił błąd transmisji HTTP. - + The mounted folder is temporarily not available on the server Chwilowy brak dostępu do serwera, z którego montowany jest folder. - + An error occurred while opening a folder Wystąpił błąd podczas otwierania katalogu - + Error while reading folder. Błąd podczas odczytu katalogu. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Plik / katalog zostanie zignorowany, ponieważ jest ukryty. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Brak dostępnego miejsca na serwerze %1. - + CSync unspecified error. Nieokreślony błąd CSync. - + Aborted by the user Anulowane przez użytkownika - + CSync failed to access @@ -3266,144 +3243,144 @@ Niezalecane jest jego użycie. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Usługa jest czasowo niedostępna - + Access is forbidden Dostęp zabroniony - + An internal error number %1 occurred. Wystąpił błąd wewnętrzny %1 - + Symbolic links are not supported in syncing. Linki symboliczne nie są wspierane przy synchronizacji. - + File is listed on the ignore list. Plik jest na liście plików ignorowanych. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. Nazwy plików zawierające znaki '%1' nie są wspierane - + The file name is a reserved name on this file system. Nazwa pliku jest zarezerwowana dla plików systemowych - + Filename contains trailing spaces. Nazwa pliku zawiera spacje - + Filename is too long. Nazwa pliku zbyt długa - + Stat failed. Błąd statystyk. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie + - Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło @@ -3445,17 +3422,17 @@ Niezalecane jest jego użycie. OCC::ValidateChecksumHeader - + The checksum header is malformed. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 4335c011f..811ac3922 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - O ficheiro de destino tem um tamanho inesperado ou a hora foi modificada - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo utilizador @@ -964,144 +956,139 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderStatusModel - + You need to be connected to add a folder Precisa de estar ligado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique neste botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro durante o carregamento da lista de pastas a partir do servidor. - + Signed out Sessão terminada - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Adicionar pasta está desativada porque já está a sincronizar todos os seus ficheiros. Se deseja sincronizar múltiplas pastas, por favor, remova a pasta raiz atualmente configurada. - - - + Fetching folder list from server... A obter a lista de pastas do servidor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' A procurar por alterações em '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" A sincronizar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) transferir %s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restante, %1 de %2, ficheiro %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de %2, ficheiro %3 de %4 - + file %1 of %2 ficheiro %1 de %2 - + Waiting... A aguardar... - + Waiting for %n other folder(s)... A aguardar por %n outra pasta...A aguardar por %n outra(s) pasta(s)... - + Preparing to sync... A preparar para sincronizar... @@ -1109,12 +1096,12 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi OCC::FolderWizard - + Add Folder Sync Connection Adicionar Ligação de Sincronização de Pasta - + Add Sync Connection Adicionar Ligação de Sincronização @@ -1184,11 +1171,6 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Já está a sincronizar <i>%1</i>, que é uma pasta de origem de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Já está a sincronizar todos os seus ficheiros. Sincronizar outra pasta<b>não</b> é suportado. Se desejar sincronizar múltiplas pastas, por favor, remova a sincronização da pasta raiz atualmente configurada. - OCC::FormatWarningsWizardPage @@ -2121,7 +2103,7 @@ Não é aconselhada a sua utilização. OCC::PropagateDirectory - + Error writing metadata to the database Erro ao escrever a meta-informação par a base de dados @@ -2177,12 +2159,12 @@ Não é aconselhada a sua utilização. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Restauro Falhou: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Um ficheiro ou pasta foi removido de uma partilha só de leitura, mas o restauro falhou: %1 @@ -3133,137 +3115,132 @@ Não é aconselhada a sua utilização. - CSync got an error while processing internal trees. - Csync obteve um erro enquanto processava as árvores internas. - - - CSync fatal parameter error. Parametro errado, CSync falhou - + CSync processing step update failed. O passo de processamento do CSyn falhou - + CSync processing step reconcile failed. CSync: Processo de reconciliação falhou. - + CSync could not authenticate at the proxy. CSync: não foi possível autenticar no servidor proxy. - + CSync failed to lookup proxy or server. CSync: não conseguiu contactar o proxy ou o servidor. - + CSync failed to authenticate at the %1 server. CSync: Erro a autenticar no servidor %1 - + CSync failed to connect to the network. CSync: Erro na conecção à rede - + A network connection timeout happened. Houve um erro de timeout de rede. - + A HTTP transmission error happened. Ocorreu um erro de transmissão HTTP - + The mounted folder is temporarily not available on the server O pasta montada está temporariamente indisponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler o ficheiro. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. O ficheiro/pasta foi ignorado porque está oculto. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Não ha espaço disponível no servidor %1 - + CSync unspecified error. CSync: erro não especificado - + Aborted by the user Cancelado pelo utilizador - + CSync failed to access CSync falhou o acesso @@ -3273,144 +3250,144 @@ Não é aconselhada a sua utilização. CSync falhou no carregamento ou criação do ficheiro jornal. Certifique-se de que tem permissões de gravação e leitura na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão não tratada negada. - + CSync tried to create a folder that already exists. O CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden O acesso é proibido - + An internal error number %1 occurred. Ocorreu o erro interno número %1. - + Symbolic links are not supported in syncing. Hiperligações simbólicas não são suportadas em sincronização. - + File is listed on the ignore list. O ficheiro está na lista de ficheiros a ignorar. - + File names ending with a period are not supported on this file system. Nomes de ficheiros acabados com um ponto final não são suportados neste sistema de ficheiros. - + File names containing the character '%1' are not supported on this file system. Nomes de ficheiros que contêm o caractér '%1' não são suportados neste sistema de ficheiros. - + The file name is a reserved name on this file system. O nome de ficheiro é um nome reservado neste sistema de ficheiros. - + Filename contains trailing spaces. Nome de ficheiro contém espaços em branco seguidos. - + Filename is too long. O nome do ficheiro é muito grande - + Stat failed. Estado falhou. - + Filename encoding is not valid Codificação de nome de ficheiro não é válida - + Invalid characters, please rename "%1" Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar + - Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem @@ -3452,17 +3429,17 @@ Não é aconselhada a sua utilização. OCC::ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho de "checksum" está com problemas. - + The checksum header contained an unknown checksum type '%1' O header checksum continha um tipo de checksum desconhecido '%1' - + The downloaded file does not match the checksum, it will be resumed. O ficheiro transferido não corresponde ao "checksum", Este irá ser retomado. diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 971d321d9..1b17ea11f 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - O arquivo de destino tem um tamanho ou tempo de modificação inesperado - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo usuário @@ -962,144 +954,139 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderStatusModel - + You need to be connected to add a folder Você precisa estar conectado para adicionar uma pasta - + Click this button to add a folder to synchronize. Clique nesse botão para adicionar uma pasta para sincronizar. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Erro enquanto carregava a lista de pastas do servidor. - + Signed out Desconectado - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Adição de pasta está desativado porque você já está sincronizando todos os seus arquivos. Se você deseja sincronizar várias pastas, por favor, remova a pasta raiz configurada atualmente. - - - + Fetching folder list from server... Obtendo lista de pastas do servidor... - + There are unresolved conflicts. Click for details. Existem conflitos não resolvidos. Clique para detalhes. - + Checking for changes in '%1' Verificando alterações em '%1' - + Reconciling changes Reconciliando mudanças - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Sincronizando %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) baixar %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) enviar %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 de %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 restando, %1 de %2, arquivo %3 de %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 de%2, arquivo %3 de %4 - + file %1 of %2 arquivo %1 de %2 - + Waiting... Esperando... - + Waiting for %n other folder(s)... Esperando por %n outra pasta...Esperando por %n outras pastas... - + Preparing to sync... Preparando para sincronizar... @@ -1107,12 +1094,12 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej OCC::FolderWizard - + Add Folder Sync Connection Adicionar Conexão de Sincronização de pasta - + Add Sync Connection Adicionar Conexão de Sincronização @@ -1182,11 +1169,6 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Você já está sincronizando <i>%1</i>, que é uma pasta mãe de <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Você já está sincronizando todos os seus arquivos. Sincronizar outra pasta <b>não</ b> é possível. Se você deseja sincronizar várias pastas, por favor, remova a sincronização configurada atualmente para a pasta raiz. - OCC::FormatWarningsWizardPage @@ -2118,7 +2100,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -2174,12 +2156,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Falha na Restauração: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Um arquivo ou pasta foi removido de um compartilhamento de somente leitura, mas a restauração falhou: %1 @@ -3130,137 +3112,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - Erro do CSync enquanto processava árvores internas. - - - CSync fatal parameter error. Erro fatal de parametro do CSync. - + CSync processing step update failed. Processamento da atualização do CSync falhou. - + CSync processing step reconcile failed. Processamento da conciliação do CSync falhou. - + CSync could not authenticate at the proxy. Csync não conseguiu autenticação no proxy. - + CSync failed to lookup proxy or server. CSync falhou ao localizar o proxy ou servidor. - + CSync failed to authenticate at the %1 server. CSync falhou ao autenticar no servidor %1. - + CSync failed to connect to the network. CSync falhou ao conectar à rede. - + A network connection timeout happened. Ocorreu uma desconexão de rede. - + A HTTP transmission error happened. Houve um erro na transmissão HTTP. - + The mounted folder is temporarily not available on the server A pasta montada não está temporariamente disponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler pasta. - + %1 (skipped due to earlier error, trying again in %2) %1 (ignorado devido a um erro anterior, tentando novamente em %2) - + File/Folder is ignored because it's hidden. Arquivo/pasta ignorado porque porque está escondido. - + Folder hierarchy is too deep A hierarquia de pastas é muito profunda - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflito: Versão do servidor baixada, cópia local renomeada e não carregada. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. - + CSync: No space on %1 server available. CSync: Sem espaço disponível no servidor %1. - + CSync unspecified error. Erro não especificado no CSync. - + Aborted by the user Abortado pelo usuário - + CSync failed to access CSync não conseguiu o acesso @@ -3270,144 +3247,144 @@ It is not advisable to use it. CSync falhou ao carregar ou criar o arquivo de diário. Certifique-se de ter permissão de ler e escrever na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão de não manipulação negada. - + CSync tried to create a folder that already exists. CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden Acesso proibido - + An internal error number %1 occurred. Um erro interno de número %1 ocorreu. - + Symbolic links are not supported in syncing. Linques simbólicos não são suportados em sincronização. - + File is listed on the ignore list. O arquivo está listado na lista de ignorados. - + File names ending with a period are not supported on this file system. Os nomes de arquivos que terminam com um ponto não são suportados neste sistema de arquivos. - + File names containing the character '%1' are not supported on this file system. Os nomes de arquivos que contêm o caractere '%1' não são suportados neste sistema de arquivos. - + The file name is a reserved name on this file system. O nome do arquivo é um nome reservado neste sistema de arquivos. - + Filename contains trailing spaces. O nome do arquivo contém espaços deixados para trás. - + Filename is too long. O nome do arquivo é muito longo. - + Stat failed. Stat falhou. - + Filename encoding is not valid A codificação do nome do arquivo não é válida - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando + - Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte @@ -3449,17 +3426,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. O cabeçalho da soma de verificação está incorreto. - + The checksum header contained an unknown checksum type '%1' A cabeçalho da soma de verificação continha um tipo de soma de verificação desconhecido '%1' - + The downloaded file does not match the checksum, it will be resumed. O arquivo baixado não coincide com o checksum, ele será retomado. diff --git a/translations/client_ru.ts b/translations/client_ru.ts index e7fed3fcc..a131d6869 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Конечный файл имеет некорректный размер или время изменения - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прервано пользов @@ -962,144 +954,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Необходимо подключиться, чтобы добавить каталог - + Click this button to add a folder to synchronize. Нажмите на эту кнопку для добавления каталога к синхронизации. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ошибка загрузки списка папок с сервера. - + Signed out Вышли из аккаунта - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Добавление папки отключена, потому что вы уже синхронизированы все файлы. Если вы хотите синхронизировать несколько папок, пожалуйста, удалите текущую корневую папку. - - - + Fetching folder list from server... Извлечение списка папок с сервера... - + There are unresolved conflicts. Click for details. Есть неразрешенные конфликты. Нажми для просмотра подробностей. - + Checking for changes in '%1' Проверка изменений в '%1' - + Reconciling changes Согласование изменений - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизация %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) скачивание %1/с - + u2193 %1/s u2193 %1/сjavascript:; - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) загрузка %1/с - + u2191 %1/s u2191 %1/с - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 из %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Осталось %5, %1 из %2, файл %3 из %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 из %2, файл %3 из %4 - + file %1 of %2 файл %1 из %2 - + Waiting... Ожидание... - + Waiting for %n other folder(s)... Ожидание %n директории...Ожидание %n директорий...Ожидание %n директорий...Ожидание %n директорий... - + Preparing to sync... Подготовка к синхронизации... @@ -1107,12 +1094,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Добавить папку для синхронизации - + Add Sync Connection Добавить подключение для синхронизации @@ -1182,11 +1169,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Каталог <i>%1</i> уже настроен для синхронизации, и он является родительским для каталога <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - В данный момент включена синхронизация всех файлов. Синхронизация другого каталога в этом режиме <b>не</b> поддерживается. Удалите синхронизацию корневого каталога сервера для синхронизации нескольких локальных каталогов. - OCC::FormatWarningsWizardPage @@ -1413,7 +1395,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from List of issues - + Список проблем @@ -1445,7 +1427,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Copy the issues list to the clipboard. - + Скопировать список проблем в буфер обмена. @@ -1465,7 +1447,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Issue - + Проблема @@ -1488,7 +1470,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from &Capture debug messages - + &Включить отладочные сообщения @@ -1705,32 +1687,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from Error returned from the server: <em>%1</em> - + Сервер вернул ошибку: <em>%1</em> There was an error accessing the 'token' endpoint: <br><em>%1</em> - + При доступе к конечной точке 'токена' произошла ошибка: <br><em>%1</em> Could not parse the JSON returned from the server: <br><em>%1</em> - + Не удалось разобрать JSON, пришедший с сервера: <br><em>%1</em> The reply from the server did not contain all expected fields - + В ответе сервера содержатся не все ожидаемые поля <h1>Login Error</h1><p>%1</p> - + <h1>Ошибка входа</h1><p>%1</p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + <h1>Неверный пользователь</h1><p>Вы вошли, как пользователь <em>%1</em>, но нужно войти под пользователем <em>%2</em>.<br>Пожалуйста, выйдите из %3 в другой вкладке, а затем <a href='%4'>кликните здесь</a> и войдите, как пользователь %2</p> @@ -2118,7 +2100,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -2133,7 +2115,7 @@ It is not advisable to use it. The download would reduce free local disk space below the limit - + Скачивание сократит доступное пространство на локальном диске ниже допустимого предела @@ -2174,12 +2156,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Восстановление не удалось: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Файл или папка была удалена из доступа только для чтения, восстановление завершилось с ошибкой: %1 @@ -2320,7 +2302,7 @@ It is not advisable to use it. Upload of %1 exceeds the quota for the folder - + Закачка %1 превышает квоту для каталога @@ -2651,7 +2633,7 @@ It is not advisable to use it. Enter a name to create a new public link... - + Введите имя чтобы создать новую общедоступную ссылку… @@ -2707,12 +2689,12 @@ It is not advisable to use it. %1 link - + Ссылка на %1 Link shares have been disabled - + Доступ по ссылкам был отключён @@ -2732,7 +2714,7 @@ It is not advisable to use it. Copy link to clipboard (direct download) - + Скопировать ссылку в буфер обмена (прямое скачивание) @@ -2742,7 +2724,7 @@ It is not advisable to use it. Send link by email (direct download) - + Отправить ссылку по почте (прямое скачивание) @@ -2775,12 +2757,12 @@ It is not advisable to use it. <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> - + <html><head/><body><p>Вы можете направить людей в файл или каталог, к которому предоставлен доступ, <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">передав им личную ссылку</span></a>.</p></body></html> The item is not shared with any users or groups - + К этому элементу не предоставлен доступ никаким пользователям или группам @@ -3130,137 +3112,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync получил сообщение об ошибке при обработке внутренних деревьев. - - - CSync fatal parameter error. Критическая ошибка параметра CSync. - + CSync processing step update failed. Процесс обновления CSync не удался. - + CSync processing step reconcile failed. Процесс согласования CSync не удался. - + CSync could not authenticate at the proxy. CSync не удалось авторизоваться на прокси сервере. - + CSync failed to lookup proxy or server. CSync не удалось найти прокси сервер. - + CSync failed to authenticate at the %1 server. CSync не удалось авторизоваться на сервере %1. - + CSync failed to connect to the network. CSync не удалось подключиться к сети. - + A network connection timeout happened. Вышло время ожидания подключения к сети. - + A HTTP transmission error happened. Произошла ошибка передачи HTTP. - + The mounted folder is temporarily not available on the server Смонтированная папка временно недоступна на сервере - + An error occurred while opening a folder Произошла ошибка во время открытия папки - + Error while reading folder. Произошла ошибка во время чтения папки. - + %1 (skipped due to earlier error, trying again in %2) - + %1 (пропущено из-за предыдущей ошибки, повторная попытка через %2) - + File/Folder is ignored because it's hidden. Файл/папка проигнорированы, так как являются скрытыми. - + Folder hierarchy is too deep - + Иерархия каталогов слишком глубока - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Конфликт: Серверная версия скачана, локальная копия переименована и не закачана. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + Мало места на диске: Скачивания, которые сократят свободное место ниже %1, будут пропущены. - + There is insufficient space available on the server for some uploads. - + На сервере недостаточно места для некоторых закачек. - + CSync: No space on %1 server available. CSync: Нет свободного пространства на сервере %1. - + CSync unspecified error. Неизвестная ошибка CSync. - + Aborted by the user Прервано пользователем - + CSync failed to access CSync отказано в доступе @@ -3270,144 +3247,144 @@ It is not advisable to use it. CSync не удалось загрузить файл журнала. Убедитесь в наличии прав на чтение и запись в локальную папку. - + CSync failed due to unhandled permission denied. CSync не выполнен из-за отказа в доступе для необработанного разрешения. - + CSync tried to create a folder that already exists. CSync попытался создать папку, которая уже существует. - + The service is temporarily unavailable Сервис временно недоступен - + Access is forbidden Доступ запрещен - + An internal error number %1 occurred. Произошла внутренняя ошибка номер %1. - + Symbolic links are not supported in syncing. Синхронизация символических ссылок не поддерживается. - + File is listed on the ignore list. Файл присутствует в списке игнорируемых. - + File names ending with a period are not supported on this file system. Эта файловая система не поддерживает имена файлов, оканчивающиеся на точку. - + File names containing the character '%1' are not supported on this file system. Эта файловая система не поддерживает имена файлов, содержащие символ '%1'. - + The file name is a reserved name on this file system. Данное имя файла зарезервировано в данной файловой системе. - + Filename contains trailing spaces. Имя файла содержит пробелы на конце. - + Filename is too long. Имя файла слишком длинное. - + Stat failed. Не удалось загрузить статистику. - + Filename encoding is not valid Кодировка имени файла не верна - + Invalid characters, please rename "%1" Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем + - Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник @@ -3449,17 +3426,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Некорректная контрольная сумма заголовка - + The checksum header contained an unknown checksum type '%1' Заголовок контрольной суммы содержал неизвестный тип '%1' контрольной суммы - + The downloaded file does not match the checksum, it will be resumed. Загруженный файл не соответствует контрольной сумме, операция будет возобновлена. @@ -3788,12 +3765,12 @@ It is not advisable to use it. Please switch to your browser to proceed. - + Пожалуйста, перейдите в браузер, чтобы продолжить. An error occured while connecting. Please try again. - + В процессе соединения произошла ошибка. Пожалуйста, попробуйте ещё раз. @@ -4130,7 +4107,7 @@ It is not advisable to use it. There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + При запуске браузера чтобы открыть адрес %1 произошла ошибка. Может быть не настроен браузер по умолчанию? diff --git a/translations/client_sk.ts b/translations/client_sk.ts index a34ba542a..e4a2b386c 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Cieľový súbor má neočakávanú veľkosť alebo čas zmeny - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušené používateľom @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Na pridanie priečinku je nutné byť pripojený - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Odhlásený - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... Načítavam zoznam priečinkov zo servera... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + Reconciling changes - + , '%1' Build a list of file names - + '%1' Argument is a file name - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synchronizuje sa %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) stiahnuť %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) nahrať %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 z %2, súbor %3 z %4 - + file %1 of %2 súbor %1 z %2 - + Waiting... Čakajte... - + Waiting for %n other folder(s)... - + Preparing to sync... Príprava na synchronizáciu... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Priečinok <i>%1</i> už synchronizujete a je nadradený priečinku <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Už synchronizujete všetky vaše súbory. Synchronizácia dalšieho priečinka <b>nie je</b> podporovaná. Ak chcete synchronizovať viac priečinkov, odstránte, prosím, synchronizáciu aktuálneho kořenového priečinka. - OCC::FormatWarningsWizardPage @@ -2110,7 +2092,7 @@ Nie je vhodné ju používať. OCC::PropagateDirectory - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -2166,12 +2148,12 @@ Nie je vhodné ju používať. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Obnovenie zlyhalo: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3122,137 +3104,132 @@ Nie je vhodné ju používať. - CSync got an error while processing internal trees. - Spracovanie "vnútorných stromov" vrámci "CSync" zlyhalo. - - - CSync fatal parameter error. CSync kritická chyba parametrov. - + CSync processing step update failed. CSync sa nepodarilo spracovať krok aktualizácie. - + CSync processing step reconcile failed. CSync sa nepodarilo spracovať krok zladenia. - + CSync could not authenticate at the proxy. CSync sa nemohol prihlásiť k proxy. - + CSync failed to lookup proxy or server. CSync sa nepodarilo nájsť proxy alebo server. - + CSync failed to authenticate at the %1 server. CSync sa nepodarilo prihlásiť na server %1. - + CSync failed to connect to the network. CSync sa nepodarilo pripojiť k sieti. - + A network connection timeout happened. Skončil časový limit sieťového spojenia. - + A HTTP transmission error happened. Chyba HTTP prenosu. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Nastala chyba počas otvárania priečinka - + Error while reading folder. Chyba pri čítaní adresára - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Na serveri %1 nie je žiadne voľné miesto. - + CSync unspecified error. CSync nešpecifikovaná chyba. - + Aborted by the user Zrušené používateľom - + CSync failed to access Prístup pre CSync zlyhal @@ -3262,144 +3239,144 @@ Nie je vhodné ju používať. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Služba je dočasne nedostupná - + Access is forbidden Prístup odmietnutý - + An internal error number %1 occurred. Vyskytla sa interná chyba číslo %1. - + Symbolic links are not supported in syncing. Symbolické odkazy nie sú podporované pri synchronizácii. - + File is listed on the ignore list. Súbor je zapísaný na zozname ignorovaných. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Meno súboru je veľmi dlhé. - + Stat failed. - + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. + - Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj @@ -3441,17 +3418,17 @@ Nie je vhodné ju používať. OCC::ValidateChecksumHeader - + The checksum header is malformed. Hlavička kontrolného súčtu je poškodená. - + The checksum header contained an unknown checksum type '%1' Hlavička kontrolného súčtu obsahovala neznámy typ kontrolného súčtu „%1“ - + The downloaded file does not match the checksum, it will be resumed. Stiahnutý súbor nemá správny kontrolný súčet, bude stiahnutý znovu. diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 5f8c54805..f30d11203 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Ciljna datoteka ima nepričakovano velikost oziroma čas zadnje spremembe. - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika @@ -964,144 +956,139 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderStatusModel - + You need to be connected to add a folder Za dodajanje mape mora biti vzpostavljea povezava - + Click this button to add a folder to synchronize. Kliknite za dodajanje mape za usklajevanje. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Prišlo je do napake med nalaganjem datotek s strežnika. - + Signed out Odjavljeno - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Dodajanje mape je onemogočeno, ker se usklajojejo vse vaše datoteke. Če želite usklajevati več map, odstranite trenutno nastavljeno korensko mapo. - - - + Fetching folder list from server... Poteka pridobivanje seznama map s strežnika ... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Usklajevanje %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) prejemanje %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) pošiljanje %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 od %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Preostalo še %5, %1 od %2, datoteka %3 od %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 od %2, datoteka %3 od %4 - + file %1 of %2 datoteka %1 od %2 - + Waiting... Čakanje na povezavo ... - + Waiting for %n other folder(s)... V pripravi je %n druga map ...V pripravi sta %n drugi mapi ...V pripravi so %n druge mape ...V pripravi je %n drugih map ... - + Preparing to sync... Priprava na usklajevanje ... @@ -1109,12 +1096,12 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi OCC::FolderWizard - + Add Folder Sync Connection Dodaj povezavo za usklajevanje mape - + Add Sync Connection Dodaj povezavo za usklajevanje @@ -1184,11 +1171,6 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Datoteke se že usklajujejo na ravni mape <i>%1</i>, ki je nadrejena mapi <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Trenutno so v usklajevanju vse datoteke korenske mape. Usklajevanje še ene mape <b>ni</b> podprto. Če želite uskladiti več map, je treba odstraniti trenutno nastavljeno korensko mapo in spremeniti nastavitve. - OCC::FormatWarningsWizardPage @@ -2121,7 +2103,7 @@ Uporaba ni priporočljiva. OCC::PropagateDirectory - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -2177,12 +2159,12 @@ Uporaba ni priporočljiva. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; obnovitev je spodletela: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Datoteka ali mapa je bila odstranjena iz mesta v souporabi, ki je nastavljeno le za branje, obnavljanje pa je spodletelo: %1 @@ -3133,137 +3115,132 @@ Uporaba ni priporočljiva. - CSync got an error while processing internal trees. - Pri obdelavi notranje drevesne strukture s CSync je prišlo do napake. - - - CSync fatal parameter error. Usodna napaka parametra CSync. - + CSync processing step update failed. Korak opravila posodobitve CSync je spodletel. - + CSync processing step reconcile failed. Korak opravila poravnave CSync je spodletel. - + CSync could not authenticate at the proxy. Overitev CSync na posredniškem strežniku je spodletela. - + CSync failed to lookup proxy or server. Poizvedba posredniškega strežnika s CSync je spodletela. - + CSync failed to authenticate at the %1 server. Overitev CSync pri strežniku %1 je spodletela. - + CSync failed to connect to the network. Povezava CSync v omrežje je spodletela. - + A network connection timeout happened. Omrežna povezava je časovno potekla. - + A HTTP transmission error happened. Prišlo je do napake med prenosom HTTP. - + The mounted folder is temporarily not available on the server Priklopljena mapa trenutno ni na voljo na strežniku - + An error occurred while opening a folder Med odpiranjem mape je prišlo do napake. - + Error while reading folder. Napaka med branjem mape - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Datoteka/Mapa je prezrta, ker je skrita. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. Odziv CSync: na strežniku %1 ni razpoložljivega prostora. - + CSync unspecified error. Nedoločena napaka CSync. - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika - + CSync failed to access Dostop s CSync je spodletel @@ -3273,144 +3250,144 @@ Uporaba ni priporočljiva. Nalaganje ali ustvarjanje dnevniške datoteke s CSync je spodletelo. Za to opravilo so zahtevana dovoljenja branja in zapisovanja krajevne mape za usklajevanje. - + CSync failed due to unhandled permission denied. Delovanje CSync je zaradi nerazrešenih dovoljenj spodletelo. - + CSync tried to create a folder that already exists. Ustvarjanje mape s CSync je spodletelo. Mapa že obstaja. - + The service is temporarily unavailable Storitev trenutno ni na voljo - + Access is forbidden Dostop je prepovedan. - + An internal error number %1 occurred. Prišlo je do notranje napake %1. - + Symbolic links are not supported in syncing. Usklajevanje simbolnih povezav ni podprto. - + File is listed on the ignore list. Datoteka je na seznamu prezrtih datotek. - + File names ending with a period are not supported on this file system. Imena datotek, ki vsebujejo piko, na tem sistemu niso podprta. - + File names containing the character '%1' are not supported on this file system. Imena datotek, ki vsebujejo znak »%1«, na tem sistemu niso podprta. - + The file name is a reserved name on this file system. Ime datoteke je na tem sistemu zadržano za sistemsko datoteko. - + Filename contains trailing spaces. Datoteka vsebuje pripete presledne znake - + Filename is too long. Ime datoteke je predolgo. - + Stat failed. Določanje statističnih podatkov je spodletelo. - + Filename encoding is not valid Kodni zapis imena datoteke ni veljaven. - + Invalid characters, please rename "%1" Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. + - Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir @@ -3452,17 +3429,17 @@ Uporaba ni priporočljiva. OCC::ValidateChecksumHeader - + The checksum header is malformed. Glava nadzorne vsote je napačno oblikovana. - + The checksum header contained an unknown checksum type '%1' Glava nadzorne vsote vsebuje neznano vrsto zapisa '%1' - + The downloaded file does not match the checksum, it will be resumed. Prejeta datoteka ni skladna z nadzorno vsoto te datoteke, zato bo prenos ponovljen. diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 1c13a2938..f4f719da2 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Одредишни фајл има неочекивану величину или време измене - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прекинуо корисник @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Одјављен - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... Добављам списак фасцикли са сервера... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Проверавам измене у „%1“ - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name „%1“ - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Синхронизујем %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) преузми %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) отпреми %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 од %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 фајл %1 од %2 - + Waiting... Чекам... - + Waiting for %n other folder(s)... - + Preparing to sync... Припремам синхронизацију... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Додај везу синхронизације фасцикле - + Add Sync Connection Додај везу синхронизације @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Већ синхронизујете <i>%1</i>, која садржи фасциклу <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Већ синхронизујете све ваше фајлове. Синхронизација других фасцикли <b>није</b> подржана. Ако желите синхронизацију више фасцикли, уклоните тренутно подешену корену фасциклу. - OCC::FormatWarningsWizardPage @@ -2110,7 +2092,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2166,12 +2148,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Враћање није успело: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3122,137 +3104,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync има грешку при обради интерног стабла. - - - CSync fatal parameter error. CSync фатална грешка параметара. - + CSync processing step update failed. CSync није успео да ажурира корак процесирања. - + CSync processing step reconcile failed. CSync није успео да усклади корак процесирања. - + CSync could not authenticate at the proxy. CSync не може да се аутентификује на проксију. - + CSync failed to lookup proxy or server. CSync не налази прокси или сервер. - + CSync failed to authenticate at the %1 server. CSync не може да се аутентификује на %1 серверу. - + CSync failed to connect to the network. CSync не може да приступи мрежи. - + A network connection timeout happened. Истекло је време за повезивање. - + A HTTP transmission error happened. Дошло је до грешке ХТТП преноса. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: нема простора на %1 серверу. - + CSync unspecified error. CSync недефинисана грешка. - + Aborted by the user Прекинуо корисник - + CSync failed to access CSync није приступио @@ -3262,144 +3239,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Услуга је привремено недоступна - + Access is forbidden Приступ је забрањен - + An internal error number %1 occurred. Десила се интерна грешка број %1. - + Symbolic links are not supported in syncing. Симболичке везе нису подржане у синхронизацији. - + File is listed on the ignore list. Фајл се налази на листи за игнорисање. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Назив фајла је предугачак. - + Stat failed. - + Filename encoding is not valid Кодирање назива фајла није исправно - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам + - Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор @@ -3441,17 +3418,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Заглавље контролне суме је лоше формирано. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. Преузети фајл се не поклапа с контролном сумом. Биће настављено. diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 6c82faffb..f40df35f0 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Destinationsfilen har en oväntad storlek eller modifieringstidpunkt - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbruten av användare @@ -957,144 +949,139 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderStatusModel - + You need to be connected to add a folder Du måste vara ansluten för att lägga till en mapp - + Click this button to add a folder to synchronize. Klicka här för att lägga till en mapp att synka. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Ett fel uppstod när mapplistan försökte laddas från servern. - + Signed out Utloggad - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Tillägg av mappar är avstängt eftersom du redan synkar alla dina filer. Om du vill synka fler mappar, var god ta bort den nuvarande rotmappen. - - - + Fetching folder list from server... Hämtar mapplistan från servern... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' Kollar efter ändringar i '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" Synkroniserar %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda ner %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) ladda upp %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 av %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" %5 kvar, %1 av %2, fil %3 av %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 av %2, fil %3 av %4 - + file %1 of %2 fil %1 av %2 - + Waiting... Väntar... - + Waiting for %n other folder(s)... Väntat på %n annan mapp...Väntat på %n andra mappar... - + Preparing to sync... Förbereder för att synkronisera... @@ -1102,12 +1089,12 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre OCC::FolderWizard - + Add Folder Sync Connection Lägg till mapp att synka. - + Add Sync Connection Lägg till anslutning. @@ -1177,11 +1164,6 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Du synkar redan <i>%1</i>, vilket är övermapp till <i>%2</i> - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Du synkroniserar redan alla dina filer. Synkronisering av en annan mapp stöds <b>ej</b>. Om du vill synka flera mappar, ta bort den för tillfället konfigurerade rotmappen från synk. - OCC::FormatWarningsWizardPage @@ -2114,7 +2096,7 @@ Det är inte lämpligt använda den. OCC::PropagateDirectory - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -2170,12 +2152,12 @@ Det är inte lämpligt använda den. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Återställning misslyckades: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 En fil eller mapp togs bort från en skrivskyddad delning, men återställning misslyckades: %1 @@ -3126,137 +3108,132 @@ Det är inte lämpligt använda den. - CSync got an error while processing internal trees. - CSYNC fel vid intern bearbetning. - - - CSync fatal parameter error. CSync fatal parameter fel. - + CSync processing step update failed. CSync processteg update misslyckades. - + CSync processing step reconcile failed. CSync processteg reconcile misslyckades. - + CSync could not authenticate at the proxy. CSync kunde inte autentisera mot proxy. - + CSync failed to lookup proxy or server. CSync misslyckades att hitta proxy eller server. - + CSync failed to authenticate at the %1 server. CSync misslyckades att autentisera mot %1 servern. - + CSync failed to connect to the network. CSync misslyckades att ansluta mot nätverket. - + A network connection timeout happened. En timeout på nätverksanslutningen har inträffat. - + A HTTP transmission error happened. Ett HTTP överföringsfel inträffade. - + The mounted folder is temporarily not available on the server Den monterade mappen är tillfälligt otillgänglig på servern - + An error occurred while opening a folder En fel inträffande under öppnandet av en mapp - + Error while reading folder. Fel vid mappinläsning. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Filen/Mappen är ignorerad för att den är dold. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ingen plats på %1 server tillgänglig. - + CSync unspecified error. CSync ospecificerat fel. - + Aborted by the user Avbruten av användare - + CSync failed to access CSync misslyckades med att läsa @@ -3266,144 +3243,144 @@ Det är inte lämpligt använda den. CSync misslyckades med att ladda eller skapa journalfilen. Säkerställ att du har rättigheter att läsa och skriva i den lokala synkmappen. - + CSync failed due to unhandled permission denied. CSync misslyckades på grund av ohanterad avslagning av rättighet. - + CSync tried to create a folder that already exists. CSync försökte skapa en mapp som redan finns. - + The service is temporarily unavailable Tjänsten är tillfälligt otillgänglig - + Access is forbidden Tillgång förbjuden - + An internal error number %1 occurred. Ett internt fel nummer %1 inträffade. - + Symbolic links are not supported in syncing. Symboliska länkar stöds ej i synkningen. - + File is listed on the ignore list. Filen är listad i ignorerings listan. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. Filnamn innehåller mellanslag i slutet. - + Filename is too long. Filnamnet är för långt. - + Stat failed. Stat misslyckades. - + Filename encoding is not valid Filnamnskodning är inte giltig - + Invalid characters, please rename "%1" Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer + - Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan @@ -3445,17 +3422,17 @@ Det är inte lämpligt använda den. OCC::ValidateChecksumHeader - + The checksum header is malformed. Checksummans huvud är felformaterad. - + The checksum header contained an unknown checksum type '%1' Checksummans huvud innehåller en okänd checksumma av typ '%1' - + The downloaded file does not match the checksum, it will be resumed. Den nedladdade filen stämmer inte med checksumman, den kommer startas om. diff --git a/translations/client_th.ts b/translations/client_th.ts index e654ea41c..2847c2a64 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - แฟ้มปลายทางมีขนาดที่ระบุไม่ได้หรือการปรับเปลี่ยนเวลา - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ยกเลิกโดยผู้ใช้ @@ -966,144 +958,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder คุณจะต้องเชื่อมต่อก่อนที่จะเพิ่มโฟลเดอร์ - + Click this button to add a folder to synchronize. คลิกที่ปุ่มนี้เพื่อเพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. ข้อผิดพลาดในขณะที่โหลดรายชื่อโฟลเดอร์จากเซิร์ฟเวอร์ - + Signed out ออกจากระบบ - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - การเพิ่มโฟลเดอร์ถูกยกเลิกเพราะคุณได้ประสานไฟล์ทั้งหมดของคุณอยู่แล้ว หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์โปรดลบโฟลเดอร์รากกำหนดค่าในปัจจุบัน - - - + Fetching folder list from server... กำลังดึงรายการโฟลเดอร์จากเซิร์ฟเวอร์ ... - + There are unresolved conflicts. Click for details. มีข้อขัดแย้งที่ยังไม่ได้รับการแก้ไข คลิกเพื่อดูรายละเอียด - + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + Reconciling changes คืนค่าการเปลี่ยนแปลง - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" กำลังประสานข้อมูล %1 - - + + , หรือ - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) ดาวน์โหลด %1/วินาที - + u2193 %1/s u2193 %1/วินาที - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) อัพโหลด - + u2191 %1/s u2191 %1/วินาที - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 ของ %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" เหลืออีก %5 ไฟล์, %1 ไฟล์จาก %2, %3 ไฟล์จาก %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 จาก %2, %3 จาก %4 ไฟล์ - + file %1 of %2 ไฟล์ %1 จาก %2 - + Waiting... กรุณารอซักครู่... - + Waiting for %n other folder(s)... กำลังรออีก (%n) โฟลเดอร์... - + Preparing to sync... กำลังเตรียมพร้อมในการประสานข้อมูล @@ -1111,12 +1098,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection เพิ่มโฟลเดอร์ที่ต้องการประสานข้อมูล - + Add Sync Connection เพิ่มการประสานข้อมูลให้ตรงกัน @@ -1186,11 +1173,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. คุณประสานข้อมูล <i>%1</i> อยู่แล้ว ซึ่งมีโฟลเดอร์หลักเป็น <i>%2</i> - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - คุณกำลังผสานข้อมูลไฟลืทั้งหมดอยู่แล้ว การผสานข้อมูลโฟลเดอร์อื่นๆ<b>ไม่</b>ได้รับการสนับสนุน หากคุณต้องการประสานข้อมูลหลายโฟลเดอร์ กรุณาลบการกำหนดค่าผสานข้อมูลโฟลเดอร์รากในปัจจุบัน - OCC::FormatWarningsWizardPage @@ -2122,7 +2104,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -2178,12 +2160,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; ฟื้นฟูล้มเหลว: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 ไฟล์หรือโฟลเดอร์ที่ถูกลบออกจากส่วนการอ่านเพียงอย่างเดียว แต่ล้มเหลวในการฟื้นฟู: %1 @@ -3132,138 +3114,133 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync เกิดข้อผิดพลาดบางประการในระหว่างประมวลผล internal trees - - - CSync fatal parameter error. พบข้อผิดพลาดเกี่ยวกับ CSync fatal parameter - + CSync processing step update failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync processing step reconcile failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync could not authenticate at the proxy. CSync ไม่สามารถรับรองความถูกต้องที่พร็อกซี่ - + CSync failed to lookup proxy or server. CSync ไม่สามารถค้นหาพร็อกซี่บนเซิร์ฟเวอร์ได้ - + CSync failed to authenticate at the %1 server. CSync ล้มเหลวในการยืนยันสิทธิ์การเข้าใช้งานที่เซิร์ฟเวอร์ %1 - + CSync failed to connect to the network. CSync ล้มเหลวในการเชื่อมต่อกับเครือข่าย - + A network connection timeout happened. หมดเวลาการเชื่อมต่อเครือข่าย - + A HTTP transmission error happened. เกิดข้อผิดพลาดเกี่ยวกับ HTTP transmission - + The mounted folder is temporarily not available on the server โฟลเดอร์ที่ติดตั้งชั่วคราว ไม่สามารถใช้งานบนเซิร์ฟเวอร์ - + An error occurred while opening a folder เกิดข้อผิดพลาดบางอย่างขณะกำลังเปิดโฟลเดอร์ - + Error while reading folder. เกิดข้อผิดพลาดขณะกำลังอ่านโฟลเดอร์ - + %1 (skipped due to earlier error, trying again in %2) %1 (ข้ามไปเนื่องจากข้อผิดพลาดก่อนหน้านี้ กำลังลองอีกครั้งใน %2) - + File/Folder is ignored because it's hidden. ไฟล์/โฟลเดอร์ ที่ซ่อนอยู่จะถูกละเว้น - + Folder hierarchy is too deep โฟลเดอร์มีโฟลเดอร์ย่อยเกินไป - + Conflict: Server version downloaded, local copy renamed and not uploaded. เกิดปัญหาความขัดแย้ง: สำเนาที่อยู่ในเครื่องถูกเปลี่ยนชื่อและไม่ได้ถูกอัพโหลด เลยไม่ตรงกับข้อมูลที่เคยอัพโหลดไว้ในเซิฟเวอร์ - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป - + There is insufficient space available on the server for some uploads. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ - + CSync: No space on %1 server available. CSync: ไม่มีพื้นที่เหลือเพียงพอบนเซิร์ฟเวอร์ %1 - + CSync unspecified error. CSync ไม่สามารถระบุข้อผิดพลาดได้ - + Aborted by the user ยกเลิกโดยผู้ใช้ - + CSync failed to access ล้มเหลวในการเข้าถึง CSync @@ -3273,144 +3250,144 @@ It is not advisable to use it. CSync ผิดพลาด ไม่สามารถโหลดหรือสร้างไฟล์เจอร์นัล ให้แน่ใจว่าคุณได้อ่านและเขียนสิทธิ์ในการประสานโฟลเดอร์ต้นทาง - + CSync failed due to unhandled permission denied. CSync ล้มเหลวเนื่องจากการอนุญาตให้จัดการได้ถูกปฏิเสธ - + CSync tried to create a folder that already exists. CSync พยายามสร้างโฟลเดอร์ที่มีอยู่แล้ว - + The service is temporarily unavailable ไม่สามารถใช้บริการได้ชั่วคราว - + Access is forbidden ถูกปฏิเสธการเข้าถึง - + An internal error number %1 occurred. จำนวนข้อผิดพลาดภายในที่เกิดขึ้น %1 - + Symbolic links are not supported in syncing. ลิงค์สัญลักษณ์จะไม่ได้รับการสนับสนุนในการประสานข้อมูล - + File is listed on the ignore list. ไฟล์อยู่ในรายการที่ละเว้น - + File names ending with a period are not supported on this file system. ชื่อไฟล์ที่ลงท้ายด้วยระยะเวลา ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + File names containing the character '%1' are not supported on this file system. ชื่อไฟล์ที่มีตัวอักษร '%1' ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + The file name is a reserved name on this file system. ชื่อไฟล์นี้เป็นชื่อที่ถูกสงวนไว้ - + Filename contains trailing spaces. ชื่อไฟล์มีช่องว่างต่อท้าย - + Filename is too long. ชื่อไฟล์ยาวเกินไป - + Stat failed. สถิติความล้มเหลว - + Filename encoding is not valid การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - + Invalid characters, please rename "%1" ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู + - Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา @@ -3452,17 +3429,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. การตรวจสอบส่วนหัวผิดรูปแบบ - + The checksum header contained an unknown checksum type '%1' จากการตรวจสอบส่วนหัวมีประเภทที่ไม่รู้จัก '%1' - + The downloaded file does not match the checksum, it will be resumed. ไฟล์ที่ดาวน์โหลดมาไม่ตรงกับการตรวจสอบที่จะกลับมา diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 9dacf7b3a..b6358df27 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Hedef dosya beklenilmeyen boyuta veya düzenlenme tarihine sahip - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kullanıcı tarafından iptal edildi @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder Bir klasör eklemek için bağlı olmanız gerekir - + Click this button to add a folder to synchronize. Bir klasörü eşitlemeye dahil etmek için bu düğmeye tıklayın. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. Sunucudan klasörlerin listesi yüklenirken hata oluştu. - + Signed out Oturum sonlandırıldı - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - Klasör ekleme devre dışı, çünkü şu anda bütün dosyalarınızı eşitliyorsunuz. Çoklu klasör eşitlemesi yapmak istiyorsanız, lütfen geçerli yapılandırılmış kök klasörünü silin. - - - + Fetching folder list from server... Sunucudan klasör listesi alınıyor... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' %1 üzerindeki değişiklikler denetleniyor - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" %1 eşitleniyor - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) indirme %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) gönderme %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3/%4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" Kalan %5, %1/%2, dosya %3/%4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1/%2, %3/%4 dosya - + file %1 of %2 dosya %1/%2 - + Waiting... Bekleniyor... - + Waiting for %n other folder(s)... Diğer %n klasör bekleniyor...Diğer %n klasör bekleniyor... - + Preparing to sync... Eşitleme için hazırlanıyor... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection Klasör Eşitleme Bağlantısı Ekle - + Add Sync Connection Eşitleme Bağlantısı Ekle @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. <i>%1</i> zaten eşitleniyor. Bu, <i>%2</i> klasörünün üst klasörü. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Zaten tüm dosyalarınızı eşitliyorsunuz. Farklı bir klasör eşitlemek <b>desteklenmiyor</b>. Eğer çoklu klasörleri eşitlemek isterseniz, lütfen şu anda yapılandırılmış kök klasör eşitlemesini kaldırın. - OCC::FormatWarningsWizardPage @@ -2111,7 +2093,7 @@ Kullanmanız önerilmez. OCC::PropagateDirectory - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -2167,12 +2149,12 @@ Kullanmanız önerilmez. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Geri Yükleme Başarısız: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 Bir dosya veya dizin bir salt okunur paylaşımdan kaldırılmıştı, ancak geri yükleme başarısız oldu: %1 @@ -3123,137 +3105,132 @@ Kullanmanız önerilmez. - CSync got an error while processing internal trees. - CSync dahili ağaçları işlerken bir hata ile karşılaştı. - - - CSync fatal parameter error. CSync ciddi parametre hatası. - + CSync processing step update failed. CSync güncelleme süreç adımı başarısız. - + CSync processing step reconcile failed. CSync uzlaştırma süreç adımı başarısız. - + CSync could not authenticate at the proxy. CSync vekil sunucuda kimlik doğrulayamadı. - + CSync failed to lookup proxy or server. CSync bir vekil veya sunucu ararken başarısız oldu. - + CSync failed to authenticate at the %1 server. CSync %1 sunucusunda kimlik doğrularken başarısız oldu. - + CSync failed to connect to the network. CSync ağa bağlanamadı. - + A network connection timeout happened. Bir ağ zaman aşımı meydana geldi. - + A HTTP transmission error happened. Bir HTTP aktarım hatası oluştu. - + The mounted folder is temporarily not available on the server Bağlanan dizin geçici olarak sunucuda mevcut değil - + An error occurred while opening a folder Klasör açılırken bir hata oluştu - + Error while reading folder. Klasör okunurken hata oluştu. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Dosya/Klasör gizli olduğu için yoksayıldı. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1 sunucusunda kullanılabilir alan yok. - + CSync unspecified error. CSync belirtilmemiş hata. - + Aborted by the user Kullanıcı tarafından iptal edildi - + CSync failed to access CSync erişimde başarısız oldu @@ -3263,144 +3240,144 @@ Kullanmanız önerilmez. CSync, günlük dosyası yüklenemedi veya oluşturalamadı. Lütfen yerel eşitleme dizininde okuma ve yazma izinleriniz olduğundan emin olun. - + CSync failed due to unhandled permission denied. CSync ele alınmayan izin reddinden dolayı başarısız. - + CSync tried to create a folder that already exists. CSync, zaten mevcut olan bir klasör oluşturmaya çalıştı. - + The service is temporarily unavailable Hizmet geçiçi olarak kullanılamıyor - + Access is forbidden Erişim yasak - + An internal error number %1 occurred. %1 numaralı dahili bir hata oluştu - + Symbolic links are not supported in syncing. Sembolik bağlantılar eşitlemede desteklenmiyor. - + File is listed on the ignore list. Dosya yoksayma listesinde. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. Dosya adı bu dosya sisteminde ayrılmış bir addır. - + Filename contains trailing spaces. - + Filename is too long. Dosya adı çok uzun. - + Stat failed. Durum alma başarısız. - + Filename encoding is not valid Dosya adı kodlaması geçerli değil - + Invalid characters, please rename "%1" Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor + - Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak @@ -3442,17 +3419,17 @@ Kullanmanız önerilmez. OCC::ValidateChecksumHeader - + The checksum header is malformed. Sağlama toplam başlığı bozulmuş. - + The checksum header contained an unknown checksum type '%1' Sağlama başlığı bilinmeyen '%1' sağlama tipi içeriyor - + The downloaded file does not match the checksum, it will be resumed. İndirilen dosya sağlama toplamı ile eşleşmiyor, devam edilecek. diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 27f00aae3..2b616ee1c 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - Файл призначення має неочікуваний розмір або час редагування - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Скасовано користувачем @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder - + Click this button to add a folder to synchronize. - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. - + Signed out Вийшов - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - - - - + Fetching folder list from server... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) завантаження %1/с - + u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) відвантаження %1/с - + u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 of %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" - + file %1 of %2 файл %1 з %2 - + Waiting... Очікування... - + Waiting for %n other folder(s)... - + Preparing to sync... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection - + Add Sync Connection @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. Тека <i>%1</i> вже синхронізується, та вона є батьківською для <i>%2</i>. - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - Всі ваші файли синхронізуються. Синхронізація інших тек в цьому режимі <b>не</b> підтримується. Якщо вам необхідно синхронізувати декілька локальних каталогів, спочатку видаліть синхронізацію батьківської теки. - OCC::FormatWarningsWizardPage @@ -2109,7 +2091,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database @@ -2165,12 +2147,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; Відновлення не вдалося: %1 - + A file or folder was removed from a read only share, but restoring failed: %1 @@ -3121,137 +3103,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - У CSync виникла помилка під час сканування внутрішньої структури каталогів. - - - CSync fatal parameter error. У CSync сталася фатальна помилка параметра. - + CSync processing step update failed. CSync не вдалася зробити оновлення . - + CSync processing step reconcile failed. CSync не вдалася зробити врегулювання. - + CSync could not authenticate at the proxy. CSync не вдалося аутентифікуватися на проксі-сервері. - + CSync failed to lookup proxy or server. CSync не вдалося знайти Проксі або Сервер. - + CSync failed to authenticate at the %1 server. CSync не вдалося аутентифікуватися на %1 сервері. - + CSync failed to connect to the network. CSync не вдалося приєднатися до мережі. - + A network connection timeout happened. Час під'єднання до мережі вичерпався. - + A HTTP transmission error happened. Сталася помилка передачі даних по HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: на сервері %1 скінчилося місце. - + CSync unspecified error. Невизначена помилка CSync. - + Aborted by the user Скасовано користувачем - + CSync failed to access CSync не вдалося отримати доступ @@ -3261,144 +3238,144 @@ It is not advisable to use it. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Служба тимчасово недоступна - + Access is forbidden Доступ заборонений - + An internal error number %1 occurred. Виникла внутрішня помилка за номером %1. - + Symbolic links are not supported in syncing. Синхронізація символічних посилань не підтримується. - + File is listed on the ignore list. Файл присутній у списку ігнорованих. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Шлях до файлу занадто довгий. - + Stat failed. - + Filename encoding is not valid Кодування файлу не припустиме - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо + - Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело @@ -3440,17 +3417,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. Заголовок контрольної суми пошкоджено. - + The checksum header contained an unknown checksum type '%1' - + The downloaded file does not match the checksum, it will be resumed. Завантажений файл не відповідає контрольній сумі, його буде відновлено. diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 967b73324..649f5c94c 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - 目标文件的大小和修改时间无法预料 - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 向数据库写入元数据错误 @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 用户撤销 @@ -964,144 +956,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 请先登录后再添加文件夹 - + Click this button to add a folder to synchronize. 点击选择进行同步的本地文件夹。 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 载入文件夹列表时发生错误。 - + Signed out 已登出 - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 - - - + Fetching folder list from server... 获取文件夹列表... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' 在 %1 检查更改 - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 正在同步 %1 - - + + , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下载 %1/s - + u2193 %1/s u2193 %1/秒 - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上传 %1/s - + u2191 %1/s u2191 %1/秒 - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 / %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" 剩余: %5,%1 / %2, 文件数量 %3 / %4 - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 of %2, file %3 of %4 - + file %1 of %2 第 %1 个文件,共 %2 个 - + Waiting... 请稍等... - + Waiting for %n other folder(s)... 等待 %n 个其他文件(文件夹) - + Preparing to sync... 准备同步... @@ -1109,12 +1096,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 添加同步文件夹 - + Add Sync Connection 添加同步连接 @@ -1184,11 +1171,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 你已经在同步 <i>%1</i>,<i>%2</i> 是它的一个子文件夹。 - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - 你已经设置同步了你的所有文件,无法同步另一文件夹。要同步多个文件夹,请取消当前设置的根文件夹同步。 - OCC::FormatWarningsWizardPage @@ -2120,7 +2102,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 向数据库写入元数据错误 @@ -2176,12 +2158,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ;恢复失败:%1 - + A file or folder was removed from a read only share, but restoring failed: %1 文件(夹)移除了只读共享,但恢复失败:%1 @@ -3132,137 +3114,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync 在处理内部文件树时出错。 - - - CSync fatal parameter error. CSync 致命参数错误。 - + CSync processing step update failed. CSync 处理步骤更新失败。 - + CSync processing step reconcile failed. CSync 处理步骤调和失败。 - + CSync could not authenticate at the proxy. CSync 代理认证失败。 - + CSync failed to lookup proxy or server. CSync 无法查询代理或服务器。 - + CSync failed to authenticate at the %1 server. CSync 于 %1 服务器认证失败。 - + CSync failed to connect to the network. CSync 联网失败。 - + A network connection timeout happened. 网络连接超时。 - + A HTTP transmission error happened. HTTP 传输错误。 - + The mounted folder is temporarily not available on the server 该文件夹在服务器上不可用 - + An error occurred while opening a folder 打开目录失败 - + Error while reading folder. 读取目录时出错 - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. 已忽略隐藏的文件和文件夹。 - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync:%1 服务器空间已满。 - + CSync unspecified error. CSync 未定义错误。 - + Aborted by the user 用户撤销 - + CSync failed to access 访问 CSync 失败 @@ -3272,144 +3249,144 @@ It is not advisable to use it. Csync同步失败,请确定是否有本地同步目录的读写权 - + CSync failed due to unhandled permission denied. 出于未处理的权限拒绝,CSync 失败。 - + CSync tried to create a folder that already exists. CSync 尝试创建了已有的文件夹。 - + The service is temporarily unavailable 服务暂时不可用 - + Access is forbidden 访问被拒绝 - + An internal error number %1 occurred. 发生内部错误 %1 - + Symbolic links are not supported in syncing. 符号链接不被同步支持。 - + File is listed on the ignore list. 文件在忽略列表中。 - + File names ending with a period are not supported on this file system. 文件名结尾不可以为“.”。 - + File names containing the character '%1' are not supported on this file system. 此文件系统不支持包含字符 '%1' 的文件名。 - + The file name is a reserved name on this file system. 文件名为系统保留文件名。 - + Filename contains trailing spaces. 文件名尾部含有空格 - + Filename is too long. 文件名过长。 - + Stat failed. 状态失败。 - + Filename encoding is not valid 文件名编码无效 - + Invalid characters, please rename "%1" 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 + - Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source @@ -3451,17 +3428,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. 校验异常 - + The checksum header contained an unknown checksum type '%1' 校验头包含未知的校验类型 '%1' - + The downloaded file does not match the checksum, it will be resumed. 下载的文件校验失败,将会回退。 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index cd44bf6f4..6d9633cd4 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -1,12 +1,4 @@ - - FileSystem - - - The destination file has an unexpected size or modification time - 目的地的檔案大小或修改時間產生異常 - - FolderWizardSourcePage @@ -604,7 +596,7 @@ OCC::CleanupPollsJob - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -645,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 使用者中斷 @@ -955,144 +947,139 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderStatusModel - + You need to be connected to add a folder 您必須連上伺服器才能新增資料夾 - + Click this button to add a folder to synchronize. 點擊此按鈕來新增同步資料夾 - - + + %1 (%2) Example text: "File.txt (23KB)" %1 (%2) - + Error while loading the list of folders from the server. 從伺服器端同步資料夾清單時發生錯誤。 - + Signed out 已登出 - - Adding folder is disabled because you are already syncing all your files. If you want to sync multiple folders, please remove the currently configured root folder. - 新增資料夾失敗,您已經同步您擁有的所有檔案,如果您想要同步多個資料夾,請移除當前設定的根目錄資料夾。 - - - + Fetching folder list from server... 從伺服器抓取資料夾清單中... - + There are unresolved conflicts. Click for details. - + Checking for changes in '%1' 檢查 '%1' 的變動 - + Reconciling changes - + , '%1' Build a list of file names , '%1' - + '%1' Argument is a file name '%1' - + Syncing %1 Example text: "Syncing 'foo.txt', 'bar.txt'" 同步 %1 - - + + , , - + download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) 下載 %1/s - + u2193 %1/s u2193 %1/s - + upload %1/s Example text: "upload 24Kb/s" (%1 is replaced by 24Kb (translated)) 上傳 %1/s - + u2191 %1/s u2191 %1/s - + %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" %1 %2 (%3 的 %4) - + %1 %2 Example text: "uploading foobar.png" %1 %2 - + %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %1 of %2, file %3 of %4 Example text: "12 MB of 345 MB, file 6 of 7" %1 的 %2, 檔案 %3 的 %4 - + file %1 of %2 檔案 %1 的 %2 - + Waiting... 等待中... - + Waiting for %n other folder(s)... 正在等候 %n 的資料夾(可能不只一個) - + Preparing to sync... 正在準備同步... @@ -1100,12 +1087,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an OCC::FolderWizard - + Add Folder Sync Connection 新增資料夾同步功能的連線 - + Add Sync Connection 新增同步連線 @@ -1175,11 +1162,6 @@ Continuing the sync as normal will cause all your files to be overwritten by an You are already syncing <i>%1</i>, which is a parent folder of <i>%2</i>. 您已經同步了 <i>%1</i>, 這個資料夾是 <i>%2</i> 的母資料夾。 - - - You are already syncing all your files. Syncing another folder is <b>not</b> supported. If you want to sync multiple folders, please remove the currently configured root folder sync. - 您已經同步了所有的檔案。同步另一個資料夾的功能是<b>不支援</b> 的。如果您想要同步多個資料夾,請移除目前設定的根目錄資料夾。 - OCC::FormatWarningsWizardPage @@ -2112,7 +2094,7 @@ It is not advisable to use it. OCC::PropagateDirectory - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -2168,12 +2150,12 @@ It is not advisable to use it. OCC::PropagateItemJob - + ; Restoration Failed: %1 ; 重新儲存失敗 %1 - + A file or folder was removed from a read only share, but restoring failed: %1 檔案或目錄已經從只供讀取的分享中被移除,但是復原失敗: %1 @@ -3124,137 +3106,132 @@ It is not advisable to use it. - CSync got an error while processing internal trees. - CSync 處理內部資料樹時發生錯誤 - - - CSync fatal parameter error. CSync 參數錯誤。 - + CSync processing step update failed. CSync 處理步驟 "update" 失敗。 - + CSync processing step reconcile failed. CSync 處理步驟 "reconcile" 失敗。 - + CSync could not authenticate at the proxy. CSync 無法在代理伺服器認證。 - + CSync failed to lookup proxy or server. CSync 查詢代理伺服器或伺服器失敗。 - + CSync failed to authenticate at the %1 server. CSync 於伺服器 %1 認證失敗。 - + CSync failed to connect to the network. CSync 無法連接到網路。 - + A network connection timeout happened. 網路連線逾時。 - + A HTTP transmission error happened. HTTP 傳輸錯誤。 - + The mounted folder is temporarily not available on the server 掛載的資料夾暫時無法在伺服器上使用 - + An error occurred while opening a folder 開啟資料夾時發生錯誤。 - + Error while reading folder. 讀取資料夾時發生錯誤。 - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync:伺服器 %1 沒有可用空間。 - + CSync unspecified error. CSync 未知的錯誤。 - + Aborted by the user 使用者中斷 - + CSync failed to access CSync 存取失敗。 @@ -3264,144 +3241,144 @@ It is not advisable to use it. CSync 讀取或創建歷程檔案時失敗,請確定您在此本地資料夾有讀寫的權限。 - + CSync failed due to unhandled permission denied. CSync 失敗,由於權限未處理被拒。 - + CSync tried to create a folder that already exists. CSync 試圖建立一個已經存在的資料夾。 - + The service is temporarily unavailable 這個服務暫時無法使用。 - + Access is forbidden 存取被拒 - + An internal error number %1 occurred. 發生內部錯誤,錯誤代碼 %1。 - + Symbolic links are not supported in syncing. 同步不支援捷徑連結 - + File is listed on the ignore list. 檔案被列在忽略清單。 - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. 檔案名稱太長了。 - + Stat failed. 狀態失敗。 - + Filename encoding is not valid 檔案名稱編碼是無效的 - + Invalid characters, please rename "%1" 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 + - Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 @@ -3443,17 +3420,17 @@ It is not advisable to use it. OCC::ValidateChecksumHeader - + The checksum header is malformed. 校驗碼異常。 - + The checksum header contained an unknown checksum type '%1' 校正資料含有未知的型態 '%1' - + The downloaded file does not match the checksum, it will be resumed. 下載的檔案驗證失敗,將會被還原 From dca266470752076e8a8969072dc7153d9a760808 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 15 Sep 2017 14:24:34 +0200 Subject: [PATCH 074/166] Private links: Retrieve link through propfind property #6020 * The sharing ui does a propfind anyway: use that to query the new property as well! * For the socket api, asynchronously query the server for the right url when an action that needs it is triggered. The old, manually generated URL will be used as fallback in case the server doesn't support the new property or the property can't be retrieved for some reason. Depends on owncloud/core#29021 --- src/common/syncjournalfilerecord.h | 2 +- src/gui/sharedialog.cpp | 22 +++++--- src/gui/sharedialog.h | 5 +- src/gui/shareusergroupwidget.cpp | 10 ++-- src/gui/shareusergroupwidget.h | 4 +- src/gui/socketapi.cpp | 87 ++++++++++++++++++++---------- src/gui/socketapi.h | 4 +- src/libsync/account.cpp | 2 +- src/libsync/account.h | 8 ++- src/libsync/capabilities.cpp | 5 ++ src/libsync/capabilities.h | 3 ++ 11 files changed, 102 insertions(+), 50 deletions(-) diff --git a/src/common/syncjournalfilerecord.h b/src/common/syncjournalfilerecord.h index ca8430469..ba1c7ced0 100644 --- a/src/common/syncjournalfilerecord.h +++ b/src/common/syncjournalfilerecord.h @@ -37,7 +37,7 @@ class OCSYNC_EXPORT SyncJournalFileRecord public: SyncJournalFileRecord(); - bool isValid() + bool isValid() const { return !_path.isEmpty(); } diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index 24a912fdc..aa47598e9 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -46,7 +46,7 @@ ShareDialog::ShareDialog(QPointer accountState, , _sharePath(sharePath) , _localPath(localPath) , _maxSharingPermissions(maxSharingPermissions) - , _numericFileId(numericFileId) + , _privateLinkUrl(accountState->account()->deprecatedPrivateLinkUrl(numericFileId).toString(QUrl::FullyEncoded)) , _linkWidget(NULL) , _userGroupWidget(NULL) , _progressIndicator(NULL) @@ -130,10 +130,13 @@ ShareDialog::ShareDialog(QPointer accountState, // Server versions >= 9.1 support the "share-permissions" property // older versions will just return share-permissions: "" auto job = new PropfindJob(accountState->account(), _sharePath); - job->setProperties(QList() << "http://open-collaboration-services.org/ns:share-permissions"); + job->setProperties( + QList() + << "http://open-collaboration-services.org/ns:share-permissions" + << "http://owncloud.org/ns:privatelink"); job->setTimeout(10 * 1000); - connect(job, SIGNAL(result(QVariantMap)), SLOT(slotMaxSharingPermissionsReceived(QVariantMap))); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), SLOT(slotMaxSharingPermissionsError())); + connect(job, SIGNAL(result(QVariantMap)), SLOT(slotPropfindReceived(QVariantMap))); + connect(job, SIGNAL(finishedWithError(QNetworkReply *)), SLOT(slotPropfindError())); job->start(); } @@ -149,18 +152,23 @@ void ShareDialog::done(int r) QDialog::done(r); } -void ShareDialog::slotMaxSharingPermissionsReceived(const QVariantMap &result) +void ShareDialog::slotPropfindReceived(const QVariantMap &result) { const QVariant receivedPermissions = result["share-permissions"]; if (!receivedPermissions.toString().isEmpty()) { _maxSharingPermissions = static_cast(receivedPermissions.toInt()); qCInfo(lcSharing) << "Received sharing permissions for" << _sharePath << _maxSharingPermissions; } + auto privateLinkUrl = result["privatelink"].toString(); + if (!privateLinkUrl.isEmpty()) { + qCInfo(lcSharing) << "Received private link url for" << _sharePath << privateLinkUrl; + _privateLinkUrl = privateLinkUrl; + } showSharingUi(); } -void ShareDialog::slotMaxSharingPermissionsError() +void ShareDialog::slotPropfindError() { // On error show the share ui anyway. The user can still see shares, // delete them and so on, even though adding new shares or granting @@ -194,7 +202,7 @@ void ShareDialog::showSharingUi() && _accountState->account()->serverVersionInt() >= Account::makeServerVersion(8, 2, 0); if (userGroupSharing) { - _userGroupWidget = new ShareUserGroupWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, _numericFileId, this); + _userGroupWidget = new ShareUserGroupWidget(_accountState->account(), _sharePath, _localPath, _maxSharingPermissions, _privateLinkUrl, this); _ui->shareWidgets->addTab(_userGroupWidget, tr("Users and Groups")); _userGroupWidget->getShares(); } diff --git a/src/gui/sharedialog.h b/src/gui/sharedialog.h index 50aeea2e1..8af3f3fff 100644 --- a/src/gui/sharedialog.h +++ b/src/gui/sharedialog.h @@ -49,8 +49,8 @@ public: private slots: void done(int r); - void slotMaxSharingPermissionsReceived(const QVariantMap &result); - void slotMaxSharingPermissionsError(); + void slotPropfindReceived(const QVariantMap &result); + void slotPropfindError(); void slotThumbnailFetched(const int &statusCode, const QByteArray &reply); void slotAccountStateChanged(int state); @@ -63,6 +63,7 @@ private: QString _localPath; SharePermissions _maxSharingPermissions; QByteArray _numericFileId; + QString _privateLinkUrl; ShareLinkWidget *_linkWidget; ShareUserGroupWidget *_userGroupWidget; diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index 8cecac2a4..5b505f21a 100644 --- a/src/gui/shareusergroupwidget.cpp +++ b/src/gui/shareusergroupwidget.cpp @@ -48,7 +48,7 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, const QString &sharePath, const QString &localPath, SharePermissions maxSharingPermissions, - const QByteArray &numericFileId, + const QString &privateLinkUrl, QWidget *parent) : QWidget(parent) , _ui(new Ui::ShareUserGroupWidget) @@ -56,7 +56,7 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, , _sharePath(sharePath) , _localPath(localPath) , _maxSharingPermissions(maxSharingPermissions) - , _numericFileId(numericFileId) + , _privateLinkUrl(privateLinkUrl) , _disableCompleterActivated(false) { setAttribute(Qt::WA_DeleteOnClose); @@ -323,19 +323,19 @@ void ShareUserGroupWidget::displayError(int code, const QString &message) void ShareUserGroupWidget::slotPrivateLinkOpenBrowser() { - Utility::openBrowser(_account->filePermalinkUrl(_numericFileId), this); + Utility::openBrowser(_privateLinkUrl, this); } void ShareUserGroupWidget::slotPrivateLinkCopy() { - QApplication::clipboard()->setText(_account->filePermalinkUrl(_numericFileId).toString()); + QApplication::clipboard()->setText(_privateLinkUrl); } void ShareUserGroupWidget::slotPrivateLinkEmail() { Utility::openEmailComposer( tr("I shared something with you"), - _account->filePermalinkUrl(_numericFileId).toString(), + _privateLinkUrl, this); } diff --git a/src/gui/shareusergroupwidget.h b/src/gui/shareusergroupwidget.h index fbc2bdfa4..1feca5f26 100644 --- a/src/gui/shareusergroupwidget.h +++ b/src/gui/shareusergroupwidget.h @@ -57,7 +57,7 @@ public: const QString &sharePath, const QString &localPath, SharePermissions maxSharingPermissions, - const QByteArray &numericFileId, + const QString &privateLinkUrl, QWidget *parent = 0); ~ShareUserGroupWidget(); @@ -89,7 +89,7 @@ private: QString _sharePath; QString _localPath; SharePermissions _maxSharingPermissions; - QByteArray _numericFileId; + QString _privateLinkUrl; QCompleter *_completer; ShareeModel *_completerModel; diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 9261cef83..0073e6154 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -491,23 +491,70 @@ void SocketApi::command_SHARE_MENU_TITLE(const QString &, SocketListener *listen listener->sendMessage(QLatin1String("SHARE_MENU_TITLE:") + tr("Share with %1", "parameter is ownCloud").arg(Theme::instance()->appNameGUI())); } +// Fetches the private link url asynchronously and then calls the target slot +void fetchPrivateLinkUrl(const QString &localFile, SocketApi *target, void (SocketApi::*targetFun)(const QString &url) const) +{ + Folder *shareFolder = FolderMan::instance()->folderForPath(localFile); + if (!shareFolder) { + qCWarning(lcSocketApi) << "Unknown path" << localFile; + return; + } + + const QString localFileClean = QDir::cleanPath(localFile); + const QString file = localFileClean.mid(shareFolder->cleanPath().length() + 1); + + // Generate private link ourselves: used as a fallback + const SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(file); + if (!rec.isValid()) + return; + const QString oldUrl = + shareFolder->accountState()->account()->deprecatedPrivateLinkUrl(rec.numericFileId()).toString(QUrl::FullyEncoded); + + // If the server doesn't have the property, use the old url directly. + if (!shareFolder->accountState()->account()->capabilities().privateLinkPropertyAvailable()) { + (target->*targetFun)(oldUrl); + return; + } + + // Retrieve the new link by PROPFIND + PropfindJob *job = new PropfindJob(shareFolder->accountState()->account(), file, target); + job->setProperties(QList() << "http://owncloud.org/ns:privatelink"); + job->setTimeout(10 * 1000); + QObject::connect(job, &PropfindJob::result, target, [=](const QVariantMap &result) { + auto privateLinkUrl = result["privatelink"].toString(); + if (!privateLinkUrl.isEmpty()) { + (target->*targetFun)(privateLinkUrl); + } else { + (target->*targetFun)(oldUrl); + } + }); + QObject::connect(job, &PropfindJob::finishedWithError, target, [=](QNetworkReply *) { + (target->*targetFun)(oldUrl); + }); + job->start(); +} + void SocketApi::command_COPY_PRIVATE_LINK(const QString &localFile, SocketListener *) { - auto url = getPrivateLinkUrl(localFile); - if (!url.isEmpty()) { - QApplication::clipboard()->setText(url.toString()); - } + fetchPrivateLinkUrl(localFile, this, &SocketApi::copyPrivateLinkToClipboard); } void SocketApi::command_EMAIL_PRIVATE_LINK(const QString &localFile, SocketListener *) { - auto url = getPrivateLinkUrl(localFile); - if (!url.isEmpty()) { - Utility::openEmailComposer( - tr("I shared something with you"), - url.toString(QUrl::FullyEncoded), - 0); - } + fetchPrivateLinkUrl(localFile, this, &SocketApi::emailPrivateLink); +} + +void SocketApi::copyPrivateLinkToClipboard(const QString &link) const +{ + QApplication::clipboard()->setText(link); +} + +void SocketApi::emailPrivateLink(const QString &link) const +{ + Utility::openEmailComposer( + tr("I shared something with you"), + link, + 0); } void SocketApi::command_GET_STRINGS(const QString &, SocketListener *listener) @@ -533,22 +580,4 @@ QString SocketApi::buildRegisterPathMessage(const QString &path) return message; } -QUrl SocketApi::getPrivateLinkUrl(const QString &localFile) const -{ - Folder *shareFolder = FolderMan::instance()->folderForPath(localFile); - if (!shareFolder) { - qCWarning(lcSocketApi) << "Unknown path" << localFile; - return QUrl(); - } - - const QString localFileClean = QDir::cleanPath(localFile); - const QString file = localFileClean.mid(shareFolder->cleanPath().length() + 1); - - SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(file); - if (rec.isValid()) { - return shareFolder->accountState()->account()->filePermalinkUrl(rec.numericFileId()); - } - return QUrl(); -} - } // namespace OCC diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index 2b7b4fe9f..25eb3c72d 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -64,6 +64,9 @@ private slots: void slotReadSocket(); void broadcastStatusPushMessage(const QString &systemPath, SyncFileStatus fileStatus); + void copyPrivateLinkToClipboard(const QString &link) const; + void emailPrivateLink(const QString &link) const; + private: void broadcastMessage(const QString &msg, bool doWait = false); @@ -84,7 +87,6 @@ private: Q_INVOKABLE void command_GET_STRINGS(const QString &argument, SocketListener *listener); QString buildRegisterPathMessage(const QString &path); - QUrl getPrivateLinkUrl(const QString &localFile) const; QSet _registeredAliases; QList _listeners; diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 7f2fadb29..61a99c065 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -162,7 +162,7 @@ QUrl Account::davUrl() const return Utility::concatUrlPath(url(), davPath()); } -QUrl Account::filePermalinkUrl(const QByteArray &numericFileId) const +QUrl Account::deprecatedPrivateLinkUrl(const QByteArray &numericFileId) const { return Utility::concatUrlPath(url(), QLatin1String("/index.php/f/") + QUrl::toPercentEncoding(QString::fromLatin1(numericFileId))); diff --git a/src/libsync/account.h b/src/libsync/account.h index c9f361feb..4f300ce97 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -108,8 +108,12 @@ public: /** Returns webdav entry URL, based on url() */ QUrl davUrl() const; - /** Returns a permalink url for a file */ - QUrl filePermalinkUrl(const QByteArray &numericFileId) const; + /** Returns the legacy permalink url for a file. + * + * This uses the old way of manually building the url. New code should + * use the "privatelink" property accessible via PROPFIND. + */ + QUrl deprecatedPrivateLinkUrl(const QByteArray &numericFileId) const; /** Holds the accounts credentials */ AbstractCredentials *credentials() const; diff --git a/src/libsync/capabilities.cpp b/src/libsync/capabilities.cpp index 4722c0b99..4dfc33b89 100644 --- a/src/libsync/capabilities.cpp +++ b/src/libsync/capabilities.cpp @@ -132,6 +132,11 @@ bool Capabilities::chunkingParallelUploadDisabled() const return _capabilities["dav"].toMap()["chunkingParallelUploadDisabled"].toBool(); } +bool Capabilities::privateLinkPropertyAvailable() const +{ + return _capabilities["files"].toMap()["privateLinks"].toBool(); +} + QList Capabilities::httpErrorCodesThatResetFailingChunkedUploads() const { QList list; diff --git a/src/libsync/capabilities.h b/src/libsync/capabilities.h index 6baaaa0ec..9b15edb9c 100644 --- a/src/libsync/capabilities.h +++ b/src/libsync/capabilities.h @@ -47,6 +47,9 @@ public: /// disable parallel upload in chunking bool chunkingParallelUploadDisabled() const; + /// Whether the "privatelink" DAV property is available + bool privateLinkPropertyAvailable() const; + /// returns true if the capabilities report notifications bool notificationsAvailable() const; From 53195b064a6552022c60f20197417abbcf48a3d8 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 18 Sep 2017 10:23:20 +0200 Subject: [PATCH 075/166] Conflicts: Upload them files if env variable says so Set OWNCLOUD_UPLOAD_CONFLICT_FILES=1 to trigger this behavior. Note that this is experimental and unsupported. The real feature is likely to end up in 2.5. Uploading conflict files is simply done by removing the pattern from csync_exclude. The rest here deals with making the conflict notification ui approximately work. There are still some concerns about where an uploaded conflict file appears in the sync protocol and issues list (it should be in both, but is only in one of them currently!). See #4557. --- src/common/utility.cpp | 37 +++++++++++++++++++++++++++++++++++++ src/common/utility.h | 12 ++++++++++++ src/csync/csync_exclude.cpp | 21 ++++----------------- src/csync/csync_update.cpp | 11 +++++++++++ src/libsync/syncengine.cpp | 18 +++++++++++++++++- 5 files changed, 81 insertions(+), 18 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index b3b7df19e..53aaf2b9d 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -545,4 +545,41 @@ QUrl Utility::concatUrlPath(const QUrl &url, const QString &concatPath, return tmpUrl; } +bool Utility::isConflictFile(const char *name) +{ + auto bname = strrchr(name, '/'); + if (bname) { + bname += 1; + } else { + bname = name; + } + + if (strstr(bname, "_conflict-")) + return true; + + if (shouldUploadConflictFiles()) { + // For uploads, we want to consider files with any kind of username tag + // as conflict files. (pattern *_conflict_*-) + auto startOfMarker = strstr(bname, "_conflict_"); + if (startOfMarker && strchr(startOfMarker, '-')) + return true; + } else { + // Old behavior: optionally, files with the specific string in the env variable + // appended are also considered conflict files. + static auto conflictFileUsername = qgetenv("CSYNC_CONFLICT_FILE_USERNAME"); + static auto usernameConflictId = QByteArray("_conflict_" + conflictFileUsername + "-"); + if (!conflictFileUsername.isEmpty() && strstr(bname, usernameConflictId.constData())) { + return true; + } + } + + return false; +} + +bool Utility::shouldUploadConflictFiles() +{ + static bool uploadConflictFiles = qgetenv("OWNCLOUD_UPLOAD_CONFLICT_FILES").toInt() != 0; + return uploadConflictFiles; +} + } // namespace OCC diff --git a/src/common/utility.h b/src/common/utility.h index d32a7bb3f..9fc0a72d7 100644 --- a/src/common/utility.h +++ b/src/common/utility.h @@ -175,6 +175,18 @@ namespace Utility { /** Returns a new settings pre-set in a specific group. The Settings will be created with the given parent. If no parent is specified, the caller must destroy the settings */ OCSYNC_EXPORT std::unique_ptr settingsWithGroup(const QString &group, QObject *parent = 0); + + /** Returns whether a file name indicates a conflict file + * + * See FileSystem::makeConflictFileName. + */ + OCSYNC_EXPORT bool isConflictFile(const char *name); + + /** Returns whether conflict files should be uploaded. + * + * Experimental! Real feature planned for 2.5. + */ + OCSYNC_EXPORT bool shouldUploadConflictFiles(); } /** @} */ // \addtogroup diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 7a177b840..dbc54f2bb 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -37,6 +37,8 @@ #include "csync_exclude.h" #include "csync_misc.h" +#include "common/utility.h" + #ifdef _WIN32 #include #else @@ -218,7 +220,6 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch size_t i = 0; const char *bname = NULL; size_t blen = 0; - char *conflict = NULL; int rc = -1; CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED; CSYNC_EXCLUDE_TYPE type = CSYNC_NOT_EXCLUDED; @@ -308,25 +309,11 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch goto out; } - /* Always ignore conflict files, not only via the exclude list */ - rc = csync_fnmatch("*_conflict-*", bname, 0); - if (rc == 0) { - match = CSYNC_FILE_EXCLUDE_CONFLICT; - goto out; - } - - if (getenv("CSYNC_CONFLICT_FILE_USERNAME")) { - rc = asprintf(&conflict, "*_conflict_%s-*", getenv("CSYNC_CONFLICT_FILE_USERNAME")); - if (rc < 0) { - goto out; - } - rc = csync_fnmatch(conflict, path, 0); - if (rc == 0) { + if (!OCC::Utility::shouldUploadConflictFiles()) { + if (OCC::Utility::isConflictFile(bname)) { match = CSYNC_FILE_EXCLUDE_CONFLICT; - SAFE_FREE(conflict); goto out; } - SAFE_FREE(conflict); } if( ! excludes ) { diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index e90c9dd19..71be03be8 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -46,6 +46,8 @@ #include "csync_log.h" #include "csync_rename.h" +#include "common/utility.h" + // Needed for PRIu64 on MinGW in C++ mode. #define __STDC_FORMAT_MACROS #include @@ -371,6 +373,15 @@ out: && fs->type != CSYNC_FTW_TYPE_DIR) { fs->child_modified = true; } + + // If conflict files are uploaded, they won't be marked as IGNORE / CSYNC_FILE_EXCLUDE_CONFLICT + // but we still want them marked! + if (OCC::Utility::shouldUploadConflictFiles()) { + if (OCC::Utility::isConflictFile(fs->path.constData())) { + fs->error_status = CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE; + } + } + ctx->current_fs = fs.get(); CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", fs->path.constData(), diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 4b4836ad3..b133df115 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -479,7 +479,17 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, break; case CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE: item->_status = SyncFileItem::Conflict; - item->_errorString = tr("Conflict: Server version downloaded, local copy renamed and not uploaded."); + if (Utility::shouldUploadConflictFiles()) { + // For uploaded conflict files, files with no action performed on them should + // be displayed: but we mustn't overwrite the instruction if something happens + // to the file! + if (remote && item->_instruction == CSYNC_INSTRUCTION_NONE) { + item->_errorString = tr("Unresolved conflict."); + item->_instruction = CSYNC_INSTRUCTION_IGNORE; + } + } else { + item->_errorString = tr("Conflict: Server version downloaded, local copy renamed and not uploaded."); + } break; case CYSNC_STATUS_FILE_LOCKED_OR_OPEN: item->_errorString = QLatin1String("File locked"); // don't translate, internal use! @@ -549,6 +559,12 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, if (!isDirectory && (!other || other->instruction == CSYNC_INSTRUCTION_NONE)) { _hasNoneFiles = true; } + // Put none-instruction conflict files into the syncfileitem list + if (Utility::shouldUploadConflictFiles() + && file->error_status == CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE + && item->_instruction == CSYNC_INSTRUCTION_IGNORE) { + break; + } // No syncing or update to be done. return re; } From 30843cd36877e21a01856401ccc0037f6f94c5a6 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 19 Sep 2017 12:44:59 +0200 Subject: [PATCH 076/166] Fix compile with bad strrchr signature --- src/common/utility.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 53aaf2b9d..460435f1d 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -46,6 +46,7 @@ #include #include +#include #if defined(Q_OS_WIN) #include "utility_win.cpp" @@ -547,28 +548,28 @@ QUrl Utility::concatUrlPath(const QUrl &url, const QString &concatPath, bool Utility::isConflictFile(const char *name) { - auto bname = strrchr(name, '/'); + const char *bname = std::strrchr(name, '/'); if (bname) { bname += 1; } else { bname = name; } - if (strstr(bname, "_conflict-")) + if (std::strstr(bname, "_conflict-")) return true; if (shouldUploadConflictFiles()) { // For uploads, we want to consider files with any kind of username tag // as conflict files. (pattern *_conflict_*-) - auto startOfMarker = strstr(bname, "_conflict_"); - if (startOfMarker && strchr(startOfMarker, '-')) + const char *startOfMarker = std::strstr(bname, "_conflict_"); + if (startOfMarker && std::strchr(startOfMarker, '-')) return true; } else { // Old behavior: optionally, files with the specific string in the env variable // appended are also considered conflict files. static auto conflictFileUsername = qgetenv("CSYNC_CONFLICT_FILE_USERNAME"); static auto usernameConflictId = QByteArray("_conflict_" + conflictFileUsername + "-"); - if (!conflictFileUsername.isEmpty() && strstr(bname, usernameConflictId.constData())) { + if (!conflictFileUsername.isEmpty() && std::strstr(bname, usernameConflictId.constData())) { return true; } } From ee7593bbe325e134f0ab49c680c05f96f4624b92 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 20 Sep 2017 02:18:35 +0200 Subject: [PATCH 077/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 105 ++++++++++++++++--------------- translations/client_cs.ts | 105 ++++++++++++++++--------------- translations/client_de.ts | 105 ++++++++++++++++--------------- translations/client_el.ts | 105 ++++++++++++++++--------------- translations/client_en.ts | 105 ++++++++++++++++--------------- translations/client_es.ts | 105 ++++++++++++++++--------------- translations/client_es_AR.ts | 105 ++++++++++++++++--------------- translations/client_et.ts | 105 ++++++++++++++++--------------- translations/client_eu.ts | 105 ++++++++++++++++--------------- translations/client_fa.ts | 105 ++++++++++++++++--------------- translations/client_fi.ts | 105 ++++++++++++++++--------------- translations/client_fr.ts | 105 ++++++++++++++++--------------- translations/client_gl.ts | 105 ++++++++++++++++--------------- translations/client_hu.ts | 105 ++++++++++++++++--------------- translations/client_it.ts | 105 ++++++++++++++++--------------- translations/client_ja.ts | 105 ++++++++++++++++--------------- translations/client_nb_NO.ts | 105 ++++++++++++++++--------------- translations/client_nl.ts | 105 ++++++++++++++++--------------- translations/client_pl.ts | 105 ++++++++++++++++--------------- translations/client_pt.ts | 105 ++++++++++++++++--------------- translations/client_pt_BR.ts | 105 ++++++++++++++++--------------- translations/client_ru.ts | 105 ++++++++++++++++--------------- translations/client_sk.ts | 119 ++++++++++++++++++----------------- translations/client_sl.ts | 105 ++++++++++++++++--------------- translations/client_sr.ts | 105 ++++++++++++++++--------------- translations/client_sv.ts | 105 ++++++++++++++++--------------- translations/client_th.ts | 105 ++++++++++++++++--------------- translations/client_tr.ts | 105 ++++++++++++++++--------------- translations/client_uk.ts | 105 ++++++++++++++++--------------- translations/client_zh_CN.ts | 105 ++++++++++++++++--------------- translations/client_zh_TW.ts | 105 ++++++++++++++++--------------- 32 files changed, 1715 insertions(+), 1557 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 3b9c170e5..9f8c723b2 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -135,6 +135,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 849481b78..d7b22725f 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -2596,17 +2596,17 @@ No és aconsellada usar-la. - + The file can not be shared because it was shared without sharing permission. El fitxer no es pot compartir perquè va ser compartit sense permisos de compartició. - + Users and Groups - + Public Links @@ -2876,22 +2876,22 @@ No és aconsellada usar-la. Comparteix amb %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3184,38 +3184,38 @@ No és aconsellada usar-la. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3305,84 +3305,89 @@ No és aconsellada usar-la. El nom de fitxer és massa llarg. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid La codificació del nom de fitxer no és vàlida - + Invalid characters, please rename "%1" Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen @@ -3832,37 +3837,37 @@ No és aconsellada usar-la. QObject - + in the future al futur - + %n day(s) ago fa %n diafa %n dies - + %n hour(s) ago fa %n horafa %n hores - + now ara - + Less than a minute ago Fa menys d'un minut - + %n minute(s) ago fa %n minutfa %n minuts - + Some time ago Fa una estona @@ -3876,57 +3881,57 @@ No és aconsellada usar-la. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n any%n anys - + %n month(s) %n mes%n mesos - + %n day(s) %n dia%n dies - + %n hour(s) %n hora%n hores - + %n minute(s) %n minut%n minuts - + %n second(s) %n segon%n segons - + %1 %2 %1 %2 diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 0f5ed7ecb..9fbc5ade3 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -2599,17 +2599,17 @@ Nedoporučuje se jí používat. Přijímání nejvyšších možných oprávnění pro sdílení ze serveru... - + The file can not be shared because it was shared without sharing permission. Tento soubor nelze sdílet, protože byl nasdílen bez možnosti dalšího sdílení. - + Users and Groups Uživatelé a skupiny - + Public Links Veřejné odkazy @@ -2879,22 +2879,22 @@ Nedoporučuje se jí používat. Sdílet s %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3187,38 +3187,38 @@ Nedoporučuje se jí používat. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3308,84 +3308,89 @@ Nedoporučuje se jí používat. Jméno souboru je příliš dlouhé. - + + Unresolved conflict. + + + + Stat failed. Stat selhal. - + Filename encoding is not valid Kódování znaků jména soubor je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj @@ -3835,37 +3840,37 @@ Nedoporučuje se jí používat. QObject - + in the future V budoucnosti - + %n day(s) ago před %n dnempřed %n dnypřed %n dny - + %n hour(s) ago před %n hodinoupřed %n hodinamipřed %n hodinami - + now nyní - + Less than a minute ago Méně než před minutou - + %n minute(s) ago před %n minutoupřed %n minutamipřed %n minutami - + Some time ago Před nějakým časem @@ -3879,57 +3884,57 @@ Nedoporučuje se jí používat. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n let - + %n month(s) %n měsíc%n měsíce%n měsíců - + %n day(s) %n den%n dny%n dní - + %n hour(s) %n hodina%n hodiny%n hodin - + %n minute(s) %n minuta%n minuty%n minut - + %n second(s) %n sekunda%n sekundy%n sekund - + %1 %2 %1 %2 diff --git a/translations/client_de.ts b/translations/client_de.ts index a24082e1d..4a9fd6c5a 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -2600,17 +2600,17 @@ Es ist nicht ratsam, diese zu benutzen. Abrufen der maximal möglichen Freigabeberechtigungen vom Server... - + The file can not be shared because it was shared without sharing permission. Die Datei kann nicht geteilt werden, weil sie ohne erneute Teilungs-Berechtigung für Sie geteilt wurde. - + Users and Groups Nutzer und Gruppen - + Public Links Öffentliche Links @@ -2880,22 +2880,22 @@ Es ist nicht ratsam, diese zu benutzen. Via %1 teilen - + I shared something with you - + Share... Teilen… - + Copy private link to clipboard - + Send private link by email... @@ -3188,38 +3188,38 @@ Es ist nicht ratsam, diese zu benutzen. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3309,84 +3309,89 @@ Es ist nicht ratsam, diese zu benutzen. Der Dateiname ist zu lang. - + + Unresolved conflict. + + + + Stat failed. Stat fehlgeschlagen. - + Filename encoding is not valid Dateikodierung ist ungültig - + Invalid characters, please rename "%1" Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle @@ -3836,37 +3841,37 @@ Es ist nicht ratsam, diese zu benutzen. QObject - + in the future in der Zukunft - + %n day(s) ago vor %n Tage(n)vor %n Tage(n) - + %n hour(s) ago vor %n Stunde(n)vor %n Stunde(n) - + now jetzt - + Less than a minute ago vor weniger als einer Minute - + %n minute(s) ago vor %n Minute(n)vor %n Minute(n) - + Some time ago vor einiger Zeit @@ -3880,57 +3885,57 @@ Es ist nicht ratsam, diese zu benutzen. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n Jahr%n Jahre - + %n month(s) %n Monat%n Monate - + %n day(s) %n Tag%n Tage - + %n hour(s) %n Stunde%n Stunden - + %n minute(s) %n Minute%n Minuten - + %n second(s) %n Sekunde%n Sekunden - + %1 %2 %1 %2 diff --git a/translations/client_el.ts b/translations/client_el.ts index 15ab6081b..286130d11 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -2601,17 +2601,17 @@ It is not advisable to use it. Ανάκτηση των μέγιστων δυνατών δικαιωμάτων κοινής χρήσης από το διακομιστή ... - + The file can not be shared because it was shared without sharing permission. Το αρχείο δεν μπορεί να διαμοιραστεί γιατί διαμοιράστηκε χωρίς δικαιώματα διαμοιρασμού. - + Users and Groups Χρήστες και Ομάδες - + Public Links Δημόσιοι σύνδεσμοι @@ -2881,22 +2881,22 @@ It is not advisable to use it. Διαμοιρασμός με %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3189,38 +3189,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3310,84 +3310,89 @@ It is not advisable to use it. Το όνομα αρχείου είνια πολύ μεγάλο. - + + Unresolved conflict. + + + + Stat failed. Απέτυχε. - + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Invalid characters, please rename "%1" Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση @@ -3837,37 +3842,37 @@ It is not advisable to use it. QObject - + in the future στο μέλλον - + %n day(s) ago %n μέρα(ες) πριν%n μέρα(ες) πριν - + %n hour(s) ago %n ώρα(ες) πριν%n ώρα(ες) πριν - + now τώρα - + Less than a minute ago Λιγότερο από ένα λεπτό πριν - + %n minute(s) ago %n λεπτό(ά) πριν%n λεπτό(ά) πριν - + Some time ago Λίγη ώρα πριν @@ -3881,57 +3886,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n χρόνος%n χρόνια - + %n month(s) %n μήνας(ες)%n μήνας(ες) - + %n day(s) %n ημέρα(ες)%n ημέρα(ες) - + %n hour(s) %n ώρα(ες)%n ώρα(ες) - + %n minute(s) %n λεπτό(ά)%n λεπτό(ά) - + %n second(s) %n δευτερόλεπτο(α)%n δευτερόλεπτο(α) - + %1 %2 %1 %2 diff --git a/translations/client_en.ts b/translations/client_en.ts index fb512102b..8a84c5697 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -2620,17 +2620,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links @@ -2900,22 +2900,22 @@ It is not advisable to use it. - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3206,38 +3206,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3327,84 +3327,89 @@ It is not advisable to use it. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3854,12 +3859,12 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago @@ -3867,7 +3872,7 @@ It is not advisable to use it. - + %n hour(s) ago @@ -3875,17 +3880,17 @@ It is not advisable to use it. - + now - + Less than a minute ago - + %n minute(s) ago @@ -3893,7 +3898,7 @@ It is not advisable to use it. - + Some time ago @@ -3907,27 +3912,27 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B - + %n year(s) @@ -3935,7 +3940,7 @@ It is not advisable to use it. - + %n month(s) @@ -3943,7 +3948,7 @@ It is not advisable to use it. - + %n day(s) @@ -3951,7 +3956,7 @@ It is not advisable to use it. - + %n hour(s) @@ -3959,7 +3964,7 @@ It is not advisable to use it. - + %n minute(s) @@ -3967,7 +3972,7 @@ It is not advisable to use it. - + %n second(s) @@ -3975,7 +3980,7 @@ It is not advisable to use it. - + %1 %2 diff --git a/translations/client_es.ts b/translations/client_es.ts index 4c82ad4ab..cd1c7a594 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -2600,17 +2600,17 @@ No se recomienda usarla. Descargando el maximo número de permisos compartidos del servidor... - + The file can not be shared because it was shared without sharing permission. El archivo no puede compartirse; ya que fue compartido sin permisos correspondientes. - + Users and Groups Usuarios y Grupos - + Public Links Enlaces Publicos @@ -2880,22 +2880,22 @@ No se recomienda usarla. Compartir con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3188,38 +3188,38 @@ No se recomienda usarla. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3309,84 +3309,89 @@ No se recomienda usarla. El nombre del archivo es demasiado largo. - + + Unresolved conflict. + + + + Stat failed. Stat ha fallado. - + Filename encoding is not valid Los caracteres del nombre de fichero no son válidos - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen @@ -3836,37 +3841,37 @@ No se recomienda usarla. QObject - + in the future en el futuro - + %n day(s) ago Hace %n día(s)Hace %n día(s) - + %n hour(s) ago Hace %n hora(s)Hace %n hora(s) - + now ahora - + Less than a minute ago Hace menos de un minuto - + %n minute(s) ago Hace %n minutos(s)Hace %n minutos(s) - + Some time ago Hace unos momentos @@ -3880,57 +3885,57 @@ No se recomienda usarla. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n año%n año(s) - + %n month(s) %n Mes%n Mese(s) - + %n day(s) %n dia%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index dfc24f018..fcb4bc767 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -2588,17 +2588,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links @@ -2868,22 +2868,22 @@ It is not advisable to use it. - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3174,38 +3174,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3295,84 +3295,89 @@ It is not advisable to use it. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source @@ -3823,37 +3828,37 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3867,57 +3872,57 @@ It is not advisable to use it. Utility - + %L1 GB - + %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_et.ts b/translations/client_et.ts index c882b9c27..3dd183bcc 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -2589,17 +2589,17 @@ Selle kasutamine pole soovitatav. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links Avalikud lingid @@ -2869,22 +2869,22 @@ Selle kasutamine pole soovitatav. Jagatud kasutajaga %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3177,38 +3177,38 @@ Selle kasutamine pole soovitatav. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3298,84 +3298,89 @@ Selle kasutamine pole soovitatav. Faili nimi on liiga pikk. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid Failinime kodeering pole kehtiv - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas @@ -3825,37 +3830,37 @@ Selle kasutamine pole soovitatav. QObject - + in the future tulevikus - + %n day(s) ago - + %n hour(s) ago - + now kohe - + Less than a minute ago Vähem kui minut tagasi - + %n minute(s) ago - + Some time ago Mõni aeg tagasi @@ -3869,57 +3874,57 @@ Selle kasutamine pole soovitatav. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_eu.ts b/translations/client_eu.ts index f2f4cd6bc..f7df27ca3 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -2591,17 +2591,17 @@ Ez da gomendagarria erabltzea. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links @@ -2871,22 +2871,22 @@ Ez da gomendagarria erabltzea. - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3177,38 +3177,38 @@ Ez da gomendagarria erabltzea. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3298,84 +3298,89 @@ Ez da gomendagarria erabltzea. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria @@ -3825,37 +3830,37 @@ Ez da gomendagarria erabltzea. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago orain dela minutu bat baino gutxiago - + %n minute(s) ago - + Some time ago @@ -3869,57 +3874,57 @@ Ez da gomendagarria erabltzea. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 0e78033f9..bbe0a09a5 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -2588,17 +2588,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links @@ -2868,22 +2868,22 @@ It is not advisable to use it. اشتراک‌گذاری با %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3174,38 +3174,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3295,84 +3295,89 @@ It is not advisable to use it. نام فایل خیلی طولانی است. - + + Unresolved conflict. + + + + Stat failed. وضعیت ناموفق - + Filename encoding is not valid رمزگذاری نام فایل معتبر نیست - + Invalid characters, please rename "%1" کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا @@ -3822,37 +3827,37 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3866,57 +3871,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 1d77b0c43..e54b75641 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -2591,17 +2591,17 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups - + Public Links @@ -2871,22 +2871,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3179,38 +3179,38 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3300,84 +3300,89 @@ Osoitteen käyttäminen ei ole suositeltavaa. Tiedoston nimi on liian pitkä. - + + Unresolved conflict. + + + + Stat failed. Stat epäonnistui. - + Filename encoding is not valid Tiedostonimen merkistökoodaus ei ole kelvollista - + Invalid characters, please rename "%1" Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde @@ -3827,37 +3832,37 @@ Osoitteen käyttäminen ei ole suositeltavaa. QObject - + in the future tulevaisuudessa - + %n day(s) ago %n päivä sitten%n päivää sitten - + %n hour(s) ago %n tunti sitten%n tuntia sitten - + now nyt - + Less than a minute ago Alle minuutti sitten - + %n minute(s) ago %n minuutti sitten%n minuuttia sitten - + Some time ago Jokin aika sitten @@ -3871,57 +3876,57 @@ Osoitteen käyttäminen ei ole suositeltavaa. Utility - + %L1 GB %L1 Gt - + %L1 MB %L1 Mt - + %L1 KB %L1 kt - + %L1 B %L1 t - + %n year(s) %n vuosi%n vuotta - + %n month(s) %n kuukausi%n kuukautta - + %n day(s) %n päivä%n päivää - + %n hour(s) %n tunti%n tuntia - + %n minute(s) %n minuutti%n minuuttia - + %n second(s) %n sekunti%n sekuntia - + %1 %2 %1 %2 diff --git a/translations/client_fr.ts b/translations/client_fr.ts index ecdd07d8d..60d50eeec 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -2602,17 +2602,17 @@ Il est déconseillé de l'utiliser. Récupération des permissions de partage maximales possibles depuis le serveur... - + The file can not be shared because it was shared without sharing permission. Le fichier ne peut pas être partagé car il a été partagé sans permission de repartage. - + Users and Groups Utilisateurs et Groupes - + Public Links Liens publics @@ -2882,22 +2882,22 @@ Il est déconseillé de l'utiliser. Partager avec %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3190,38 +3190,38 @@ Il est déconseillé de l'utiliser. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3311,84 +3311,89 @@ Il est déconseillé de l'utiliser. Le nom de fichier est trop long. - + + Unresolved conflict. + + + + Stat failed. Stat échoué. - + Filename encoding is not valid L'encodage du nom de fichier n'est pas valide - + Invalid characters, please rename "%1" Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source @@ -3838,37 +3843,37 @@ Il est déconseillé de l'utiliser. QObject - + in the future Dans le futur - + %n day(s) ago HierIl y a %n jours - + %n hour(s) ago Il y a %n heureIl y a %n heures - + now maintenant - + Less than a minute ago Il y a moins d'une minute - + %n minute(s) ago Il y a %n minuteIl y a %n minutes - + Some time ago Il y a quelque temps @@ -3882,57 +3887,57 @@ Il est déconseillé de l'utiliser. Utility - + %L1 GB %L1 Go - + %L1 MB %L1 Mo - + %L1 KB %L1 Ko - + %L1 B %L1 octets - + %n year(s) %n an%n ans - + %n month(s) %n mois%n mois - + %n day(s) %n jour%n jours - + %n hour(s) %n heure%n heures - + %n minute(s) %n minute%n minutes - + %n second(s) %n seconde%n secondes - + %1 %2 %1 %2 diff --git a/translations/client_gl.ts b/translations/client_gl.ts index f8f4ebb2f..046cd70f0 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -2590,17 +2590,17 @@ Recomendámoslle que non o use. - + The file can not be shared because it was shared without sharing permission. Non é posíbel compartir o ficheiro, xa que foi compartido sen permisis para compartir. - + Users and Groups Usuarios e grupos - + Public Links @@ -2870,22 +2870,22 @@ Recomendámoslle que non o use. Compartir con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3178,38 +3178,38 @@ Recomendámoslle que non o use. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3299,84 +3299,89 @@ Recomendámoslle que non o use. O nome de ficheiro é longo de máis. - + + Unresolved conflict. + + + + Stat failed. Fallou a obtención de estatísticas. - + Filename encoding is not valid O nome de ficheiro codificado non é correcto - + Invalid characters, please rename "%1" Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe @@ -3826,37 +3831,37 @@ Recomendámoslle que non o use. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3870,57 +3875,57 @@ Recomendámoslle que non o use. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 1f34a8cc0..6004d289e 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -2588,17 +2588,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. A fájlt nem lehetett megosztani, mert megosztási jogosultság nélkül lett megosztva. - + Users and Groups - + Public Links @@ -2868,22 +2868,22 @@ It is not advisable to use it. Megosztás vele: %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3175,38 +3175,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3296,84 +3296,89 @@ It is not advisable to use it. Fájlnév túl nagy. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás @@ -3823,37 +3828,37 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago - + %n minute(s) ago - + Some time ago @@ -3867,57 +3872,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_it.ts b/translations/client_it.ts index 0707c1f29..b0a87fbd0 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -2596,17 +2596,17 @@ Non è consigliabile utilizzarlo. Recupero di tutti i permessi di condivisione possibili dal server... - + The file can not be shared because it was shared without sharing permission. Il file non può essere condiviso poiché è stato condiviso senza il permesso di condivisione. - + Users and Groups Utenti e Gruppi - + Public Links Collegamenti pubblici @@ -2876,22 +2876,22 @@ Non è consigliabile utilizzarlo. Condividi con %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3184,38 +3184,38 @@ Non è consigliabile utilizzarlo. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3305,84 +3305,89 @@ Non è consigliabile utilizzarlo. Il nome del file è troppo lungo. - + + Unresolved conflict. + + + + Stat failed. Stat non riuscita. - + Filename encoding is not valid La codifica del nome del file non è valida - + Invalid characters, please rename "%1" Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine @@ -3832,37 +3837,37 @@ Non è consigliabile utilizzarlo. QObject - + in the future nel futuro - + %n day(s) ago %n giorno fa%n giorni fa - + %n hour(s) ago %n ora fa%n ore fa - + now adesso - + Less than a minute ago Meno di un minuto fa - + %n minute(s) ago %n minuto fa%n minuti fa - + Some time ago Tempo fa @@ -3876,57 +3881,57 @@ Non è consigliabile utilizzarlo. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) % anno%n anni - + %n month(s) %n mese%n mesi - + %n day(s) %n giorno%n giorni - + %n hour(s) %n ora%n ore - + %n minute(s) %n minuto%n minuti - + %n second(s) %n secondo%n secondi - + %1 %2 %1 %2 diff --git a/translations/client_ja.ts b/translations/client_ja.ts index c155e4390..a54271287 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -2597,17 +2597,17 @@ It is not advisable to use it. サーバーから共有権限を取得できる最大数で取得しています - + The file can not be shared because it was shared without sharing permission. 再共有権限がない共有ため、このファイルは共有できません。 - + Users and Groups ユーザーとグループ - + Public Links 公開リンク @@ -2877,22 +2877,22 @@ It is not advisable to use it. %1 と共有 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3185,38 +3185,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3306,84 +3306,89 @@ It is not advisable to use it. ファイル名が長すぎます - + + Unresolved conflict. + + + + Stat failed. 情報取得エラー - + Filename encoding is not valid ファイル名のエンコーディングが無効です。 - + Invalid characters, please rename "%1" 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 @@ -3833,37 +3838,37 @@ It is not advisable to use it. QObject - + in the future 今後 - + %n day(s) ago %n日前 - + %n hour(s) ago %n 時間前 - + now - + Less than a minute ago 1分以内 - + %n minute(s) ago %n 分前 - + Some time ago 数分前 @@ -3877,57 +3882,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n ヶ月 - + %n day(s) %n 日 - + %n hour(s) %n 時間 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 32fd07322..85d823fc2 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -2600,17 +2600,17 @@ Det er ikke tilrådelig å bruke den. Henter maksimalt mulige delerettigheter fra serveren... - + The file can not be shared because it was shared without sharing permission. Filen kan ikke deles fordi den ble delt uten adgang til å dele. - + Users and Groups Brukere og grupper - + Public Links Offentlige lenker @@ -2880,22 +2880,22 @@ Det er ikke tilrådelig å bruke den. Del med %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3188,38 +3188,38 @@ Det er ikke tilrådelig å bruke den. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3309,84 +3309,89 @@ Det er ikke tilrådelig å bruke den. Filnavn er for langt. - + + Unresolved conflict. + + + + Stat failed. Stat feilet. - + Filename encoding is not valid Filnavn-koding er ikke gyldig - + Invalid characters, please rename "%1" Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden @@ -3836,37 +3841,37 @@ Det er ikke tilrådelig å bruke den. QObject - + in the future fram i tid - + %n day(s) ago i gårfor %n dager siden - + %n hour(s) ago for %n time sidenfor %n timer siden - + now - + Less than a minute ago For mindre enn et minutt siden - + %n minute(s) ago for %n minutt sidenfor %n minutter siden - + Some time ago For en stund siden @@ -3880,57 +3885,57 @@ Det er ikke tilrådelig å bruke den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n måned%n måneder - + %n day(s) %n dag%n dager - + %n hour(s) %n time%n timer - + %n minute(s) %n minutt%n minutter - + %n second(s) %n sekund%n sekunder - + %1 %2 %1 %2 diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 491d6dc72..f16aed90e 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -2605,17 +2605,17 @@ We adviseren deze site niet te gebruiken. Maximum aantal mogelijke permissies van de server ophalen... - + The file can not be shared because it was shared without sharing permission. Het bestand kan niet worden gedeeld, omdat het werd gedeeld zonder verder delen toestemming. - + Users and Groups Gebruikers en Groepen - + Public Links Openbare Links @@ -2885,22 +2885,22 @@ We adviseren deze site niet te gebruiken. Delen met %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3193,38 +3193,38 @@ We adviseren deze site niet te gebruiken. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3314,84 +3314,89 @@ We adviseren deze site niet te gebruiken. De bestandsnaam is te lang. - + + Unresolved conflict. + + + + Stat failed. Stat mislukt. - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + Invalid characters, please rename "%1" Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron @@ -3841,37 +3846,37 @@ We adviseren deze site niet te gebruiken. QObject - + in the future in de toekomst - + %n day(s) ago %n dag geleden%n dagen geleden - + %n hour(s) ago %n uur geleden%n uur geleden - + now nu - + Less than a minute ago Minder dan een minuut geleden - + %n minute(s) ago %n minuut geleden%n minuten geleden - + Some time ago Even geleden @@ -3885,57 +3890,57 @@ We adviseren deze site niet te gebruiken. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n jaar%n jaar - + %n month(s) %n maand%n maanden - + %n day(s) %n dag%n dagen - + %n hour(s) %n uur%n uur - + %n minute(s) %n minuut%n minuten - + %n second(s) %n seconde%n seconde(n) - + %1 %2 %1 %2 diff --git a/translations/client_pl.ts b/translations/client_pl.ts index d8ed5538a..8a93c50a4 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -2594,17 +2594,17 @@ Niezalecane jest jego użycie. - + The file can not be shared because it was shared without sharing permission. - + Users and Groups Użytkownicy i grupy - + Public Links Linki publiczne @@ -2874,22 +2874,22 @@ Niezalecane jest jego użycie. Współdzielone z %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3182,38 +3182,38 @@ Niezalecane jest jego użycie. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3303,84 +3303,89 @@ Niezalecane jest jego użycie. Nazwa pliku zbyt długa - + + Unresolved conflict. + + + + Stat failed. Błąd statystyk. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło @@ -3831,37 +3836,37 @@ Kliknij QObject - + in the future w przyszłości - + %n day(s) ago %n dzień temu%n dni temu%n dni temu%n dni temu - + %n hour(s) ago %n godzinę temu%n godziny temu%n godzin temu%n godzin temu - + now teraz - + Less than a minute ago Mniej niż minutę temu - + %n minute(s) ago %n minutę temu%n minuty temu%n minut temu%n minut temu - + Some time ago Jakiś czas temu @@ -3875,57 +3880,57 @@ Kliknij Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n lata%n lat%n lat - + %n month(s) %n miesiąc%n miesiące%n miesięcy%n miesięcy - + %n day(s) %n dzień%n dni%n dni%n dni - + %n hour(s) %n godzina%n godziny%n godzin%n godzin - + %n minute(s) %n minuta%n minuty%n minut%n minut - + %n second(s) %n sekunda%n sekundy%n sekund%n sekund - + %1 %2 %1 %2 diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 811ac3922..5e810af5a 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -2601,17 +2601,17 @@ Não é aconselhada a sua utilização. A obter do servidor as permissões máximas de partilha... - + The file can not be shared because it was shared without sharing permission. O ficheiro não pode ser partilhado porque foi partilhado sem permissão de partilha. - + Users and Groups Utilizadores e Grupos - + Public Links Ligações públicas @@ -2881,22 +2881,22 @@ Não é aconselhada a sua utilização. Partilhar com %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3189,38 +3189,38 @@ Não é aconselhada a sua utilização. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3310,84 +3310,89 @@ Não é aconselhada a sua utilização. O nome do ficheiro é muito grande - + + Unresolved conflict. + + + + Stat failed. Estado falhou. - + Filename encoding is not valid Codificação de nome de ficheiro não é válida - + Invalid characters, please rename "%1" Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem @@ -3837,37 +3842,37 @@ Não é aconselhada a sua utilização. QObject - + in the future no futuro - + %n day(s) ago %n dia atrás%n dias atrás - + %n hour(s) ago %n hora atrás%n horas atrás - + now agora - + Less than a minute ago Menos de um minuto atrás - + %n minute(s) ago %n minuto atrás%n minutos atrás - + Some time ago Algum tempo atrás @@ -3881,57 +3886,57 @@ Não é aconselhada a sua utilização. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n meses - + %n day(s) %n dia%n dias - + %n hour(s) %n hora%n horas - + %n minute(s) %n minuto%n minutos - + %n second(s) %n segundo%n segundos - + %1 %2 %1 %2 diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 1b17ea11f..c5d0b9bbb 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -2598,17 +2598,17 @@ It is not advisable to use it. Recuperando máximo possível de permissões de compartilhamento do servidor... - + The file can not be shared because it was shared without sharing permission. O arquivo não pode ser partilhado, pois foi compartilhado sem permissão de compartilhamento. - + Users and Groups Usuários e Grupos - + Public Links Linques Públicos @@ -2878,22 +2878,22 @@ It is not advisable to use it. Compartilhar com %1 - + I shared something with you Eu compartilhei algo com você - + Share... Compartilhar... - + Copy private link to clipboard Copie o linque privado para a área de transferência - + Send private link by email... Envie o linque privado por e-mail... @@ -3186,38 +3186,38 @@ It is not advisable to use it. A hierarquia de pastas é muito profunda - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflito: Versão do servidor baixada, cópia local renomeada e não carregada. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. @@ -3307,84 +3307,89 @@ It is not advisable to use it. O nome do arquivo é muito longo. - + + Unresolved conflict. + + + + Stat failed. Stat falhou. - + Filename encoding is not valid A codificação do nome do arquivo não é válida - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte @@ -3834,37 +3839,37 @@ It is not advisable to use it. QObject - + in the future no futuro - + %n day(s) ago %n dia(s) atrás%n dia(s) atrás - + %n hour(s) ago %n hora(s) atrás%n hora(s) atrás - + now agora - + Less than a minute ago A menos de um minuto atrás - + %n minute(s) ago %n minuto(s) atrás%n minuto(s) atrás - + Some time ago Algum tempo atrás @@ -3878,57 +3883,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n ano%n ano(s) - + %n month(s) %n mês%n mês(es) - + %n day(s) %n day%n dia(s) - + %n hour(s) %n hora%n hora(s) - + %n minute(s) %n minuto%n minuto(s) - + %n second(s) %n segundo%n segundo(s) - + %1 %2 %1 %2 diff --git a/translations/client_ru.ts b/translations/client_ru.ts index a131d6869..d8b2be0ec 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -2598,17 +2598,17 @@ It is not advisable to use it. Запрос максимально возможных прав для предоставления доступа с сервера… - + The file can not be shared because it was shared without sharing permission. Невозможно предоставить общий доступ к файлу: нет разрешения на предоставление общего доступа. - + Users and Groups Пользователи и группы - + Public Links Общедоступные ссылки @@ -2878,22 +2878,22 @@ It is not advisable to use it. Поделиться с %1 - + I shared something with you Я поделился с тобой - + Share... Поделиться... - + Copy private link to clipboard Копировать приватную ссылку в буфер обмена... - + Send private link by email... Отправить приватную ссылку по email... @@ -3186,38 +3186,38 @@ It is not advisable to use it. Иерархия каталогов слишком глубока - + Conflict: Server version downloaded, local copy renamed and not uploaded. Конфликт: Серверная версия скачана, локальная копия переименована и не закачана. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Мало места на диске: Скачивания, которые сократят свободное место ниже %1, будут пропущены. - + There is insufficient space available on the server for some uploads. На сервере недостаточно места для некоторых закачек. @@ -3307,84 +3307,89 @@ It is not advisable to use it. Имя файла слишком длинное. - + + Unresolved conflict. + + + + Stat failed. Не удалось загрузить статистику. - + Filename encoding is not valid Кодировка имени файла не верна - + Invalid characters, please rename "%1" Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник @@ -3834,37 +3839,37 @@ It is not advisable to use it. QObject - + in the future в будущем - + %n day(s) ago %n день назад%n дня назад%n дней назад%n дней назад - + %n hour(s) ago %n час назад%n часа назад%n часов назад%n часов назад - + now сейчас - + Less than a minute ago Меньше минуты назад - + %n minute(s) ago %n минута назад%n минуты назад%n минут назад%n минут назад - + Some time ago Некоторое время назад @@ -3878,57 +3883,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) %n год%n года%n лет%n лет - + %n month(s) %n месяц%n месяца%3 месяцев%n месяцев - + %n day(s) %n день%n дня%n дней%n дней - + %n hour(s) %n час%n часа%n часов%n часов - + %n minute(s) %n минута%n минуты%n минут%n минут - + %n second(s) %n секунда%n секунды%n секунд%n секунд - + %1 %2 %1 %2 diff --git a/translations/client_sk.ts b/translations/client_sk.ts index e4a2b386c..0ae3facce 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -47,7 +47,7 @@ TextLabel - TextLabel + Štítok @@ -83,12 +83,12 @@ Unknown error: network reply was deleted - + Neznáma chyba: odpoveď siete bola odstránená Server replied "%1 %2" to "%3 %4" - + Server odpovedal "%1 %2" na "%3 %4" @@ -116,17 +116,17 @@ Synchronize all - + Synchronizovať všetky Synchronize none - + Synchronizovať žiadny Apply manual changes - + Aplikovať manuálne zmeny @@ -173,7 +173,7 @@ Force sync now - + Vynútiť synchronizáciu teraz @@ -2590,17 +2590,17 @@ Nie je vhodné ju používať. - + The file can not be shared because it was shared without sharing permission. Tento súbor nemožno zdieľať, lebo bol vyzdieľaný bez možnosti ďalšieho zdieľania. - + Users and Groups - + Public Links @@ -2870,22 +2870,22 @@ Nie je vhodné ju používať. Zdieľať s %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3178,38 +3178,38 @@ Nie je vhodné ju používať. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3299,84 +3299,89 @@ Nie je vhodné ju používať. Meno súboru je veľmi dlhé. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj @@ -3826,37 +3831,37 @@ Nie je vhodné ju používať. QObject - + in the future v budúcnosti - + %n day(s) ago pred %n dňompred %n dňamipred %n dňami - + %n hour(s) ago pred %n hodinoupred %n hodinamipred %n hodinami - + now teraz - + Less than a minute ago Menej ako pred minútou - + %n minute(s) ago pred %n minútoupred %n minútamipred %n minútami - + Some time ago Pred istým časom @@ -3870,57 +3875,57 @@ Nie je vhodné ju používať. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n rok%n roky%n rokov - + %n month(s) %n mesiac%n mesiace%n mesiacov - + %n day(s) %n deň%n dni%n dní - + %n hour(s) %n hodina%n hodiny%n hodín - + %n minute(s) %n minúta%n minúty%n minút - + %n second(s) %n sekunda%n sekundy%n sekúnd - + %1 %2 %1 %2 diff --git a/translations/client_sl.ts b/translations/client_sl.ts index f30d11203..a43055973 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -2601,17 +2601,17 @@ Uporaba ni priporočljiva. Pridobivanje največjega mogočega števila dovoljenj za souporabo prek strežnika ... - + The file can not be shared because it was shared without sharing permission. Datoteke ni mogoče dodeliti v souporabo, ker ni navedenih ustreznih dovoljenj. - + Users and Groups Uporabnik in skupine - + Public Links Javne povezave @@ -2881,22 +2881,22 @@ Uporaba ni priporočljiva. Omogoči souporabo z %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3189,38 +3189,38 @@ Uporaba ni priporočljiva. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3310,84 +3310,89 @@ Uporaba ni priporočljiva. Ime datoteke je predolgo. - + + Unresolved conflict. + + + + Stat failed. Določanje statističnih podatkov je spodletelo. - + Filename encoding is not valid Kodni zapis imena datoteke ni veljaven. - + Invalid characters, please rename "%1" Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir @@ -3837,37 +3842,37 @@ Uporaba ni priporočljiva. QObject - + in the future v prihodnje - + %n day(s) ago pred %n dnevompred %n dnevomapred %n dnevipred %n dnevi - + %n hour(s) ago pred %n uropred %n uramapred %n uramipred %n urami - + now zdaj - + Less than a minute ago Pred manj kot minuto - + %n minute(s) ago pred %n minutopred %n minutamapred %n minutamipred %n minutami - + Some time ago Pred nekaj časa @@ -3881,57 +3886,57 @@ Uporaba ni priporočljiva. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n leto%n leti%n leta%n let - + %n month(s) %n mesec%n meseca%n meseci%n mesecev - + %n day(s) %n dan%n dneva%n dnevi%n dni - + %n hour(s) %n ura%n uri%n ure%n ur - + %n minute(s) %n minuta%n minuti%n minute%n minut - + %n second(s) %n sekunda%n sekundi%n sekunde%n sekund - + %1 %2 %1 %2 diff --git a/translations/client_sr.ts b/translations/client_sr.ts index f4f719da2..f0d5fee72 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -2590,17 +2590,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. Фајл се не може делити јер је подељен без дозволе за поновно дељење. - + Users and Groups - + Public Links @@ -2870,22 +2870,22 @@ It is not advisable to use it. Подели са %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3178,38 +3178,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3299,84 +3299,89 @@ It is not advisable to use it. Назив фајла је предугачак. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid Кодирање назива фајла није исправно - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор @@ -3826,37 +3831,37 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago пре мање од минут - + %n minute(s) ago - + Some time ago пре неког времена @@ -3870,57 +3875,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_sv.ts b/translations/client_sv.ts index f40df35f0..d0085e94f 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -2594,17 +2594,17 @@ Det är inte lämpligt använda den. Tar emot maximal delningsbehörighet från servern... - + The file can not be shared because it was shared without sharing permission. Filen kan inte delas eftersom den delades utan delningsrättigheter. - + Users and Groups Användare och grupper - + Public Links Publika länkar @@ -2874,22 +2874,22 @@ Det är inte lämpligt använda den. Dela med %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3182,38 +3182,38 @@ Det är inte lämpligt använda den. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3303,84 +3303,89 @@ Det är inte lämpligt använda den. Filnamnet är för långt. - + + Unresolved conflict. + + + + Stat failed. Stat misslyckades. - + Filename encoding is not valid Filnamnskodning är inte giltig - + Invalid characters, please rename "%1" Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan @@ -3830,37 +3835,37 @@ Det är inte lämpligt använda den. QObject - + in the future i framtiden - + %n day(s) ago %n dag sedan%n dag(ar) sedan - + %n hour(s) ago %n timme sedan%n timmar sedan - + now nu - + Less than a minute ago Mindre än en minut sedan - + %n minute(s) ago %n minut sedan%n minut(er) sedan - + Some time ago En stund sedan @@ -3874,57 +3879,57 @@ Det är inte lämpligt använda den. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n år%n år - + %n month(s) %n månad(er)%n månad(er) - + %n day(s) %n dag(ar)%n dag(ar) - + %n hour(s) %n timme/timmar%n timme/timmar - + %n minute(s) %n minut(er)%n minut(er) - + %n second(s) %n sekund(er)%n sekund(er) - + %1 %2 %1 %2 diff --git a/translations/client_th.ts b/translations/client_th.ts index 2847c2a64..00086dd88 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -2602,17 +2602,17 @@ It is not advisable to use it. คุณใช้สิทธิ์การเรียกข้อมูลจากเซิฟเวอร์สูงสุดแล้ว - + The file can not be shared because it was shared without sharing permission. ไม่สามารถแชร์ไฟล์เพราะไม่ได้รับอนุญาต - + Users and Groups ผู้ใช้และกลุ่ม - + Public Links ลิงค์สาธารณะ @@ -2882,22 +2882,22 @@ It is not advisable to use it. แชร์กับ %1 - + I shared something with you ฉันแชร์บางอย่างกับคุณ - + Share... แชร์... - + Copy private link to clipboard คัดลอกลิงค์ส่วนตัวไปยังคลิปบอร์ด - + Send private link by email... ส่งลิงค์ส่วนตัวทางอีเมล... @@ -3188,39 +3188,39 @@ It is not advisable to use it. โฟลเดอร์มีโฟลเดอร์ย่อยเกินไป - + Conflict: Server version downloaded, local copy renamed and not uploaded. เกิดปัญหาความขัดแย้ง: สำเนาที่อยู่ในเครื่องถูกเปลี่ยนชื่อและไม่ได้ถูกอัพโหลด เลยไม่ตรงกับข้อมูลที่เคยอัพโหลดไว้ในเซิฟเวอร์ - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป - + There is insufficient space available on the server for some uploads. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ @@ -3310,84 +3310,89 @@ It is not advisable to use it. ชื่อไฟล์ยาวเกินไป - + + Unresolved conflict. + + + + Stat failed. สถิติความล้มเหลว - + Filename encoding is not valid การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - + Invalid characters, please rename "%1" ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา @@ -3837,37 +3842,37 @@ It is not advisable to use it. QObject - + in the future ในอนาคต - + %n day(s) ago %n วันที่ผ่านมา - + %n hour(s) ago %n ชั่วโมงที่ผ่านมา - + now ตอนนี้ - + Less than a minute ago ไม่กี่นาทีที่ผ่านมา - + %n minute(s) ago %n นาทีที่ผ่านมา - + Some time ago บางเวลาที่ผ่านมา @@ -3881,57 +3886,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 กิกะไบต์ - + %L1 MB %L1 เมกะไบต์ - + %L1 KB %L1 กิโลไบต์ - + %L1 B %L1 B - + %n year(s) %n ปี - + %n month(s) %n เดือน - + %n day(s) %n วัน - + %n hour(s) %n ชั่วโมง - + %n minute(s) %n นาที - + %n second(s) %n วินาที - + %1 %2 %1 %2 diff --git a/translations/client_tr.ts b/translations/client_tr.ts index b6358df27..dd21ab148 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -2591,17 +2591,17 @@ Kullanmanız önerilmez. Sunucudan mümkün olan en fazla paylaşım hakları alınıyor... - + The file can not be shared because it was shared without sharing permission. Dosya paylaşılamaz, çünkü sizinle paylaşım izni olmaksızın paylaşılmış. - + Users and Groups Kullanıcılar ve Gruplar - + Public Links Herkese açık bağlantılar @@ -2871,22 +2871,22 @@ Kullanmanız önerilmez. %1 ile paylaş - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3179,38 +3179,38 @@ Kullanmanız önerilmez. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3300,84 +3300,89 @@ Kullanmanız önerilmez. Dosya adı çok uzun. - + + Unresolved conflict. + + + + Stat failed. Durum alma başarısız. - + Filename encoding is not valid Dosya adı kodlaması geçerli değil - + Invalid characters, please rename "%1" Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak @@ -3827,37 +3832,37 @@ Kullanmanız önerilmez. QObject - + in the future gelecekte - + %n day(s) ago %n gün önce%n gün önce - + %n hour(s) ago %n saat önce%n saat önce - + now şimdi - + Less than a minute ago 1 dakika önce - + %n minute(s) ago %n dakika önce%n dakika önce - + Some time ago Bir süre önce @@ -3871,57 +3876,57 @@ Kullanmanız önerilmez. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n yıl%n yıl - + %n month(s) %n ay%n ay - + %n day(s) %n gün%n gün - + %n hour(s) %n saat%n saat - + %n minute(s) %n dakika%n dakika - + %n second(s) %n saniye%n saniye - + %1 %2 %1 %2 diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 2b616ee1c..c9c98be6f 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -2589,17 +2589,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. Цей файл неможливо поширити, бо ним поділилися без права на поширення. - + Users and Groups Користувачі та групи - + Public Links @@ -2869,22 +2869,22 @@ It is not advisable to use it. Поділитися з %1 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3177,38 +3177,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3298,84 +3298,89 @@ It is not advisable to use it. Шлях до файлу занадто довгий. - + + Unresolved conflict. + + + + Stat failed. - + Filename encoding is not valid Кодування файлу не припустиме - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело @@ -3825,37 +3830,37 @@ It is not advisable to use it. QObject - + in the future у майбутньому - + %n day(s) ago - + %n hour(s) ago - + now зараз - + Less than a minute ago Менше хвилини тому - + %n minute(s) ago - + Some time ago Деякий час тому @@ -3869,57 +3874,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 ГБ - + %L1 MB %L1 МБ - + %L1 KB %L1 КБ - + %L1 B %L1 Б - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 649f5c94c..f5d3c5c54 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -2600,17 +2600,17 @@ It is not advisable to use it. 从服务器获取最大可能的共享权限... - + The file can not be shared because it was shared without sharing permission. 未分配共享权限,无法共享文件。 - + Users and Groups 用户和组 - + Public Links 公共链接 @@ -2880,22 +2880,22 @@ It is not advisable to use it. 使用 %1 共享 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3188,38 +3188,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3309,84 +3309,89 @@ It is not advisable to use it. 文件名过长。 - + + Unresolved conflict. + + + + Stat failed. 状态失败。 - + Filename encoding is not valid 文件名编码无效 - + Invalid characters, please rename "%1" 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source @@ -3836,37 +3841,37 @@ It is not advisable to use it. QObject - + in the future 将来 - + %n day(s) ago %n 天前 - + %n hour(s) ago %n 小时前 - + now 现在 - + Less than a minute ago 刚刚 - + %n minute(s) ago %n 分钟前 - + Some time ago 之前 @@ -3880,57 +3885,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) %n 年 - + %n month(s) %n 月 - + %n day(s) %n 天 - + %n hour(s) %n 小时 - + %n minute(s) %n 分 - + %n second(s) %n 秒 - + %1 %2 %1 %2 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 6d9633cd4..5951c444f 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -2592,17 +2592,17 @@ It is not advisable to use it. - + The file can not be shared because it was shared without sharing permission. 這個檔案無法被分享,並沒有分享此檔案的權限。 - + Users and Groups - + Public Links @@ -2872,22 +2872,22 @@ It is not advisable to use it. 與 %1 分享 - + I shared something with you - + Share... - + Copy private link to clipboard - + Send private link by email... @@ -3180,38 +3180,38 @@ It is not advisable to use it. - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3301,84 +3301,89 @@ It is not advisable to use it. 檔案名稱太長了。 - + + Unresolved conflict. + + + + Stat failed. 狀態失敗。 - + Filename encoding is not valid 檔案名稱編碼是無效的 - + Invalid characters, please rename "%1" 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 @@ -3828,37 +3833,37 @@ It is not advisable to use it. QObject - + in the future - + %n day(s) ago - + %n hour(s) ago - + now - + Less than a minute ago 不到一分鐘前 - + %n minute(s) ago - + Some time ago 前一段時間 @@ -3872,57 +3877,57 @@ It is not advisable to use it. Utility - + %L1 GB %L1 GB - + %L1 MB %L1 MB - + %L1 KB %L1 KB - + %L1 B %L1 B - + %n year(s) - + %n month(s) - + %n day(s) - + %n hour(s) - + %n minute(s) - + %n second(s) - + %1 %2 %1 %2 From a9bf7a90ed33d1f5f500ace5d8bdc88deb9c02d8 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 20 Sep 2017 14:44:33 +0200 Subject: [PATCH 078/166] ChangeLog: More 2.4.0 changes --- ChangeLog | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8826cc8e3..146c49bf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,32 +3,39 @@ ChangeLog version 2.4.0 (2017-0X-XX) * OAuth2 authentication support +* Server URL: Update configuration in case of permanent redirection (#5972) * Sharing: Add support for multiple public link shares (#5655) -* Sharing: Add option to copy/email direct links (#5627, #5023) +* Sharing: Add option to copy/email private links (#5627, #5023) * Sharing: Add option "show file listing" (#5837) * Sharing: Show warning that links are public * Sharing: Many UI improvements -* Sharing: Make "can edit" partially checked sometimes #5642 +* Sharing: Make "can edit" partially checked sometimes (#5642) * Wizards: Never propose an existing folder for syncing (#5597) * Wizard: Don't show last page anymore, go to settings directly (#5726) * Settings Dialog: Display the user server avatar +* Gui: Allow to add multiple sync folder connection of the same folder * Selective Sync: Open sub folder context menu (#5596) * Selective Sync: Skip excluded folders when reading db * Selective Sync: Remove local files of unselected folder despite other modified files (#5783) -* Exclude list: remove .htaccess form list of excluded files -* Sync Issues: More functional error view including filters and conflicts #5516 +* Excludes: remove .htaccess form list of excluded files +* Excludes: Hardcode desktop.ini +* Excludes: Allow escaping "#" (#6012) +* Sync Issues: More functional error view including filters and conflicts (#5516) * Discovery: Increase the MAX_DEPTH and show deep folders as ignored * Downloads: Remove empty temporary if disk space full (#5746) * Downloads: Re-trigger folder discovery on 404 * When creating explorer favorite use more specific windows functions (#5690) +* Create favorite also in folder wizard (#455) +* Use the application icon for the sidebar favorite (#2446) * AccountSettings: Triggering log in re-ask about previously rejected certificates #5819 * Added owncloudcmd bandwidth limit parameter (#5707) * AccountSettings: Sync with clean discovery on Ctrl-F6 (#5666) * Sync: Dynamic sizing of chunks in chunked uploads for improved big file upload performance -* Sync: Introduce overall errors that are not tied to a file #5746 +* Sync: Introduce overall errors that are not tied to a file (#5746) * Sync: Better messaging for 507 Insufficient Storage #5537 * Sync: Create conflicts by comparing the hash of files with identical mtime/size #5589 * Sync: Blacklist: Don't let errors become warnings #5516 +* Sync: Check etag again after active sync (#4116) * macOS: Finder sidebar icon #296 * Reduce memory usage * Fix at least one memory leak @@ -45,9 +52,21 @@ version 2.4.0 (2017-0X-XX) * HTTP: Support HTTP2 when built and running with Qt 5.9.x (Official packages still on Qt 5.6.x) * owncloudcmd: Don't start if connection or auth fails #5692 * Overlays: Consider also the "shared by me" as shared (#4788) +* Overlays: Fix different case paths not matching (#5257) * Switch 3rdparty/json usage to Qt5's QJson (#5710) * OpenSSL: Don't require directly, only via Qt * Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) +* Linux Overlay Icons: fix branded nemo and caja shell integration (#5966) +* csync: Switch build from C to C++ +* csync: Refactor a lot to use common data structures to save memory and memory copying +* csync: Switch some data structures to Qt data structures +* Http credentials: Fix behavior for bad password #5989 +* Credentials: Use per-account keychain entries #5830 +* Compliation: Enable DEP & ASLR on Windows +* SyncJournalDB: Fall back to DELETE journal mode if WAL mode does not seem to work (#5723) +* Compilation: Remove Qt 4 code +* Quota: PropagateUpload: Model of remote quota, avoid some uploads #5537 +* Wizard: Handle url-shortener redirects #5954 version 2.3.3 (2017-08-29) * Chunking NG: Don't use old chunking on new DAV endpoint (#5855) From eafb00664954b39c5d2d58e6e0ca6df3b88ca22a Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 21 Sep 2017 02:18:30 +0200 Subject: [PATCH 079/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_pt_BR.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 9f8c723b2..0e453d632 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -138,6 +138,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index c5d0b9bbb..989a5cb96 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -3309,7 +3309,7 @@ It is not advisable to use it. Unresolved conflict. - + Conflito não solucionado. From bf77ac6ba56f746b57f9be4cc9f8163f4fea7eea Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 17:18:37 +0200 Subject: [PATCH 080/166] Remove settingsdialog.cpp.Rbt431 --- src/gui/settingsdialog.cpp.Rbt431 | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/gui/settingsdialog.cpp.Rbt431 diff --git a/src/gui/settingsdialog.cpp.Rbt431 b/src/gui/settingsdialog.cpp.Rbt431 deleted file mode 100644 index e69de29bb..000000000 From 797f8087bc28dda53e57df1e22240677d2d56863 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 16:49:41 +0200 Subject: [PATCH 081/166] Gui: Use lambda instead of QSignalMapper It's simpler, and QSignalMapper is deprecated in Qt 5.10 --- src/gui/folderman.h | 1 - src/gui/owncloudgui.cpp | 18 +++--------------- src/gui/owncloudgui.h | 5 ----- 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/gui/folderman.h b/src/gui/folderman.h index a504cc99b..5802789c8 100644 --- a/src/gui/folderman.h +++ b/src/gui/folderman.h @@ -24,7 +24,6 @@ #include "folderwatcher.h" #include "syncfileitem.h" -class QSignalMapper; class TestFolderMan; namespace OCC { diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index e5a398c8e..225cbf3b3 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #if defined(Q_OS_X11) #include @@ -63,8 +62,6 @@ ownCloudGui::ownCloudGui(Application *parent) , _contextMenuVisibleOsx(false) , _recentActionsMenu(0) , _qdbusmenuWorkaround(false) - , _folderOpenActionMapper(new QSignalMapper(this)) - , _recentItemsMapper(new QSignalMapper(this)) , _app(parent) { _tray = new Systray(); @@ -81,13 +78,6 @@ ownCloudGui::ownCloudGui(Application *parent) _tray->show(); - /* use a signal mapper to map the open requests to the alias names */ - connect(_folderOpenActionMapper, SIGNAL(mapped(QString)), - this, SLOT(slotFolderOpenAction(QString))); - - connect(_recentItemsMapper, SIGNAL(mapped(QString)), - this, SLOT(slotOpenPath(QString))); - ProgressDispatcher *pd = ProgressDispatcher::instance(); connect(pd, SIGNAL(progressInfo(QString, ProgressInfo)), this, SLOT(slotUpdateProgress(QString, ProgressInfo))); @@ -337,9 +327,8 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men } QAction *action = new QAction(tr("Open folder '%1'").arg(folder->shortGuiLocalPath()), menu); - connect(action, SIGNAL(triggered()), _folderOpenActionMapper, SLOT(map())); - _folderOpenActionMapper->setMapping(action, folder->alias()); - menu->addAction(action); + auto alias = folder->alias(); + connect(action, &QAction::triggered, this, [this, alias] { this->slotFolderOpenAction(alias); }); } menu->addSeparator(); @@ -805,8 +794,7 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo & if (f) { QString fullPath = f->path() + '/' + progress._lastCompletedItem._file; if (QFile(fullPath).exists()) { - _recentItemsMapper->setMapping(action, fullPath); - connect(action, SIGNAL(triggered()), _recentItemsMapper, SLOT(map())); + connect(action, &QAction::triggered, this, [this, fullPath] { this->slotOpenPath(fullPath); }); } else { action->setEnabled(false); } diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index c24fa173a..da4ae38a2 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -144,10 +143,6 @@ private: QAction *_actionCrash; QList _recentItemsActions; - - QSignalMapper *_folderOpenActionMapper; - QSignalMapper *_recentItemsMapper; - Application *_app; }; From 1218a38f2cce56a23a60f7bf8fc09d3cdb544228 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 17:14:33 +0200 Subject: [PATCH 082/166] Include from code that connect to signal that uses it The new connection syntax will need that --- src/libsync/abstractnetworkjob.cpp | 1 + src/libsync/account.cpp | 1 + src/libsync/creds/httpcredentials.cpp | 1 + 3 files changed, 3 insertions(+) diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index f5f4b9d62..14f8b1dda 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "networkjobs.h" #include "account.h" diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 61a99c065..589b8e5bd 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -32,6 +32,7 @@ #include #include #include +#include namespace OCC { diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 54a73fbf2..a40890424 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -31,6 +31,7 @@ #include "syncengine.h" #include "creds/credentialscommon.h" #include "creds/httpcredentials.h" +#include using namespace QKeychain; From c4e51247d833d4f08df7036fe4a7823a6f6e0ff6 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 16:50:34 +0200 Subject: [PATCH 083/166] test/stub: add some call required by the next patches As we use the new connection syntax in folderman.cpp, some more symbol need to be mocked --- test/stub.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/stub.cpp b/test/stub.cpp index eb244c1e0..d987b2412 100644 --- a/test/stub.cpp +++ b/test/stub.cpp @@ -1,5 +1,7 @@ // stub to prevent linker error #include "accountmanager.h" -OCC::AccountManager *OCC::AccountManager::instance() { return 0; } +OCC::AccountManager *OCC::AccountManager::instance() { return static_cast(new QObject); } void OCC::AccountManager::saveAccountState(AccountState *) { } void OCC::AccountManager::save(bool saveCredentials) { Q_UNUSED(saveCredentials); } +void OCC::AccountManager::accountRemoved(OCC::AccountState*) { } +const QMetaObject OCC::AccountManager::staticMetaObject = QObject::staticMetaObject; From ff4213b59f223b60e87e70af2db6201986f76df8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 10:14:48 +0200 Subject: [PATCH 084/166] Use the Qt5 connection syntax (automated with clazy) This is motivated by the fact that QMetaObject::noralizeSignature takes 7.35% CPU of the LargeSyncBench. (Mostly from ABstractNetworkJob::setupConnections and PropagateUploadFileV1::startNextChunk). It could be fixed by using normalized signature in the connection statement, but i tought it was a good oportunity to modernize the code. This commit only contains calls that were automatically converted with clazy. --- .../qtsingleapplication/qtlocalpeer.cpp | 2 +- .../qtsingleapplication.cpp | 6 +- .../qtsinglecoreapplication.cpp | 4 +- src/cmd/cmd.cpp | 2 +- src/common/checksums.cpp | 8 +-- src/gui/accountmanager.cpp | 8 +-- src/gui/accountsettings.cpp | 72 +++++++++---------- src/gui/accountstate.cpp | 14 ++-- src/gui/activitylistmodel.cpp | 4 +- src/gui/activitywidget.cpp | 46 ++++++------ src/gui/application.cpp | 62 ++++++++-------- src/gui/authenticationdialog.cpp | 4 +- .../creds/shibboleth/shibbolethuserjob.cpp | 2 +- .../creds/shibboleth/shibbolethwebview.cpp | 8 +-- src/gui/creds/shibbolethcredentials.cpp | 18 ++--- src/gui/folder.cpp | 42 +++++------ src/gui/folderman.cpp | 62 ++++++++-------- src/gui/folderstatusmodel.cpp | 26 +++---- src/gui/folderwatcher_linux.cpp | 2 +- src/gui/folderwizard.cpp | 32 ++++----- src/gui/generalsettings.cpp | 22 +++--- src/gui/ignorelisteditor.cpp | 8 +-- src/gui/issueswidget.cpp | 28 ++++---- src/gui/lockwatcher.cpp | 4 +- src/gui/logbrowser.cpp | 14 ++-- src/gui/networksettings.cpp | 34 ++++----- src/gui/notificationwidget.cpp | 4 +- src/gui/ocsshareejob.cpp | 2 +- src/gui/ocssharejob.cpp | 2 +- src/gui/owncloudgui.cpp | 66 ++++++++--------- src/gui/owncloudsetupwizard.cpp | 36 +++++----- src/gui/protocolwidget.cpp | 8 +-- src/gui/proxyauthhandler.cpp | 10 +-- src/gui/quotainfo.cpp | 10 +-- src/gui/selectivesyncdialog.cpp | 24 +++---- src/gui/servernotificationhandler.cpp | 4 +- src/gui/settingsdialog.cpp | 28 ++++---- src/gui/sharedialog.cpp | 10 +-- src/gui/sharee.cpp | 4 +- src/gui/sharelinkwidget.cpp | 44 ++++++------ src/gui/sharemanager.cpp | 36 +++++----- src/gui/shareusergroupwidget.cpp | 42 +++++------ src/gui/socketapi.cpp | 8 +-- src/gui/sslbutton.cpp | 4 +- src/gui/sslerrordialog.cpp | 8 +-- src/gui/synclogdialog.cpp | 2 +- src/gui/tooltipupdater.cpp | 4 +- src/gui/updater/ocupdater.cpp | 28 ++++---- src/gui/wizard/owncloudadvancedsetuppage.cpp | 12 ++-- .../wizard/owncloudconnectionmethoddialog.cpp | 6 +- src/gui/wizard/owncloudsetuppage.cpp | 6 +- .../wizard/owncloudshibbolethcredspage.cpp | 8 +-- src/gui/wizard/owncloudwizard.cpp | 20 +++--- src/gui/wizard/owncloudwizardresultpage.cpp | 4 +- src/libsync/abstractnetworkjob.cpp | 20 +++--- src/libsync/account.cpp | 16 ++--- src/libsync/bandwidthmanager.cpp | 20 +++--- src/libsync/connectionvalidator.cpp | 18 ++--- src/libsync/creds/httpcredentials.cpp | 18 ++--- src/libsync/discoveryphase.cpp | 44 ++++++------ src/libsync/networkjobs.cpp | 24 +++---- src/libsync/owncloudpropagator.cpp | 14 ++-- src/libsync/owncloudpropagator.h | 2 +- src/libsync/progressdispatcher.cpp | 2 +- src/libsync/propagatedownload.cpp | 28 ++++---- src/libsync/propagateremotedelete.cpp | 2 +- src/libsync/propagateremotemkdir.cpp | 4 +- src/libsync/propagateremotemove.cpp | 2 +- src/libsync/propagateupload.cpp | 28 ++++---- src/libsync/propagateuploadng.cpp | 28 ++++---- src/libsync/propagateuploadv1.cpp | 6 +- src/libsync/syncengine.cpp | 40 +++++------ src/libsync/syncfilestatustracker.cpp | 14 ++-- 73 files changed, 652 insertions(+), 652 deletions(-) diff --git a/src/3rdparty/qtsingleapplication/qtlocalpeer.cpp b/src/3rdparty/qtsingleapplication/qtlocalpeer.cpp index 33cca898a..3ebba6e6f 100644 --- a/src/3rdparty/qtsingleapplication/qtlocalpeer.cpp +++ b/src/3rdparty/qtsingleapplication/qtlocalpeer.cpp @@ -101,7 +101,7 @@ bool QtLocalPeer::isClient() bool res = server->listen(socketName); if (!res) qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); - QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); + QObject::connect(server, &QLocalServer::newConnection, this, &QtLocalPeer::receiveConnection); return false; } diff --git a/src/3rdparty/qtsingleapplication/qtsingleapplication.cpp b/src/3rdparty/qtsingleapplication/qtsingleapplication.cpp index 9610937de..844824cb4 100644 --- a/src/3rdparty/qtsingleapplication/qtsingleapplication.cpp +++ b/src/3rdparty/qtsingleapplication/qtsingleapplication.cpp @@ -95,7 +95,7 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char * *pids = 0; pidPeer = new QtLocalPeer(this, appId + QLatin1Char('-') + QString::number(QCoreApplication::applicationPid())); - connect(pidPeer, SIGNAL(messageReceived(QString,QObject*)), SIGNAL(messageReceived(QString,QObject*))); + connect(pidPeer, &QtLocalPeer::messageReceived, this, &QtSingleApplication::messageReceived); pidPeer->isClient(); lockfile.unlock(); } @@ -169,9 +169,9 @@ void QtSingleApplication::setActivationWindow(QWidget *aw, bool activateOnMessag if (!pidPeer) return; if (activateOnMessage) - connect(pidPeer, SIGNAL(messageReceived(QString,QObject*)), this, SLOT(activateWindow())); + connect(pidPeer, &QtLocalPeer::messageReceived, this, &QtSingleApplication::activateWindow); else - disconnect(pidPeer, SIGNAL(messageReceived(QString,QObject*)), this, SLOT(activateWindow())); + disconnect(pidPeer, &QtLocalPeer::messageReceived, this, &QtSingleApplication::activateWindow); } diff --git a/src/3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp b/src/3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp index 25a511f6c..e34fd6328 100644 --- a/src/3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp +++ b/src/3rdparty/qtsingleapplication/qtsinglecoreapplication.cpp @@ -37,7 +37,7 @@ QtSingleCoreApplication::QtSingleCoreApplication(int &argc, char **argv) { peer = new QtLocalPeer(this); block = false; - connect(peer, SIGNAL(messageReceived(QString)), SIGNAL(messageReceived(QString))); + connect(peer, &QtLocalPeer::messageReceived, this, &QtSingleCoreApplication::messageReceived); } @@ -45,7 +45,7 @@ QtSingleCoreApplication::QtSingleCoreApplication(const QString &appId, int &argc : QCoreApplication(argc, argv) { peer = new QtLocalPeer(this, appId); - connect(peer, SIGNAL(messageReceived(QString)), SIGNAL(messageReceived(QString))); + connect(peer, &QtLocalPeer::messageReceived, this, &QtSingleCoreApplication::messageReceived); } diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index d8d836ecf..b8116b919 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -512,7 +512,7 @@ restart_sync: engine.setNetworkLimits(options.uplimit, options.downlimit); QObject::connect(&engine, &SyncEngine::finished, [&app](bool result) { app.exit(result ? EXIT_SUCCESS : EXIT_FAILURE); }); - QObject::connect(&engine, SIGNAL(transmissionProgress(ProgressInfo)), &cmd, SLOT(transmissionProgressSlot())); + QObject::connect(&engine, &SyncEngine::transmissionProgress, &cmd, &Cmd::transmissionProgressSlot); // Exclude lists diff --git a/src/common/checksums.cpp b/src/common/checksums.cpp index 6ffb57385..245bcaa37 100644 --- a/src/common/checksums.cpp +++ b/src/common/checksums.cpp @@ -151,8 +151,8 @@ QByteArray ComputeChecksum::checksumType() const void ComputeChecksum::start(const QString &filePath) { // Calculate the checksum in a different thread first. - connect(&_watcher, SIGNAL(finished()), - this, SLOT(slotCalculationDone()), + connect(&_watcher, &QFutureWatcherBase::finished, + this, &ComputeChecksum::slotCalculationDone, Qt::UniqueConnection); _watcher.setFuture(QtConcurrent::run(ComputeChecksum::computeNow, filePath, checksumType())); } @@ -208,8 +208,8 @@ void ValidateChecksumHeader::start(const QString &filePath, const QByteArray &ch auto calculator = new ComputeChecksum(this); calculator->setChecksumType(_expectedChecksumType); - connect(calculator, SIGNAL(done(QByteArray, QByteArray)), - SLOT(slotChecksumCalculated(QByteArray, QByteArray))); + connect(calculator, &ComputeChecksum::done, + this, &ValidateChecksumHeader::slotChecksumCalculated); calculator->start(filePath); } diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index a62e1f30f..38a0ff185 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -319,8 +319,8 @@ AccountPtr AccountManager::createAccount() { AccountPtr acc = Account::create(); acc->setSslErrorHandler(new SslDialogErrorHandler); - connect(acc.data(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *)), - ProxyAuthHandler::instance(), SLOT(handleProxyAuthenticationRequired(QNetworkProxy, QAuthenticator *))); + connect(acc.data(), &Account::proxyAuthenticationRequired, + ProxyAuthHandler::instance(), &ProxyAuthHandler::handleProxyAuthenticationRequired); return acc; } @@ -359,8 +359,8 @@ QString AccountManager::generateFreeAccountId() const void AccountManager::addAccountState(AccountState *accountState) { QObject::connect(accountState->account().data(), - SIGNAL(wantsAccountSaved(Account *)), - SLOT(saveAccount(Account *))); + &Account::wantsAccountSaved, + this, &AccountManager::saveAccount); AccountStatePtr ptr(accountState); _accounts << ptr; diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index f40a38889..8183d4b8f 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -139,41 +139,41 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) ui->_folderList->installEventFilter(mouseCursorChanger); createAccountToolbox(); - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), - SLOT(slotAccountAdded(AccountState *))); - connect(ui->_folderList, SIGNAL(customContextMenuRequested(QPoint)), - this, SLOT(slotCustomContextMenuRequested(QPoint))); - connect(ui->_folderList, SIGNAL(clicked(const QModelIndex &)), - this, SLOT(slotFolderListClicked(const QModelIndex &))); - connect(ui->_folderList, SIGNAL(expanded(QModelIndex)), this, SLOT(refreshSelectiveSyncStatus())); - connect(ui->_folderList, SIGNAL(collapsed(QModelIndex)), this, SLOT(refreshSelectiveSyncStatus())); - connect(ui->selectiveSyncNotification, SIGNAL(linkActivated(QString)), - this, SLOT(slotLinkActivated(QString))); - connect(_model, SIGNAL(suggestExpand(QModelIndex)), ui->_folderList, SLOT(expand(QModelIndex))); - connect(_model, SIGNAL(dirtyChanged()), this, SLOT(refreshSelectiveSyncStatus())); + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &AccountSettings::slotAccountAdded); + connect(ui->_folderList, &QWidget::customContextMenuRequested, + this, &AccountSettings::slotCustomContextMenuRequested); + connect(ui->_folderList, &QAbstractItemView::clicked, + this, &AccountSettings::slotFolderListClicked); + connect(ui->_folderList, &QTreeView::expanded, this, &AccountSettings::refreshSelectiveSyncStatus); + connect(ui->_folderList, &QTreeView::collapsed, this, &AccountSettings::refreshSelectiveSyncStatus); + connect(ui->selectiveSyncNotification, &QLabel::linkActivated, + this, &AccountSettings::slotLinkActivated); + connect(_model, &FolderStatusModel::suggestExpand, ui->_folderList, &QTreeView::expand); + connect(_model, &FolderStatusModel::dirtyChanged, this, &AccountSettings::refreshSelectiveSyncStatus); refreshSelectiveSyncStatus(); - connect(_model, SIGNAL(rowsInserted(QModelIndex, int, int)), - this, SLOT(refreshSelectiveSyncStatus())); + connect(_model, &QAbstractItemModel::rowsInserted, + this, &AccountSettings::refreshSelectiveSyncStatus); QAction *syncNowAction = new QAction(this); syncNowAction->setShortcut(QKeySequence(Qt::Key_F6)); - connect(syncNowAction, SIGNAL(triggered()), SLOT(slotScheduleCurrentFolder())); + connect(syncNowAction, &QAction::triggered, this, &AccountSettings::slotScheduleCurrentFolder); addAction(syncNowAction); QAction *syncNowWithRemoteDiscovery = new QAction(this); syncNowWithRemoteDiscovery->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_F6)); - connect(syncNowWithRemoteDiscovery, SIGNAL(triggered()), SLOT(slotScheduleCurrentFolderForceRemoteDiscovery())); + connect(syncNowWithRemoteDiscovery, &QAction::triggered, this, &AccountSettings::slotScheduleCurrentFolderForceRemoteDiscovery); addAction(syncNowWithRemoteDiscovery); - connect(ui->selectiveSyncApply, SIGNAL(clicked()), _model, SLOT(slotApplySelectiveSync())); - connect(ui->selectiveSyncCancel, SIGNAL(clicked()), _model, SLOT(resetFolders())); - connect(ui->bigFolderApply, SIGNAL(clicked(bool)), _model, SLOT(slotApplySelectiveSync())); - connect(ui->bigFolderSyncAll, SIGNAL(clicked(bool)), _model, SLOT(slotSyncAllPendingBigFolders())); - connect(ui->bigFolderSyncNone, SIGNAL(clicked(bool)), _model, SLOT(slotSyncNoPendingBigFolders())); + connect(ui->selectiveSyncApply, &QAbstractButton::clicked, _model, &FolderStatusModel::slotApplySelectiveSync); + connect(ui->selectiveSyncCancel, &QAbstractButton::clicked, _model, &FolderStatusModel::resetFolders); + connect(ui->bigFolderApply, &QAbstractButton::clicked, _model, &FolderStatusModel::slotApplySelectiveSync); + connect(ui->bigFolderSyncAll, &QAbstractButton::clicked, _model, &FolderStatusModel::slotSyncAllPendingBigFolders); + connect(ui->bigFolderSyncNone, &QAbstractButton::clicked, _model, &FolderStatusModel::slotSyncNoPendingBigFolders); - connect(FolderMan::instance(), SIGNAL(folderListChanged(Folder::Map)), _model, SLOT(resetFolders())); - connect(this, SIGNAL(folderChanged()), _model, SLOT(resetFolders())); + connect(FolderMan::instance(), &FolderMan::folderListChanged, _model, &FolderStatusModel::resetFolders); + connect(this, &AccountSettings::folderChanged, _model, &FolderStatusModel::resetFolders); QColor color = palette().highlight().color(); @@ -184,8 +184,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) connect(_accountState, &AccountState::stateChanged, this, &AccountSettings::slotAccountStateChanged); slotAccountStateChanged(); - connect(&_quotaInfo, SIGNAL(quotaUpdated(qint64, qint64)), - this, SLOT(slotUpdateQuota(qint64, qint64))); + connect(&_quotaInfo, &QuotaInfo::quotaUpdated, + this, &AccountSettings::slotUpdateQuota); } @@ -194,15 +194,15 @@ void AccountSettings::createAccountToolbox() QMenu *menu = new QMenu(); _addAccountAction = new QAction(tr("Add new"), this); menu->addAction(_addAccountAction); - connect(_addAccountAction, SIGNAL(triggered(bool)), SLOT(slotOpenAccountWizard())); + connect(_addAccountAction, &QAction::triggered, this, &AccountSettings::slotOpenAccountWizard); _toggleSignInOutAction = new QAction(tr("Log out"), this); - connect(_toggleSignInOutAction, SIGNAL(triggered(bool)), SLOT(slotToggleSignInState())); + connect(_toggleSignInOutAction, &QAction::triggered, this, &AccountSettings::slotToggleSignInState); menu->addAction(_toggleSignInOutAction); QAction *action = new QAction(tr("Remove"), this); menu->addAction(action); - connect(action, SIGNAL(triggered(bool)), SLOT(slotDeleteAccount())); + connect(action, &QAction::triggered, this, &AccountSettings::slotDeleteAccount); ui->_accountToolbox->setText(tr("Account") + QLatin1Char(' ')); ui->_accountToolbox->setMenu(menu); @@ -268,7 +268,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) menu->setAttribute(Qt::WA_DeleteOnClose); QAction *ac = menu->addAction(tr("Open folder")); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotOpenCurrentLocalSubFolder())); + connect(ac, &QAction::triggered, this, &AccountSettings::slotOpenCurrentLocalSubFolder); QString fileName = _model->data(index, FolderStatusDelegate::FolderPathRole).toString(); if (!QFile::exists(fileName)) { @@ -294,12 +294,12 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) menu->setAttribute(Qt::WA_DeleteOnClose); QAction *ac = menu->addAction(tr("Open folder")); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotOpenCurrentFolder())); + connect(ac, &QAction::triggered, this, &AccountSettings::slotOpenCurrentFolder); if (!ui->_folderList->isExpanded(index)) { ac = menu->addAction(tr("Choose what to sync")); ac->setEnabled(folderConnected); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(doExpand())); + connect(ac, &QAction::triggered, this, &AccountSettings::doExpand); } if (!folderPaused) { @@ -308,14 +308,14 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) ac->setText(tr("Restart sync")); } ac->setEnabled(folderConnected); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotForceSyncCurrentFolder())); + connect(ac, &QAction::triggered, this, &AccountSettings::slotForceSyncCurrentFolder); } ac = menu->addAction(folderPaused ? tr("Resume sync") : tr("Pause sync")); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotEnableCurrentFolder())); + connect(ac, &QAction::triggered, this, &AccountSettings::slotEnableCurrentFolder); ac = menu->addAction(tr("Remove folder sync connection")); - connect(ac, SIGNAL(triggered(bool)), this, SLOT(slotRemoveCurrentFolder())); + connect(ac, &QAction::triggered, this, &AccountSettings::slotRemoveCurrentFolder); menu->exec(tv->mapToGlobal(pos)); } @@ -361,8 +361,8 @@ void AccountSettings::slotAddFolder() FolderWizard *folderWizard = new FolderWizard(_accountState->account(), this); - connect(folderWizard, SIGNAL(accepted()), SLOT(slotFolderWizardAccepted())); - connect(folderWizard, SIGNAL(rejected()), SLOT(slotFolderWizardRejected())); + connect(folderWizard, &QDialog::accepted, this, &AccountSettings::slotFolderWizardAccepted); + connect(folderWizard, &QDialog::rejected, this, &AccountSettings::slotFolderWizardRejected); folderWizard->open(); } diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index a13b8c227..63ad88860 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -38,12 +38,12 @@ AccountState::AccountState(AccountPtr account) { qRegisterMetaType("AccountState*"); - connect(account.data(), SIGNAL(invalidCredentials()), - SLOT(slotInvalidCredentials())); - connect(account.data(), SIGNAL(credentialsFetched(AbstractCredentials *)), - SLOT(slotCredentialsFetched(AbstractCredentials *))); - connect(account.data(), SIGNAL(credentialsAsked(AbstractCredentials *)), - SLOT(slotCredentialsAsked(AbstractCredentials *))); + connect(account.data(), &Account::invalidCredentials, + this, &AccountState::slotInvalidCredentials); + connect(account.data(), &Account::credentialsFetched, + this, &AccountState::slotCredentialsFetched); + connect(account.data(), &Account::credentialsAsked, + this, &AccountState::slotCredentialsAsked); _timeSinceLastETagCheck.invalidate(); } @@ -242,7 +242,7 @@ void AccountState::slotConnectionValidatorResult(ConnectionValidator::Status sta qCInfo(lcAccountState) << "AccountState reconnection: delaying for" << _maintenanceToConnectedDelay << "ms"; _timeSinceMaintenanceOver.start(); - QTimer::singleShot(_maintenanceToConnectedDelay + 100, this, SLOT(checkConnectivity())); + QTimer::singleShot(_maintenanceToConnectedDelay + 100, this, &AccountState::checkConnectivity); return; } else if (_timeSinceMaintenanceOver.elapsed() < _maintenanceToConnectedDelay) { qCInfo(lcAccountState) << "AccountState reconnection: only" diff --git a/src/gui/activitylistmodel.cpp b/src/gui/activitylistmodel.cpp index f03153483..d4a6f0eb5 100644 --- a/src/gui/activitylistmodel.cpp +++ b/src/gui/activitylistmodel.cpp @@ -124,8 +124,8 @@ void ActivityListModel::startFetchJob(AccountState *s) return; } JsonApiJob *job = new JsonApiJob(s->account(), QLatin1String("ocs/v1.php/cloud/activity"), this); - QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)), - this, SLOT(slotActivitiesReceived(QJsonDocument, int))); + QObject::connect(job, &JsonApiJob::jsonReceived, + this, &ActivityListModel::slotActivitiesReceived); job->setProperty("AccountStatePtr", QVariant::fromValue>(s)); QList> params; diff --git a/src/gui/activitywidget.cpp b/src/gui/activitywidget.cpp index 3d1b9047a..9091b80bc 100644 --- a/src/gui/activitywidget.cpp +++ b/src/gui/activitywidget.cpp @@ -81,19 +81,19 @@ ActivityWidget::ActivityWidget(QWidget *parent) showLabels(); - connect(_model, SIGNAL(activityJobStatusCode(AccountState *, int)), - this, SLOT(slotAccountActivityStatus(AccountState *, int))); + connect(_model, &ActivityListModel::activityJobStatusCode, + this, &ActivityWidget::slotAccountActivityStatus); _copyBtn = _ui->_dialogButtonBox->addButton(tr("Copy"), QDialogButtonBox::ActionRole); _copyBtn->setToolTip(tr("Copy the activity list to the clipboard.")); - connect(_copyBtn, SIGNAL(clicked()), SIGNAL(copyToClipboard())); + connect(_copyBtn, &QAbstractButton::clicked, this, &ActivityWidget::copyToClipboard); - connect(_model, SIGNAL(rowsInserted(QModelIndex, int, int)), SIGNAL(rowsInserted())); + connect(_model, &QAbstractItemModel::rowsInserted, this, &ActivityWidget::rowsInserted); connect(_ui->_activityList, SIGNAL(activated(QModelIndex)), this, SLOT(slotOpenFile(QModelIndex))); - connect(&_removeTimer, SIGNAL(timeout()), this, SLOT(slotCheckToCleanWidgets())); + connect(&_removeTimer, &QTimer::timeout, this, &ActivityWidget::slotCheckToCleanWidgets); _removeTimer.setInterval(1000); } @@ -260,10 +260,10 @@ void ActivityWidget::slotBuildNotificationDisplay(const ActivityList &list) widget = _widgetForNotifId[activity.ident()]; } else { widget = new NotificationWidget(this); - connect(widget, SIGNAL(sendNotificationRequest(QString, QString, QByteArray)), - this, SLOT(slotSendNotificationRequest(QString, QString, QByteArray))); - connect(widget, SIGNAL(requestCleanupAndBlacklist(Activity)), - this, SLOT(slotRequestCleanupAndBlacklist(Activity))); + connect(widget, &NotificationWidget::sendNotificationRequest, + this, &ActivityWidget::slotSendNotificationRequest); + connect(widget, &NotificationWidget::requestCleanupAndBlacklist, + this, &ActivityWidget::slotRequestCleanupAndBlacklist); _notificationsLayout->addWidget(widget); // _ui->_notifyScroll->setMinimumHeight( widget->height()); @@ -386,8 +386,8 @@ void ActivityWidget::slotSendNotificationRequest(const QString &accountName, con QUrl l(link); job->setLinkAndVerb(l, verb); job->setWidget(theSender); - connect(job, SIGNAL(networkError(QNetworkReply *)), - this, SLOT(slotNotifyNetworkError(QNetworkReply *))); + connect(job, &AbstractNetworkJob::networkError, + this, &ActivityWidget::slotNotifyNetworkError); connect(job, SIGNAL(jobFinished(QString, int)), this, SLOT(slotNotifyServerFinished(QString, int))); job->start(); @@ -515,32 +515,32 @@ ActivitySettings::ActivitySettings(QWidget *parent) hbox->addWidget(_tab); _activityWidget = new ActivityWidget(this); _activityTabId = _tab->addTab(_activityWidget, Theme::instance()->applicationIcon(), tr("Server Activity")); - 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())); + connect(_activityWidget, &ActivityWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard); + connect(_activityWidget, &ActivityWidget::hideActivityTab, this, &ActivitySettings::setActivityTabHidden); + connect(_activityWidget, &ActivityWidget::guiLog, this, &ActivitySettings::guiLog); + connect(_activityWidget, &ActivityWidget::newNotification, this, &ActivitySettings::slotShowActivityTab); _protocolWidget = new ProtocolWidget(this); _protocolTabId = _tab->addTab(_protocolWidget, Theme::instance()->syncStateIcon(SyncResult::Success), tr("Sync Protocol")); - connect(_protocolWidget, SIGNAL(copyToClipboard()), this, SLOT(slotCopyToClipboard())); + connect(_protocolWidget, &ProtocolWidget::copyToClipboard, this, &ActivitySettings::slotCopyToClipboard); _issuesWidget = new IssuesWidget(this); _syncIssueTabId = _tab->addTab(_issuesWidget, Theme::instance()->syncStateIcon(SyncResult::Problem), QString()); slotShowIssueItemCount(0); // to display the label. - connect(_issuesWidget, SIGNAL(issueCountUpdated(int)), - this, SLOT(slotShowIssueItemCount(int))); - connect(_issuesWidget, SIGNAL(copyToClipboard()), - this, SLOT(slotCopyToClipboard())); + connect(_issuesWidget, &IssuesWidget::issueCountUpdated, + this, &ActivitySettings::slotShowIssueItemCount); + connect(_issuesWidget, &IssuesWidget::copyToClipboard, + this, &ActivitySettings::slotCopyToClipboard); // Add a progress indicator to spin if the acitivity list is updated. _progressIndicator = new QProgressIndicator(this); _tab->setCornerWidget(_progressIndicator); - connect(&_notificationCheckTimer, SIGNAL(timeout()), - this, SLOT(slotRegularNotificationCheck())); + connect(&_notificationCheckTimer, &QTimer::timeout, + this, &ActivitySettings::slotRegularNotificationCheck); // connect a model signal to stop the animation. - connect(_activityWidget, SIGNAL(rowsInserted()), _progressIndicator, SLOT(stopAnimation())); + connect(_activityWidget, &ActivityWidget::rowsInserted, _progressIndicator, &QProgressIndicator::stopAnimation); // We want the protocol be the default _tab->setCurrentIndex(1); diff --git a/src/gui/application.cpp b/src/gui/application.cpp index c3521a9b6..73f79d0b9 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -150,7 +150,7 @@ Application::Application(int &argc, char **argv) _folderManager.reset(new FolderMan); - connect(this, SIGNAL(messageReceived(QString, QObject *)), SLOT(slotParseMessage(QString, QObject *))); + connect(this, &SharedTools::QtSingleApplication::messageReceived, this, &Application::slotParseMessage); if (!AccountManager::instance()->restore()) { // If there is an error reading the account settings, try again @@ -176,7 +176,7 @@ Application::Application(int &argc, char **argv) setQuitOnLastWindowClosed(false); _theme->setSystrayUseMonoIcons(cfg.monoIcons()); - connect(_theme, SIGNAL(systrayUseMonoIconsChanged(bool)), SLOT(slotUseMonoIconsChanged(bool))); + connect(_theme, &Theme::systrayUseMonoIconsChanged, this, &Application::slotUseMonoIconsChanged); FolderMan::instance()->setupFolders(); _proxy.setupQtProxyFromConfig(); // folders have to be defined first, than we set up the Qt proxy. @@ -189,23 +189,23 @@ Application::Application(int &argc, char **argv) // Enable word wrapping of QInputDialog (#4197) setStyleSheet("QInputDialog QLabel { qproperty-wordWrap:1; }"); - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), - SLOT(slotAccountStateAdded(AccountState *))); - connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)), - SLOT(slotAccountStateRemoved(AccountState *))); + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &Application::slotAccountStateAdded); + connect(AccountManager::instance(), &AccountManager::accountRemoved, + this, &Application::slotAccountStateRemoved); foreach (auto ai, AccountManager::instance()->accounts()) { slotAccountStateAdded(ai.data()); } - connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, QString)), - _gui, SLOT(slotShowShareDialog(QString, QString))); + connect(FolderMan::instance()->socketApi(), &SocketApi::shareCommandReceived, + _gui.data(), &ownCloudGui::slotShowShareDialog); // startup procedure. - connect(&_checkConnectionTimer, SIGNAL(timeout()), this, SLOT(slotCheckConnection())); + connect(&_checkConnectionTimer, &QTimer::timeout, this, &Application::slotCheckConnection); _checkConnectionTimer.setInterval(ConnectionValidator::DefaultCallingIntervalMsec); // check for connection every 32 seconds. _checkConnectionTimer.start(); // Also check immediately - QTimer::singleShot(0, this, SLOT(slotCheckConnection())); + QTimer::singleShot(0, this, &Application::slotCheckConnection); // Can't use onlineStateChanged because it is always true on modern systems because of many interfaces connect(&_networkConfigurationManager, SIGNAL(configurationChanged(QNetworkConfiguration)), @@ -213,13 +213,13 @@ Application::Application(int &argc, char **argv) // Update checks UpdaterScheduler *updaterScheduler = new UpdaterScheduler(this); - connect(updaterScheduler, SIGNAL(updaterAnnouncement(QString, QString)), - _gui, SLOT(slotShowTrayMessage(QString, QString))); - connect(updaterScheduler, SIGNAL(requestRestart()), - _folderManager.data(), SLOT(slotScheduleAppRestart())); + connect(updaterScheduler, &UpdaterScheduler::updaterAnnouncement, + _gui.data(), &ownCloudGui::slotShowTrayMessage); + connect(updaterScheduler, &UpdaterScheduler::requestRestart, + _folderManager.data(), &FolderMan::slotScheduleAppRestart); // Cleanup at Quit. - connect(this, SIGNAL(aboutToQuit()), SLOT(slotCleanup())); + connect(this, &QCoreApplication::aboutToQuit, this, &Application::slotCleanup); } Application::~Application() @@ -237,16 +237,16 @@ Application::~Application() void Application::slotAccountStateRemoved(AccountState *accountState) { if (_gui) { - disconnect(accountState, SIGNAL(stateChanged(int)), - _gui, SLOT(slotAccountStateChanged())); - disconnect(accountState->account().data(), SIGNAL(serverVersionChanged(Account *, QString, QString)), - _gui, SLOT(slotTrayMessageIfServerUnsupported(Account *))); + disconnect(accountState, &AccountState::stateChanged, + _gui.data(), &ownCloudGui::slotAccountStateChanged); + disconnect(accountState->account().data(), &Account::serverVersionChanged, + _gui.data(), &ownCloudGui::slotTrayMessageIfServerUnsupported); } if (_folderManager) { - disconnect(accountState, SIGNAL(stateChanged(int)), - _folderManager.data(), SLOT(slotAccountStateChanged())); - disconnect(accountState->account().data(), SIGNAL(serverVersionChanged(Account *, QString, QString)), - _folderManager.data(), SLOT(slotServerVersionChanged(Account *))); + disconnect(accountState, &AccountState::stateChanged, + _folderManager.data(), &FolderMan::slotAccountStateChanged); + disconnect(accountState->account().data(), &Account::serverVersionChanged, + _folderManager.data(), &FolderMan::slotServerVersionChanged); } // if there is no more account, show the wizard. @@ -259,14 +259,14 @@ void Application::slotAccountStateRemoved(AccountState *accountState) void Application::slotAccountStateAdded(AccountState *accountState) { - connect(accountState, SIGNAL(stateChanged(int)), - _gui, SLOT(slotAccountStateChanged())); - connect(accountState->account().data(), SIGNAL(serverVersionChanged(Account *, QString, QString)), - _gui, SLOT(slotTrayMessageIfServerUnsupported(Account *))); - connect(accountState, SIGNAL(stateChanged(int)), - _folderManager.data(), SLOT(slotAccountStateChanged())); - connect(accountState->account().data(), SIGNAL(serverVersionChanged(Account *, QString, QString)), - _folderManager.data(), SLOT(slotServerVersionChanged(Account *))); + connect(accountState, &AccountState::stateChanged, + _gui.data(), &ownCloudGui::slotAccountStateChanged); + connect(accountState->account().data(), &Account::serverVersionChanged, + _gui.data(), &ownCloudGui::slotTrayMessageIfServerUnsupported); + connect(accountState, &AccountState::stateChanged, + _folderManager.data(), &FolderMan::slotAccountStateChanged); + connect(accountState->account().data(), &Account::serverVersionChanged, + _folderManager.data(), &FolderMan::slotServerVersionChanged); _gui->slotTrayMessageIfServerUnsupported(accountState->account().data()); } diff --git a/src/gui/authenticationdialog.cpp b/src/gui/authenticationdialog.cpp index bae0bcd13..80fea6321 100644 --- a/src/gui/authenticationdialog.cpp +++ b/src/gui/authenticationdialog.cpp @@ -40,8 +40,8 @@ AuthenticationDialog::AuthenticationDialog(const QString &realm, const QString & _password->setEchoMode(QLineEdit::Password); QDialogButtonBox *box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); - connect(box, SIGNAL(accepted()), this, SLOT(accept())); - connect(box, SIGNAL(rejected()), this, SLOT(reject())); + connect(box, &QDialogButtonBox::accepted, this, &QDialog::accept); + connect(box, &QDialogButtonBox::rejected, this, &QDialog::reject); lay->addWidget(box); } diff --git a/src/gui/creds/shibboleth/shibbolethuserjob.cpp b/src/gui/creds/shibboleth/shibbolethuserjob.cpp index 743643692..24c164b26 100644 --- a/src/gui/creds/shibboleth/shibbolethuserjob.cpp +++ b/src/gui/creds/shibboleth/shibbolethuserjob.cpp @@ -27,7 +27,7 @@ ShibbolethUserJob::ShibbolethUserJob(AccountPtr account, QObject *parent) : JsonApiJob(account, QLatin1String("ocs/v1.php/cloud/user"), parent) { setIgnoreCredentialFailure(true); - connect(this, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotJsonReceived(QJsonDocument, int))); + connect(this, &JsonApiJob::jsonReceived, this, &ShibbolethUserJob::slotJsonReceived); } void ShibbolethUserJob::slotJsonReceived(const QJsonDocument &json, int statusCode) diff --git a/src/gui/creds/shibboleth/shibbolethwebview.cpp b/src/gui/creds/shibboleth/shibbolethwebview.cpp index 64a1f7c35..dbcd340b6 100644 --- a/src/gui/creds/shibboleth/shibbolethwebview.cpp +++ b/src/gui/creds/shibboleth/shibbolethwebview.cpp @@ -63,10 +63,10 @@ ShibbolethWebView::ShibbolethWebView(AccountPtr account, QWidget *parent) setAttribute(Qt::WA_DeleteOnClose); QWebPage *page = new UserAgentWebPage(this); - connect(page, SIGNAL(loadStarted()), - this, SLOT(slotLoadStarted())); - connect(page, SIGNAL(loadFinished(bool)), - this, SLOT(slotLoadFinished(bool))); + connect(page, &QWebPage::loadStarted, + this, &ShibbolethWebView::slotLoadStarted); + connect(page, &QWebPage::loadFinished, + this, &ShibbolethWebView::slotLoadFinished); // Make sure to accept the same SSL certificate issues as the regular QNAM we use for syncing QObject::connect(page->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply *, QList)), diff --git a/src/gui/creds/shibbolethcredentials.cpp b/src/gui/creds/shibbolethcredentials.cpp index 6f5641b35..32b300833 100644 --- a/src/gui/creds/shibbolethcredentials.cpp +++ b/src/gui/creds/shibbolethcredentials.cpp @@ -79,7 +79,7 @@ void ShibbolethCredentials::setAccount(Account *account) // When constructed with a cookie (by the wizard), we usually don't know the // user name yet. Request it now from the server. if (_ready && _user.isEmpty()) { - QTimer::singleShot(1234, this, SLOT(slotFetchUser())); + QTimer::singleShot(1234, this, &ShibbolethCredentials::slotFetchUser); } } @@ -96,8 +96,8 @@ QString ShibbolethCredentials::user() const QNetworkAccessManager *ShibbolethCredentials::createQNAM() const { QNetworkAccessManager *qnam(new AccessManager); - connect(qnam, SIGNAL(finished(QNetworkReply *)), - this, SLOT(slotReplyFinished(QNetworkReply *))); + connect(qnam, &QNetworkAccessManager::finished, + this, &ShibbolethCredentials::slotReplyFinished); return qnam; } @@ -145,7 +145,7 @@ void ShibbolethCredentials::fetchFromKeychainHelper() job->setInsecureFallback(false); job->setKey(keychainKey(_url.toString(), user(), _keychainMigration ? QString() : _account->id())); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &ShibbolethCredentials::slotReadJobDone); job->start(); } @@ -210,7 +210,7 @@ void ShibbolethCredentials::slotFetchUser() // We must first do a request to webdav so the session is enabled. // (because for some reason we can't access the API without that.. a bug in the server maybe?) EntityExistsJob *job = new EntityExistsJob(_account->sharedFromThis(), _account->davPath(), this); - connect(job, SIGNAL(exists(QNetworkReply *)), this, SLOT(slotFetchUserHelper())); + connect(job, &EntityExistsJob::exists, this, &ShibbolethCredentials::slotFetchUserHelper); job->setIgnoreCredentialFailure(true); job->start(); } @@ -218,7 +218,7 @@ void ShibbolethCredentials::slotFetchUser() void ShibbolethCredentials::slotFetchUserHelper() { ShibbolethUserJob *job = new ShibbolethUserJob(_account->sharedFromThis(), this); - connect(job, SIGNAL(userFetched(QString)), this, SLOT(slotUserFetched(QString))); + connect(job, &ShibbolethUserJob::userFetched, this, &ShibbolethCredentials::slotUserFetched); job->start(); } @@ -308,9 +308,9 @@ void ShibbolethCredentials::showLoginWindow() jar->clearSessionCookies(); _browser = new ShibbolethWebView(_account->sharedFromThis()); - connect(_browser, SIGNAL(shibbolethCookieReceived(QNetworkCookie)), - this, SLOT(onShibbolethCookieReceived(QNetworkCookie)), Qt::QueuedConnection); - connect(_browser, SIGNAL(rejected()), this, SLOT(slotBrowserRejected())); + connect(_browser.data(), &ShibbolethWebView::shibbolethCookieReceived, + this, &ShibbolethCredentials::onShibbolethCookieReceived, Qt::QueuedConnection); + connect(_browser.data(), &ShibbolethWebView::rejected, this, &ShibbolethCredentials::slotBrowserRejected); ownCloudGui::raiseDialog(_browser); } diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 864c496bf..a6e6e3171 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -82,32 +82,32 @@ Folder::Folder(const FolderDefinition &definition, if (!setIgnoredFiles()) qCWarning(lcFolder, "Could not read system exclude file"); - connect(_accountState.data(), SIGNAL(isConnectedChanged()), this, SIGNAL(canSyncChanged())); - connect(_engine.data(), SIGNAL(rootEtag(QString)), this, SLOT(etagRetreivedFromSyncEngine(QString))); + connect(_accountState.data(), &AccountState::isConnectedChanged, this, &Folder::canSyncChanged); + connect(_engine.data(), &SyncEngine::rootEtag, this, &Folder::etagRetreivedFromSyncEngine); - connect(_engine.data(), SIGNAL(started()), SLOT(slotSyncStarted()), Qt::QueuedConnection); - connect(_engine.data(), SIGNAL(finished(bool)), SLOT(slotSyncFinished(bool)), Qt::QueuedConnection); - connect(_engine.data(), SIGNAL(csyncUnavailable()), SLOT(slotCsyncUnavailable()), Qt::QueuedConnection); + connect(_engine.data(), &SyncEngine::started, this, &Folder::slotSyncStarted, Qt::QueuedConnection); + connect(_engine.data(), &SyncEngine::finished, this, &Folder::slotSyncFinished, Qt::QueuedConnection); + connect(_engine.data(), &SyncEngine::csyncUnavailable, this, &Folder::slotCsyncUnavailable, Qt::QueuedConnection); //direct connection so the message box is blocking the sync. - connect(_engine.data(), SIGNAL(aboutToRemoveAllFiles(SyncFileItem::Direction, bool *)), - SLOT(slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool *))); - connect(_engine.data(), SIGNAL(aboutToRestoreBackup(bool *)), - SLOT(slotAboutToRestoreBackup(bool *))); - connect(_engine.data(), SIGNAL(transmissionProgress(ProgressInfo)), this, SLOT(slotTransmissionProgress(ProgressInfo))); - connect(_engine.data(), SIGNAL(itemCompleted(const SyncFileItemPtr &)), - this, SLOT(slotItemCompleted(const SyncFileItemPtr &))); - connect(_engine.data(), SIGNAL(newBigFolder(QString, bool)), - this, SLOT(slotNewBigFolderDiscovered(QString, bool))); - connect(_engine.data(), SIGNAL(seenLockedFile(QString)), FolderMan::instance(), SLOT(slotSyncOnceFileUnlocks(QString))); - connect(_engine.data(), SIGNAL(aboutToPropagate(SyncFileItemVector &)), - SLOT(slotLogPropagationStart())); + connect(_engine.data(), &SyncEngine::aboutToRemoveAllFiles, + this, &Folder::slotAboutToRemoveAllFiles); + connect(_engine.data(), &SyncEngine::aboutToRestoreBackup, + this, &Folder::slotAboutToRestoreBackup); + connect(_engine.data(), &SyncEngine::transmissionProgress, this, &Folder::slotTransmissionProgress); + connect(_engine.data(), &SyncEngine::itemCompleted, + this, &Folder::slotItemCompleted); + connect(_engine.data(), &SyncEngine::newBigFolder, + this, &Folder::slotNewBigFolderDiscovered); + connect(_engine.data(), &SyncEngine::seenLockedFile, FolderMan::instance(), &FolderMan::slotSyncOnceFileUnlocks); + connect(_engine.data(), &SyncEngine::aboutToPropagate, + this, &Folder::slotLogPropagationStart); connect(_engine.data(), &SyncEngine::syncError, this, &Folder::slotSyncError); _scheduleSelfTimer.setSingleShot(true); _scheduleSelfTimer.setInterval(SyncEngine::minimumFileAgeForUpload); - connect(&_scheduleSelfTimer, SIGNAL(timeout()), - SLOT(slotScheduleThisFolder())); + connect(&_scheduleSelfTimer, &QTimer::timeout, + this, &Folder::slotScheduleThisFolder); } Folder::~Folder() @@ -288,7 +288,7 @@ void Folder::slotRunEtagJob() _requestEtagJob = new RequestEtagJob(account, remotePath(), this); _requestEtagJob->setTimeout(60 * 1000); // check if the etag is different when retrieved - QObject::connect(_requestEtagJob, SIGNAL(etagRetreived(QString)), this, SLOT(etagRetreived(QString))); + QObject::connect(_requestEtagJob.data(), &RequestEtagJob::etagRetreived, this, &Folder::etagRetreived); FolderMan::instance()->slotScheduleETagJob(alias(), _requestEtagJob); // The _requestEtagJob is auto deleting itself on finish. Our guard pointer _requestEtagJob will then be null. } @@ -789,7 +789,7 @@ void Folder::slotSyncFinished(bool success) // file system change notifications are ignored for that folder. And it takes // some time under certain conditions to make the file system notifications // all come in. - QTimer::singleShot(200, this, SLOT(slotEmitFinishedDelayed())); + QTimer::singleShot(200, this, &Folder::slotEmitFinishedDelayed); _lastSyncDuration = _timeSinceLastSyncStart.elapsed(); _timeSinceLastSyncDone.start(); diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index 475eb4f1a..6418cd70b 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -60,24 +60,24 @@ FolderMan::FolderMan(QObject *parent) int polltime = cfg.remotePollInterval(); qCInfo(lcFolderMan) << "setting remote poll timer interval to" << polltime << "msec"; _etagPollTimer.setInterval(polltime); - QObject::connect(&_etagPollTimer, SIGNAL(timeout()), this, SLOT(slotEtagPollTimerTimeout())); + QObject::connect(&_etagPollTimer, &QTimer::timeout, this, &FolderMan::slotEtagPollTimerTimeout); _etagPollTimer.start(); _startScheduledSyncTimer.setSingleShot(true); - connect(&_startScheduledSyncTimer, SIGNAL(timeout()), - SLOT(slotStartScheduledFolderSync())); + connect(&_startScheduledSyncTimer, &QTimer::timeout, + this, &FolderMan::slotStartScheduledFolderSync); _timeScheduler.setInterval(5000); _timeScheduler.setSingleShot(false); - connect(&_timeScheduler, SIGNAL(timeout()), - SLOT(slotScheduleFolderByTime())); + connect(&_timeScheduler, &QTimer::timeout, + this, &FolderMan::slotScheduleFolderByTime); _timeScheduler.start(); - connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)), - SLOT(slotRemoveFoldersForAccount(AccountState *))); + connect(AccountManager::instance(), &AccountManager::accountRemoved, + this, &FolderMan::slotRemoveFoldersForAccount); - connect(_lockWatcher.data(), SIGNAL(fileUnlocked(QString)), - SLOT(slotWatchedFileUnlocked(QString))); + connect(_lockWatcher.data(), &LockWatcher::fileUnlocked, + this, &FolderMan::slotWatchedFileUnlocked); } FolderMan *FolderMan::instance() @@ -109,18 +109,18 @@ void FolderMan::unloadFolder(Folder *f) } _folderMap.remove(f->alias()); - disconnect(f, SIGNAL(syncStarted()), - this, SLOT(slotFolderSyncStarted())); - disconnect(f, SIGNAL(syncFinished(SyncResult)), - this, SLOT(slotFolderSyncFinished(SyncResult))); - disconnect(f, SIGNAL(syncStateChange()), - this, SLOT(slotForwardFolderSyncStateChange())); - disconnect(f, SIGNAL(syncPausedChanged(Folder *, bool)), - this, SLOT(slotFolderSyncPaused(Folder *, bool))); + disconnect(f, &Folder::syncStarted, + this, &FolderMan::slotFolderSyncStarted); + disconnect(f, &Folder::syncFinished, + this, &FolderMan::slotFolderSyncFinished); + disconnect(f, &Folder::syncStateChange, + this, &FolderMan::slotForwardFolderSyncStateChange); + disconnect(f, &Folder::syncPausedChanged, + this, &FolderMan::slotFolderSyncPaused); disconnect(&f->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)), _socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus))); - disconnect(f, SIGNAL(watchedFileChangedExternally(QString)), - &f->syncEngine().syncFileStatusTracker(), SLOT(slotPathTouched(QString))); + disconnect(f, &Folder::watchedFileChangedExternally, + &f->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::slotPathTouched); } int FolderMan::unloadAndDeleteAllFolders() @@ -163,7 +163,7 @@ void FolderMan::registerFolderMonitor(Folder *folder) // Connect the pathChanged signal, which comes with the changed path, // to the signal mapper which maps to the folder alias. The changed path // is lost this way, but we do not need it for the current implementation. - connect(fw, SIGNAL(pathChanged(QString)), folder, SLOT(slotWatchedPathChanged(QString))); + connect(fw, &FolderWatcher::pathChanged, folder, &Folder::slotWatchedPathChanged); _folderWatchers.insert(folder->alias(), fw); } @@ -584,7 +584,7 @@ void FolderMan::scheduleFolderNext(Folder *f) void FolderMan::slotScheduleETagJob(const QString & /*alias*/, RequestEtagJob *job) { - QObject::connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotEtagJobDestroyed(QObject *))); + QObject::connect(job, &QObject::destroyed, this, &FolderMan::slotEtagJobDestroyed); QMetaObject::invokeMethod(this, "slotRunOneEtagJob", Qt::QueuedConnection); // maybe: add to queue } @@ -954,15 +954,15 @@ Folder *FolderMan::addFolderInternal(FolderDefinition folderDefinition, } // See matching disconnects in unloadFolder(). - connect(folder, SIGNAL(syncStarted()), SLOT(slotFolderSyncStarted())); - connect(folder, SIGNAL(syncFinished(SyncResult)), SLOT(slotFolderSyncFinished(SyncResult))); - connect(folder, SIGNAL(syncStateChange()), SLOT(slotForwardFolderSyncStateChange())); - connect(folder, SIGNAL(syncPausedChanged(Folder *, bool)), SLOT(slotFolderSyncPaused(Folder *, bool))); - connect(folder, SIGNAL(canSyncChanged()), SLOT(slotFolderCanSyncChanged())); + connect(folder, &Folder::syncStarted, this, &FolderMan::slotFolderSyncStarted); + connect(folder, &Folder::syncFinished, this, &FolderMan::slotFolderSyncFinished); + connect(folder, &Folder::syncStateChange, this, &FolderMan::slotForwardFolderSyncStateChange); + connect(folder, &Folder::syncPausedChanged, this, &FolderMan::slotFolderSyncPaused); + connect(folder, &Folder::canSyncChanged, this, &FolderMan::slotFolderCanSyncChanged); connect(&folder->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)), _socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus))); - connect(folder, SIGNAL(watchedFileChangedExternally(QString)), - &folder->syncEngine().syncFileStatusTracker(), SLOT(slotPathTouched(QString))); + connect(folder, &Folder::watchedFileChangedExternally, + &folder->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::slotPathTouched); registerFolderMonitor(folder); return folder; @@ -1032,10 +1032,10 @@ void FolderMan::removeFolder(Folder *f) unloadFolder(f); if (currentlyRunning) { // We want to schedule the next folder once this is done - connect(f, SIGNAL(syncFinished(SyncResult)), - SLOT(slotFolderSyncFinished(SyncResult))); + connect(f, &Folder::syncFinished, + this, &FolderMan::slotFolderSyncFinished); // Let the folder delete itself when done. - connect(f, SIGNAL(syncFinished(SyncResult)), f, SLOT(deleteLater())); + connect(f, &Folder::syncFinished, f, &QObject::deleteLater); } else { delete f; } diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index d0c48eddc..0c593ebdb 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -67,10 +67,10 @@ void FolderStatusModel::setAccountState(const AccountState *accountState) _folders.clear(); _accountState = accountState; - connect(FolderMan::instance(), SIGNAL(folderSyncStateChange(Folder *)), - SLOT(slotFolderSyncStateChange(Folder *)), Qt::UniqueConnection); - connect(FolderMan::instance(), SIGNAL(scheduleQueueChanged()), - SLOT(slotFolderScheduleQueueChanged()), Qt::UniqueConnection); + connect(FolderMan::instance(), &FolderMan::folderSyncStateChange, + this, &FolderStatusModel::slotFolderSyncStateChange, Qt::UniqueConnection); + connect(FolderMan::instance(), &FolderMan::scheduleQueueChanged, + this, &FolderStatusModel::slotFolderScheduleQueueChanged, Qt::UniqueConnection); auto folders = FolderMan::instance()->map(); foreach (auto f, folders) { @@ -85,8 +85,8 @@ void FolderStatusModel::setAccountState(const AccountState *accountState) info._checked = Qt::PartiallyChecked; _folders << info; - connect(f, SIGNAL(progressInfo(ProgressInfo)), this, SLOT(slotSetProgress(ProgressInfo)), Qt::UniqueConnection); - connect(f, SIGNAL(newBigFolderDiscovered(QString)), this, SLOT(slotNewBigFolder()), Qt::UniqueConnection); + connect(f, &Folder::progressInfo, this, &FolderStatusModel::slotSetProgress, Qt::UniqueConnection); + connect(f, &Folder::newBigFolderDiscovered, this, &FolderStatusModel::slotNewBigFolder, Qt::UniqueConnection); } // Sort by header text @@ -556,12 +556,12 @@ void FolderStatusModel::fetchMore(const QModelIndex &parent) << "http://owncloud.org/ns:size" << "http://owncloud.org/ns:permissions"); job->setTimeout(60 * 1000); - connect(job, SIGNAL(directoryListingSubfolders(QStringList)), - SLOT(slotUpdateDirectories(QStringList))); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), - this, SLOT(slotLscolFinishedWithError(QNetworkReply *))); - connect(job, SIGNAL(directoryListingIterated(const QString &, const QMap &)), - this, SLOT(slotGatherPermissions(const QString &, const QMap &))); + connect(job, &LsColJob::directoryListingSubfolders, + this, &FolderStatusModel::slotUpdateDirectories); + connect(job, &LsColJob::finishedWithError, + this, &FolderStatusModel::slotLscolFinishedWithError); + connect(job, &LsColJob::directoryListingIterated, + this, &FolderStatusModel::slotGatherPermissions); job->start(); @@ -570,7 +570,7 @@ void FolderStatusModel::fetchMore(const QModelIndex &parent) // Show 'fetching data...' hint after a while. _fetchingItems[persistentIndex].start(); - QTimer::singleShot(1000, this, SLOT(slotShowFetchProgress())); + QTimer::singleShot(1000, this, &FolderStatusModel::slotShowFetchProgress); } void FolderStatusModel::slotGatherPermissions(const QString &href, const QMap &map) diff --git a/src/gui/folderwatcher_linux.cpp b/src/gui/folderwatcher_linux.cpp index 5d2d4e7fd..f0e0eb0e4 100644 --- a/src/gui/folderwatcher_linux.cpp +++ b/src/gui/folderwatcher_linux.cpp @@ -34,7 +34,7 @@ FolderWatcherPrivate::FolderWatcherPrivate(FolderWatcher *p, const QString &path _fd = inotify_init(); if (_fd != -1) { _socket.reset(new QSocketNotifier(_fd, QSocketNotifier::Read)); - connect(_socket.data(), SIGNAL(activated(int)), SLOT(slotReceivedNotification(int))); + connect(_socket.data(), &QSocketNotifier::activated, this, &FolderWatcherPrivate::slotReceivedNotification); } else { qCWarning(lcFolderWatcher) << "notify_init() failed: " << strerror(errno); } diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 9c0128f59..2a244badd 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -62,7 +62,7 @@ FolderWizardLocalPath::FolderWizardLocalPath(const AccountPtr &account) { _ui.setupUi(this); registerField(QLatin1String("sourceFolder*"), _ui.localFolderLineEdit); - connect(_ui.localFolderChooseBtn, SIGNAL(clicked()), this, SLOT(slotChooseLocalFolder())); + connect(_ui.localFolderChooseBtn, &QAbstractButton::clicked, this, &FolderWizardLocalPath::slotChooseLocalFolder); _ui.localFolderChooseBtn->setToolTip(tr("Click to select a local folder to sync.")); QString defaultPath = QDir::homePath() + QLatin1Char('/') + Theme::instance()->appName(); @@ -151,15 +151,15 @@ FolderWizardRemotePath::FolderWizardRemotePath(const AccountPtr &account) _ui.folderTreeWidget->setSortingEnabled(true); _ui.folderTreeWidget->sortByColumn(0, Qt::AscendingOrder); - connect(_ui.addFolderButton, SIGNAL(clicked()), SLOT(slotAddRemoteFolder())); - connect(_ui.refreshButton, SIGNAL(clicked()), SLOT(slotRefreshFolders())); - connect(_ui.folderTreeWidget, SIGNAL(itemExpanded(QTreeWidgetItem *)), SLOT(slotItemExpanded(QTreeWidgetItem *))); - connect(_ui.folderTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), SLOT(slotCurrentItemChanged(QTreeWidgetItem *))); - connect(_ui.folderEntry, SIGNAL(textEdited(QString)), SLOT(slotFolderEntryEdited(QString))); + connect(_ui.addFolderButton, &QAbstractButton::clicked, this, &FolderWizardRemotePath::slotAddRemoteFolder); + connect(_ui.refreshButton, &QAbstractButton::clicked, this, &FolderWizardRemotePath::slotRefreshFolders); + connect(_ui.folderTreeWidget, &QTreeWidget::itemExpanded, this, &FolderWizardRemotePath::slotItemExpanded); + connect(_ui.folderTreeWidget, &QTreeWidget::currentItemChanged, this, &FolderWizardRemotePath::slotCurrentItemChanged); + connect(_ui.folderEntry, &QLineEdit::textEdited, this, &FolderWizardRemotePath::slotFolderEntryEdited); _lscolTimer.setInterval(500); _lscolTimer.setSingleShot(true); - connect(&_lscolTimer, SIGNAL(timeout()), SLOT(slotLsColFolderEntry())); + connect(&_lscolTimer, &QTimer::timeout, this, &FolderWizardRemotePath::slotLsColFolderEntry); _ui.folderTreeWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); // Make sure that there will be a scrollbar when the contents is too wide @@ -200,7 +200,7 @@ void FolderWizardRemotePath::slotCreateRemoteFolder(const QString &folder) /* check the owncloud configuration file and query the ownCloud */ connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); - connect(job, SIGNAL(networkError(QNetworkReply *)), SLOT(slotHandleMkdirNetworkError(QNetworkReply *))); + connect(job, &AbstractNetworkJob::networkError, this, &FolderWizardRemotePath::slotHandleMkdirNetworkError); job->start(); } @@ -373,10 +373,10 @@ void FolderWizardRemotePath::slotLsColFolderEntry() // No error handling, no updating, we do this manually // because of extra logic in the typed-path case. disconnect(job, 0, this, 0); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), - SLOT(slotTypedPathError(QNetworkReply *))); - connect(job, SIGNAL(directoryListingSubfolders(QStringList)), - SLOT(slotTypedPathFound(QStringList))); + connect(job, &LsColJob::finishedWithError, + this, &FolderWizardRemotePath::slotTypedPathError); + connect(job, &LsColJob::directoryListingSubfolders, + this, &FolderWizardRemotePath::slotTypedPathFound); } void FolderWizardRemotePath::slotTypedPathFound(const QStringList &subpaths) @@ -404,10 +404,10 @@ LsColJob *FolderWizardRemotePath::runLsColJob(const QString &path) { LsColJob *job = new LsColJob(_account, path, this); job->setProperties(QList() << "resourcetype"); - connect(job, SIGNAL(directoryListingSubfolders(QStringList)), - SLOT(slotUpdateDirectories(QStringList))); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), - SLOT(slotHandleLsColNetworkError(QNetworkReply *))); + connect(job, &LsColJob::directoryListingSubfolders, + this, &FolderWizardRemotePath::slotUpdateDirectories); + connect(job, &LsColJob::finishedWithError, + this, &FolderWizardRemotePath::slotHandleLsColNetworkError); job->start(); return job; diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index d298b6cae..5a035c4c2 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -42,11 +42,11 @@ GeneralSettings::GeneralSettings(QWidget *parent) { _ui->setupUi(this); - connect(_ui->desktopNotificationsCheckBox, SIGNAL(toggled(bool)), - SLOT(slotToggleOptionalDesktopNotifications(bool))); + connect(_ui->desktopNotificationsCheckBox, &QAbstractButton::toggled, + this, &GeneralSettings::slotToggleOptionalDesktopNotifications); _ui->autostartCheckBox->setChecked(Utility::hasLaunchOnStartup(Theme::instance()->appName())); - connect(_ui->autostartCheckBox, SIGNAL(toggled(bool)), SLOT(slotToggleLaunchOnStartup(bool))); + connect(_ui->autostartCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::slotToggleLaunchOnStartup); // setup about section QString about = Theme::instance()->about(); @@ -63,11 +63,11 @@ GeneralSettings::GeneralSettings(QWidget *parent) slotUpdateInfo(); // misc - connect(_ui->monoIconsCheckBox, SIGNAL(toggled(bool)), SLOT(saveMiscSettings())); - connect(_ui->crashreporterCheckBox, SIGNAL(toggled(bool)), SLOT(saveMiscSettings())); - connect(_ui->newFolderLimitCheckBox, SIGNAL(toggled(bool)), SLOT(saveMiscSettings())); + connect(_ui->monoIconsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); + connect(_ui->crashreporterCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); + connect(_ui->newFolderLimitCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newFolderLimitSpinBox, SIGNAL(valueChanged(int)), SLOT(saveMiscSettings())); - connect(_ui->newExternalStorage, SIGNAL(toggled(bool)), SLOT(saveMiscSettings())); + connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); #ifndef WITH_CRASHREPORTER _ui->crashreporterCheckBox->setVisible(false); @@ -84,10 +84,10 @@ GeneralSettings::GeneralSettings(QWidget *parent) // is no point in offering an option _ui->monoIconsCheckBox->setVisible(Theme::instance()->monoIconsAvailable()); - connect(_ui->ignoredFilesButton, SIGNAL(clicked()), SLOT(slotIgnoreFilesEditor())); + connect(_ui->ignoredFilesButton, &QAbstractButton::clicked, this, &GeneralSettings::slotIgnoreFilesEditor); // accountAdded means the wizard was finished and the wizard might change some options. - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), this, SLOT(loadMiscSettings())); + connect(AccountManager::instance(), &AccountManager::accountAdded, this, &GeneralSettings::loadMiscSettings); } GeneralSettings::~GeneralSettings() @@ -124,8 +124,8 @@ void GeneralSettings::slotUpdateInfo() } if (updater) { - connect(updater, SIGNAL(downloadStateChanged()), SLOT(slotUpdateInfo()), Qt::UniqueConnection); - connect(_ui->restartButton, SIGNAL(clicked()), updater, SLOT(slotStartInstaller()), Qt::UniqueConnection); + connect(updater, &OCUpdater::downloadStateChanged, this, &GeneralSettings::slotUpdateInfo, Qt::UniqueConnection); + connect(_ui->restartButton, &QAbstractButton::clicked, updater, &OCUpdater::slotStartInstaller, Qt::UniqueConnection); connect(_ui->restartButton, SIGNAL(clicked()), qApp, SLOT(quit()), Qt::UniqueConnection); _ui->updateStateLabel->setText(updater->statusString()); _ui->restartButton->setVisible(updater->downloadState() == OCUpdater::DownloadComplete); diff --git a/src/gui/ignorelisteditor.cpp b/src/gui/ignorelisteditor.cpp index 3253b2b1e..a71a9cde8 100644 --- a/src/gui/ignorelisteditor.cpp +++ b/src/gui/ignorelisteditor.cpp @@ -54,11 +54,11 @@ IgnoreListEditor::IgnoreListEditor(QWidget *parent) readIgnoreFile(cfgFile.excludeFile(ConfigFile::SystemScope), true); readIgnoreFile(cfgFile.excludeFile(ConfigFile::UserScope), false); - connect(this, SIGNAL(accepted()), SLOT(slotUpdateLocalIgnoreList())); + connect(this, &QDialog::accepted, this, &IgnoreListEditor::slotUpdateLocalIgnoreList); ui->removePushButton->setEnabled(false); - connect(ui->tableWidget, SIGNAL(itemSelectionChanged()), SLOT(slotItemSelectionChanged())); - connect(ui->removePushButton, SIGNAL(clicked()), SLOT(slotRemoveCurrentItem())); - connect(ui->addPushButton, SIGNAL(clicked()), SLOT(slotAddPattern())); + connect(ui->tableWidget, &QTableWidget::itemSelectionChanged, this, &IgnoreListEditor::slotItemSelectionChanged); + connect(ui->removePushButton, &QAbstractButton::clicked, this, &IgnoreListEditor::slotRemoveCurrentItem); + connect(ui->addPushButton, &QAbstractButton::clicked, this, &IgnoreListEditor::slotAddPattern); ui->tableWidget->resizeColumnsToContents(); ui->tableWidget->horizontalHeader()->setResizeMode(patternCol, QHeaderView::Stretch); diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index 40f2822b7..267098541 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -44,30 +44,30 @@ IssuesWidget::IssuesWidget(QWidget *parent) { _ui->setupUi(this); - connect(ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, ProgressInfo)), - this, SLOT(slotProgressInfo(QString, ProgressInfo))); - connect(ProgressDispatcher::instance(), SIGNAL(itemCompleted(QString, SyncFileItemPtr)), - this, SLOT(slotItemCompleted(QString, SyncFileItemPtr))); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::progressInfo, + this, &IssuesWidget::slotProgressInfo); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::itemCompleted, + this, &IssuesWidget::slotItemCompleted); connect(ProgressDispatcher::instance(), &ProgressDispatcher::syncError, this, &IssuesWidget::addError); - connect(_ui->_treeWidget, SIGNAL(itemActivated(QTreeWidgetItem *, int)), SLOT(slotOpenFile(QTreeWidgetItem *, int))); - connect(_ui->copyIssuesButton, SIGNAL(clicked()), SIGNAL(copyToClipboard())); + connect(_ui->_treeWidget, &QTreeWidget::itemActivated, this, &IssuesWidget::slotOpenFile); + connect(_ui->copyIssuesButton, &QAbstractButton::clicked, this, &IssuesWidget::copyToClipboard); - connect(_ui->showIgnores, SIGNAL(toggled(bool)), SLOT(slotRefreshIssues())); - connect(_ui->showWarnings, SIGNAL(toggled(bool)), SLOT(slotRefreshIssues())); + connect(_ui->showIgnores, &QAbstractButton::toggled, this, &IssuesWidget::slotRefreshIssues); + connect(_ui->showWarnings, &QAbstractButton::toggled, this, &IssuesWidget::slotRefreshIssues); connect(_ui->filterAccount, SIGNAL(currentIndexChanged(int)), SLOT(slotRefreshIssues())); connect(_ui->filterAccount, SIGNAL(currentIndexChanged(int)), SLOT(slotUpdateFolderFilters())); connect(_ui->filterFolder, SIGNAL(currentIndexChanged(int)), SLOT(slotRefreshIssues())); for (auto account : AccountManager::instance()->accounts()) { slotAccountAdded(account.data()); } - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), - SLOT(slotAccountAdded(AccountState *))); - connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)), - SLOT(slotAccountRemoved(AccountState *))); - connect(FolderMan::instance(), SIGNAL(folderListChanged(Folder::Map)), - SLOT(slotUpdateFolderFilters())); + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &IssuesWidget::slotAccountAdded); + connect(AccountManager::instance(), &AccountManager::accountRemoved, + this, &IssuesWidget::slotAccountRemoved); + connect(FolderMan::instance(), &FolderMan::folderListChanged, + this, &IssuesWidget::slotUpdateFolderFilters); // Adjust copyToClipboard() when making changes here! diff --git a/src/gui/lockwatcher.cpp b/src/gui/lockwatcher.cpp index da83744a9..cf76c097b 100644 --- a/src/gui/lockwatcher.cpp +++ b/src/gui/lockwatcher.cpp @@ -27,8 +27,8 @@ static const int check_frequency = 20 * 1000; // ms LockWatcher::LockWatcher(QObject *parent) : QObject(parent) { - connect(&_timer, SIGNAL(timeout()), - SLOT(checkFiles())); + connect(&_timer, &QTimer::timeout, + this, &LockWatcher::checkFiles); _timer.start(check_frequency); } diff --git a/src/gui/logbrowser.cpp b/src/gui/logbrowser.cpp index 41b526a3c..a7303b0f0 100644 --- a/src/gui/logbrowser.cpp +++ b/src/gui/logbrowser.cpp @@ -76,7 +76,7 @@ LogBrowser::LogBrowser(QWidget *parent) // find button QPushButton *findBtn = new QPushButton; findBtn->setText(tr("&Find")); - connect(findBtn, SIGNAL(clicked()), this, SLOT(slotFind())); + connect(findBtn, &QAbstractButton::clicked, this, &LogBrowser::slotFind); toolLayout->addWidget(findBtn); // stretch @@ -87,12 +87,12 @@ LogBrowser::LogBrowser(QWidget *parent) // Debug logging _logDebugCheckBox = new QCheckBox(tr("&Capture debug messages") + " "); - connect(_logDebugCheckBox, SIGNAL(stateChanged(int)), SLOT(slotDebugCheckStateChanged(int))); + connect(_logDebugCheckBox, &QCheckBox::stateChanged, this, &LogBrowser::slotDebugCheckStateChanged); toolLayout->addWidget(_logDebugCheckBox); QDialogButtonBox *btnbox = new QDialogButtonBox; QPushButton *closeBtn = btnbox->addButton(QDialogButtonBox::Close); - connect(closeBtn, SIGNAL(clicked()), this, SLOT(close())); + connect(closeBtn, &QAbstractButton::clicked, this, &QWidget::close); mainLayout->addWidget(btnbox); @@ -101,14 +101,14 @@ LogBrowser::LogBrowser(QWidget *parent) _clearBtn->setText(tr("Clear")); _clearBtn->setToolTip(tr("Clear the log display.")); btnbox->addButton(_clearBtn, QDialogButtonBox::ActionRole); - connect(_clearBtn, SIGNAL(clicked()), this, SLOT(slotClearLog())); + connect(_clearBtn, &QAbstractButton::clicked, this, &LogBrowser::slotClearLog); // save Button _saveBtn = new QPushButton; _saveBtn->setText(tr("S&ave")); _saveBtn->setToolTip(tr("Save the log file to a file on disk for debugging.")); btnbox->addButton(_saveBtn, QDialogButtonBox::ActionRole); - connect(_saveBtn, SIGNAL(clicked()), this, SLOT(slotSave())); + connect(_saveBtn, &QAbstractButton::clicked, this, &LogBrowser::slotSave); setLayout(mainLayout); @@ -116,11 +116,11 @@ LogBrowser::LogBrowser(QWidget *parent) Logger::instance()->setLogWindowActivated(true); // Direct connection for log coming from this thread, and queued for the one in a different thread - connect(Logger::instance(), SIGNAL(logWindowLog(QString)), this, SLOT(slotNewLog(QString)), Qt::AutoConnection); + connect(Logger::instance(), &Logger::logWindowLog, this, &LogBrowser::slotNewLog, Qt::AutoConnection); QAction *showLogWindow = new QAction(this); showLogWindow->setShortcut(QKeySequence("F12")); - connect(showLogWindow, SIGNAL(triggered()), SLOT(close())); + connect(showLogWindow, &QAction::triggered, this, &QWidget::close); addAction(showLogWindow); ConfigFile cfg; diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index b135bbea2..eb19f7193 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -45,13 +45,13 @@ NetworkSettings::NetworkSettings(QWidget *parent) _ui->userLineEdit->setEnabled(true); _ui->passwordLineEdit->setEnabled(true); _ui->authWidgets->setEnabled(_ui->authRequiredcheckBox->isChecked()); - connect(_ui->authRequiredcheckBox, SIGNAL(toggled(bool)), - _ui->authWidgets, SLOT(setEnabled(bool))); + connect(_ui->authRequiredcheckBox, &QAbstractButton::toggled, + _ui->authWidgets, &QWidget::setEnabled); - connect(_ui->manualProxyRadioButton, SIGNAL(toggled(bool)), - _ui->manualSettings, SLOT(setEnabled(bool))); - connect(_ui->manualProxyRadioButton, SIGNAL(toggled(bool)), - _ui->typeComboBox, SLOT(setEnabled(bool))); + connect(_ui->manualProxyRadioButton, &QAbstractButton::toggled, + _ui->manualSettings, &QWidget::setEnabled); + connect(_ui->manualProxyRadioButton, &QAbstractButton::toggled, + _ui->typeComboBox, &QWidget::setEnabled); loadProxySettings(); loadBWLimitSettings(); @@ -59,18 +59,18 @@ NetworkSettings::NetworkSettings(QWidget *parent) // proxy connect(_ui->typeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(saveProxySettings())); connect(_ui->proxyButtonGroup, SIGNAL(buttonClicked(int)), SLOT(saveProxySettings())); - connect(_ui->hostLineEdit, SIGNAL(editingFinished()), SLOT(saveProxySettings())); - connect(_ui->userLineEdit, SIGNAL(editingFinished()), SLOT(saveProxySettings())); - connect(_ui->passwordLineEdit, SIGNAL(editingFinished()), SLOT(saveProxySettings())); - connect(_ui->portSpinBox, SIGNAL(editingFinished()), SLOT(saveProxySettings())); - connect(_ui->authRequiredcheckBox, SIGNAL(toggled(bool)), SLOT(saveProxySettings())); + connect(_ui->hostLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); + connect(_ui->userLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); + connect(_ui->passwordLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); + connect(_ui->portSpinBox, &QAbstractSpinBox::editingFinished, this, &NetworkSettings::saveProxySettings); + connect(_ui->authRequiredcheckBox, &QAbstractButton::toggled, this, &NetworkSettings::saveProxySettings); - connect(_ui->uploadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); - connect(_ui->noUploadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); - connect(_ui->autoUploadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); - connect(_ui->downloadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); - connect(_ui->noDownloadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); - connect(_ui->autoDownloadLimitRadioButton, SIGNAL(clicked()), SLOT(saveBWLimitSettings())); + connect(_ui->uploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->noUploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->autoUploadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->downloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->noDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->autoDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->downloadSpinBox, SIGNAL(valueChanged(int)), SLOT(saveBWLimitSettings())); connect(_ui->uploadSpinBox, SIGNAL(valueChanged(int)), SLOT(saveBWLimitSettings())); } diff --git a/src/gui/notificationwidget.cpp b/src/gui/notificationwidget.cpp index bcada1075..dbf8c18ff 100644 --- a/src/gui/notificationwidget.cpp +++ b/src/gui/notificationwidget.cpp @@ -66,13 +66,13 @@ void NotificationWidget::setActivity(const Activity &activity) // in case there is no action defined, do a close button. QPushButton *b = _ui._buttonBox->addButton(QDialogButtonBox::Close); b->setDefault(true); - connect(b, SIGNAL(clicked()), this, SLOT(slotButtonClicked())); + connect(b, &QAbstractButton::clicked, this, &NotificationWidget::slotButtonClicked); _buttons.append(b); } else { foreach (auto link, activity._links) { QPushButton *b = _ui._buttonBox->addButton(link._label, QDialogButtonBox::AcceptRole); b->setDefault(link._isPrimary); - connect(b, SIGNAL(clicked()), this, SLOT(slotButtonClicked())); + connect(b, &QAbstractButton::clicked, this, &NotificationWidget::slotButtonClicked); _buttons.append(b); } } diff --git a/src/gui/ocsshareejob.cpp b/src/gui/ocsshareejob.cpp index b359201c0..40bb70d91 100644 --- a/src/gui/ocsshareejob.cpp +++ b/src/gui/ocsshareejob.cpp @@ -20,7 +20,7 @@ OcsShareeJob::OcsShareeJob(AccountPtr account) : OcsJob(account) { setPath("ocs/v1.php/apps/files_sharing/api/v1/sharees"); - connect(this, SIGNAL(jobFinished(QJsonDocument)), SLOT(jobDone(QJsonDocument))); + connect(this, &OcsJob::jobFinished, this, &OcsShareeJob::jobDone); } void OcsShareeJob::getSharees(const QString &search, diff --git a/src/gui/ocssharejob.cpp b/src/gui/ocssharejob.cpp index 9b93ee99f..520225461 100644 --- a/src/gui/ocssharejob.cpp +++ b/src/gui/ocssharejob.cpp @@ -25,7 +25,7 @@ OcsShareJob::OcsShareJob(AccountPtr account) : OcsJob(account) { setPath("ocs/v1.php/apps/files_sharing/api/v1/shares"); - connect(this, SIGNAL(jobFinished(QJsonDocument)), this, SLOT(jobDone(QJsonDocument))); + connect(this, &OcsJob::jobFinished, this, &OcsShareJob::jobDone); } void OcsShareJob::getShares(const QString &path) diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 225cbf3b3..ad9b7bf9d 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -70,8 +70,8 @@ ownCloudGui::ownCloudGui(Application *parent) // for the beginning, set the offline icon until the account was verified _tray->setIcon(Theme::instance()->folderOfflineIcon(/*systray?*/ true, /*currently visible?*/ false)); - connect(_tray.data(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - SLOT(slotTrayClicked(QSystemTrayIcon::ActivationReason))); + connect(_tray.data(), &QSystemTrayIcon::activated, + this, &ownCloudGui::slotTrayClicked); setupActions(); setupContextMenu(); @@ -79,24 +79,24 @@ ownCloudGui::ownCloudGui(Application *parent) _tray->show(); ProgressDispatcher *pd = ProgressDispatcher::instance(); - connect(pd, SIGNAL(progressInfo(QString, ProgressInfo)), this, - SLOT(slotUpdateProgress(QString, ProgressInfo))); + connect(pd, &ProgressDispatcher::progressInfo, this, + &ownCloudGui::slotUpdateProgress); FolderMan *folderMan = FolderMan::instance(); - connect(folderMan, SIGNAL(folderSyncStateChange(Folder *)), - this, SLOT(slotSyncStateChange(Folder *))); + connect(folderMan, &FolderMan::folderSyncStateChange, + this, &ownCloudGui::slotSyncStateChange); - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), - SLOT(updateContextMenuNeeded())); - connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)), - SLOT(updateContextMenuNeeded())); + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &ownCloudGui::updateContextMenuNeeded); + connect(AccountManager::instance(), &AccountManager::accountRemoved, + this, &ownCloudGui::updateContextMenuNeeded); - connect(Logger::instance(), SIGNAL(guiLog(QString, QString)), - SLOT(slotShowTrayMessage(QString, QString))); - connect(Logger::instance(), SIGNAL(optionalGuiLog(QString, QString)), - SLOT(slotShowOptionalTrayMessage(QString, QString))); - connect(Logger::instance(), SIGNAL(guiMessage(QString, QString)), - SLOT(slotShowGuiMessage(QString, QString))); + connect(Logger::instance(), &Logger::guiLog, + this, &ownCloudGui::slotShowTrayMessage); + connect(Logger::instance(), &Logger::optionalGuiLog, + this, &ownCloudGui::slotShowOptionalTrayMessage); + connect(Logger::instance(), &Logger::guiMessage, + this, &ownCloudGui::slotShowGuiMessage); } // This should rather be in application.... or rather in ConfigFile? @@ -302,7 +302,7 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men } auto actionOpenoC = menu->addAction(browserOpen); actionOpenoC->setProperty(propertyAccountC, QVariant::fromValue(accountState->account())); - QObject::connect(actionOpenoC, SIGNAL(triggered(bool)), SLOT(slotOpenOwnCloud())); + QObject::connect(actionOpenoC, &QAction::triggered, this, &ownCloudGui::slotOpenOwnCloud); FolderMan *folderMan = FolderMan::instance(); bool firstFolder = true; @@ -336,22 +336,22 @@ void ownCloudGui::addAccountContextMenu(AccountStatePtr accountState, QMenu *men if (onePaused) { QAction *enable = menu->addAction(tr("Unpause all folders")); enable->setProperty(propertyAccountC, QVariant::fromValue(accountState)); - connect(enable, SIGNAL(triggered(bool)), SLOT(slotUnpauseAllFolders())); + connect(enable, &QAction::triggered, this, &ownCloudGui::slotUnpauseAllFolders); } if (!allPaused) { QAction *enable = menu->addAction(tr("Pause all folders")); enable->setProperty(propertyAccountC, QVariant::fromValue(accountState)); - connect(enable, SIGNAL(triggered(bool)), SLOT(slotPauseAllFolders())); + connect(enable, &QAction::triggered, this, &ownCloudGui::slotPauseAllFolders); } if (accountState->isSignedOut()) { QAction *signin = menu->addAction(tr("Log in...")); signin->setProperty(propertyAccountC, QVariant::fromValue(accountState)); - connect(signin, SIGNAL(triggered()), this, SLOT(slotLogin())); + connect(signin, &QAction::triggered, this, &ownCloudGui::slotLogin); } else { QAction *signout = menu->addAction(tr("Log out")); signout->setProperty(propertyAccountC, QVariant::fromValue(accountState)); - connect(signout, SIGNAL(triggered()), this, SLOT(slotLogout())); + connect(signout, &QAction::triggered, this, &ownCloudGui::slotLogout); } } } @@ -462,7 +462,7 @@ void ownCloudGui::setupContextMenu() // When the qdbusmenuWorkaround is necessary, we can't do on-demand updates // because the workaround is to hide and show the tray icon. if (_qdbusmenuWorkaround) { - connect(&_workaroundBatchTrayUpdate, SIGNAL(timeout()), SLOT(updateContextMenu())); + connect(&_workaroundBatchTrayUpdate, &QTimer::timeout, this, &ownCloudGui::updateContextMenu); _workaroundBatchTrayUpdate.setInterval(30 * 1000); _workaroundBatchTrayUpdate.setSingleShot(true); } else { @@ -473,7 +473,7 @@ void ownCloudGui::setupContextMenu() connect(_contextMenu.data(), SIGNAL(aboutToShow()), SLOT(slotContextMenuAboutToShow())); connect(_contextMenu.data(), SIGNAL(aboutToHide()), SLOT(slotContextMenuAboutToHide())); #else - connect(_contextMenu.data(), SIGNAL(aboutToShow()), SLOT(updateContextMenu())); + connect(_contextMenu.data(), &QMenu::aboutToShow, this, &ownCloudGui::updateContextMenu); #endif } @@ -576,7 +576,7 @@ void ownCloudGui::updateContextMenu() text = tr("Unpause synchronization"); } QAction *action = _contextMenu->addAction(text); - connect(action, SIGNAL(triggered(bool)), SLOT(slotUnpauseAllFolders())); + connect(action, &QAction::triggered, this, &ownCloudGui::slotUnpauseAllFolders); } if (atLeastOneNotPaused) { QString text; @@ -586,7 +586,7 @@ void ownCloudGui::updateContextMenu() text = tr("Pause synchronization"); } QAction *action = _contextMenu->addAction(text); - connect(action, SIGNAL(triggered(bool)), SLOT(slotPauseAllFolders())); + connect(action, &QAction::triggered, this, &ownCloudGui::slotPauseAllFolders); } if (atLeastOneSignedIn) { if (accountList.count() > 1) { @@ -686,18 +686,18 @@ void ownCloudGui::setupActions() _actionRecent = new QAction(tr("Details..."), this); _actionRecent->setEnabled(true); - QObject::connect(_actionRecent, SIGNAL(triggered(bool)), SLOT(slotShowSyncProtocol())); - QObject::connect(_actionSettings, SIGNAL(triggered(bool)), SLOT(slotShowSettings())); - QObject::connect(_actionNewAccountWizard, SIGNAL(triggered(bool)), SLOT(slotNewAccountWizard())); + QObject::connect(_actionRecent, &QAction::triggered, this, &ownCloudGui::slotShowSyncProtocol); + QObject::connect(_actionSettings, &QAction::triggered, this, &ownCloudGui::slotShowSettings); + QObject::connect(_actionNewAccountWizard, &QAction::triggered, this, &ownCloudGui::slotNewAccountWizard); _actionHelp = new QAction(tr("Help"), this); - QObject::connect(_actionHelp, SIGNAL(triggered(bool)), SLOT(slotHelp())); + QObject::connect(_actionHelp, &QAction::triggered, this, &ownCloudGui::slotHelp); _actionQuit = new QAction(tr("Quit %1").arg(Theme::instance()->appNameGUI()), this); QObject::connect(_actionQuit, SIGNAL(triggered(bool)), _app, SLOT(quit())); _actionLogin = new QAction(tr("Log in..."), this); - connect(_actionLogin, SIGNAL(triggered()), this, SLOT(slotLogin())); + connect(_actionLogin, &QAction::triggered, this, &ownCloudGui::slotLogin); _actionLogout = new QAction(tr("Log out"), this); - connect(_actionLogout, SIGNAL(triggered()), this, SLOT(slotLogout())); + connect(_actionLogout, &QAction::triggered, this, &ownCloudGui::slotLogout); if (_app->debugMode()) { _actionCrash = new QAction(tr("Crash now", "Only shows in debug mode to allow testing the crash handler"), this); @@ -742,7 +742,7 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo & .arg(progress._currentDiscoveredFolder)); } } else if (progress.status() == ProgressInfo::Done) { - QTimer::singleShot(2000, this, SLOT(slotDisplayIdle())); + QTimer::singleShot(2000, this, &ownCloudGui::slotDisplayIdle); } if (progress.status() != ProgressInfo::Propagation) { return; @@ -1036,7 +1036,7 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l w->setAttribute(Qt::WA_DeleteOnClose, true); _shareDialogs[localPath] = w; - connect(w, SIGNAL(destroyed(QObject *)), SLOT(slotRemoveDestroyedShareDialogs())); + connect(w, &QObject::destroyed, this, &ownCloudGui::slotRemoveDestroyedShareDialogs); } raiseDialog(w); } diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index 33e55cb14..86a0c19ad 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -44,19 +44,19 @@ OwncloudSetupWizard::OwncloudSetupWizard(QObject *parent) , _ocWizard(new OwncloudWizard) , _remoteFolder() { - connect(_ocWizard, SIGNAL(determineAuthType(const QString &)), - this, SLOT(slotDetermineAuthType(const QString &))); - connect(_ocWizard, SIGNAL(connectToOCUrl(const QString &)), - this, SLOT(slotConnectToOCUrl(const QString &))); - connect(_ocWizard, SIGNAL(createLocalAndRemoteFolders(QString, QString)), - this, SLOT(slotCreateLocalAndRemoteFolders(QString, QString))); + connect(_ocWizard, &OwncloudWizard::determineAuthType, + this, &OwncloudSetupWizard::slotDetermineAuthType); + connect(_ocWizard, &OwncloudWizard::connectToOCUrl, + this, &OwncloudSetupWizard::slotConnectToOCUrl); + connect(_ocWizard, &OwncloudWizard::createLocalAndRemoteFolders, + this, &OwncloudSetupWizard::slotCreateLocalAndRemoteFolders); /* basicSetupFinished might be called from a reply from the network. slotAssistantFinished might destroy the temporary QNetworkAccessManager. Therefore Qt::QueuedConnection is required */ - connect(_ocWizard, SIGNAL(basicSetupFinished(int)), - this, SLOT(slotAssistantFinished(int)), Qt::QueuedConnection); - connect(_ocWizard, SIGNAL(finished(int)), SLOT(deleteLater())); - connect(_ocWizard, SIGNAL(skipFolderConfiguration()), SLOT(slotSkipFolderConfiguration())); + connect(_ocWizard, &OwncloudWizard::basicSetupFinished, + this, &OwncloudSetupWizard::slotAssistantFinished, Qt::QueuedConnection); + connect(_ocWizard, &QDialog::finished, this, &QObject::deleteLater); + connect(_ocWizard, &OwncloudWizard::skipFolderConfiguration, this, &OwncloudSetupWizard::slotSkipFolderConfiguration); } OwncloudSetupWizard::~OwncloudSetupWizard() @@ -202,9 +202,9 @@ void OwncloudSetupWizard::slotContinueDetermineAuth() [this, account]() { CheckServerJob *job = new CheckServerJob(account, this); job->setIgnoreCredentialFailure(true); - connect(job, SIGNAL(instanceFound(QUrl, QJsonObject)), SLOT(slotOwnCloudFoundAuth(QUrl, QJsonObject))); - connect(job, SIGNAL(instanceNotFound(QNetworkReply *)), SLOT(slotNoOwnCloudFoundAuth(QNetworkReply *))); - connect(job, SIGNAL(timeout(const QUrl &)), SLOT(slotNoOwnCloudFoundAuthTimeout(const QUrl &))); + connect(job, &CheckServerJob::instanceFound, this, &OwncloudSetupWizard::slotOwnCloudFoundAuth); + connect(job, &CheckServerJob::instanceNotFound, this, &OwncloudSetupWizard::slotNoOwnCloudFoundAuth); + connect(job, &CheckServerJob::timeout, this, &OwncloudSetupWizard::slotNoOwnCloudFoundAuthTimeout); job->setTimeout((account->url().scheme() == "https") ? 30 * 1000 : 10 * 1000); job->start(); }); @@ -310,8 +310,8 @@ void OwncloudSetupWizard::testOwnCloudConnect() // so don't automatically follow redirects. job->setFollowRedirects(false); job->setProperties(QList() << "getlastmodified"); - connect(job, SIGNAL(result(QVariantMap)), _ocWizard, SLOT(successfulStep())); - connect(job, SIGNAL(finishedWithError()), this, SLOT(slotAuthError())); + connect(job, &PropfindJob::result, _ocWizard, &OwncloudWizard::successfulStep); + connect(job, &PropfindJob::finishedWithError, this, &OwncloudSetupWizard::slotAuthError); job->start(); } @@ -429,7 +429,7 @@ void OwncloudSetupWizard::slotCreateLocalAndRemoteFolders(const QString &localFo } if (nextStep) { EntityExistsJob *job = new EntityExistsJob(_ocWizard->account(), _ocWizard->account()->davPath() + remoteFolder, this); - connect(job, SIGNAL(exists(QNetworkReply *)), SLOT(slotRemoteFolderExists(QNetworkReply *))); + connect(job, &EntityExistsJob::exists, this, &OwncloudSetupWizard::slotRemoteFolderExists); job->start(); } else { finalizeSetup(false); @@ -602,8 +602,8 @@ void OwncloudSetupWizard::slotSkipFolderConfiguration() { applyAccountChanges(); - disconnect(_ocWizard, SIGNAL(basicSetupFinished(int)), - this, SLOT(slotAssistantFinished(int))); + disconnect(_ocWizard, &OwncloudWizard::basicSetupFinished, + this, &OwncloudSetupWizard::slotAssistantFinished); _ocWizard->close(); emit ownCloudWizardDone(QDialog::Accepted); } diff --git a/src/gui/protocolwidget.cpp b/src/gui/protocolwidget.cpp index 75b8aaa52..f3a52dff6 100644 --- a/src/gui/protocolwidget.cpp +++ b/src/gui/protocolwidget.cpp @@ -38,10 +38,10 @@ ProtocolWidget::ProtocolWidget(QWidget *parent) { _ui->setupUi(this); - connect(ProgressDispatcher::instance(), SIGNAL(itemCompleted(QString, SyncFileItemPtr)), - this, SLOT(slotItemCompleted(QString, SyncFileItemPtr))); + connect(ProgressDispatcher::instance(), &ProgressDispatcher::itemCompleted, + this, &ProtocolWidget::slotItemCompleted); - connect(_ui->_treeWidget, SIGNAL(itemActivated(QTreeWidgetItem *, int)), SLOT(slotOpenFile(QTreeWidgetItem *, int))); + connect(_ui->_treeWidget, &QTreeWidget::itemActivated, this, &ProtocolWidget::slotOpenFile); // Adjust copyToClipboard() when making changes here! QStringList header; @@ -74,7 +74,7 @@ ProtocolWidget::ProtocolWidget(QWidget *parent) QPushButton *copyBtn = _ui->_dialogButtonBox->addButton(tr("Copy"), QDialogButtonBox::ActionRole); copyBtn->setToolTip(tr("Copy the activity list to the clipboard.")); copyBtn->setEnabled(true); - connect(copyBtn, SIGNAL(clicked()), SIGNAL(copyToClipboard())); + connect(copyBtn, &QAbstractButton::clicked, this, &ProtocolWidget::copyToClipboard); } ProtocolWidget::~ProtocolWidget() diff --git a/src/gui/proxyauthhandler.cpp b/src/gui/proxyauthhandler.cpp index 5b7d7382d..f2ccd97ac 100644 --- a/src/gui/proxyauthhandler.cpp +++ b/src/gui/proxyauthhandler.cpp @@ -131,8 +131,8 @@ void ProxyAuthHandler::handleProxyAuthenticationRequired( sending_qnam = qnam_alive.data(); if (sending_qnam) { _gaveCredentialsTo.insert(sending_qnam); - connect(sending_qnam, SIGNAL(destroyed(QObject *)), - SLOT(slotSenderDestroyed(QObject *))); + connect(sending_qnam, &QObject::destroyed, + this, &ProxyAuthHandler::slotSenderDestroyed); } } @@ -194,8 +194,8 @@ bool ProxyAuthHandler::getCredsFromKeychain() _readPasswordJob->setInsecureFallback(false); _readPasswordJob->setKey(keychainPasswordKey()); _readPasswordJob->setAutoDelete(false); - connect(_readPasswordJob.data(), SIGNAL(finished(QKeychain::Job *)), - SLOT(slotKeychainJobDone())); + connect(_readPasswordJob.data(), &QKeychain::Job::finished, + this, &ProxyAuthHandler::slotKeychainJobDone); _keychainJobRunning = true; _readPasswordJob->start(); } @@ -242,7 +242,7 @@ void ProxyAuthHandler::storeCredsInKeychain() job->setKey(keychainPasswordKey()); job->setTextData(_password); job->setAutoDelete(false); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotKeychainJobDone())); + connect(job, &QKeychain::Job::finished, this, &ProxyAuthHandler::slotKeychainJobDone); _keychainJobRunning = true; job->start(); diff --git a/src/gui/quotainfo.cpp b/src/gui/quotainfo.cpp index 1eb1066cc..0368eefbe 100644 --- a/src/gui/quotainfo.cpp +++ b/src/gui/quotainfo.cpp @@ -36,9 +36,9 @@ QuotaInfo::QuotaInfo(AccountState *accountState, QObject *parent) , _lastQuotaUsedBytes(0) , _active(false) { - connect(accountState, SIGNAL(stateChanged(int)), - SLOT(slotAccountStateChanged())); - connect(&_jobRestartTimer, SIGNAL(timeout()), SLOT(slotCheckQuota())); + connect(accountState, &AccountState::stateChanged, + this, &QuotaInfo::slotAccountStateChanged); + connect(&_jobRestartTimer, &QTimer::timeout, this, &QuotaInfo::slotCheckQuota); _jobRestartTimer.setSingleShot(true); } @@ -101,8 +101,8 @@ void QuotaInfo::slotCheckQuota() _job = new PropfindJob(account, quotaBaseFolder(), this); _job->setProperties(QList() << "quota-available-bytes" << "quota-used-bytes"); - connect(_job, SIGNAL(result(QVariantMap)), SLOT(slotUpdateLastQuota(QVariantMap))); - connect(_job, SIGNAL(networkError(QNetworkReply *)), SLOT(slotRequestFailed())); + connect(_job.data(), &PropfindJob::result, this, &QuotaInfo::slotUpdateLastQuota); + connect(_job.data(), &AbstractNetworkJob::networkError, this, &QuotaInfo::slotRequestFailed); _job->start(); } diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index a9c96cb77..1457967f7 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -83,10 +83,10 @@ SelectiveSyncWidget::SelectiveSyncWidget(AccountPtr account, QWidget *parent) layout->addWidget(_folderTree); - connect(_folderTree, SIGNAL(itemExpanded(QTreeWidgetItem *)), - SLOT(slotItemExpanded(QTreeWidgetItem *))); - connect(_folderTree, SIGNAL(itemChanged(QTreeWidgetItem *, int)), - SLOT(slotItemChanged(QTreeWidgetItem *, int))); + connect(_folderTree, &QTreeWidget::itemExpanded, + this, &SelectiveSyncWidget::slotItemExpanded); + connect(_folderTree, &QTreeWidget::itemChanged, + this, &SelectiveSyncWidget::slotItemChanged); _folderTree->setSortingEnabled(true); _folderTree->sortByColumn(0, Qt::AscendingOrder); _folderTree->setColumnCount(2); @@ -107,10 +107,10 @@ void SelectiveSyncWidget::refreshFolders() LsColJob *job = new LsColJob(_account, _folderPath, this); job->setProperties(QList() << "resourcetype" << "http://owncloud.org/ns:size"); - connect(job, SIGNAL(directoryListingSubfolders(QStringList)), - this, SLOT(slotUpdateDirectories(QStringList))); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), - this, SLOT(slotLscolFinishedWithError(QNetworkReply *))); + connect(job, &LsColJob::directoryListingSubfolders, + this, &SelectiveSyncWidget::slotUpdateDirectories); + connect(job, &LsColJob::finishedWithError, + this, &SelectiveSyncWidget::slotLscolFinishedWithError); job->start(); _folderTree->clear(); _loading->show(); @@ -291,8 +291,8 @@ void SelectiveSyncWidget::slotItemExpanded(QTreeWidgetItem *item) LsColJob *job = new LsColJob(_account, prefix + dir, this); job->setProperties(QList() << "resourcetype" << "http://owncloud.org/ns:size"); - connect(job, SIGNAL(directoryListingSubfolders(QStringList)), - SLOT(slotUpdateDirectories(QStringList))); + connect(job, &LsColJob::directoryListingSubfolders, + this, &SelectiveSyncWidget::slotUpdateDirectories); job->start(); } @@ -440,7 +440,7 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, Folder *folder, QWi _okButton->setEnabled(false); } // Make sure we don't get crashes if the folder is destroyed while we are still open - connect(_folder, SIGNAL(destroyed(QObject *)), this, SLOT(deleteLater())); + connect(_folder, &QObject::destroyed, this, &QObject::deleteLater); } SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, const QString &folder, @@ -463,7 +463,7 @@ void SelectiveSyncDialog::init(const AccountPtr &account) connect(_okButton, SIGNAL(clicked()), this, SLOT(accept())); QPushButton *button; button = buttonBox->addButton(QDialogButtonBox::Cancel); - connect(button, SIGNAL(clicked()), this, SLOT(reject())); + connect(button, &QAbstractButton::clicked, this, &QDialog::reject); layout->addWidget(buttonBox); } diff --git a/src/gui/servernotificationhandler.cpp b/src/gui/servernotificationhandler.cpp index afbd66ddf..7c69bf599 100644 --- a/src/gui/servernotificationhandler.cpp +++ b/src/gui/servernotificationhandler.cpp @@ -48,8 +48,8 @@ void ServerNotificationHandler::slotFetchNotifications(AccountState *ptr) // if the previous notification job has finished, start next. _notificationJob = new JsonApiJob(ptr->account(), QLatin1String("ocs/v2.php/apps/notifications/api/v1/notifications"), this); - QObject::connect(_notificationJob.data(), SIGNAL(jsonReceived(QJsonDocument, int)), - this, SLOT(slotNotificationsReceived(QJsonDocument, int))); + QObject::connect(_notificationJob.data(), &JsonApiJob::jsonReceived, + this, &ServerNotificationHandler::slotNotificationsReceived); _notificationJob->setProperty("AccountStatePtr", QVariant::fromValue(ptr)); _notificationJob->start(); diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index 2ea52e921..f67dcaca0 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -109,8 +109,8 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _toolBar->addAction(_activityAction); _activitySettings = new ActivitySettings; _ui->stack->addWidget(_activitySettings); - connect(_activitySettings, SIGNAL(guiLog(QString, QString)), _gui, - SLOT(slotShowOptionalTrayMessage(QString, QString))); + connect(_activitySettings, &ActivitySettings::guiLog, _gui, + &ownCloudGui::slotShowOptionalTrayMessage); _activitySettings->setNotificationRefreshInterval(cfg.notificationRefreshInterval()); QAction *generalAction = createColorAwareAction(QLatin1String(":/client/resources/settings.png"), tr("General")); @@ -129,24 +129,24 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) _actionGroupWidgets.insert(generalAction, generalSettings); _actionGroupWidgets.insert(networkAction, networkSettings); - connect(_actionGroup, SIGNAL(triggered(QAction *)), SLOT(slotSwitchPage(QAction *))); + connect(_actionGroup, &QActionGroup::triggered, this, &SettingsDialog::slotSwitchPage); - connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState *)), - this, SLOT(accountAdded(AccountState *))); - connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState *)), - this, SLOT(accountRemoved(AccountState *))); + connect(AccountManager::instance(), &AccountManager::accountAdded, + this, &SettingsDialog::accountAdded); + connect(AccountManager::instance(), &AccountManager::accountRemoved, + this, &SettingsDialog::accountRemoved); foreach (auto ai, AccountManager::instance()->accounts()) { accountAdded(ai.data()); } - QTimer::singleShot(1, this, SLOT(showFirstPage())); + QTimer::singleShot(1, this, &SettingsDialog::showFirstPage); QPushButton *closeButton = _ui->buttonBox->button(QDialogButtonBox::Close); connect(closeButton, SIGNAL(clicked()), SLOT(accept())); QAction *showLogWindow = new QAction(this); showLogWindow->setShortcut(QKeySequence("F12")); - connect(showLogWindow, SIGNAL(triggered()), gui, SLOT(slotToggleLogBrowser())); + connect(showLogWindow, &QAction::triggered, gui, &ownCloudGui::slotToggleLogBrowser); addAction(showLogWindow); customizeStyle(); @@ -245,11 +245,11 @@ void SettingsDialog::accountAdded(AccountState *s) _actionGroupWidgets.insert(accountAction, accountSettings); _actionForAccount.insert(s->account().data(), accountAction); - connect(accountSettings, SIGNAL(folderChanged()), _gui, SLOT(slotFoldersChanged())); - connect(accountSettings, SIGNAL(openFolderAlias(const QString &)), - _gui, SLOT(slotFolderOpenAction(QString))); - connect(accountSettings, SIGNAL(showIssuesList(QString)), SLOT(showIssuesList(QString))); - connect(s->account().data(), SIGNAL(accountChangedAvatar()), SLOT(slotAccountAvatarChanged())); + connect(accountSettings, &AccountSettings::folderChanged, _gui, &ownCloudGui::slotFoldersChanged); + connect(accountSettings, &AccountSettings::openFolderAlias, + _gui, &ownCloudGui::slotFolderOpenAction); + connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList); + connect(s->account().data(), &Account::accountChangedAvatar, this, &SettingsDialog::slotAccountAvatarChanged); slotRefreshActivity(s); } diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp index aa47598e9..a81d20894 100644 --- a/src/gui/sharedialog.cpp +++ b/src/gui/sharedialog.cpp @@ -58,10 +58,10 @@ ShareDialog::ShareDialog(QPointer accountState, _ui->setupUi(this); QPushButton *closeButton = _ui->buttonBox->button(QDialogButtonBox::Close); - connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + connect(closeButton, &QAbstractButton::clicked, this, &QWidget::close); // We want to act on account state changes - connect(_accountState, SIGNAL(stateChanged(int)), SLOT(slotAccountStateChanged(int))); + connect(_accountState.data(), &AccountState::stateChanged, this, &ShareDialog::slotAccountStateChanged); // Because people press enter in the dialog and we don't want to close for that closeButton->setDefault(false); @@ -118,7 +118,7 @@ ShareDialog::ShareDialog(QPointer accountState, if (QFileInfo(_localPath).isFile()) { ThumbnailJob *job = new ThumbnailJob(_sharePath, _accountState->account(), this); - connect(job, SIGNAL(jobFinished(int, QByteArray)), SLOT(slotThumbnailFetched(int, QByteArray))); + connect(job, &ThumbnailJob::jobFinished, this, &ShareDialog::slotThumbnailFetched); job->start(); } @@ -135,8 +135,8 @@ ShareDialog::ShareDialog(QPointer accountState, << "http://open-collaboration-services.org/ns:share-permissions" << "http://owncloud.org/ns:privatelink"); job->setTimeout(10 * 1000); - connect(job, SIGNAL(result(QVariantMap)), SLOT(slotPropfindReceived(QVariantMap))); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), SLOT(slotPropfindError())); + connect(job, &PropfindJob::result, this, &ShareDialog::slotPropfindReceived); + connect(job, &PropfindJob::finishedWithError, this, &ShareDialog::slotPropfindError); job->start(); } diff --git a/src/gui/sharee.cpp b/src/gui/sharee.cpp index 2d1ca4d49..e1cec2ff1 100644 --- a/src/gui/sharee.cpp +++ b/src/gui/sharee.cpp @@ -72,8 +72,8 @@ void ShareeModel::fetch(const QString &search, const ShareeSet &blacklist) _search = search; _shareeBlacklist = blacklist; OcsShareeJob *job = new OcsShareeJob(_account); - connect(job, SIGNAL(shareeJobFinished(QJsonDocument)), SLOT(shareesFetched(QJsonDocument))); - connect(job, SIGNAL(ocsError(int, QString)), SIGNAL(displayErrorMessage(int, QString))); + connect(job, &OcsShareeJob::shareeJobFinished, this, &ShareeModel::shareesFetched); + connect(job, &OcsJob::ocsError, this, &ShareeModel::displayErrorMessage); job->getSharees(_search, _type, 1, 50); } diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index bba3151bb..3f542c0d3 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -71,18 +71,18 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, _ui->layout_editing->addWidget(_pi_editing, 0, 2); _ui->horizontalLayout_expire->insertWidget(_ui->horizontalLayout_expire->count() - 1, _pi_date); - connect(_ui->nameLineEdit, SIGNAL(returnPressed()), SLOT(slotShareNameEntered())); - connect(_ui->createShareButton, SIGNAL(clicked(bool)), SLOT(slotShareNameEntered())); - connect(_ui->linkShares, SIGNAL(itemSelectionChanged()), SLOT(slotShareSelectionChanged())); - connect(_ui->linkShares, SIGNAL(itemChanged(QTableWidgetItem *)), SLOT(slotNameEdited(QTableWidgetItem *))); - connect(_ui->checkBox_password, SIGNAL(clicked()), this, SLOT(slotCheckBoxPasswordClicked())); - connect(_ui->lineEdit_password, SIGNAL(returnPressed()), this, SLOT(slotPasswordReturnPressed())); - connect(_ui->lineEdit_password, SIGNAL(textChanged(QString)), this, SLOT(slotPasswordChanged(QString))); - connect(_ui->pushButton_setPassword, SIGNAL(clicked(bool)), SLOT(slotPasswordReturnPressed())); - connect(_ui->checkBox_expire, SIGNAL(clicked()), this, SLOT(slotCheckBoxExpireClicked())); - connect(_ui->calendar, SIGNAL(dateChanged(QDate)), SLOT(slotExpireDateChanged(QDate))); - connect(_ui->checkBox_editing, SIGNAL(clicked()), this, SLOT(slotPermissionsCheckboxClicked())); - connect(_ui->checkBox_fileListing, SIGNAL(clicked(bool)), this, SLOT(slotPermissionsCheckboxClicked())); + connect(_ui->nameLineEdit, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotShareNameEntered); + connect(_ui->createShareButton, &QAbstractButton::clicked, this, &ShareLinkWidget::slotShareNameEntered); + connect(_ui->linkShares, &QTableWidget::itemSelectionChanged, this, &ShareLinkWidget::slotShareSelectionChanged); + connect(_ui->linkShares, &QTableWidget::itemChanged, this, &ShareLinkWidget::slotNameEdited); + connect(_ui->checkBox_password, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCheckBoxPasswordClicked); + connect(_ui->lineEdit_password, &QLineEdit::returnPressed, this, &ShareLinkWidget::slotPasswordReturnPressed); + connect(_ui->lineEdit_password, &QLineEdit::textChanged, this, &ShareLinkWidget::slotPasswordChanged); + connect(_ui->pushButton_setPassword, &QAbstractButton::clicked, this, &ShareLinkWidget::slotPasswordReturnPressed); + connect(_ui->checkBox_expire, &QAbstractButton::clicked, this, &ShareLinkWidget::slotCheckBoxExpireClicked); + connect(_ui->calendar, &QDateTimeEdit::dateChanged, this, &ShareLinkWidget::slotExpireDateChanged); + connect(_ui->checkBox_editing, &QAbstractButton::clicked, this, &ShareLinkWidget::slotPermissionsCheckboxClicked); + connect(_ui->checkBox_fileListing, &QAbstractButton::clicked, this, &ShareLinkWidget::slotPermissionsCheckboxClicked); _ui->errorLabel->hide(); @@ -156,8 +156,8 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, // Prepare sharing menu _shareLinkMenu = new QMenu(this); - connect(_shareLinkMenu, SIGNAL(triggered(QAction *)), - SLOT(slotShareLinkActionTriggered(QAction *))); + connect(_shareLinkMenu, &QMenu::triggered, + this, &ShareLinkWidget::slotShareLinkActionTriggered); _openLinkAction = _shareLinkMenu->addAction(tr("Open link in browser")); _copyLinkAction = _shareLinkMenu->addAction(tr("Copy link to clipboard")); _copyDirectLinkAction = _shareLinkMenu->addAction(tr("Copy link to clipboard (direct download)")); @@ -169,10 +169,10 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, */ if (sharingPossible) { _manager = new ShareManager(_account, this); - connect(_manager, SIGNAL(sharesFetched(QList>)), SLOT(slotSharesFetched(QList>))); + connect(_manager, &ShareManager::sharesFetched, this, &ShareLinkWidget::slotSharesFetched); connect(_manager, SIGNAL(linkShareCreated(QSharedPointer)), SLOT(slotCreateShareFetched(const QSharedPointer))); - connect(_manager, SIGNAL(linkShareRequiresPassword(QString)), SLOT(slotCreateShareRequiresPassword(QString))); - connect(_manager, SIGNAL(serverError(int, QString)), SLOT(slotServerError(int, QString))); + connect(_manager, &ShareManager::linkShareRequiresPassword, this, &ShareLinkWidget::slotCreateShareRequiresPassword); + connect(_manager, &ShareManager::serverError, this, &ShareLinkWidget::slotServerError); } } @@ -218,13 +218,13 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar auto linkShare = qSharedPointerDynamicCast(share); // Connect all shares signals to gui slots - connect(share.data(), SIGNAL(serverError(int, QString)), SLOT(slotServerError(int, QString))); - connect(share.data(), SIGNAL(shareDeleted()), SLOT(slotDeleteShareFetched())); + connect(share.data(), &Share::serverError, this, &ShareLinkWidget::slotServerError); + connect(share.data(), &Share::shareDeleted, this, &ShareLinkWidget::slotDeleteShareFetched); connect(share.data(), SIGNAL(expireDateSet()), SLOT(slotExpireSet())); connect(share.data(), SIGNAL(publicUploadSet()), SLOT(slotPermissionsSet())); connect(share.data(), SIGNAL(passwordSet()), SLOT(slotPasswordSet())); connect(share.data(), SIGNAL(passwordSetError(int, QString)), SLOT(slotPasswordSetError(int, QString))); - connect(share.data(), SIGNAL(permissionsSet()), SLOT(slotPermissionsSet())); + connect(share.data(), &Share::permissionsSet, this, &ShareLinkWidget::slotPermissionsSet); // Build the table row auto row = table->rowCount(); @@ -247,13 +247,13 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar auto shareButton = new QToolButton; shareButton->setText("..."); shareButton->setProperty(propertyShareC, QVariant::fromValue(linkShare)); - connect(shareButton, SIGNAL(clicked(bool)), SLOT(slotShareLinkButtonClicked())); + connect(shareButton, &QAbstractButton::clicked, this, &ShareLinkWidget::slotShareLinkButtonClicked); table->setCellWidget(row, 1, shareButton); auto deleteButton = new QToolButton; deleteButton->setIcon(deleteIcon); deleteButton->setProperty(propertyShareC, QVariant::fromValue(linkShare)); - connect(deleteButton, SIGNAL(clicked(bool)), SLOT(slotDeleteShareClicked())); + connect(deleteButton, &QAbstractButton::clicked, this, &ShareLinkWidget::slotDeleteShareClicked); table->setCellWidget(row, 2, deleteButton); // Reestablish the previous selection diff --git a/src/gui/sharemanager.cpp b/src/gui/sharemanager.cpp index 37c39839f..95a976451 100644 --- a/src/gui/sharemanager.cpp +++ b/src/gui/sharemanager.cpp @@ -72,8 +72,8 @@ QSharedPointer Share::getShareWith() const void Share::setPermissions(Permissions permissions) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotPermissionsSet(QJsonDocument, QVariant))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &Share::slotPermissionsSet); + connect(job, &OcsJob::ocsError, this, &Share::slotOcsError); job->setPermissions(getId(), permissions); } @@ -91,8 +91,8 @@ Share::Permissions Share::getPermissions() const void Share::deleteShare() { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotDeleted())); - connect(job, SIGNAL(ocsError(int, const QString &)), SLOT(slotOcsError(int, const QString &))); + connect(job, &OcsShareJob::shareJobFinished, this, &Share::slotDeleted); + connect(job, &OcsJob::ocsError, this, &Share::slotOcsError); job->deleteShare(getId()); } @@ -164,8 +164,8 @@ QString LinkShare::getName() const void LinkShare::setName(const QString &name) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotNameSet(QJsonDocument, QVariant))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotNameSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); job->setName(getId(), name); } @@ -177,8 +177,8 @@ QString LinkShare::getToken() const void LinkShare::setPassword(const QString &password) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotPasswordSet(QJsonDocument, QVariant))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotSetPasswordError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotPasswordSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotSetPasswordError); job->setPassword(getId(), password); } @@ -191,8 +191,8 @@ void LinkShare::slotPasswordSet(const QJsonDocument &, const QVariant &value) void LinkShare::setExpireDate(const QDate &date) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotExpireDateSet(QJsonDocument, QVariant))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &LinkShare::slotExpireDateSet); + connect(job, &OcsJob::ocsError, this, &LinkShare::slotOcsError); job->setExpireDate(getId(), date); } @@ -234,8 +234,8 @@ void ShareManager::createLinkShare(const QString &path, const QString &password) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotLinkShareCreated(QJsonDocument))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotLinkShareCreated); + connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError); job->createLinkShare(path, name, password); } @@ -276,8 +276,8 @@ void ShareManager::createShare(const QString &path, continuation.permissions = permissions; _jobContinuation[job] = QVariant::fromValue(continuation); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotCreateShare(QJsonDocument))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotCreateShare); + connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError); job->getSharedWithMe(); } @@ -308,8 +308,8 @@ void ShareManager::slotCreateShare(const QJsonDocument &reply) } OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotShareCreated(QJsonDocument))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotShareCreated); + connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError); job->createShare(cont.path, cont.shareType, cont.shareWith, cont.permissions); } @@ -325,8 +325,8 @@ void ShareManager::slotShareCreated(const QJsonDocument &reply) void ShareManager::fetchShares(const QString &path) { OcsShareJob *job = new OcsShareJob(_account); - connect(job, SIGNAL(shareJobFinished(QJsonDocument, QVariant)), SLOT(slotSharesFetched(QJsonDocument))); - connect(job, SIGNAL(ocsError(int, QString)), SLOT(slotOcsError(int, QString))); + connect(job, &OcsShareJob::shareJobFinished, this, &ShareManager::slotSharesFetched); + connect(job, &OcsJob::ocsError, this, &ShareManager::slotOcsError); job->getShares(path); } diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp index 5b505f21a..848ecfbfb 100644 --- a/src/gui/shareusergroupwidget.cpp +++ b/src/gui/shareusergroupwidget.cpp @@ -71,8 +71,8 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, _completerModel = new ShareeModel(_account, _isFile ? QLatin1String("file") : QLatin1String("folder"), _completer); - connect(_completerModel, SIGNAL(shareesReady()), this, SLOT(slotShareesReady())); - connect(_completerModel, SIGNAL(displayErrorMessage(int, QString)), this, SLOT(displayError(int, QString))); + connect(_completerModel, &ShareeModel::shareesReady, this, &ShareUserGroupWidget::slotShareesReady); + connect(_completerModel, &ShareeModel::displayErrorMessage, this, &ShareUserGroupWidget::displayError); _completer->setModel(_completerModel); _completer->setCaseSensitivity(Qt::CaseInsensitive); @@ -80,11 +80,11 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, _ui->shareeLineEdit->setCompleter(_completer); _manager = new ShareManager(_account, this); - connect(_manager, SIGNAL(sharesFetched(QList>)), SLOT(slotSharesFetched(QList>))); - connect(_manager, SIGNAL(shareCreated(QSharedPointer)), SLOT(getShares())); - connect(_manager, SIGNAL(serverError(int, QString)), this, SLOT(displayError(int, QString))); - connect(_ui->shareeLineEdit, SIGNAL(returnPressed()), SLOT(slotLineEditReturn())); - connect(_ui->privateLinkText, SIGNAL(linkActivated(QString)), SLOT(slotPrivateLinkShare())); + connect(_manager, &ShareManager::sharesFetched, this, &ShareUserGroupWidget::slotSharesFetched); + connect(_manager, &ShareManager::shareCreated, this, &ShareUserGroupWidget::getShares); + connect(_manager, &ShareManager::serverError, this, &ShareUserGroupWidget::displayError); + connect(_ui->shareeLineEdit, &QLineEdit::returnPressed, this, &ShareUserGroupWidget::slotLineEditReturn); + connect(_ui->privateLinkText, &QLabel::linkActivated, this, &ShareUserGroupWidget::slotPrivateLinkShare); // By making the next two QueuedConnections we can override // the strings the completer sets on the line edit. @@ -94,9 +94,9 @@ ShareUserGroupWidget::ShareUserGroupWidget(AccountPtr account, Qt::QueuedConnection); // Queued connection so this signal is recieved after textChanged - connect(_ui->shareeLineEdit, SIGNAL(textEdited(QString)), - this, SLOT(slotLineEditTextEdited(QString)), Qt::QueuedConnection); - connect(&_completionTimer, SIGNAL(timeout()), this, SLOT(searchForSharees())); + connect(_ui->shareeLineEdit, &QLineEdit::textEdited, + this, &ShareUserGroupWidget::slotLineEditTextEdited, Qt::QueuedConnection); + connect(&_completionTimer, &QTimer::timeout, this, &ShareUserGroupWidget::searchForSharees); _completionTimer.setSingleShot(true); _completionTimer.setInterval(600); @@ -192,8 +192,8 @@ void ShareUserGroupWidget::slotSharesFetched(const QList> } ShareUserLine *s = new ShareUserLine(share, _maxSharingPermissions, _isFile, _ui->scrollArea); - connect(s, SIGNAL(resizeRequested()), this, SLOT(slotAdjustScrollWidgetSize())); - connect(s, SIGNAL(visualDeletionDone()), this, SLOT(getShares())); + connect(s, &ShareUserLine::resizeRequested, this, &ShareUserGroupWidget::slotAdjustScrollWidgetSize); + connect(s, &ShareUserLine::visualDeletionDone, this, &ShareUserGroupWidget::getShares); layout->addWidget(s); x++; @@ -390,11 +390,11 @@ ShareUserLine::ShareUserLine(QSharedPointer share, _ui->permissionsEdit->setEnabled(maxSharingPermissions & (SharePermissionCreate | SharePermissionUpdate | SharePermissionDelete)); - connect(_permissionUpdate, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged())); - connect(_permissionCreate, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged())); - connect(_permissionDelete, SIGNAL(triggered(bool)), SLOT(slotPermissionsChanged())); - connect(_ui->permissionShare, SIGNAL(clicked(bool)), SLOT(slotPermissionsChanged())); - connect(_ui->permissionsEdit, SIGNAL(clicked(bool)), SLOT(slotEditPermissionsChanged())); + connect(_permissionUpdate, &QAction::triggered, this, &ShareUserLine::slotPermissionsChanged); + connect(_permissionCreate, &QAction::triggered, this, &ShareUserLine::slotPermissionsChanged); + connect(_permissionDelete, &QAction::triggered, this, &ShareUserLine::slotPermissionsChanged); + connect(_ui->permissionShare, &QAbstractButton::clicked, this, &ShareUserLine::slotPermissionsChanged); + connect(_ui->permissionsEdit, &QAbstractButton::clicked, this, &ShareUserLine::slotEditPermissionsChanged); /* * We don't show permssion share for federated shares with server <9.1 @@ -407,8 +407,8 @@ ShareUserLine::ShareUserLine(QSharedPointer share, _ui->permissionToolButton->setVisible(false); } - connect(share.data(), SIGNAL(permissionsSet()), SLOT(slotPermissionsSet())); - connect(share.data(), SIGNAL(shareDeleted()), SLOT(slotShareDeleted())); + connect(share.data(), &Share::permissionsSet, this, &ShareUserLine::slotPermissionsSet); + connect(share.data(), &Share::shareDeleted, this, &ShareUserLine::slotShareDeleted); _ui->deleteShareButton->setIcon(QIcon::fromTheme(QLatin1String("user-trash"), QIcon(QLatin1String(":/client/resources/delete.png")))); @@ -509,8 +509,8 @@ void ShareUserLine::slotShareDeleted() animation->setStartValue(height()); animation->setEndValue(0); - connect(animation, SIGNAL(finished()), SLOT(slotDeleteAnimationFinished())); - connect(animation, SIGNAL(valueChanged(QVariant)), this, SIGNAL(resizeRequested())); + connect(animation, &QAbstractAnimation::finished, this, &ShareUserLine::slotDeleteAnimationFinished); + connect(animation, &QVariantAnimation::valueChanged, this, &ShareUserLine::resizeRequested); animation->start(); } diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 0073e6154..b46ff1c21 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -207,10 +207,10 @@ SocketApi::SocketApi(QObject *parent) qCInfo(lcSocketApi) << "server started, listening at " << socketPath; } - connect(&_localServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection())); + connect(&_localServer, &QLocalServer::newConnection, this, &SocketApi::slotNewConnection); // folder watcher - connect(FolderMan::instance(), SIGNAL(folderSyncStateChange(Folder *)), this, SLOT(slotUpdateFolderView(Folder *))); + connect(FolderMan::instance(), &FolderMan::folderSyncStateChange, this, &SocketApi::slotUpdateFolderView); } SocketApi::~SocketApi() @@ -230,9 +230,9 @@ void SocketApi::slotNewConnection() return; } qCInfo(lcSocketApi) << "New connection" << socket; - connect(socket, SIGNAL(readyRead()), this, SLOT(slotReadSocket())); + connect(socket, &QIODevice::readyRead, this, &SocketApi::slotReadSocket); connect(socket, SIGNAL(disconnected()), this, SLOT(onLostConnection())); - connect(socket, SIGNAL(destroyed(QObject *)), this, SLOT(slotSocketDestroyed(QObject *))); + connect(socket, &QObject::destroyed, this, &SocketApi::slotSocketDestroyed); ASSERT(socket->readAll().isEmpty()); _listeners.append(SocketListener(socket)); diff --git a/src/gui/sslbutton.cpp b/src/gui/sslbutton.cpp index e6c87e1f3..b1a16317c 100644 --- a/src/gui/sslbutton.cpp +++ b/src/gui/sslbutton.cpp @@ -35,8 +35,8 @@ SslButton::SslButton(QWidget *parent) setAutoRaise(true); _menu = new QMenu(this); - QObject::connect(_menu, SIGNAL(aboutToShow()), - this, SLOT(slotUpdateMenu())); + QObject::connect(_menu, &QMenu::aboutToShow, + this, &SslButton::slotUpdateMenu); } QString SslButton::protoToString(QSsl::SslProtocol proto) diff --git a/src/gui/sslerrordialog.cpp b/src/gui/sslerrordialog.cpp index 83ebcffe8..bd4c9b45b 100644 --- a/src/gui/sslerrordialog.cpp +++ b/src/gui/sslerrordialog.cpp @@ -68,13 +68,13 @@ SslErrorDialog::SslErrorDialog(AccountPtr account, QWidget *parent) QPushButton *cancelButton = _ui->_dialogButtonBox->button(QDialogButtonBox::Cancel); okButton->setEnabled(false); - connect(_ui->_cbTrustConnect, SIGNAL(clicked(bool)), - okButton, SLOT(setEnabled(bool))); + connect(_ui->_cbTrustConnect, &QAbstractButton::clicked, + okButton, &QWidget::setEnabled); if (okButton) { okButton->setDefault(true); - connect(okButton, SIGNAL(clicked()), SLOT(accept())); - connect(cancelButton, SIGNAL(clicked()), SLOT(reject())); + connect(okButton, &QAbstractButton::clicked, this, &QDialog::accept); + connect(cancelButton, &QAbstractButton::clicked, this, &QDialog::reject); } } diff --git a/src/gui/synclogdialog.cpp b/src/gui/synclogdialog.cpp index d57f28851..eb58721d8 100644 --- a/src/gui/synclogdialog.cpp +++ b/src/gui/synclogdialog.cpp @@ -41,7 +41,7 @@ SyncLogDialog::SyncLogDialog(QWidget *parent, ProtocolWidget *protoWidget) QPushButton *closeButton = _ui->buttonBox->button(QDialogButtonBox::Close); if (closeButton) { - connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + connect(closeButton, &QAbstractButton::clicked, this, &QWidget::close); } } diff --git a/src/gui/tooltipupdater.cpp b/src/gui/tooltipupdater.cpp index 30f12a39c..205dfc64f 100644 --- a/src/gui/tooltipupdater.cpp +++ b/src/gui/tooltipupdater.cpp @@ -24,8 +24,8 @@ ToolTipUpdater::ToolTipUpdater(QTreeView *treeView) : QObject(treeView) , _treeView(treeView) { - connect(_treeView->model(), SIGNAL(dataChanged(QModelIndex, QModelIndex, QVector)), - SLOT(dataChanged(QModelIndex, QModelIndex, QVector))); + connect(_treeView->model(), &QAbstractItemModel::dataChanged, + this, &ToolTipUpdater::dataChanged); _treeView->viewport()->installEventFilter(this); } diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index f1b3e1efd..8a5a9eff8 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -39,18 +39,18 @@ static const char autoUpdateAttemptedC[] = "Updater/autoUpdateAttempted"; UpdaterScheduler::UpdaterScheduler(QObject *parent) : QObject(parent) { - connect(&_updateCheckTimer, SIGNAL(timeout()), - this, SLOT(slotTimerFired())); + connect(&_updateCheckTimer, &QTimer::timeout, + this, &UpdaterScheduler::slotTimerFired); // Note: the sparkle-updater is not an OCUpdater if (OCUpdater *updater = qobject_cast(Updater::instance())) { - connect(updater, SIGNAL(newUpdateAvailable(QString, QString)), - this, SIGNAL(updaterAnnouncement(QString, QString))); - connect(updater, SIGNAL(requestRestart()), SIGNAL(requestRestart())); + connect(updater, &OCUpdater::newUpdateAvailable, + this, &UpdaterScheduler::updaterAnnouncement); + connect(updater, &OCUpdater::requestRestart, this, &UpdaterScheduler::requestRestart); } // at startup, do a check in any case. - QTimer::singleShot(3000, this, SLOT(slotTimerFired())); + QTimer::singleShot(3000, this, &UpdaterScheduler::slotTimerFired); ConfigFile cfg; auto checkInterval = cfg.updateCheckInterval(); @@ -194,9 +194,9 @@ void OCUpdater::slotStartInstaller() void OCUpdater::checkForUpdate() { QNetworkReply *reply = _accessManager->get(QNetworkRequest(_updateUrl)); - connect(_timeoutWatchdog, SIGNAL(timeout()), this, SLOT(slotTimedOut())); + connect(_timeoutWatchdog, &QTimer::timeout, this, &OCUpdater::slotTimedOut); _timeoutWatchdog->start(30 * 1000); - connect(reply, SIGNAL(finished()), this, SLOT(slotVersionInfoArrived())); + connect(reply, &QNetworkReply::finished, this, &OCUpdater::slotVersionInfoArrived); setDownloadState(CheckingServer); } @@ -303,8 +303,8 @@ void NSISUpdater::versionInfoArrived(const UpdateInfo &info) setDownloadState(DownloadComplete); } else { QNetworkReply *reply = qnam()->get(QNetworkRequest(QUrl(url))); - connect(reply, SIGNAL(readyRead()), SLOT(slotWriteFile())); - connect(reply, SIGNAL(finished()), SLOT(slotDownloadFinished())); + connect(reply, &QIODevice::readyRead, this, &NSISUpdater::slotWriteFile); + connect(reply, &QNetworkReply::finished, this, &NSISUpdater::slotDownloadFinished); setDownloadState(Downloading); _file.reset(new QTemporaryFile); _file->setAutoRemove(true); @@ -353,11 +353,11 @@ void NSISUpdater::showDialog(const UpdateInfo &info) QPushButton *reject = bb->addButton(tr("Skip this time"), QDialogButtonBox::AcceptRole); QPushButton *getupdate = bb->addButton(tr("Get update"), QDialogButtonBox::AcceptRole); - connect(skip, SIGNAL(clicked()), msgBox, SLOT(reject())); - connect(reject, SIGNAL(clicked()), msgBox, SLOT(reject())); - connect(getupdate, SIGNAL(clicked()), msgBox, SLOT(accept())); + connect(skip, &QAbstractButton::clicked, msgBox, &QDialog::reject); + connect(reject, &QAbstractButton::clicked, msgBox, &QDialog::reject); + connect(getupdate, &QAbstractButton::clicked, msgBox, &QDialog::accept); - connect(skip, SIGNAL(clicked()), SLOT(slotSetSeenVersion())); + connect(skip, &QAbstractButton::clicked, this, &NSISUpdater::slotSetSeenVersion); connect(getupdate, SIGNAL(clicked()), SLOT(slotOpenUpdateUrl())); layout->addWidget(bb); diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp index 9bc1b60c3..a181faac0 100644 --- a/src/gui/wizard/owncloudadvancedsetuppage.cpp +++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp @@ -54,12 +54,12 @@ OwncloudAdvancedSetupPage::OwncloudAdvancedSetupPage() stopSpinner(); setupCustomization(); - connect(_ui.pbSelectLocalFolder, SIGNAL(clicked()), SLOT(slotSelectFolder())); + connect(_ui.pbSelectLocalFolder, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectFolder); setButtonText(QWizard::NextButton, tr("Connect...")); - connect(_ui.rSyncEverything, SIGNAL(clicked()), SLOT(slotSyncEverythingClicked())); - connect(_ui.rSelectiveSync, SIGNAL(clicked()), SLOT(slotSelectiveSyncClicked())); - connect(_ui.bSelectiveSync, SIGNAL(clicked()), SLOT(slotSelectiveSyncClicked())); + connect(_ui.rSyncEverything, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSyncEverythingClicked); + connect(_ui.rSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); + connect(_ui.bSelectiveSync, &QAbstractButton::clicked, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); QIcon appIcon = theme->applicationIcon(); _ui.lServerIcon->setText(QString()); @@ -120,13 +120,13 @@ void OwncloudAdvancedSetupPage::initializePage() auto quotaJob = new PropfindJob(acc, _remoteFolder, this); quotaJob->setProperties(QList() << "http://owncloud.org/ns:size"); - connect(quotaJob, SIGNAL(result(QVariantMap)), SLOT(slotQuotaRetrieved(QVariantMap))); + connect(quotaJob, &PropfindJob::result, this, &OwncloudAdvancedSetupPage::slotQuotaRetrieved); quotaJob->start(); if (Theme::instance()->wizardSelectiveSyncDefaultNothing()) { _selectiveSyncBlacklist = QStringList("/"); - QTimer::singleShot(0, this, SLOT(slotSelectiveSyncClicked())); + QTimer::singleShot(0, this, &OwncloudAdvancedSetupPage::slotSelectiveSyncClicked); } ConfigFile cfgFile; diff --git a/src/gui/wizard/owncloudconnectionmethoddialog.cpp b/src/gui/wizard/owncloudconnectionmethoddialog.cpp index 3e40f1546..2c4bd12a5 100644 --- a/src/gui/wizard/owncloudconnectionmethoddialog.cpp +++ b/src/gui/wizard/owncloudconnectionmethoddialog.cpp @@ -24,9 +24,9 @@ OwncloudConnectionMethodDialog::OwncloudConnectionMethodDialog(QWidget *parent) { ui->setupUi(this); - connect(ui->btnNoTLS, SIGNAL(clicked(bool)), this, SLOT(returnNoTLS())); - connect(ui->btnClientSideTLS, SIGNAL(clicked(bool)), this, SLOT(returnClientSideTLS())); - connect(ui->btnBack, SIGNAL(clicked(bool)), this, SLOT(returnBack())); + connect(ui->btnNoTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnNoTLS); + connect(ui->btnClientSideTLS, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnClientSideTLS); + connect(ui->btnBack, &QAbstractButton::clicked, this, &OwncloudConnectionMethodDialog::returnBack); } void OwncloudConnectionMethodDialog::setUrl(const QUrl &url) diff --git a/src/gui/wizard/owncloudsetuppage.cpp b/src/gui/wizard/owncloudsetuppage.cpp index 31a3bbc8e..4440fe21a 100644 --- a/src/gui/wizard/owncloudsetuppage.cpp +++ b/src/gui/wizard/owncloudsetuppage.cpp @@ -66,8 +66,8 @@ OwncloudSetupPage::OwncloudSetupPage(QWidget *parent) setupCustomization(); slotUrlChanged(QLatin1String("")); // don't jitter UI - connect(_ui.leUrl, SIGNAL(textChanged(QString)), SLOT(slotUrlChanged(QString))); - connect(_ui.leUrl, SIGNAL(editingFinished()), SLOT(slotUrlEditFinished())); + connect(_ui.leUrl, &QLineEdit::textChanged, this, &OwncloudSetupPage::slotUrlChanged); + connect(_ui.leUrl, &QLineEdit::editingFinished, this, &OwncloudSetupPage::slotUrlEditFinished); addCertDial = new AddCertificateDialog(this); } @@ -268,7 +268,7 @@ void OwncloudSetupPage::setErrorString(const QString &err, bool retryHTTPonly) } break; case OwncloudConnectionMethodDialog::Client_Side_TLS: addCertDial->show(); - connect(addCertDial, SIGNAL(accepted()), this, SLOT(slotCertificateAccepted())); + connect(addCertDial, &QDialog::accepted, this, &OwncloudSetupPage::slotCertificateAccepted); break; case OwncloudConnectionMethodDialog::Closed: case OwncloudConnectionMethodDialog::Back: diff --git a/src/gui/wizard/owncloudshibbolethcredspage.cpp b/src/gui/wizard/owncloudshibbolethcredspage.cpp index 9d88555a6..1467ea549 100644 --- a/src/gui/wizard/owncloudshibbolethcredspage.cpp +++ b/src/gui/wizard/owncloudshibbolethcredspage.cpp @@ -49,10 +49,10 @@ void OwncloudShibbolethCredsPage::setupBrowser() qnam->setCookieJar(jar); _browser = new ShibbolethWebView(account); - connect(_browser, SIGNAL(shibbolethCookieReceived(const QNetworkCookie &)), - this, SLOT(slotShibbolethCookieReceived(const QNetworkCookie &)), Qt::QueuedConnection); - connect(_browser, SIGNAL(rejected()), - this, SLOT(slotBrowserRejected())); + connect(_browser.data(), &ShibbolethWebView::shibbolethCookieReceived, + this, &OwncloudShibbolethCredsPage::slotShibbolethCookieReceived, Qt::QueuedConnection); + connect(_browser.data(), &ShibbolethWebView::rejected, + this, &OwncloudShibbolethCredsPage::slotBrowserRejected); _browser->move(ocWizard->x(), ocWizard->y()); _browser->show(); diff --git a/src/gui/wizard/owncloudwizard.cpp b/src/gui/wizard/owncloudwizard.cpp index a1c24bbd4..f1397c9b5 100644 --- a/src/gui/wizard/owncloudwizard.cpp +++ b/src/gui/wizard/owncloudwizard.cpp @@ -62,22 +62,22 @@ OwncloudWizard::OwncloudWizard(QWidget *parent) setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); setPage(WizardCommon::Page_Result, _resultPage); - connect(this, SIGNAL(finished(int)), SIGNAL(basicSetupFinished(int))); + connect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); // note: start Id is set by the calling class depending on if the // welcome text is to be shown or not. setWizardStyle(QWizard::ModernStyle); - connect(this, SIGNAL(currentIdChanged(int)), SLOT(slotCurrentPageChanged(int))); - connect(_setupPage, SIGNAL(determineAuthType(QString)), SIGNAL(determineAuthType(QString))); - connect(_httpCredsPage, SIGNAL(connectToOCUrl(QString)), SIGNAL(connectToOCUrl(QString))); - connect(_browserCredsPage, SIGNAL(connectToOCUrl(QString)), SIGNAL(connectToOCUrl(QString))); + connect(this, &QWizard::currentIdChanged, this, &OwncloudWizard::slotCurrentPageChanged); + connect(_setupPage, &OwncloudSetupPage::determineAuthType, this, &OwncloudWizard::determineAuthType); + connect(_httpCredsPage, &OwncloudHttpCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); + connect(_browserCredsPage, &OwncloudOAuthCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); #ifndef NO_SHIBBOLETH - connect(_shibbolethCredsPage, SIGNAL(connectToOCUrl(QString)), SIGNAL(connectToOCUrl(QString))); + connect(_shibbolethCredsPage, &OwncloudShibbolethCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); #endif - connect(_advancedSetupPage, SIGNAL(createLocalAndRemoteFolders(QString, QString)), - SIGNAL(createLocalAndRemoteFolders(QString, QString))); - connect(this, SIGNAL(customButtonClicked(int)), this, SIGNAL(skipFolderConfiguration())); + connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders, + this, &OwncloudWizard::createLocalAndRemoteFolders); + connect(this, &QWizard::customButtonClicked, this, &OwncloudWizard::skipFolderConfiguration); Theme *theme = Theme::instance(); @@ -193,7 +193,7 @@ void OwncloudWizard::slotCurrentPageChanged(int id) } if (id == WizardCommon::Page_Result) { - disconnect(this, SIGNAL(finished(int)), this, SIGNAL(basicSetupFinished(int))); + disconnect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); emit basicSetupFinished(QDialog::Accepted); appendToConfigurationLog(QString::null); // Immediately close on show, we currently don't want this page anymore diff --git a/src/gui/wizard/owncloudwizardresultpage.cpp b/src/gui/wizard/owncloudwizardresultpage.cpp index 4610b409d..71764e35c 100644 --- a/src/gui/wizard/owncloudwizardresultpage.cpp +++ b/src/gui/wizard/owncloudwizardresultpage.cpp @@ -41,7 +41,7 @@ OwncloudWizardResultPage::OwncloudWizardResultPage() _ui.pbOpenLocal->setIcon(QIcon(QLatin1String(":/client/resources/folder-sync.png"))); _ui.pbOpenLocal->setIconSize(QSize(48, 48)); _ui.pbOpenLocal->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - connect(_ui.pbOpenLocal, SIGNAL(clicked()), SLOT(slotOpenLocal())); + connect(_ui.pbOpenLocal, &QAbstractButton::clicked, this, &OwncloudWizardResultPage::slotOpenLocal); Theme *theme = Theme::instance(); QIcon appIcon = theme->applicationIcon(); @@ -49,7 +49,7 @@ OwncloudWizardResultPage::OwncloudWizardResultPage() _ui.pbOpenServer->setIcon(appIcon.pixmap(48)); _ui.pbOpenServer->setIconSize(QSize(48, 48)); _ui.pbOpenServer->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - connect(_ui.pbOpenServer, SIGNAL(clicked()), SLOT(slotOpenServer())); + connect(_ui.pbOpenServer, &QAbstractButton::clicked, this, &OwncloudWizardResultPage::slotOpenServer); setupCustomization(); } diff --git a/src/libsync/abstractnetworkjob.cpp b/src/libsync/abstractnetworkjob.cpp index 14f8b1dda..41d61b307 100644 --- a/src/libsync/abstractnetworkjob.cpp +++ b/src/libsync/abstractnetworkjob.cpp @@ -52,15 +52,15 @@ AbstractNetworkJob::AbstractNetworkJob(AccountPtr account, const QString &path, { _timer.setSingleShot(true); _timer.setInterval(OwncloudPropagator::httpTimeout() * 1000); // default to 5 minutes. - connect(&_timer, SIGNAL(timeout()), this, SLOT(slotTimeout())); + connect(&_timer, &QTimer::timeout, this, &AbstractNetworkJob::slotTimeout); - connect(this, SIGNAL(networkActivity()), SLOT(resetTimeout())); + connect(this, &AbstractNetworkJob::networkActivity, this, &AbstractNetworkJob::resetTimeout); // Network activity on the propagator jobs (GET/PUT) keeps all requests alive. // This is a workaround for OC instances which only support one // parallel up and download if (_account) { - connect(_account.data(), SIGNAL(propagatorNetworkActivity()), SLOT(resetTimeout())); + connect(_account.data(), &Account::propagatorNetworkActivity, this, &AbstractNetworkJob::resetTimeout); } } @@ -103,13 +103,13 @@ void AbstractNetworkJob::setPath(const QString &path) void AbstractNetworkJob::setupConnections(QNetworkReply *reply) { - connect(reply, SIGNAL(finished()), SLOT(slotFinished())); - connect(reply, SIGNAL(encrypted()), SIGNAL(networkActivity())); - connect(reply->manager(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *)), SIGNAL(networkActivity())); - connect(reply, SIGNAL(sslErrors(QList)), SIGNAL(networkActivity())); - connect(reply, SIGNAL(metaDataChanged()), SIGNAL(networkActivity())); - connect(reply, SIGNAL(downloadProgress(qint64, qint64)), SIGNAL(networkActivity())); - connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SIGNAL(networkActivity())); + connect(reply, &QNetworkReply::finished, this, &AbstractNetworkJob::slotFinished); + connect(reply, &QNetworkReply::encrypted, this, &AbstractNetworkJob::networkActivity); + connect(reply->manager(), &QNetworkAccessManager::proxyAuthenticationRequired, this, &AbstractNetworkJob::networkActivity); + connect(reply, &QNetworkReply::sslErrors, this, &AbstractNetworkJob::networkActivity); + connect(reply, &QNetworkReply::metaDataChanged, this, &AbstractNetworkJob::networkActivity); + connect(reply, &QNetworkReply::downloadProgress, this, &AbstractNetworkJob::networkActivity); + connect(reply, &QNetworkReply::uploadProgress, this, &AbstractNetworkJob::networkActivity); } QNetworkReply *AbstractNetworkJob::addTimer(QNetworkReply *reply) diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 589b8e5bd..4c5f8a411 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -150,12 +150,12 @@ void Account::setCredentials(AbstractCredentials *cred) } connect(_am.data(), SIGNAL(sslErrors(QNetworkReply *, QList)), SLOT(slotHandleSslErrors(QNetworkReply *, QList))); - connect(_am.data(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *)), - SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *))); - connect(_credentials.data(), SIGNAL(fetched()), - SLOT(slotCredentialsFetched())); - connect(_credentials.data(), SIGNAL(asked()), - SLOT(slotCredentialsAsked())); + connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired, + this, &Account::proxyAuthenticationRequired); + connect(_credentials.data(), &AbstractCredentials::fetched, + this, &Account::slotCredentialsFetched); + connect(_credentials.data(), &AbstractCredentials::asked, + this, &Account::slotCredentialsAsked); } QUrl Account::davUrl() const @@ -213,8 +213,8 @@ void Account::resetNetworkAccessManager() _am->setCookieJar(jar); // takes ownership of the old cookie jar connect(_am.data(), SIGNAL(sslErrors(QNetworkReply *, QList)), SLOT(slotHandleSslErrors(QNetworkReply *, QList))); - connect(_am.data(), SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *)), - SIGNAL(proxyAuthenticationRequired(QNetworkProxy, QAuthenticator *))); + connect(_am.data(), &QNetworkAccessManager::proxyAuthenticationRequired, + this, &Account::proxyAuthenticationRequired); } QNetworkAccessManager *Account::networkAccessManager() diff --git a/src/libsync/bandwidthmanager.cpp b/src/libsync/bandwidthmanager.cpp index 97cbddd21..0393b353f 100644 --- a/src/libsync/bandwidthmanager.cpp +++ b/src/libsync/bandwidthmanager.cpp @@ -56,34 +56,34 @@ BandwidthManager::BandwidthManager(OwncloudPropagator *p) _currentUploadLimit = _propagator->_uploadLimit.fetchAndAddAcquire(0); _currentDownloadLimit = _propagator->_downloadLimit.fetchAndAddAcquire(0); - QObject::connect(&_switchingTimer, SIGNAL(timeout()), this, SLOT(switchingTimerExpired())); + QObject::connect(&_switchingTimer, &QTimer::timeout, this, &BandwidthManager::switchingTimerExpired); _switchingTimer.setInterval(10 * 1000); _switchingTimer.start(); QMetaObject::invokeMethod(this, "switchingTimerExpired", Qt::QueuedConnection); // absolute uploads/downloads - QObject::connect(&_absoluteLimitTimer, SIGNAL(timeout()), this, SLOT(absoluteLimitTimerExpired())); + QObject::connect(&_absoluteLimitTimer, &QTimer::timeout, this, &BandwidthManager::absoluteLimitTimerExpired); _absoluteLimitTimer.setInterval(1000); _absoluteLimitTimer.start(); // Relative uploads - QObject::connect(&_relativeUploadMeasuringTimer, SIGNAL(timeout()), - this, SLOT(relativeUploadMeasuringTimerExpired())); + QObject::connect(&_relativeUploadMeasuringTimer, &QTimer::timeout, + this, &BandwidthManager::relativeUploadMeasuringTimerExpired); _relativeUploadMeasuringTimer.setInterval(relativeLimitMeasuringTimerIntervalMsec); _relativeUploadMeasuringTimer.start(); _relativeUploadMeasuringTimer.setSingleShot(true); // will be restarted from the delay timer - QObject::connect(&_relativeUploadDelayTimer, SIGNAL(timeout()), - this, SLOT(relativeUploadDelayTimerExpired())); + QObject::connect(&_relativeUploadDelayTimer, &QTimer::timeout, + this, &BandwidthManager::relativeUploadDelayTimerExpired); _relativeUploadDelayTimer.setSingleShot(true); // will be restarted from the measuring timer // Relative downloads - QObject::connect(&_relativeDownloadMeasuringTimer, SIGNAL(timeout()), - this, SLOT(relativeDownloadMeasuringTimerExpired())); + QObject::connect(&_relativeDownloadMeasuringTimer, &QTimer::timeout, + this, &BandwidthManager::relativeDownloadMeasuringTimerExpired); _relativeDownloadMeasuringTimer.setInterval(relativeLimitMeasuringTimerIntervalMsec); _relativeDownloadMeasuringTimer.start(); _relativeDownloadMeasuringTimer.setSingleShot(true); // will be restarted from the delay timer - QObject::connect(&_relativeDownloadDelayTimer, SIGNAL(timeout()), - this, SLOT(relativeDownloadDelayTimerExpired())); + QObject::connect(&_relativeDownloadDelayTimer, &QTimer::timeout, + this, &BandwidthManager::relativeDownloadDelayTimerExpired); _relativeDownloadDelayTimer.setSingleShot(true); // will be restarted from the measuring timer } diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index f2bae6638..fd454e68f 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -116,9 +116,9 @@ void ConnectionValidator::slotCheckServerAndAuth() CheckServerJob *checkJob = new CheckServerJob(_account, this); checkJob->setTimeout(timeoutToUseMsec); checkJob->setIgnoreCredentialFailure(true); - connect(checkJob, SIGNAL(instanceFound(QUrl, QJsonObject)), SLOT(slotStatusFound(QUrl, QJsonObject))); - connect(checkJob, SIGNAL(instanceNotFound(QNetworkReply *)), SLOT(slotNoStatusFound(QNetworkReply *))); - connect(checkJob, SIGNAL(timeout(QUrl)), SLOT(slotJobTimeout(QUrl))); + connect(checkJob, &CheckServerJob::instanceFound, this, &ConnectionValidator::slotStatusFound); + connect(checkJob, &CheckServerJob::instanceNotFound, this, &ConnectionValidator::slotNoStatusFound); + connect(checkJob, &CheckServerJob::timeout, this, &ConnectionValidator::slotJobTimeout); checkJob->start(); } @@ -154,7 +154,7 @@ void ConnectionValidator::slotStatusFound(const QUrl &url, const QJsonObject &in } // now check the authentication - QTimer::singleShot( 0, this, SLOT( checkAuthentication() )); + QTimer::singleShot(0, this, &ConnectionValidator::checkAuthentication); } // status.php could not be loaded (network or server issue!). @@ -201,8 +201,8 @@ void ConnectionValidator::checkAuthentication() PropfindJob *job = new PropfindJob(_account, "/", this); job->setTimeout(timeoutToUseMsec); job->setProperties(QList() << "getlastmodified"); - connect(job, SIGNAL(result(QVariantMap)), SLOT(slotAuthSuccess())); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), SLOT(slotAuthFailed(QNetworkReply *))); + connect(job, &PropfindJob::result, this, &ConnectionValidator::slotAuthSuccess); + connect(job, &PropfindJob::finishedWithError, this, &ConnectionValidator::slotAuthFailed); job->start(); } @@ -249,7 +249,7 @@ void ConnectionValidator::checkServerCapabilities() { JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/capabilities"), this); job->setTimeout(timeoutToUseMsec); - QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotCapabilitiesRecieved(QJsonDocument))); + QObject::connect(job, &JsonApiJob::jsonReceived, this, &ConnectionValidator::slotCapabilitiesRecieved); job->start(); } @@ -272,7 +272,7 @@ void ConnectionValidator::fetchUser() { JsonApiJob *job = new JsonApiJob(_account, QLatin1String("ocs/v1.php/cloud/user"), this); job->setTimeout(timeoutToUseMsec); - QObject::connect(job, SIGNAL(jsonReceived(QJsonDocument, int)), this, SLOT(slotUserFetched(QJsonDocument))); + QObject::connect(job, &JsonApiJob::jsonReceived, this, &ConnectionValidator::slotUserFetched); job->start(); } @@ -312,7 +312,7 @@ void ConnectionValidator::slotUserFetched(const QJsonDocument &json) AvatarJob *job = new AvatarJob(_account, this); job->setTimeout(20 * 1000); - QObject::connect(job, SIGNAL(avatarPixmap(QImage)), this, SLOT(slotAvatarImage(QImage))); + QObject::connect(job, &AvatarJob::avatarPixmap, this, &ConnectionValidator::slotAvatarImage); job->start(); } diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index a40890424..52e96edf3 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -147,8 +147,8 @@ QNetworkAccessManager *HttpCredentials::createQNAM() const { AccessManager *qnam = new HttpCredentialsAccessManager(this); - connect(qnam, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)), - this, SLOT(slotAuthentication(QNetworkReply *, QAuthenticator *))); + connect(qnam, &QNetworkAccessManager::authenticationRequired, + this, &HttpCredentials::slotAuthentication); return qnam; } @@ -198,7 +198,7 @@ void HttpCredentials::fetchFromKeychainHelper() addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadClientCertPEMJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotReadClientCertPEMJobDone); job->start(); } @@ -238,7 +238,7 @@ void HttpCredentials::slotReadClientCertPEMJobDone(QKeychain::Job *incoming) addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadClientKeyPEMJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotReadClientKeyPEMJobDone); job->start(); } @@ -273,7 +273,7 @@ void HttpCredentials::slotReadClientKeyPEMJobDone(QKeychain::Job *incoming) addSettingsToJob(_account, job); job->setInsecureFallback(false); job->setKey(kck); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotReadJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotReadJobDone); job->start(); } @@ -419,7 +419,7 @@ void HttpCredentials::invalidateToken() // indirectly) from QNetworkAccessManagerPrivate::authenticationRequired, which itself // is a called from a BlockingQueuedConnection from the Qt HTTP thread. And clearing the // cache needs to synchronize again with the HTTP thread. - QTimer::singleShot(0, _account, SLOT(clearQNAMCache())); + QTimer::singleShot(0, _account, &Account::clearQNAMCache); } void HttpCredentials::forgetSensitiveData() @@ -446,7 +446,7 @@ void HttpCredentials::persist() WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteClientCertPEMJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteClientCertPEMJobDone); job->setKey(keychainKey(_account->url().toString(), _user + clientCertificatePEMC, _account->id())); job->setBinaryData(_clientSslCertificate.toPem()); job->start(); @@ -459,7 +459,7 @@ void HttpCredentials::slotWriteClientCertPEMJobDone(Job *incomingJob) WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteClientKeyPEMJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteClientKeyPEMJobDone); job->setKey(keychainKey(_account->url().toString(), _user + clientKeyPEMC, _account->id())); job->setBinaryData(_clientSslKey.toPem()); job->start(); @@ -471,7 +471,7 @@ void HttpCredentials::slotWriteClientKeyPEMJobDone(Job *incomingJob) WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName()); addSettingsToJob(_account, job); job->setInsecureFallback(false); - connect(job, SIGNAL(finished(QKeychain::Job *)), SLOT(slotWriteJobDone(QKeychain::Job *))); + connect(job, &Job::finished, this, &HttpCredentials::slotWriteJobDone); job->setKey(keychainKey(_account->url().toString(), _user, _account->id())); job->setTextData(isUsingOAuth() ? _refreshToken : _password); job->start(); diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index a4345c58a..537e6ee02 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -282,10 +282,10 @@ void DiscoverySingleDirectoryJob::start() lsColJob->setProperties(props); - QObject::connect(lsColJob, SIGNAL(directoryListingIterated(QString, QMap)), - this, SLOT(directoryListingIteratedSlot(QString, QMap))); - QObject::connect(lsColJob, SIGNAL(finishedWithError(QNetworkReply *)), this, SLOT(lsJobFinishedWithErrorSlot(QNetworkReply *))); - QObject::connect(lsColJob, SIGNAL(finishedWithoutError()), this, SLOT(lsJobFinishedWithoutErrorSlot())); + QObject::connect(lsColJob, &LsColJob::directoryListingIterated, + this, &DiscoverySingleDirectoryJob::directoryListingIteratedSlot); + QObject::connect(lsColJob, &LsColJob::finishedWithError, this, &DiscoverySingleDirectoryJob::lsJobFinishedWithErrorSlot); + QObject::connect(lsColJob, &LsColJob::finishedWithoutError, this, &DiscoverySingleDirectoryJob::lsJobFinishedWithoutErrorSlot); lsColJob->start(); _lsColJob = lsColJob; @@ -469,11 +469,11 @@ void DiscoveryMainThread::setupHooks(DiscoveryJob *discoveryJob, const QString & _discoveryJob = discoveryJob; _pathPrefix = pathPrefix; - connect(discoveryJob, SIGNAL(doOpendirSignal(QString, DiscoveryDirectoryResult *)), - this, SLOT(doOpendirSlot(QString, DiscoveryDirectoryResult *)), + connect(discoveryJob, &DiscoveryJob::doOpendirSignal, + this, &DiscoveryMainThread::doOpendirSlot, Qt::QueuedConnection); - connect(discoveryJob, SIGNAL(doGetSizeSignal(QString, qint64 *)), - this, SLOT(doGetSizeSlot(QString, qint64 *)), + connect(discoveryJob, &DiscoveryJob::doGetSizeSignal, + this, &DiscoveryMainThread::doGetSizeSlot, Qt::QueuedConnection); } @@ -499,16 +499,16 @@ void DiscoveryMainThread::doOpendirSlot(const QString &subPath, DiscoveryDirecto // Schedule the DiscoverySingleDirectoryJob _singleDirJob = new DiscoverySingleDirectoryJob(_account, fullPath, this); - QObject::connect(_singleDirJob, SIGNAL(finishedWithResult()), - this, SLOT(singleDirectoryJobResultSlot())); - QObject::connect(_singleDirJob, SIGNAL(finishedWithError(int, QString)), - this, SLOT(singleDirectoryJobFinishedWithErrorSlot(int, QString))); - QObject::connect(_singleDirJob, SIGNAL(firstDirectoryPermissions(QString)), - this, SLOT(singleDirectoryJobFirstDirectoryPermissionsSlot(QString))); - QObject::connect(_singleDirJob, SIGNAL(etagConcatenation(QString)), - this, SIGNAL(etagConcatenation(QString))); - QObject::connect(_singleDirJob, SIGNAL(etag(QString)), - this, SIGNAL(etag(QString))); + QObject::connect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::finishedWithResult, + this, &DiscoveryMainThread::singleDirectoryJobResultSlot); + QObject::connect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::finishedWithError, + this, &DiscoveryMainThread::singleDirectoryJobFinishedWithErrorSlot); + QObject::connect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::firstDirectoryPermissions, + this, &DiscoveryMainThread::singleDirectoryJobFirstDirectoryPermissionsSlot); + QObject::connect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::etagConcatenation, + this, &DiscoveryMainThread::etagConcatenation); + QObject::connect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::etag, + this, &DiscoveryMainThread::etag); if (!_firstFolderProcessed) { _singleDirJob->setIsRootPath(); @@ -584,10 +584,10 @@ void DiscoveryMainThread::doGetSizeSlot(const QString &path, qint64 *result) auto propfindJob = new PropfindJob(_account, fullPath, this); propfindJob->setProperties(QList() << "resourcetype" << "http://owncloud.org/ns:size"); - QObject::connect(propfindJob, SIGNAL(finishedWithError()), - this, SLOT(slotGetSizeFinishedWithError())); - QObject::connect(propfindJob, SIGNAL(result(QVariantMap)), - this, SLOT(slotGetSizeResult(QVariantMap))); + QObject::connect(propfindJob, &PropfindJob::finishedWithError, + this, &DiscoveryMainThread::slotGetSizeFinishedWithError); + QObject::connect(propfindJob, &PropfindJob::result, + this, &DiscoveryMainThread::slotGetSizeResult); propfindJob->start(); } diff --git a/src/libsync/networkjobs.cpp b/src/libsync/networkjobs.cpp index 3a87571cf..3af0f6c21 100644 --- a/src/libsync/networkjobs.cpp +++ b/src/libsync/networkjobs.cpp @@ -362,14 +362,14 @@ bool LsColJob::finished() int httpCode = reply()->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (httpCode == 207 && contentType.contains("application/xml; charset=utf-8")) { LsColXMLParser parser; - connect(&parser, SIGNAL(directoryListingSubfolders(const QStringList &)), - this, SIGNAL(directoryListingSubfolders(const QStringList &))); - connect(&parser, SIGNAL(directoryListingIterated(const QString &, const QMap &)), - this, SIGNAL(directoryListingIterated(const QString &, const QMap &))); - connect(&parser, SIGNAL(finishedWithError(QNetworkReply *)), - this, SIGNAL(finishedWithError(QNetworkReply *))); - connect(&parser, SIGNAL(finishedWithoutError()), - this, SIGNAL(finishedWithoutError())); + connect(&parser, &LsColXMLParser::directoryListingSubfolders, + this, &LsColJob::directoryListingSubfolders); + connect(&parser, &LsColXMLParser::directoryListingIterated, + this, &LsColJob::directoryListingIterated); + connect(&parser, &LsColXMLParser::finishedWithError, + this, &LsColJob::finishedWithError); + connect(&parser, &LsColXMLParser::finishedWithoutError, + this, &LsColJob::finishedWithoutError); QString expectedPath = reply()->request().url().path(); // something like "/owncloud/remote.php/webdav/folder" if (!parser.parse(reply()->readAll(), &_sizes, expectedPath)) { @@ -400,16 +400,16 @@ CheckServerJob::CheckServerJob(AccountPtr account, QObject *parent) , _permanentRedirects(0) { setIgnoreCredentialFailure(true); - connect(this, SIGNAL(redirected(QNetworkReply *, QUrl, int)), - SLOT(slotRedirected(QNetworkReply *, QUrl, int))); + connect(this, &AbstractNetworkJob::redirected, + this, &CheckServerJob::slotRedirected); } void CheckServerJob::start() { _serverUrl = account()->url(); sendRequest("GET", Utility::concatUrlPath(_serverUrl, path())); - connect(reply(), SIGNAL(metaDataChanged()), this, SLOT(metaDataChangedSlot())); - connect(reply(), SIGNAL(encrypted()), this, SLOT(encryptedSlot())); + connect(reply(), &QNetworkReply::metaDataChanged, this, &CheckServerJob::metaDataChangedSlot); + connect(reply(), &QNetworkReply::encrypted, this, &CheckServerJob::encryptedSlot); AbstractNetworkJob::start(); } diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 346d61e86..46c3899ae 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -331,8 +331,8 @@ bool PropagateItemJob::checkForProblemsWithShared(int httpStatusCode, const QStr if (newJob) { newJob->setRestoreJobMsg(msg); _restoreJob.reset(newJob); - connect(_restoreJob.data(), SIGNAL(finished(SyncFileItem::Status)), - this, SLOT(slotRestoreJobFinished(SyncFileItem::Status))); + connect(_restoreJob.data(), &PropagatorJob::finished, + this, &PropagateItemJob::slotRestoreJobFinished); QMetaObject::invokeMethod(newJob, "start"); } return true; @@ -521,7 +521,7 @@ void OwncloudPropagator::start(const SyncFileItemVector &items) _rootJob->appendJob(it); } - connect(_rootJob.data(), SIGNAL(finished(SyncFileItem::Status)), this, SLOT(emitFinished(SyncFileItem::Status))); + connect(_rootJob.data(), &PropagatorJob::finished, this, &OwncloudPropagator::emitFinished); scheduleNextJob(); } @@ -654,7 +654,7 @@ QString OwncloudPropagator::getFilePath(const QString &tmp_file_name) const void OwncloudPropagator::scheduleNextJob() { - QTimer::singleShot(0, this, SLOT(scheduleNextJobImpl())); + QTimer::singleShot(0, this, &OwncloudPropagator::scheduleNextJobImpl); } void OwncloudPropagator::scheduleNextJobImpl() @@ -854,9 +854,9 @@ PropagateDirectory::PropagateDirectory(OwncloudPropagator *propagator, const Syn , _subJobs(propagator) { if (_firstJob) { - connect(_firstJob.data(), SIGNAL(finished(SyncFileItem::Status)), this, SLOT(slotFirstJobFinished(SyncFileItem::Status))); + connect(_firstJob.data(), &PropagatorJob::finished, this, &PropagateDirectory::slotFirstJobFinished); } - connect(&_subJobs, SIGNAL(finished(SyncFileItem::Status)), this, SLOT(slotSubJobsFinished(SyncFileItem::Status))); + connect(&_subJobs, &PropagatorJob::finished, this, &PropagateDirectory::slotSubJobsFinished); } PropagatorJob::JobParallelism PropagateDirectory::parallelism() @@ -968,7 +968,7 @@ void CleanupPollsJob::start() if (record.isValid()) { SyncFileItemPtr item = SyncFileItem::fromSyncJournalFileRecord(record); PollJob *job = new PollJob(_account, info._url, item, _journal, _localPath, this); - connect(job, SIGNAL(finishedSignal()), SLOT(slotPollFinished())); + connect(job, &PollJob::finishedSignal, this, &CleanupPollsJob::slotPollFinished); job->start(); } } diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index f62fd58a9..605614902 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -221,7 +221,7 @@ private slots: bool possiblyRunNextJob(PropagatorJob *next) { if (next->_state == NotYetStarted) { - connect(next, SIGNAL(finished(SyncFileItem::Status)), this, SLOT(slotSubJobFinished(SyncFileItem::Status))); + connect(next, &PropagatorJob::finished, this, &PropagatorCompositeJob::slotSubJobFinished); } return next->scheduleSelfOrChild(); } diff --git a/src/libsync/progressdispatcher.cpp b/src/libsync/progressdispatcher.cpp index df6417e4a..bfdc0521b 100644 --- a/src/libsync/progressdispatcher.cpp +++ b/src/libsync/progressdispatcher.cpp @@ -130,7 +130,7 @@ void ProgressDispatcher::setProgressInfo(const QString &folder, const ProgressIn ProgressInfo::ProgressInfo() { - connect(&_updateEstimatesTimer, SIGNAL(timeout()), SLOT(updateEstimates())); + connect(&_updateEstimatesTimer, &QTimer::timeout, this, &ProgressInfo::updateEstimates); reset(); } diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 3e6b8898a..812c01316 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -137,10 +137,10 @@ void GETFileJob::start() qCWarning(lcGetJob) << " Network error: " << errorString(); } - connect(reply(), SIGNAL(metaDataChanged()), this, SLOT(slotMetaDataChanged())); - connect(reply(), SIGNAL(readyRead()), this, SLOT(slotReadyRead())); - connect(reply(), SIGNAL(downloadProgress(qint64, qint64)), this, SIGNAL(downloadProgress(qint64, qint64))); - connect(this, SIGNAL(networkActivity()), account().data(), SIGNAL(propagatorNetworkActivity())); + connect(reply(), &QNetworkReply::metaDataChanged, this, &GETFileJob::slotMetaDataChanged); + connect(reply(), &QIODevice::readyRead, this, &GETFileJob::slotReadyRead); + connect(reply(), &QNetworkReply::downloadProgress, this, &GETFileJob::downloadProgress); + connect(this, &AbstractNetworkJob::networkActivity, account().data(), &Account::propagatorNetworkActivity); AbstractNetworkJob::start(); } @@ -356,8 +356,8 @@ void PropagateDownloadFile::start() qCDebug(lcPropagateDownload) << _item->_file << "may not need download, computing checksum"; auto computeChecksum = new ComputeChecksum(this); computeChecksum->setChecksumType(parseChecksumHeaderType(_item->_checksumHeader)); - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - SLOT(conflictChecksumComputed(QByteArray, QByteArray))); + connect(computeChecksum, &ComputeChecksum::done, + this, &PropagateDownloadFile::conflictChecksumComputed); computeChecksum->start(propagator()->getFilePath(_item->_file)); return; } @@ -478,8 +478,8 @@ void PropagateDownloadFile::startDownload() &_tmpFile, headers, expectedEtagForResume, _resumeStart, this); } _job->setBandwidthManager(&propagator()->_bandwidthManager); - connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotGetFinished())); - connect(_job, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(slotDownloadProgress(qint64, qint64))); + connect(_job.data(), &GETFileJob::finishedSignal, this, &PropagateDownloadFile::slotGetFinished); + connect(_job.data(), &GETFileJob::downloadProgress, this, &PropagateDownloadFile::slotDownloadProgress); propagator()->_activeJobList.append(this); _job->start(); } @@ -620,10 +620,10 @@ void PropagateDownloadFile::slotGetFinished() // will also emit the validated() signal to continue the flow in slot transmissionChecksumValidated() // as this is (still) also correct. ValidateChecksumHeader *validator = new ValidateChecksumHeader(this); - connect(validator, SIGNAL(validated(QByteArray, QByteArray)), - SLOT(transmissionChecksumValidated(QByteArray, QByteArray))); - connect(validator, SIGNAL(validationFailed(QString)), - SLOT(slotChecksumFail(QString))); + connect(validator, &ValidateChecksumHeader::validated, + this, &PropagateDownloadFile::transmissionChecksumValidated); + connect(validator, &ValidateChecksumHeader::validationFailed, + this, &PropagateDownloadFile::slotChecksumFail); auto checksumHeader = job->reply()->rawHeader(checkSumHeaderC); validator->start(_tmpFile.fileName(), checksumHeader); } @@ -750,8 +750,8 @@ void PropagateDownloadFile::transmissionChecksumValidated(const QByteArray &chec auto computeChecksum = new ComputeChecksum(this); computeChecksum->setChecksumType(theContentChecksumType); - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - SLOT(contentChecksumComputed(QByteArray, QByteArray))); + connect(computeChecksum, &ComputeChecksum::done, + this, &PropagateDownloadFile::contentChecksumComputed); computeChecksum->start(_tmpFile.fileName()); } diff --git a/src/libsync/propagateremotedelete.cpp b/src/libsync/propagateremotedelete.cpp index 0ace61790..2e7d03b22 100644 --- a/src/libsync/propagateremotedelete.cpp +++ b/src/libsync/propagateremotedelete.cpp @@ -70,7 +70,7 @@ void PropagateRemoteDelete::start() _job = new DeleteJob(propagator()->account(), propagator()->_remoteFolder + _item->_file, this); - connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotDeleteJobFinished())); + connect(_job.data(), &DeleteJob::finishedSignal, this, &PropagateRemoteDelete::slotDeleteJobFinished); propagator()->_activeJobList.append(this); _job->start(); } diff --git a/src/libsync/propagateremotemkdir.cpp b/src/libsync/propagateremotemkdir.cpp index 4772f42eb..fb0869a2b 100644 --- a/src/libsync/propagateremotemkdir.cpp +++ b/src/libsync/propagateremotemkdir.cpp @@ -111,8 +111,8 @@ void PropagateRemoteMkdir::slotMkcolJobFinished() auto propfindJob = new PropfindJob(_job->account(), _job->path(), this); propfindJob->setProperties(QList() << "getetag" << "http://owncloud.org/ns:id"); - QObject::connect(propfindJob, SIGNAL(result(QVariantMap)), this, SLOT(propfindResult(QVariantMap))); - QObject::connect(propfindJob, SIGNAL(finishedWithError()), this, SLOT(propfindError())); + QObject::connect(propfindJob, &PropfindJob::result, this, &PropagateRemoteMkdir::propfindResult); + QObject::connect(propfindJob, &PropfindJob::finishedWithError, this, &PropagateRemoteMkdir::propfindError); propfindJob->start(); _job = propfindJob; return; diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index b347b0ab0..db8ab1836 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -112,7 +112,7 @@ void PropagateRemoteMove::start() _job = new MoveJob(propagator()->account(), propagator()->_remoteFolder + _item->_file, destination, this); - connect(_job, SIGNAL(finishedSignal()), this, SLOT(slotMoveJobFinished())); + connect(_job.data(), &MoveJob::finishedSignal, this, &PropagateRemoteMove::slotMoveJobFinished); propagator()->_activeJobList.append(this); _job->start(); } diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index 05ec97a00..5ba8a5c6b 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -85,8 +85,8 @@ void PUTFileJob::start() qCWarning(lcPutJob) << " Network error: " << reply()->errorString(); } - connect(reply(), SIGNAL(uploadProgress(qint64, qint64)), this, SIGNAL(uploadProgress(qint64, qint64))); - connect(this, SIGNAL(networkActivity()), account().data(), SIGNAL(propagatorNetworkActivity())); + connect(reply(), &QNetworkReply::uploadProgress, this, &PUTFileJob::uploadProgress); + connect(this, &AbstractNetworkJob::networkActivity, account().data(), &Account::propagatorNetworkActivity); _requestTimer.start(); AbstractNetworkJob::start(); } @@ -98,7 +98,7 @@ void PollJob::start() QUrl finalUrl = QUrl::fromUserInput(accountUrl.scheme() + QLatin1String("://") + accountUrl.authority() + (path().startsWith('/') ? QLatin1String("") : QLatin1String("/")) + path()); sendRequest("GET", finalUrl); - connect(reply(), SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(resetTimeout())); + connect(reply(), &QNetworkReply::downloadProgress, this, &AbstractNetworkJob::resetTimeout); AbstractNetworkJob::start(); } @@ -197,8 +197,8 @@ void PropagateUploadFileCommon::start() propagator()->_remoteFolder + _item->_file, this); _jobs.append(job); - connect(job, SIGNAL(finishedSignal()), SLOT(slotComputeContentChecksum())); - connect(job, SIGNAL(destroyed(QObject *)), SLOT(slotJobDestroyed(QObject *))); + connect(job, &DeleteJob::finishedSignal, this, &PropagateUploadFileCommon::slotComputeContentChecksum); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); } @@ -232,10 +232,10 @@ void PropagateUploadFileCommon::slotComputeContentChecksum() auto computeChecksum = new ComputeChecksum(this); computeChecksum->setChecksumType(checksumType); - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - SLOT(slotComputeTransmissionChecksum(QByteArray, QByteArray))); - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - computeChecksum, SLOT(deleteLater())); + connect(computeChecksum, &ComputeChecksum::done, + this, &PropagateUploadFileCommon::slotComputeTransmissionChecksum); + connect(computeChecksum, &ComputeChecksum::done, + computeChecksum, &QObject::deleteLater); computeChecksum->start(filePath); } @@ -264,10 +264,10 @@ void PropagateUploadFileCommon::slotComputeTransmissionChecksum(const QByteArray computeChecksum->setChecksumType(QByteArray()); } - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - SLOT(slotStartUpload(QByteArray, QByteArray))); - connect(computeChecksum, SIGNAL(done(QByteArray, QByteArray)), - computeChecksum, SLOT(deleteLater())); + connect(computeChecksum, &ComputeChecksum::done, + this, &PropagateUploadFileCommon::slotStartUpload); + connect(computeChecksum, &ComputeChecksum::done, + computeChecksum, &QObject::deleteLater); const QString filePath = propagator()->getFilePath(_item->_file); computeChecksum->start(filePath); } @@ -465,7 +465,7 @@ void PropagateUploadFileCommon::startPollJob(const QString &path) { PollJob *job = new PollJob(propagator()->account(), path, _item, propagator()->_journal, propagator()->_localDir, this); - connect(job, SIGNAL(finishedSignal()), SLOT(slotPollFinished())); + connect(job, &PollJob::finishedSignal, this, &PropagateUploadFileCommon::slotPollFinished); SyncJournalDb::PollInfo info; info._file = _item->_file; info._url = path; diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 4afdad38b..379726672 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -90,12 +90,12 @@ void PropagateUploadFileNG::doStartUpload() _jobs.append(job); job->setProperties(QList() << "resourcetype" << "getcontentlength"); - connect(job, SIGNAL(finishedWithoutError()), this, SLOT(slotPropfindFinished())); - connect(job, SIGNAL(finishedWithError(QNetworkReply *)), - this, SLOT(slotPropfindFinishedWithError())); - connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotJobDestroyed(QObject *))); - connect(job, SIGNAL(directoryListingIterated(QString, QMap)), - this, SLOT(slotPropfindIterate(QString, QMap))); + connect(job, &LsColJob::finishedWithoutError, this, &PropagateUploadFileNG::slotPropfindFinished); + connect(job, &LsColJob::finishedWithError, + this, &PropagateUploadFileNG::slotPropfindFinishedWithError); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); + connect(job, &LsColJob::directoryListingIterated, + this, &PropagateUploadFileNG::slotPropfindIterate); job->start(); return; } else if (progressInfo._valid) { @@ -159,7 +159,7 @@ void PropagateUploadFileNG::slotPropfindFinished() // with corruptions if there are too many chunks, or if we abort and there are still stale chunks. for (auto it = _serverChunks.begin(); it != _serverChunks.end(); ++it) { auto job = new DeleteJob(propagator()->account(), Utility::concatUrlPath(chunkUrl(), it->originalName), this); - QObject::connect(job, SIGNAL(finishedSignal()), this, SLOT(slotDeleteJobFinished())); + QObject::connect(job, &DeleteJob::finishedSignal, this, &PropagateUploadFileNG::slotDeleteJobFinished); _jobs.append(job); job->start(); } @@ -238,7 +238,7 @@ void PropagateUploadFileNG::startNewUpload() connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), this, SLOT(slotMkColFinished(QNetworkReply::NetworkError))); - connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotJobDestroyed(QObject *))); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); } @@ -292,8 +292,8 @@ void PropagateUploadFileNG::startNextChunk() auto job = new MoveJob(propagator()->account(), Utility::concatUrlPath(chunkUrl(), "/.file"), destination, headers, this); _jobs.append(job); - connect(job, SIGNAL(finishedSignal()), this, SLOT(slotMoveJobFinished())); - connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotJobDestroyed(QObject *))); + connect(job, &MoveJob::finishedSignal, this, &PropagateUploadFileNG::slotMoveJobFinished); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); propagator()->_activeJobList.append(this); job->start(); return; @@ -324,12 +324,12 @@ void PropagateUploadFileNG::startNextChunk() // job takes ownership of device via a QScopedPointer. Job deletes itself when finishing PUTFileJob *job = new PUTFileJob(propagator()->account(), url, device, headers, _currentChunk, this); _jobs.append(job); - connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished())); - connect(job, SIGNAL(uploadProgress(qint64, qint64)), - this, SLOT(slotUploadProgress(qint64, qint64))); + connect(job, &PUTFileJob::finishedSignal, this, &PropagateUploadFileNG::slotPutFinished); + connect(job, &PUTFileJob::uploadProgress, + this, &PropagateUploadFileNG::slotUploadProgress); connect(job, SIGNAL(uploadProgress(qint64, qint64)), device, SLOT(slotJobUploadProgress(qint64, qint64))); - connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotJobDestroyed(QObject *))); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); propagator()->_activeJobList.append(this); _currentChunk++; diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index 790023a64..b03ac6d9e 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -126,10 +126,10 @@ void PropagateUploadFileV1::startNextChunk() // job takes ownership of device via a QScopedPointer. Job deletes itself when finishing PUTFileJob *job = new PUTFileJob(propagator()->account(), propagator()->_remoteFolder + path, device, headers, _currentChunk, this); _jobs.append(job); - connect(job, SIGNAL(finishedSignal()), this, SLOT(slotPutFinished())); - connect(job, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(slotUploadProgress(qint64, qint64))); + connect(job, &PUTFileJob::finishedSignal, this, &PropagateUploadFileV1::slotPutFinished); + connect(job, &PUTFileJob::uploadProgress, this, &PropagateUploadFileV1::slotUploadProgress); connect(job, SIGNAL(uploadProgress(qint64, qint64)), device, SLOT(slotJobUploadProgress(qint64, qint64))); - connect(job, SIGNAL(destroyed(QObject *)), this, SLOT(slotJobDestroyed(QObject *))); + connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); propagator()->_activeJobList.append(this); _currentChunk++; diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index b133df115..b4b10d405 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -95,7 +95,7 @@ SyncEngine::SyncEngine(AccountPtr account, const QString &localPath, _clearTouchedFilesTimer.setSingleShot(true); _clearTouchedFilesTimer.setInterval(30 * 1000); - connect(&_clearTouchedFilesTimer, SIGNAL(timeout()), SLOT(slotClearTouchedFiles())); + connect(&_clearTouchedFilesTimer, &QTimer::timeout, this, &SyncEngine::slotClearTouchedFiles); _thread.setObjectName("SyncEngine_Thread"); } @@ -731,8 +731,8 @@ void SyncEngine::startSync() qCInfo(lcEngine) << "Finish Poll jobs before starting a sync"; CleanupPollsJob *job = new CleanupPollsJob(pollInfos, _account, _journal, _localPath, this); - connect(job, SIGNAL(finished()), this, SLOT(startSync())); - connect(job, SIGNAL(aborted(QString)), this, SLOT(slotCleanPollsJobAborted(QString))); + connect(job, &CleanupPollsJob::finished, this, &SyncEngine::startSync); + connect(job, &CleanupPollsJob::aborted, this, &SyncEngine::slotCleanPollsJobAborted); job->start(); return; } @@ -845,13 +845,13 @@ void SyncEngine::startSync() _discoveryMainThread = new DiscoveryMainThread(account()); _discoveryMainThread->setParent(this); - connect(this, SIGNAL(finished(bool)), _discoveryMainThread, SLOT(deleteLater())); + connect(this, &SyncEngine::finished, _discoveryMainThread.data(), &QObject::deleteLater); qCInfo(lcEngine) << "Server" << account()->serverVersion() << (account()->isHttp2Supported() ? "Using HTTP/2" : ""); if (account()->rootEtagChangesNotOnlySubFolderEtags()) { - connect(_discoveryMainThread, SIGNAL(etag(QString)), this, SLOT(slotRootEtagReceived(QString))); + connect(_discoveryMainThread.data(), &DiscoveryMainThread::etag, this, &SyncEngine::slotRootEtagReceived); } else { - connect(_discoveryMainThread, SIGNAL(etagConcatenation(QString)), this, SLOT(slotRootEtagReceived(QString))); + connect(_discoveryMainThread.data(), &DiscoveryMainThread::etagConcatenation, this, &SyncEngine::slotRootEtagReceived); } DiscoveryJob *discoveryJob = new DiscoveryJob(_csync_ctx.data()); @@ -868,12 +868,12 @@ void SyncEngine::startSync() discoveryJob->_syncOptions = _syncOptions; discoveryJob->moveToThread(&_thread); - connect(discoveryJob, SIGNAL(finished(int)), this, SLOT(slotDiscoveryJobFinished(int))); - connect(discoveryJob, SIGNAL(folderDiscovered(bool, QString)), - this, SLOT(slotFolderDiscovered(bool, QString))); + connect(discoveryJob, &DiscoveryJob::finished, this, &SyncEngine::slotDiscoveryJobFinished); + connect(discoveryJob, &DiscoveryJob::folderDiscovered, + this, &SyncEngine::slotFolderDiscovered); - connect(discoveryJob, SIGNAL(newBigFolder(QString, bool)), - this, SIGNAL(newBigFolder(QString, bool))); + connect(discoveryJob, &DiscoveryJob::newBigFolder, + this, &SyncEngine::newBigFolder); // This is used for the DiscoveryJob to be able to request the main thread/ @@ -1038,15 +1038,15 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) _propagator = QSharedPointer( new OwncloudPropagator(_account, _localPath, _remotePath, _journal)); _propagator->setSyncOptions(_syncOptions); - connect(_propagator.data(), SIGNAL(itemCompleted(const SyncFileItemPtr &)), - this, SLOT(slotItemCompleted(const SyncFileItemPtr &))); - connect(_propagator.data(), SIGNAL(progress(const SyncFileItem &, quint64)), - this, SLOT(slotProgress(const SyncFileItem &, quint64))); - connect(_propagator.data(), SIGNAL(finished(bool)), this, SLOT(slotFinished(bool)), Qt::QueuedConnection); - connect(_propagator.data(), SIGNAL(seenLockedFile(QString)), SIGNAL(seenLockedFile(QString))); - connect(_propagator.data(), SIGNAL(touchedFile(QString)), SLOT(slotAddTouchedFile(QString))); - connect(_propagator.data(), SIGNAL(insufficientLocalStorage()), SLOT(slotInsufficientLocalStorage())); - connect(_propagator.data(), SIGNAL(insufficientRemoteStorage()), SLOT(slotInsufficientRemoteStorage())); + connect(_propagator.data(), &OwncloudPropagator::itemCompleted, + this, &SyncEngine::slotItemCompleted); + connect(_propagator.data(), &OwncloudPropagator::progress, + this, &SyncEngine::slotProgress); + connect(_propagator.data(), &OwncloudPropagator::finished, this, &SyncEngine::slotFinished, Qt::QueuedConnection); + connect(_propagator.data(), &OwncloudPropagator::seenLockedFile, this, &SyncEngine::seenLockedFile); + connect(_propagator.data(), &OwncloudPropagator::touchedFile, this, &SyncEngine::slotAddTouchedFile); + connect(_propagator.data(), &OwncloudPropagator::insufficientLocalStorage, this, &SyncEngine::slotInsufficientLocalStorage); + connect(_propagator.data(), &OwncloudPropagator::insufficientRemoteStorage, this, &SyncEngine::slotInsufficientRemoteStorage); // apply the network limits to the propagator setNetworkLimits(_uploadLimit, _downloadLimit); diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 7b40b6071..4db5b72fc 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -111,13 +111,13 @@ static inline bool showWarningInSocketApi(const SyncFileItem &item) SyncFileStatusTracker::SyncFileStatusTracker(SyncEngine *syncEngine) : _syncEngine(syncEngine) { - connect(syncEngine, SIGNAL(aboutToPropagate(SyncFileItemVector &)), - SLOT(slotAboutToPropagate(SyncFileItemVector &))); - connect(syncEngine, SIGNAL(itemCompleted(const SyncFileItemPtr &)), - SLOT(slotItemCompleted(const SyncFileItemPtr &))); - connect(syncEngine, SIGNAL(finished(bool)), SLOT(slotSyncFinished())); - connect(syncEngine, SIGNAL(started()), SLOT(slotSyncEngineRunningChanged())); - connect(syncEngine, SIGNAL(finished(bool)), SLOT(slotSyncEngineRunningChanged())); + connect(syncEngine, &SyncEngine::aboutToPropagate, + this, &SyncFileStatusTracker::slotAboutToPropagate); + connect(syncEngine, &SyncEngine::itemCompleted, + this, &SyncFileStatusTracker::slotItemCompleted); + connect(syncEngine, &SyncEngine::finished, this, &SyncFileStatusTracker::slotSyncFinished); + connect(syncEngine, &SyncEngine::started, this, &SyncFileStatusTracker::slotSyncEngineRunningChanged); + connect(syncEngine, &SyncEngine::finished, this, &SyncFileStatusTracker::slotSyncEngineRunningChanged); } SyncFileStatus SyncFileStatusTracker::fileStatus(const QString &relativePath) From 02924ad83e4a44c381f7c7d9ef1db981e4810d1d Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 18:45:00 +0200 Subject: [PATCH 085/166] DiscoveryPhase: use the new syntax in disconnect Since we used the new syntax in connect, we need to use it in disconnect --- src/libsync/discoveryphase.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 537e6ee02..23ac664c6 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -622,9 +622,9 @@ void DiscoveryMainThread::slotGetSizeResult(const QVariantMap &map) void DiscoveryMainThread::abort() { if (_singleDirJob) { - _singleDirJob->disconnect(SIGNAL(finishedWithError(int, QString)), this); - _singleDirJob->disconnect(SIGNAL(firstDirectoryPermissions(QString)), this); - _singleDirJob->disconnect(SIGNAL(finishedWithResult()), this); + disconnect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::finishedWithError, this, nullptr); + disconnect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::firstDirectoryPermissions, this, nullptr); + disconnect(_singleDirJob.data(), &DiscoverySingleDirectoryJob::finishedWithResult, this, nullptr); _singleDirJob->abort(); } if (_currentDiscoveryDirectoryResult) { From 35e4fe061d3db7cdb5852bafe290071e5f512e82 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 11:48:13 +0200 Subject: [PATCH 086/166] Port to new signal-slot syntax what cannot be done automatically Some slot were protected or private but needed to be public. Some needed a static_cast (can't use qOverload because it is in Qt 5.7) This is not only a partial change. --- src/gui/accountstate.cpp | 4 ++-- src/gui/activitywidget.cpp | 11 +++++------ src/gui/application.cpp | 4 ++-- src/gui/application.h | 2 +- src/gui/creds/shibboleth/shibbolethwebview.cpp | 10 +++++----- src/gui/folderman.cpp | 8 ++++---- src/gui/folderwizard.cpp | 4 ++-- src/gui/generalsettings.cpp | 4 ++-- src/gui/issueswidget.cpp | 6 +++--- src/gui/networksettings.cpp | 8 ++++---- src/gui/owncloudgui.cpp | 2 +- src/gui/selectivesyncdialog.cpp | 2 +- src/gui/settingsdialog.cpp | 2 +- src/gui/sharelinkwidget.cpp | 4 ++-- src/gui/sharelinkwidget.h | 2 +- src/gui/socketapi.h | 2 +- src/libsync/account.h | 2 +- 17 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index 63ad88860..580f3b31e 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -201,8 +201,8 @@ void AccountState::checkConnectivity() ConnectionValidator *conValidator = new ConnectionValidator(account()); _connectionValidator = conValidator; - connect(conValidator, SIGNAL(connectionResult(ConnectionValidator::Status, QStringList)), - SLOT(slotConnectionValidatorResult(ConnectionValidator::Status, QStringList))); + connect(conValidator, &ConnectionValidator::connectionResult, + this, &AccountState::slotConnectionValidatorResult); if (isConnected()) { // Use a small authed propfind as a minimal ping when we're // already connected. diff --git a/src/gui/activitywidget.cpp b/src/gui/activitywidget.cpp index 9091b80bc..b089fef9b 100644 --- a/src/gui/activitywidget.cpp +++ b/src/gui/activitywidget.cpp @@ -90,8 +90,7 @@ ActivityWidget::ActivityWidget(QWidget *parent) connect(_model, &QAbstractItemModel::rowsInserted, this, &ActivityWidget::rowsInserted); - connect(_ui->_activityList, SIGNAL(activated(QModelIndex)), this, - SLOT(slotOpenFile(QModelIndex))); + connect(_ui->_activityList, &QListView::activated, this, &ActivityWidget::slotOpenFile); connect(&_removeTimer, &QTimer::timeout, this, &ActivityWidget::slotCheckToCleanWidgets); _removeTimer.setInterval(1000); @@ -113,8 +112,8 @@ void ActivityWidget::slotRefreshNotifications(AccountState *ptr) // are running if (_notificationRequestsRunning == 0) { ServerNotificationHandler *snh = new ServerNotificationHandler; - connect(snh, SIGNAL(newNotificationList(ActivityList)), this, - SLOT(slotBuildNotificationDisplay(ActivityList))); + connect(snh, &ServerNotificationHandler::newNotificationList, + this, &ActivityWidget::slotBuildNotificationDisplay); snh->slotFetchNotifications(ptr); } else { @@ -388,8 +387,8 @@ void ActivityWidget::slotSendNotificationRequest(const QString &accountName, con job->setWidget(theSender); connect(job, &AbstractNetworkJob::networkError, this, &ActivityWidget::slotNotifyNetworkError); - connect(job, SIGNAL(jobFinished(QString, int)), - this, SLOT(slotNotifyServerFinished(QString, int))); + connect(job, &NotificationConfirmJob::jobFinished, + this, &ActivityWidget::slotNotifyServerFinished); job->start(); // count the number of running notification requests. If this member var diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 73f79d0b9..3f58f0bfc 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -208,8 +208,8 @@ Application::Application(int &argc, char **argv) QTimer::singleShot(0, this, &Application::slotCheckConnection); // Can't use onlineStateChanged because it is always true on modern systems because of many interfaces - connect(&_networkConfigurationManager, SIGNAL(configurationChanged(QNetworkConfiguration)), - this, SLOT(slotSystemOnlineConfigurationChanged(QNetworkConfiguration))); + connect(&_networkConfigurationManager, &QNetworkConfigurationManager::configurationChanged, + this, &Application::slotSystemOnlineConfigurationChanged); // Update checks UpdaterScheduler *updaterScheduler = new UpdaterScheduler(this); diff --git a/src/gui/application.h b/src/gui/application.h index 099053def..47f7bee50 100644 --- a/src/gui/application.h +++ b/src/gui/application.h @@ -71,6 +71,7 @@ public: public slots: // TODO: this should not be public void slotownCloudWizardDone(int); + void slotCrash(); protected: void parseOptions(const QStringList &); @@ -90,7 +91,6 @@ protected slots: void slotCleanup(); void slotAccountStateAdded(AccountState *accountState); void slotAccountStateRemoved(AccountState *accountState); - void slotCrash(); void slotSystemOnlineConfigurationChanged(QNetworkConfiguration); private: diff --git a/src/gui/creds/shibboleth/shibbolethwebview.cpp b/src/gui/creds/shibboleth/shibbolethwebview.cpp index dbcd340b6..4332cb95b 100644 --- a/src/gui/creds/shibboleth/shibbolethwebview.cpp +++ b/src/gui/creds/shibboleth/shibbolethwebview.cpp @@ -29,6 +29,7 @@ #include "accessmanager.h" #include "theme.h" #include "configfile.h" +#include "cookiejar.h" namespace { const char ShibbolethWebViewGeometryC[] = "ShibbolethWebView/Geometry"; @@ -69,14 +70,13 @@ ShibbolethWebView::ShibbolethWebView(AccountPtr account, QWidget *parent) this, &ShibbolethWebView::slotLoadFinished); // Make sure to accept the same SSL certificate issues as the regular QNAM we use for syncing - QObject::connect(page->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply *, QList)), - _account.data(), SLOT(slotHandleSslErrors(QNetworkReply *, QList))); + QObject::connect(page->networkAccessManager(), &QNetworkAccessManager::sslErrors, + _account.data(), &Account::slotHandleSslErrors); // The Account keeps ownership of the cookie jar, it must outlive this webview. account->lendCookieJarTo(page->networkAccessManager()); - connect(page->networkAccessManager()->cookieJar(), - SIGNAL(newCookiesForUrl(QList, QUrl)), - this, SLOT(onNewCookiesForUrl(QList, QUrl))); + connect(static_cast(page->networkAccessManager()->cookieJar()), &CookieJar::newCookiesForUrl, + this, &ShibbolethWebView::onNewCookiesForUrl); page->mainFrame()->load(account->url()); this->setPage(page); diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index 6418cd70b..b819e7569 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -117,8 +117,8 @@ void FolderMan::unloadFolder(Folder *f) this, &FolderMan::slotForwardFolderSyncStateChange); disconnect(f, &Folder::syncPausedChanged, this, &FolderMan::slotFolderSyncPaused); - disconnect(&f->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)), - _socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus))); + disconnect(&f->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::fileStatusChanged, + _socketApi.data(), &SocketApi::broadcastStatusPushMessage); disconnect(f, &Folder::watchedFileChangedExternally, &f->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::slotPathTouched); } @@ -959,8 +959,8 @@ Folder *FolderMan::addFolderInternal(FolderDefinition folderDefinition, connect(folder, &Folder::syncStateChange, this, &FolderMan::slotForwardFolderSyncStateChange); connect(folder, &Folder::syncPausedChanged, this, &FolderMan::slotFolderSyncPaused); connect(folder, &Folder::canSyncChanged, this, &FolderMan::slotFolderCanSyncChanged); - connect(&folder->syncEngine().syncFileStatusTracker(), SIGNAL(fileStatusChanged(const QString &, SyncFileStatus)), - _socketApi.data(), SLOT(broadcastStatusPushMessage(const QString &, SyncFileStatus))); + connect(&folder->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::fileStatusChanged, + _socketApi.data(), &SocketApi::broadcastStatusPushMessage); connect(folder, &Folder::watchedFileChangedExternally, &folder->syncEngine().syncFileStatusTracker(), &SyncFileStatusTracker::slotPathTouched); diff --git a/src/gui/folderwizard.cpp b/src/gui/folderwizard.cpp index 2a244badd..441ece4e0 100644 --- a/src/gui/folderwizard.cpp +++ b/src/gui/folderwizard.cpp @@ -198,8 +198,8 @@ void FolderWizardRemotePath::slotCreateRemoteFolder(const QString &folder) MkColJob *job = new MkColJob(_account, fullPath, this); /* check the owncloud configuration file and query the ownCloud */ - connect(job, SIGNAL(finished(QNetworkReply::NetworkError)), - SLOT(slotCreateRemoteFolderFinished(QNetworkReply::NetworkError))); + connect(job, static_cast(&MkColJob::finished), + this, &FolderWizardRemotePath::slotCreateRemoteFolderFinished); connect(job, &AbstractNetworkJob::networkError, this, &FolderWizardRemotePath::slotHandleMkdirNetworkError); job->start(); } diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index 5a035c4c2..91d3a0c1f 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -66,7 +66,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) connect(_ui->monoIconsCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->crashreporterCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); connect(_ui->newFolderLimitCheckBox, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); - connect(_ui->newFolderLimitSpinBox, SIGNAL(valueChanged(int)), SLOT(saveMiscSettings())); + connect(_ui->newFolderLimitSpinBox, static_cast(&QSpinBox::valueChanged), this, &GeneralSettings::saveMiscSettings); connect(_ui->newExternalStorage, &QAbstractButton::toggled, this, &GeneralSettings::saveMiscSettings); #ifndef WITH_CRASHREPORTER @@ -126,7 +126,7 @@ void GeneralSettings::slotUpdateInfo() if (updater) { connect(updater, &OCUpdater::downloadStateChanged, this, &GeneralSettings::slotUpdateInfo, Qt::UniqueConnection); connect(_ui->restartButton, &QAbstractButton::clicked, updater, &OCUpdater::slotStartInstaller, Qt::UniqueConnection); - connect(_ui->restartButton, SIGNAL(clicked()), qApp, SLOT(quit()), Qt::UniqueConnection); + connect(_ui->restartButton, &QAbstractButton::clicked, qApp, &QApplication::quit, Qt::UniqueConnection); _ui->updateStateLabel->setText(updater->statusString()); _ui->restartButton->setVisible(updater->downloadState() == OCUpdater::DownloadComplete); } else { diff --git a/src/gui/issueswidget.cpp b/src/gui/issueswidget.cpp index 267098541..edc984a7d 100644 --- a/src/gui/issueswidget.cpp +++ b/src/gui/issueswidget.cpp @@ -56,9 +56,9 @@ IssuesWidget::IssuesWidget(QWidget *parent) connect(_ui->showIgnores, &QAbstractButton::toggled, this, &IssuesWidget::slotRefreshIssues); connect(_ui->showWarnings, &QAbstractButton::toggled, this, &IssuesWidget::slotRefreshIssues); - connect(_ui->filterAccount, SIGNAL(currentIndexChanged(int)), SLOT(slotRefreshIssues())); - connect(_ui->filterAccount, SIGNAL(currentIndexChanged(int)), SLOT(slotUpdateFolderFilters())); - connect(_ui->filterFolder, SIGNAL(currentIndexChanged(int)), SLOT(slotRefreshIssues())); + connect(_ui->filterAccount, static_cast(&QComboBox::currentIndexChanged), this, &IssuesWidget::slotRefreshIssues); + connect(_ui->filterAccount, static_cast(&QComboBox::currentIndexChanged), this, &IssuesWidget::slotUpdateFolderFilters); + connect(_ui->filterFolder, static_cast(&QComboBox::currentIndexChanged), this, &IssuesWidget::slotRefreshIssues); for (auto account : AccountManager::instance()->accounts()) { slotAccountAdded(account.data()); } diff --git a/src/gui/networksettings.cpp b/src/gui/networksettings.cpp index eb19f7193..a981d80c5 100644 --- a/src/gui/networksettings.cpp +++ b/src/gui/networksettings.cpp @@ -57,8 +57,8 @@ NetworkSettings::NetworkSettings(QWidget *parent) loadBWLimitSettings(); // proxy - connect(_ui->typeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(saveProxySettings())); - connect(_ui->proxyButtonGroup, SIGNAL(buttonClicked(int)), SLOT(saveProxySettings())); + connect(_ui->typeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &NetworkSettings::saveProxySettings); + connect(_ui->proxyButtonGroup, static_cast(&QButtonGroup::buttonClicked), this, &NetworkSettings::saveProxySettings); connect(_ui->hostLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); connect(_ui->userLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); connect(_ui->passwordLineEdit, &QLineEdit::editingFinished, this, &NetworkSettings::saveProxySettings); @@ -71,8 +71,8 @@ NetworkSettings::NetworkSettings(QWidget *parent) connect(_ui->downloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->noDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); connect(_ui->autoDownloadLimitRadioButton, &QAbstractButton::clicked, this, &NetworkSettings::saveBWLimitSettings); - connect(_ui->downloadSpinBox, SIGNAL(valueChanged(int)), SLOT(saveBWLimitSettings())); - connect(_ui->uploadSpinBox, SIGNAL(valueChanged(int)), SLOT(saveBWLimitSettings())); + connect(_ui->downloadSpinBox, static_cast(&QSpinBox::valueChanged), this, &NetworkSettings::saveBWLimitSettings); + connect(_ui->uploadSpinBox, static_cast(&QSpinBox::valueChanged), this, &NetworkSettings::saveBWLimitSettings); } NetworkSettings::~NetworkSettings() diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index ad9b7bf9d..0d2fcffd1 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -701,7 +701,7 @@ void ownCloudGui::setupActions() if (_app->debugMode()) { _actionCrash = new QAction(tr("Crash now", "Only shows in debug mode to allow testing the crash handler"), this); - connect(_actionCrash, SIGNAL(triggered()), _app, SLOT(slotCrash())); + connect(_actionCrash, &QAction::triggered, _app, &Application::slotCrash); } else { _actionCrash = 0; } diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 1457967f7..87d2bdc22 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -460,7 +460,7 @@ void SelectiveSyncDialog::init(const AccountPtr &account) layout->addWidget(_selectiveSync); QDialogButtonBox *buttonBox = new QDialogButtonBox(Qt::Horizontal); _okButton = buttonBox->addButton(QDialogButtonBox::Ok); - connect(_okButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(_okButton, &QPushButton::clicked, this, &SelectiveSyncDialog::accept); QPushButton *button; button = buttonBox->addButton(QDialogButtonBox::Cancel); connect(button, &QAbstractButton::clicked, this, &QDialog::reject); diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index f67dcaca0..a266157db 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -93,7 +93,7 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) // People perceive this as a Window, so also make Ctrl+W work QAction *closeWindowAction = new QAction(this); closeWindowAction->setShortcut(QKeySequence("Ctrl+W")); - connect(closeWindowAction, SIGNAL(triggered()), SLOT(accept())); + connect(closeWindowAction, &QAction::triggered, this, &SettingsDialog::accept); addAction(closeWindowAction); setObjectName("Settings"); // required as group for saveGeometry call diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index 3f542c0d3..58d3ca474 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -170,7 +170,7 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, if (sharingPossible) { _manager = new ShareManager(_account, this); connect(_manager, &ShareManager::sharesFetched, this, &ShareLinkWidget::slotSharesFetched); - connect(_manager, SIGNAL(linkShareCreated(QSharedPointer)), SLOT(slotCreateShareFetched(const QSharedPointer))); + connect(_manager, &ShareManager::linkShareCreated, this, &ShareLinkWidget::slotCreateShareFetched); connect(_manager, &ShareManager::linkShareRequiresPassword, this, &ShareLinkWidget::slotCreateShareRequiresPassword); connect(_manager, &ShareManager::serverError, this, &ShareLinkWidget::slotServerError); } @@ -436,7 +436,7 @@ void ShareLinkWidget::slotDeleteShareFetched() getShares(); } -void ShareLinkWidget::slotCreateShareFetched(const QSharedPointer share) +void ShareLinkWidget::slotCreateShareFetched(const QSharedPointer &share) { _pi_create->stopAnimation(); _pi_password->stopAnimation(); diff --git a/src/gui/sharelinkwidget.h b/src/gui/sharelinkwidget.h index 1d8397505..e6773fb71 100644 --- a/src/gui/sharelinkwidget.h +++ b/src/gui/sharelinkwidget.h @@ -74,7 +74,7 @@ private slots: void slotShareLinkActionTriggered(QAction *action); void slotDeleteShareFetched(); - void slotCreateShareFetched(const QSharedPointer share); + void slotCreateShareFetched(const QSharedPointer &share); void slotCreateShareRequiresPassword(const QString &message); void slotPasswordSet(); void slotExpireSet(); diff --git a/src/gui/socketapi.h b/src/gui/socketapi.h index 25eb3c72d..e50a68fb7 100644 --- a/src/gui/socketapi.h +++ b/src/gui/socketapi.h @@ -53,6 +53,7 @@ public slots: void slotUpdateFolderView(Folder *f); void slotUnregisterPath(const QString &alias); void slotRegisterPath(const QString &alias); + void broadcastStatusPushMessage(const QString &systemPath, SyncFileStatus fileStatus); signals: void shareCommandReceived(const QString &sharePath, const QString &localPath); @@ -62,7 +63,6 @@ private slots: void onLostConnection(); void slotSocketDestroyed(QObject *obj); void slotReadSocket(); - void broadcastStatusPushMessage(const QString &systemPath, SyncFileStatus fileStatus); void copyPrivateLinkToClipboard(const QString &link) const; void emailPrivateLink(const QString &link) const; diff --git a/src/libsync/account.h b/src/libsync/account.h index 4f300ce97..249ff403d 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -225,6 +225,7 @@ public: public slots: /// Used when forgetting credentials void clearQNAMCache(); + void slotHandleSslErrors(QNetworkReply *, QList); signals: /// Emitted whenever there's network activity @@ -247,7 +248,6 @@ signals: void accountChangedAvatar(); protected Q_SLOTS: - void slotHandleSslErrors(QNetworkReply *, QList); void slotCredentialsFetched(); void slotCredentialsAsked(); From 0464cdb43fe4a5588472525c6ce54bc281477c59 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 22 Sep 2017 02:18:30 +0200 Subject: [PATCH 087/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 126 ++++++++++++------------ translations/client_cs.ts | 126 ++++++++++++------------ translations/client_de.ts | 130 ++++++++++++------------- translations/client_el.ts | 126 ++++++++++++------------ translations/client_en.ts | 126 ++++++++++++------------ translations/client_es.ts | 180 +++++++++++++++++------------------ translations/client_es_AR.ts | 126 ++++++++++++------------ translations/client_et.ts | 126 ++++++++++++------------ translations/client_eu.ts | 126 ++++++++++++------------ translations/client_fa.ts | 126 ++++++++++++------------ translations/client_fi.ts | 126 ++++++++++++------------ translations/client_fr.ts | 126 ++++++++++++------------ translations/client_gl.ts | 126 ++++++++++++------------ translations/client_hu.ts | 126 ++++++++++++------------ translations/client_it.ts | 126 ++++++++++++------------ translations/client_ja.ts | 126 ++++++++++++------------ translations/client_nb_NO.ts | 126 ++++++++++++------------ translations/client_nl.ts | 126 ++++++++++++------------ translations/client_pl.ts | 126 ++++++++++++------------ translations/client_pt.ts | 126 ++++++++++++------------ translations/client_pt_BR.ts | 126 ++++++++++++------------ translations/client_ru.ts | 126 ++++++++++++------------ translations/client_sk.ts | 126 ++++++++++++------------ translations/client_sl.ts | 126 ++++++++++++------------ translations/client_sr.ts | 126 ++++++++++++------------ translations/client_sv.ts | 126 ++++++++++++------------ translations/client_th.ts | 126 ++++++++++++------------ translations/client_tr.ts | 126 ++++++++++++------------ translations/client_uk.ts | 126 ++++++++++++------------ translations/client_zh_CN.ts | 126 ++++++++++++------------ translations/client_zh_TW.ts | 126 ++++++++++++------------ 32 files changed, 1985 insertions(+), 1982 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 0e453d632..e855c0c2b 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -141,6 +141,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index d7b22725f..c92e718a3 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Temps d'espera de la connexió esgotat. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Activitat del servidor - + Sync Protocol Protocol de sincronització - + Not Synced No sincronitzat - + Not Synced (%1) %1 is the number of not synced files. No sincronitzat (%1) - + The server activity list has been copied to the clipboard. La llista de l'activitat del servidor s'ha copiat al porta-retalls. - + The sync activity list has been copied to the clipboard. La llista d'activitat de sincronització s'ha copiat al porta-retalls - + The list of unsynced items has been copied to the clipboard. S'ha copiat una llista d'elements no sincronitzats al porta-retalls. - + Copied to clipboard S'ha copiat al porta-retalls @@ -469,7 +469,7 @@ TextLabel - + Server Activities Activitats del servidor @@ -484,32 +484,32 @@ Copia la llista d'activitats al porta-retalls. - + Action Required: Notifications Es requereix una acció: Notificacions - + <br/>Account %1 does not have activities enabled. <br/>El compte %1 no té les activitats habilitades. - + You received %n new notification(s) from %2. Heu rebut %n nova notificació de %2.Heu rebut %n noves notificacions de %2. - + You received %n new notification(s) from %1 and %2. Heu rebut %n nova notificació de %1 i %2.Heu rebut %n noves notificacions de %1 i %2. - + You received new notifications from %1, %2 and other accounts. Heu rebut noves notificacions de %1, %2 i altres comptes. - + %1 Notifications - Action Required %1 notificacions - Es requereix una acció @@ -3447,207 +3447,207 @@ No és aconsellada usar-la. OCC::ownCloudGui - + Please sign in Acrediteu-vos - + Folder %1: %2 Carpeta %1: %2 - + No sync folders configured. No hi ha fitxers de sincronització configurats - + There are no sync folders configured. No hi han carpetes sincronitzades configurades. - + Open in browser Obre al navegador - - - + + + Log in... Inicia la sessió - - - + + + Log out Surt - + Recent Changes Canvis recents - + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + Managed Folders: Fitxers gestionats: - + Open folder '%1' Obre carpeta '%1' - + Open %1 in browser Obre %1 en el navegador - + Unknown status Estat desconegut - + Settings... Arranjament... - + Details... Detalls... - + Help Ajuda - + Quit %1 Surt %1 - + Disconnected from %1 S'ha desconnectat de %1 - + Unsupported Server Version La versió del servidor no és compatible - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor del compte %1 utilitza la versió antiga %2 antiga i no és compatible. Usar aquest client amb versions no compatibles del servidor no s'ha provat i pot ser potencialment perillós. Procediu sota la vostra responsabilitat. - + Disconnected from accounts: Desconnectat dels comptes: - + Account %1: %2 Compte %1: %2 - + Account synchronization is disabled La sincronització del compte està deshabilitada - + Unpause all folders Reprén totes les carpetes - + Pause all folders Pausa totes les carpetes - + Unpause all synchronization Reprèn totes les sincronitzacions - + Unpause synchronization Reprèn la sincronització - + Pause all synchronization Pausa totes les sincronitzacions - + Pause synchronization Pausa la sincronització - + Log out of all accounts Surt de tots els comptes - + Log in to all accounts... Connecta a tots els comptes... - + New account... Compte nou... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No hi ha elements sincronitzats recentment - + Syncing %1 of %2 (%3 left) Sincronitzant %1 de %2 (%3 pendents) - + Syncing %1 of %2 S'està sincronitzant %1 de %2 - + Syncing %1 (%2 left) Sincronitzant %1 (%2 pendents) - + Syncing %1 S'està sincronitzant %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualitzat diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 9fbc5ade3..c96312d13 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Připojení vypršelo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita serveru - + Sync Protocol Protokol synchronizace - + Not Synced Nesesynchronizováno - + Not Synced (%1) %1 is the number of not synced files. Nesesynchronizováno (%1) - + The server activity list has been copied to the clipboard. Výpis aktivity serveru byl zkopírován do schránky. - + The sync activity list has been copied to the clipboard. Výpis aktivity synchronizace byl zkopírován do schránky. - + The list of unsynced items has been copied to the clipboard. Seznam nesynchronizovaných položek byl zkopírován do schránky. - + Copied to clipboard Zkopírováno do schránky @@ -469,7 +469,7 @@ Textový popisek - + Server Activities Aktivity serveru @@ -484,32 +484,32 @@ Kopírovat záznam aktivity do schránky. - + Action Required: Notifications Vyžadována akce: Upozornění - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. Dostali jste %n nové upozornění od %2.Dostali jste %n nové upozornění od %2.Dostali jste %n nových upozornění od %2. - + You received %n new notification(s) from %1 and %2. Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nové upozornění od %1 a %2.Dostali jste %n nových upozornění od %1 a %2. - + You received new notifications from %1, %2 and other accounts. Dostali jste nové upozornění od %1, %2 a dalších uživatelů. - + %1 Notifications - Action Required %1 Upozornění - Vyžadována akce @@ -3450,207 +3450,207 @@ Nedoporučuje se jí používat. OCC::ownCloudGui - + Please sign in Přihlašte se prosím - + Folder %1: %2 Adresář %1: %2 - + No sync folders configured. Nejsou nastaveny žádné synchronizované adresáře. - + There are no sync folders configured. Nejsou nastaveny žádné adresáře pro synchronizaci. - + Open in browser Otevřít v prohlížeči - - - + + + Log in... Přihlásit... - - - + + + Log out Odhlásit se - + Recent Changes Poslední změny - + Checking for changes in '%1' Kontrola změn v '%1' - + Managed Folders: Spravované adresáře: - + Open folder '%1' Otevřít adresář '%1' - + Open %1 in browser Otevřít %1 v prohlížeči - + Unknown status Neznámý stav - + Settings... Nastavení... - + Details... Podrobnosti... - + Help Nápověda - + Quit %1 Ukončit %1 - + Disconnected from %1 Odpojeno od %1 - + Unsupported Server Version Nepodporovaná verze serveru - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Server na účtu %1 používá starou a nepodporovanou verzi %2. Používání tohoto klienta s nepodporovanými verzemi serveru není testováno a může být nebezpečné. Pokračujte na vlastní riziko. - + Disconnected from accounts: Odpojeno od účtů: - + Account %1: %2 Účet %1: %2 - + Account synchronization is disabled Synchronizace účtu je vypnuta - + Unpause all folders Spustit všechny adresáře - + Pause all folders Pozastavit všechny adresáře - + Unpause all synchronization Spustit veškerou synchronizaci - + Unpause synchronization Spustit synchronizaci - + Pause all synchronization Pozastavit veškerou synchronizaci - + Pause synchronization Pozastavit synchronizaci - + Log out of all accounts Odhlásit ze všech účtů - + Log in to all accounts... Přihlásit ke všem účtům... - + New account... Nový účet... - + Crash now Only shows in debug mode to allow testing the crash handler Selhání - + No items synced recently Žádné položky nebyly nedávno synchronizovány - + Syncing %1 of %2 (%3 left) Synchronizuji %1 ze %2 (zbývá %3) - + Syncing %1 of %2 Synchronizace %1 z %2 - + Syncing %1 (%2 left) Synchronizuji %1 (zbývá %2) - + Syncing %1 Synchronizuji %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuální diff --git a/translations/client_de.ts b/translations/client_de.ts index 4a9fd6c5a..3fa4c15fd 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Zeitüberschreitung bei der Verbindung - + Unknown error: network reply was deleted Unbekannter Fehler: Netzwerk-Antwort wurde gelöscht - + Server replied "%1 %2" to "%3 %4" Server hat "%1 %2" auf "%3 %4" geantwortet @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Serveraktivität - + Sync Protocol Synchronisationsprotokoll - + Not Synced nicht synchronisiert - + Not Synced (%1) %1 is the number of not synced files. nicht synchronisiert (%1) - + The server activity list has been copied to the clipboard. Die Server-Aktivitätsliste wurde in die Zwischenablage kopiert. - + The sync activity list has been copied to the clipboard. Die Synchronisationsliste wurde in die Zwischenablage kopiert. - + The list of unsynced items has been copied to the clipboard. Die Liste der unsynchronisierten Dateien wurde in die Zwischenablage kopiert. - + Copied to clipboard In die Zwischenablage kopiert @@ -469,7 +469,7 @@ TextLabel - + Server Activities Server Aktivitäten @@ -484,32 +484,32 @@ Aktivitätsliste in die Zwischenablage kopieren. - + Action Required: Notifications Handlung erforderlich: Benachrichtigungen - + <br/>Account %1 does not have activities enabled. <br/>Für Konto %1 sind serverseitig keine Aktivitäten aktiviert. - + You received %n new notification(s) from %2. Sie haben %n neue Benachrichtigung von %2 erhalten.Sie haben %n neue Benachrichtigungen von %2 erhalten. - + You received %n new notification(s) from %1 and %2. Sie haben %n neue Benachrichtigung von %1 und %2 erhalten.Sie haben %n neue Benachrichtigungen von %1 und %2 erhalten. - + You received new notifications from %1, %2 and other accounts. Sieh haben %n neue Benachrichtigungen von %1, %2 und anderen Konten erhalten. - + %1 Notifications - Action Required %1 Benachrichtigungen - Handlung notwendig @@ -769,8 +769,8 @@ These deletes will be synchronized to your local sync folder, making such files If you decide to keep the files, they will be re-synced with the server if you have rights to do so. If you decide to delete the files, they will be unavailable to you, unless you are the owner. Alle Dateien im Synchronisationsordner '%1' wurden auf dem Server gelöscht. -Diese Löschung wird in Ihren lokalen Synchronisationsordner synchronisiert. Dadurch sind die Dateien nicht mehr verfügbar, falls Sie keine Möglichkeit zur Wiederherstellung haben. -Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder synchronisiert. Dies geschieht nur, wenn Sie die Rechte dazu haben. +Diese Löschung wird in Ihren lokalen Synchronisationsordner übernommen. Dadurch sind die Dateien nicht mehr verfügbar, falls Sie keine Möglichkeit zur Wiederherstellung haben. +Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder zum Server synchronisiert. Dies geschieht jedoch nur, wenn Sie die Rechte dazu haben. Wenn Sie sich zum Löschen der Dateien entscheiden, sind diese nicht mehr verfügbar, außer Sie sind der Eigentümer. @@ -3451,207 +3451,207 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ownCloudGui - + Please sign in Bitte melden Sie sich an - + Folder %1: %2 Ordner %1: %2 - + No sync folders configured. Keine Sync-Ordner konfiguriert. - + There are no sync folders configured. Es wurden keine Synchonisationsordner konfiguriert. - + Open in browser Im Browser öffnen - - - + + + Log in... Einloggen... - - - + + + Log out Abmelden - + Recent Changes Letzte Änderungen - + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + Managed Folders: Verwaltete Ordner: - + Open folder '%1' Ordner »%1« öffnen - + Open %1 in browser %1 im Browser öffnen - + Unknown status Unbekannter Status - + Settings... Einstellungen … - + Details... Details … - + Help Hilfe - + Quit %1 %1 beenden - + Disconnected from %1 Von %1 trennen - + Unsupported Server Version nicht unterstütze Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Der Server mit Konto %1 läuft mit einer alten und nicht unterstützten Version %2. Die Verwendung dieses Clienten mit der nicht unterstützten Serverversion ist ungetestet und möglicherweiße gefährich. Fortfahren auf eigenes Risiko. - + Disconnected from accounts: Getrennt von Konten: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Account Synchronisation ist deaktiviert - + Unpause all folders Setze alle Ordner fort - + Pause all folders Stoppe alle Ordner - + Unpause all synchronization Setze gesamte Synchronisation fort - + Unpause synchronization Setze Synchronisation fort - + Pause all synchronization Stoppe gesamte Synchronisation - + Pause synchronization Stoppe Synchronisation - + Log out of all accounts Bei allen Konten abmelden - + Log in to all accounts... Bei allen Konten anmelden... - + New account... Neues Konto... - + Crash now Only shows in debug mode to allow testing the crash handler Jetzt abstürzen lassen - + No items synced recently Keine kürzlich synchronisierten Elemente - + Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - + Syncing %1 of %2 Synchronisiere %1 von %2 - + Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) - + Syncing %1 Synchronisiere %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell diff --git a/translations/client_el.ts b/translations/client_el.ts index 286130d11..5e6c49dd7 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Η σύνδεση έληξε. - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Δραστηριότητα διακομιστή - + Sync Protocol Προτοκολο συγχρονισμου - + Not Synced Δεν είναι συγχρονισμένα - + Not Synced (%1) %1 is the number of not synced files. Δεν είναι συγχρονισμένα (%1) - + The server activity list has been copied to the clipboard. Ο κατάλογος δραστηριοτήτων του διακομιστή έχει αντιγραφθεί στο Πρόχειρο - + The sync activity list has been copied to the clipboard. Ο κατάλογος της δραστηριότητας συγχρονισμού έχει αντιγραφθεί στο Πρόχειρο - + The list of unsynced items has been copied to the clipboard. Η λίστα των μη συγχρονισμένων αντικειμένων έχει αντιγραφεί στο πρόχειρο - + Copied to clipboard Αντιγράφηκε στο πρόχειρο @@ -469,7 +469,7 @@ TextLabel - + Server Activities Δραστηριότητες διακομιστή @@ -484,32 +484,32 @@ Αντιγραφή της λίστας δραστηριότητας στο πρόχειρο. - + Action Required: Notifications Απαιτείται ενέργεια: Ειδοποιήσεις - + <br/>Account %1 does not have activities enabled. <br/>Ο λογαριασμός %1 δεν έχει ενεργοποιήσει τις δραστηριότητες. - + You received %n new notification(s) from %2. Λάβατε %n νέα ειδοποίηση(σεις) από %2.Λάβατε %n νέα ειδοποίηση(σεις) από %2. - + You received %n new notification(s) from %1 and %2. Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2.Λάβατε %n νέες ειδοποιήση(εις) από %1 και %2. - + You received new notifications from %1, %2 and other accounts. Λάβατε νέες ανακοινώσεις από %1, %2 και άλλους λογαριασμούς. - + %1 Notifications - Action Required %1 Ειδοποιήσεις - Απαιτείται ενέργεια @@ -3452,207 +3452,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Παρκαλώ συνδεθείτε - + Folder %1: %2 Φάκελος %1: %2 - + No sync folders configured. Δεν έχουν οριστεί φάκελοι συγχρονισμού. - + There are no sync folders configured. Δεν έχουν ρυθμιστεί φάκελοι συγχρονισμού. - + Open in browser Άνοιγμα στον περιηγητή ιστού - - - + + + Log in... Σύνδεση... - - - + + + Log out Αποσύνδεση - + Recent Changes Πρόσφατες Αλλαγές - + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + Managed Folders: Φάκελοι υπό Διαχείριση: - + Open folder '%1' Άνοιγμα φακέλου '%1' - + Open %1 in browser Άνοιγμα %1 στον περιηγητή - + Unknown status Άγνωστη κατάσταση - + Settings... Ρυθμίσεις... - + Details... Λεπτομέρειες... - + Help Βοήθεια - + Quit %1 Κλείσιμο %1 - + Disconnected from %1 Αποσυνδέθηκε από %1 - + Unsupported Server Version Μη υποστηριζόμενη έκδοση διακομιστή - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Ο διακομιστής στο λογαριασμό% 1 εκτελεί μια παλιά και μη υποστηριζόμενη έκδοση% 2. Η χρήση αυτού του προγράμματος-πελάτη με μη υποστηριζόμενες εκδόσεις διακομιστών δεν είναι δοκιμασμένη και ενδεχομένως επικίνδυνη. Προχωρήστε με δική σας ευθύνη. - + Disconnected from accounts: Αποσυνδέθηκε από τους λογαριασμούς: - + Account %1: %2 Λογαριασμός %1: %2 - + Account synchronization is disabled Ο λογαριασμός συγχρονισμού έχει απενεργοποιηθεί - + Unpause all folders Αναίρεση παύσης όλων των φακέλων - + Pause all folders Παύση όλων των φακέλων - + Unpause all synchronization Αναίρεση παύσης όλων των συγχρονισμών - + Unpause synchronization Αναίρεση παύσης συγχρονσμού - + Pause all synchronization Παύση όλων των συγχρονισμών - + Pause synchronization Παύση συγχρονισμού - + Log out of all accounts Έξοδος από όλους τους λογαριασμούς - + Log in to all accounts... Είσοδος σε όλους τους λογαριασμούς - + New account... Νέος λογαριασμός... - + Crash now Only shows in debug mode to allow testing the crash handler Κατάρρευση τώρα - + No items synced recently Κανένα στοιχείο δεν συγχρονίστηκε πρόσφατα - + Syncing %1 of %2 (%3 left) Συγχρονισμός %1 από %2 (%3 απομένουν) - + Syncing %1 of %2 Συγχρονισμός %1 από %2 - + Syncing %1 (%2 left) Συγχρονισμός %1 (%2 απομένουν) - + Syncing %1 Συγχρονισμός %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ενημερωμένο diff --git a/translations/client_en.ts b/translations/client_en.ts index 8a84c5697..812fb0ab8 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -78,17 +78,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -414,44 +414,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard @@ -471,7 +471,7 @@ - + Server Activities @@ -486,17 +486,17 @@ - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. @@ -504,7 +504,7 @@ - + You received %n new notification(s) from %1 and %2. @@ -512,12 +512,12 @@ - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3469,207 +3469,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in - + Folder %1: %2 - + No sync folders configured. - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out - + Recent Changes - + Checking for changes in '%1' - + Managed Folders: - + Open folder '%1' - + Open %1 in browser - + Unknown status - + Settings... - + Details... - + Help - + Quit %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 - + %1 (%2, %3) - + Up to date diff --git a/translations/client_es.ts b/translations/client_es.ts index cd1c7a594..eeb7b7b0f 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tiempo de conexión agotado - + Unknown error: network reply was deleted Error desconocido: la respuesta de red fue eliminada - + Server replied "%1 %2" to "%3 %4" El servidor respondió "%1 %2" a "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Actividad del servidor - + Sync Protocol Protocolo de Sincronización - + Not Synced No sincronizado - + Not Synced (%1) %1 is the number of not synced files. No Sincronizado (%1) - + The server activity list has been copied to the clipboard. La lista de la actividad del servidor se ha copiado en el portapapeles. - + The sync activity list has been copied to the clipboard. La lista de actividades de sincronización se ha copiado en el portapapeles. - + The list of unsynced items has been copied to the clipboard. La lista de elementos sin sincronizar, ha sido copiada al portapapeles. - + Copied to clipboard Copiado al portapapeles @@ -469,7 +469,7 @@ Etiqueta de texto - + Server Activities Actividades del servidor @@ -484,32 +484,32 @@ Copie la lista de actividades al portapapeles - + Action Required: Notifications Acción a realizar: Notificaciones - + <br/>Account %1 does not have activities enabled. <br/>La cuenta %1 no tiene actividades habilitadas. - + You received %n new notification(s) from %2. Ha recibido %n nueva notificación de %2.Ha recibido %n nueva notificacióne(s) de %2. - + You received %n new notification(s) from %1 and %2. Ha recibido %n nueva notificación de %1 y de %2.Ha recibido %n nuevas notificacióne(s) de %1 y de %2. - + You received new notifications from %1, %2 and other accounts. Ha recibido nuevas notificaciónes de %1, %2 y otras cuentas. - + %1 Notifications - Action Required %1 Notificaciones - Acción requerida @@ -2117,7 +2117,7 @@ No se recomienda usarla. The download would reduce free local disk space below the limit - + La descarga reducirá el espacio libre local por debajo del limite. @@ -2701,22 +2701,22 @@ No se recomienda usarla. Create public link share - + Crear un enlace público compartido Open link in browser - + Abrir enlace en el explorador Copy link to clipboard - + Copiar enlace al portapapeles Copy link to clipboard (direct download) - + Copiar enlace al portapapeles (descarga directa) @@ -2726,7 +2726,7 @@ No se recomienda usarla. Send link by email (direct download) - + Enviar enlace por e-mail (descarga directa) @@ -2759,22 +2759,22 @@ No se recomienda usarla. <html><head/><body><p>You can direct people to this shared file or folder <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">by giving them a private link</span></a>.</p></body></html> - + <html><head/><body><p>Se puede compartir directamente con otras personas <a href="private link menu"><span style=" text-decoration: underline; color:#0000ff;">enviandolas el enlace directo privado</span></a>.</p></body></html> The item is not shared with any users or groups - + El elemento no ha sido compartido con ningun grupo o persona. Open link in browser - + Abrir enlace en el explorador Copy link to clipboard - + Copiar enlace al portapapeles @@ -2789,7 +2789,7 @@ No se recomienda usarla. I shared something with you - + He compartido algo contigo @@ -2882,22 +2882,22 @@ No se recomienda usarla. I shared something with you - + He compartido algo contigo Share... - + Compartir... Copy private link to clipboard - + Copiar enlace privado al portapapeles Send private link by email... - + Enviar enlace privado por e-mail... @@ -3175,7 +3175,7 @@ No se recomienda usarla. %1 (skipped due to earlier error, trying again in %2) - + %1 (no realizado por el error anterior, intente de nuevo %2) @@ -3185,12 +3185,12 @@ No se recomienda usarla. Folder hierarchy is too deep - + demasiadas subcarpetas anidadas Conflict: Server version downloaded, local copy renamed and not uploaded. - + Conflicto: Versión del servidor descargada, La copia local ha sido renombrada pero no se ha podido subir. @@ -3201,7 +3201,7 @@ No se recomienda usarla. Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. @@ -3216,12 +3216,12 @@ No se recomienda usarla. Disk space is low: Downloads that would reduce free space below %1 were skipped. - + Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. There is insufficient space available on the server for some uploads. - + No hay suficiente espacio libre en el servidor para algunas subidas. @@ -3311,7 +3311,7 @@ No se recomienda usarla. Unresolved conflict. - + Conflicto sin resolver. @@ -3451,207 +3451,207 @@ No se recomienda usarla. OCC::ownCloudGui - + Please sign in Por favor, regístrese - + Folder %1: %2 Archivo %1: %2 - + No sync folders configured. No hay carpetas de sincronización configuradas. - + There are no sync folders configured. No hay carpetas configuradas para sincronizar. - + Open in browser Abrir en navegador - - - + + + Log in... Inicio de sesión... - - - + + + Log out Cerrar sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' Buscando cambios en '%1' - + Managed Folders: Carpetas administradas: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Salir de %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version Versión del servidor no soportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. El servidor en la cuenta %1 usa una versión antigua y no soportada %2. Usando este cliente con las versiones de servidor no soportadas no está probado y es potencialmente peligroso. Procede bajo tu propio riesgo. - + Disconnected from accounts: Desconectado desde cuentas: - + Account %1: %2 Cuenta %1: %2 - + Account synchronization is disabled La sincronización está deshabilitada - + Unpause all folders Despausar todas las carpetas - + Pause all folders Pausar todas las carpetas - + Unpause all synchronization Despausar todas las sincronizaciones - + Unpause synchronization Despausar la sincronización - + Pause all synchronization Pausar todas las sincronizaciones - + Pause synchronization Pausar la sincronización - + Log out of all accounts Terminar sessión en todas las cuentas - + Log in to all accounts... Iniciar sesión en todas las cuentas... - + New account... Nueva cuenta ... - + Crash now Only shows in debug mode to allow testing the crash handler Se ha producido un fallo - + No items synced recently No se han sincronizado elementos recientemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (quedan %3) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (quedan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado @@ -3772,17 +3772,17 @@ No se recomienda usarla. Please switch to your browser to proceed. - + Por favor vaya a su navegador para proceder. An error occured while connecting. Please try again. - + Ha ocurrido un error al conectar. Por favor intente de nuevo. Re-open Browser - + Rec-cargue el explorador @@ -4109,12 +4109,12 @@ No se recomienda usarla. Could not open browser - + No puedo abrir el explorador There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + Ha ocurrido un error al lanzar el navegador para ir a la URL: %1 , ¿podria ser que no tenga ningún navegador por defecto?. diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index fcb4bc767..1418cd184 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tiempo de conexión agotado - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol Protocolo de Sincronización - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Copiado al portapapeles @@ -469,7 +469,7 @@ EtiquetaDeTexto - + Server Activities @@ -484,32 +484,32 @@ Copiar la lista de actividades al portapapeles. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3437,207 +3437,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Por favor, inicie sesión - + Folder %1: %2 Directorio %1: %2 - + No sync folders configured. Los directorios de sincronización no están configurados. - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out Cerrar la sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' - + Managed Folders: Directorios administrados: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador... - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Cancelar %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No se sincronizaron elementos recientemente - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date actualizado diff --git a/translations/client_et.ts b/translations/client_et.ts index 3dd183bcc..ca28fe19e 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Ühendus aegus - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Serveri aktiivsus - + Sync Protocol Sünkroniseerimisprotokoll - + Not Synced Pole sünkroonitud - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopeeritud lõikepuhvrisse @@ -469,7 +469,7 @@ Tekstisilt - + Server Activities Serveri tegevused @@ -484,32 +484,32 @@ Kopeeri tegevuste nimistu puhvrisse. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3440,207 +3440,207 @@ Selle kasutamine pole soovitatav. OCC::ownCloudGui - + Please sign in Palun logi sisse - + Folder %1: %2 Kaust %1: %2 - + No sync folders configured. Sünkroniseeritavaid kaustasid pole seadistatud. - + There are no sync folders configured. Sünkroniseeritavaid kaustasid pole määratud. - + Open in browser Ava veebilehitsejas - - - + + + Log in... Logi sisse... - - - + + + Log out Logi välja - + Recent Changes Hiljutised muudatused - + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + Managed Folders: Hallatavad kaustad: - + Open folder '%1' Ava kaust '%1' - + Open %1 in browser Ava %1 veebilehitsejas - + Unknown status Tundmatu staatus - + Settings... Seaded... - + Details... Üksikasjad... - + Help Abiinfo - + Quit %1 Lõpeta %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Kontodest lahtiühendatud - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Logi välja kõikidelt kontodelt - + Log in to all accounts... Logi sisse kõikidesse kontodesse... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Jookse kokku - + No items synced recently Ühtegi üksust pole hiljuti sünkroniseeritud - + Syncing %1 of %2 (%3 left) Sünkroniseerin %1 %2-st (%3 veel) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sünkroniseerin %1 (%2 veel) - + Syncing %1 Sünkroniseerimine %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajakohane diff --git a/translations/client_eu.ts b/translations/client_eu.ts index f7df27ca3..f449aa047 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Konexioa denboraz kanpo - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Zerbitzariaren Jarduera - + Sync Protocol Sinkronizazio protokoloa - + Not Synced Sinkronizatu gabekoak - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Arbelera kopiatua @@ -469,7 +469,7 @@ TestuEtiketa - + Server Activities Zerbitzariaren Jarduerak @@ -484,32 +484,32 @@ Kopiatu jarduera zerrenda arbelara. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>%1 kontuak ez ditu jarduerak gaituta. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3440,207 +3440,207 @@ Ez da gomendagarria erabltzea. OCC::ownCloudGui - + Please sign in Mesedez saioa hasi - + Folder %1: %2 - + No sync folders configured. Ez dago sinkronizazio karpetarik definituta. - + There are no sync folders configured. Ez dago sinkronizazio karpetarik definituta. - + Open in browser Ireki nabigatzailean - - - + + + Log in... Saioa hasi... - - - + + + Log out Saioa bukatu - + Recent Changes Azkenengo Aldaketak - + Checking for changes in '%1' - + Managed Folders: Kudeatutako karpetak: - + Open folder '%1' Ireki '%1' karpeta - + Open %1 in browser Ireki %1 arakatzailean - + Unknown status Egoera ezezaguna - + Settings... Ezarpenak... - + Details... Xehetasunak... - + Help Laguntza - + Quit %1 %1etik Irten - + Disconnected from %1 %1etik deskonektatuta - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Kontuetatik deskonektatuta: - + Account %1: %2 %1 Kontua: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Saioa bukatu kontu guztietan - + Log in to all accounts... Saioa hasi kontu guztietan... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Ez da azken aldian ezer sinkronizatu - + Syncing %1 of %2 (%3 left) Sinkronizatzen %1 %2tik (%3 faltan) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sinkronizatzen %1 (%2faltan) - + Syncing %1 %1 Sinkronizatzen - + %1 (%2, %3) %1 (%2, %3) - + Up to date Eguneratua diff --git a/translations/client_fa.ts b/translations/client_fa.ts index bbe0a09a5..e36f07582 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity - + Sync Protocol پروتکل همگام سازی - + Not Synced - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard کپی به کلیپ بورد @@ -469,7 +469,7 @@ برچسب متنی - + Server Activities @@ -484,32 +484,32 @@ - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3437,207 +3437,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in لطفا وارد شوید - + Folder %1: %2 پوشه %1: %2 - + No sync folders configured. هیچ پوشه ای همگام سازی شده‌ای تنظیم نشده است - + There are no sync folders configured. هیچ پوشه‌ای برای همگام‌سازی تنظیم نشده است. - + Open in browser باز کردن در مرورگر - - - + + + Log in... ورود... - - - + + + Log out خروج - + Recent Changes تغییرات اخیر - + Checking for changes in '%1' - + Managed Folders: پوشه های مدیریت شده: - + Open folder '%1' بازکردن پوشه‌ی '%1' - + Open %1 in browser - + Unknown status وضعیت نامعلوم - + Settings... تنظیمات... - + Details... جزئیات... - + Help راه‌نما - + Quit %1 خروج %1 - + Disconnected from %1 قطع‌شده از %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 حساب‌کاربری %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently هیچ موردی به تازگی همگام‌سازی نشده است - + Syncing %1 of %2 (%3 left) همگام‌سازی %1 از%2 (%3 باقیمانده) - + Syncing %1 of %2 - + Syncing %1 (%2 left) همگام‌سازی %1 (%2 باقیمانده) - + Syncing %1 همگام‌سازی %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date تا تاریخ diff --git a/translations/client_fi.ts b/translations/client_fi.ts index e54b75641..29ee07cca 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Yhteys aikakatkaistiin - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Palvelimen toimet - + Sync Protocol Synkronointiprotokolla - + Not Synced Ei synkronoitu - + Not Synced (%1) %1 is the number of not synced files. Ei synkronoitu (%1) - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopioitu leikepöydälle @@ -469,7 +469,7 @@ TekstiLeima - + Server Activities Palvelimen toimet @@ -484,32 +484,32 @@ Kopioi toimilista leikepöydälle. - + Action Required: Notifications Toimenpiteitä vaaditaan: ilmoitukset - + <br/>Account %1 does not have activities enabled. <br/>Tilillä %1 ei ole toimia käytössä. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3442,207 +3442,207 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ownCloudGui - + Please sign in Kirjaudu sisään - + Folder %1: %2 Kansio %1: %2 - + No sync folders configured. Synkronointikansioita ei ole määritetty. - + There are no sync folders configured. Synkronointikansioita ei ole määritelty. - + Open in browser Avaa selaimessa - - - + + + Log in... Kirjaudu sisään... - - - + + + Log out Kirjaudu ulos - + Recent Changes Viimeisimmät muutokset - + Checking for changes in '%1' - + Managed Folders: Hallitut kansiot: - + Open folder '%1' Avaa kansio '%1' - + Open %1 in browser Avaa %1 selaimeen - + Unknown status Tuntematon tila - + Settings... Asetukset... - + Details... Tiedot... - + Help Ohje - + Quit %1 Lopeta %1 - + Disconnected from %1 Katkaise yhteys kohteeseen %1 - + Unsupported Server Version Palvelimen versio ei ole tuettu - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Katkaistu yhteys tileihin: - + Account %1: %2 Tili %1: %2 - + Account synchronization is disabled Tilin synkronointi on poistettu käytöstä - + Unpause all folders - + Pause all folders Keskeytä kaikki kansiot - + Unpause all synchronization Palauta kaikki synkronointi - + Unpause synchronization Palauta synkronointi - + Pause all synchronization Keskeytä kaikki synkronointi - + Pause synchronization Keskeytä synkronointi - + Log out of all accounts Kirjaudu ulos kaikista tileistä - + Log in to all accounts... Kirjaudu kaikille tileille... - + New account... Uusi tili... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Kohteita ei ole synkronoitu äskettäin - + Syncing %1 of %2 (%3 left) Synkronoidaan %1/%2 (%3 jäljellä) - + Syncing %1 of %2 Synkronoidaan %1/%2 - + Syncing %1 (%2 left) Synkronoidaan %1 (%2 jäljellä) - + Syncing %1 Synkronoidaan %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajan tasalla diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 60d50eeec..fff796b55 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Délai de connexion dépassé - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Activité serveur - + Sync Protocol Activité de synchronisation - + Not Synced Fichiers non synchronisés - + Not Synced (%1) %1 is the number of not synced files. Non Synchronisé (%1) - + The server activity list has been copied to the clipboard. L'historique des opérations sur le serveur a été copié dans le presse-papier. - + The sync activity list has been copied to the clipboard. L'historique des opérations locales a été copié dans le presse-papier. - + The list of unsynced items has been copied to the clipboard. La liste des éléments non synchronisés a été copiée dans le presse-papier. - + Copied to clipboard Copié dans le presse-papier @@ -469,7 +469,7 @@ TextLabel - + Server Activities Historique des opérations sur le serveur @@ -484,32 +484,32 @@ Copier la liste d'activités dans le presse-papier - + Action Required: Notifications Action exigée : Notifications - + <br/>Account %1 does not have activities enabled. <br/>Le compte %1 n'a aucune activité activée. - + You received %n new notification(s) from %2. Vous avez reçu %n nouvelle notification de %2.Vous avez reçu %n nouvelles notifications de %2. - + You received %n new notification(s) from %1 and %2. Vous avez reçu 1 nouvelle notification de %1 et %2.Vous avez reçu %n nouvelles notifications de %1 et %2. - + You received new notifications from %1, %2 and other accounts. Vous avez reçu de nouvelles notifications de %1, %2 et d'autres comptes. - + %1 Notifications - Action Required %1 Notifications - Action Requise @@ -3453,207 +3453,207 @@ Il est déconseillé de l'utiliser. OCC::ownCloudGui - + Please sign in Veuillez vous connecter - + Folder %1: %2 Dossier %1 : %2 - + No sync folders configured. Aucun dossier synchronisé n'est configuré - + There are no sync folders configured. Aucun dossier à synchroniser n'est configuré - + Open in browser Ouvrir dans le navigateur web - - - + + + Log in... Connexion... - - - + + + Log out Se déconnecter - + Recent Changes Modifications récentes - + Checking for changes in '%1' Recherche de modifications dans '%1' - + Managed Folders: Dossiers configurés - + Open folder '%1' Ouvrir le dossier local '%1' - + Open %1 in browser Ouvrir %1 dans le navigateur - + Unknown status Statut inconnu - + Settings... Paramètres... - + Details... Toutes les modifications... - + Help Aide... - + Quit %1 Quitter %1 - + Disconnected from %1 Déconnecté de %1 - + Unsupported Server Version Version du Serveur non prise en charge - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Le serveur sur le compte %1 fonctionne avec une version ancienne et non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. - + Disconnected from accounts: Déconnecté des comptes : - + Account %1: %2 Compte %1 : %2 - + Account synchronization is disabled La synchronisation est en pause - + Unpause all folders Relancer tous les dossiers - + Pause all folders Mettre en pause tous les dossiers - + Unpause all synchronization Relancer toutes les synchronisations - + Unpause synchronization Relancer la synchronisation - + Pause all synchronization Mettre en pause toutes les synchronisations - + Pause synchronization Mettre en pause la synchronisation - + Log out of all accounts Se déconnecter de tous les comptes - + Log in to all accounts... Se connecter à tous les comptes... - + New account... Nouveau compte… - + Crash now Only shows in debug mode to allow testing the crash handler Plantage maintenant - + No items synced recently Aucun élément synchronisé récemment - + Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restantes) - + Syncing %1 of %2 Synchronisation %1 sur %2 - + Syncing %1 (%2 left) Synchronisation de %1 (%2 restantes) - + Syncing %1 Synchronisation de %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date À jour diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 046cd70f0..7ba44f0b6 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Esgotouse o tempo de conexión - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Actividade do servidor - + Sync Protocol Protocolo de sincronización - + Not Synced Non sincronizado - + Not Synced (%1) %1 is the number of not synced files. Non sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de actividade do servidor copiouse no portapapeis. - + The sync activity list has been copied to the clipboard. A lista de actividade de sincronización foi copiada ao portapapeis. - + The list of unsynced items has been copied to the clipboard. A lista de elementos non sincronizados foi copiada ao portapapeis. - + Copied to clipboard Copiado no portapapeis. @@ -469,7 +469,7 @@ Etiqueta de texto - + Server Activities Actividades do servidor @@ -484,32 +484,32 @@ Copiar a lista da actividade no portapapeis. - + Action Required: Notifications Acción requerida: Notificacións - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 non ten as actividades habilitadas. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3441,207 +3441,207 @@ Recomendámoslle que non o use. OCC::ownCloudGui - + Please sign in Ten que rexistrarse - + Folder %1: %2 Cartafol %1: %2 - + No sync folders configured. Non se configuraron cartafoles de sincronización. - + There are no sync folders configured. Non existen cartafoles de sincronización configurados. - + Open in browser Abrir no navegador - - - + + + Log in... - - - + + + Log out Desconectar - + Recent Changes Cambios recentes - + Checking for changes in '%1' - + Managed Folders: Cartafoles xestionados: - + Open folder '%1' Abrir o cartafol «%1» - + Open %1 in browser Abrir %1 nun navegador - + Unknown status Estado descoñecido - + Settings... Axustes... - + Details... Detalles... - + Help Axuda - + Quit %1 Saír de %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Desconectado das contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrou agora - + No items synced recently Non hai elementos sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 of %2 (restan %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sincronizando %1 (restan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 6004d289e..c34e68f35 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out A kapcsolat időtúllépés miatt megszakadt - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Szerver aktivitás - + Sync Protocol Szinkronizációs protokoll - + Not Synced Nincs szinkronizálva - + Not Synced (%1) %1 is the number of not synced files. Nincs szinkronizálva (%1) - + The server activity list has been copied to the clipboard. A szerver aktivitási lista a vágólapra másolva. - + The sync activity list has been copied to the clipboard. A szinkronizációs aktivitási lista a vágólapra másolva. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Másolva a vágólapra @@ -469,7 +469,7 @@ TextLabel - + Server Activities Szerver aktivitások @@ -484,32 +484,32 @@ Aktivitási lista másolása a vágólapra. - + Action Required: Notifications Beavatkozás szükséges: Értesítések - + <br/>Account %1 does not have activities enabled. <br /> %1 fióknak nincsenek engedélyezve az aktivitások. - + You received %n new notification(s) from %2. %n új értesítést kapott innen: %2.%n új értesítést kapott innen: %2. - + You received %n new notification(s) from %1 and %2. %n új értesítést kapott innen: %1 és %2.%n új értesítést kapott innen: %1 és %2. - + You received new notifications from %1, %2 and other accounts. Új értesítést kapott innen: %1, %2 és további fiókoktól. - + %1 Notifications - Action Required %1 értesítések - Beavatkozás szükséges @@ -3438,207 +3438,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Belépés szükséges - + Folder %1: %2 Mappa %1: %2 - + No sync folders configured. Nincsenek megadva szinkronizálandó mappák. - + There are no sync folders configured. Nincsenek megadva szinkronizálandó mappák. - + Open in browser Megnyitás böngészőben - - - + + + Log in... Bejelentkezés... - - - + + + Log out Kilépés - + Recent Changes Legutóbbi változások - + Checking for changes in '%1' - + Managed Folders: Kezelt mappák: - + Open folder '%1' „%1” könyvtár megnyitása - + Open %1 in browser %1 megnyitása böngészőben - + Unknown status Ismeretlen állapot - + Settings... Beállítások... - + Details... Részletek... - + Help Súgó - + Quit %1 %1 kilépés - + Disconnected from %1 Szétcsatlakozva innen: %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Szétcsatlakozva a fiókokból: ó - + Account %1: %2 %1 fiók: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Mostanában nincs szinkronizált elem - + Syncing %1 of %2 (%3 left) %1/%2 szinkronizálása (%3 maradt) - + Syncing %1 of %2 - + Syncing %1 (%2 left) %1 szinkronizálása (%2 maradt) - + Syncing %1 %1 szinkronizálása - + %1 (%2, %3) %1 (%2, %3) - + Up to date Naprakész diff --git a/translations/client_it.ts b/translations/client_it.ts index b0a87fbd0..b99f586e1 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Connessione scaduta - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Attività del server - + Sync Protocol Protocollo di sincronizzazione - + Not Synced Non sincronizzata - + Not Synced (%1) %1 is the number of not synced files. Non sincronizzata (%1) - + The server activity list has been copied to the clipboard. L'elenco di attività del server è stato copiato negli appunti. - + The sync activity list has been copied to the clipboard. L'elenco di attività di sincronizzazione è stato copiato negli appunti. - + The list of unsynced items has been copied to the clipboard. L'elenco di elementi non sincronizzati è stato copiato negli appunti. - + Copied to clipboard Copiato negli appunti @@ -469,7 +469,7 @@ EtichettaTesto - + Server Activities Attività del server @@ -484,32 +484,32 @@ Copia l'elenco delle attività negli appunti. - + Action Required: Notifications Azione richiesta: notifiche - + <br/>Account %1 does not have activities enabled. <br/>L'account %1 non ha attività abilitate. - + You received %n new notification(s) from %2. Hai ricevuto %n nuova notifica da %2.Hai ricevuto %n nuove notifiche da %2. - + You received %n new notification(s) from %1 and %2. Hai ricevuto %n nuova notifica da %1 e %2.Hai ricevuto %n nuove notifiche da %1 e %2. - + You received new notifications from %1, %2 and other accounts. Hai ricevuto nuove notifiche da %1, %2 e altri account. - + %1 Notifications - Action Required %1 notifiche - azione richiesta @@ -3447,207 +3447,207 @@ Non è consigliabile utilizzarlo. OCC::ownCloudGui - + Please sign in Accedi - + Folder %1: %2 Cartella %1: %2 - + No sync folders configured. Nessuna cartella configurata per la sincronizzazione. - + There are no sync folders configured. Non è stata configurata alcuna cartella per la sincronizzazione. - + Open in browser Apri nel browser - - - + + + Log in... Accedi... - - - + + + Log out Esci - + Recent Changes Modifiche recenti - + Checking for changes in '%1' Controllo delle modifiche in '%1' - + Managed Folders: Cartelle gestite: - + Open folder '%1' Apri la cartella '%1' - + Open %1 in browser Apri %1 nel browser... - + Unknown status Stato sconosciuto - + Settings... Impostazioni... - + Details... Dettagli... - + Help Aiuto - + Quit %1 Esci da %1 - + Disconnected from %1 Disconnesso dal %1 - + Unsupported Server Version Versione del server non supportata - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Il server dell'account %1 esegue una versione %2 datata e non supportata. L'utilizzo del client con versioni non supportate non è sperimentato ed è potenzialmente pericoloso. Continua a tuo rischio. - + Disconnected from accounts: Disconnesso dagli account: - + Account %1: %2 Account %1: %2 - + Account synchronization is disabled La sincronizzazione dell'account è disabilitata - + Unpause all folders Riprendi tutte le cartelle - + Pause all folders Sospendi tutte le cartelle - + Unpause all synchronization Riprendi tutte le sincronizzazioni - + Unpause synchronization Riprendi la sincronizzazione - + Pause all synchronization Sospendi tutte le sincronizzazioni - + Pause synchronization Sospendi la sincronizzazione - + Log out of all accounts Disconnetti tutti gli account - + Log in to all accounts... Accedi a tutti gli account... - + New account... Nuovo account... - + Crash now Only shows in debug mode to allow testing the crash handler Chiusura immediata - + No items synced recently Nessun elemento sincronizzato di recente - + Syncing %1 of %2 (%3 left) Sincronizzazione di %1 di %2 (%3 rimanenti) - + Syncing %1 of %2 Sincronizzazione di %1 di %2 - + Syncing %1 (%2 left) Sincronizzazione di %1 (%2 rimanenti) - + Syncing %1 Sincronizzazione di %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aggiornato diff --git a/translations/client_ja.ts b/translations/client_ja.ts index a54271287..5763d6a5a 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out 接続タイムアウト - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity サーバーアクティビティ - + Sync Protocol 同期状況 - + Not Synced 同期対象外 - + Not Synced (%1) %1 is the number of not synced files. 未同期 (%1) - + The server activity list has been copied to the clipboard. サーバーアクティビティリストをクリップボードにコピーしました。 - + The sync activity list has been copied to the clipboard. 同期状況をクリップボードにコピーしました。 - + The list of unsynced items has been copied to the clipboard. 同期されていないアイテムのリストがクリップボードにコピーされました。 - + Copied to clipboard クリップボードにコピー @@ -469,7 +469,7 @@ テキストラベル - + Server Activities サーバーアクティビティ @@ -484,32 +484,32 @@ アクティビティ一覧をコピーする - + Action Required: Notifications 操作が必要: 通知 - + <br/>Account %1 does not have activities enabled. <br/>%1 アカウントは、 アクティビティを有効にしていません。 - + You received %n new notification(s) from %2. %2 から %n の新しい通知がありました。 - + You received %n new notification(s) from %1 and %2. %1 と %2 から %n の新しい通知がありました。 - + You received new notifications from %1, %2 and other accounts. %1 と %2 、その他アカウントから新しい通知がありました。 - + %1 Notifications - Action Required 通知 %1 - 操作が必要です。 @@ -3448,207 +3448,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in サインインしてください - + Folder %1: %2 フォルダー %1: %2 - + No sync folders configured. 同期フォルダーが設定されていません。 - + There are no sync folders configured. 同期するフォルダーがありません。 - + Open in browser ブラウザーで開く - - - + + + Log in... ログイン... - - - + + + Log out ログアウト - + Recent Changes 最近変更されたファイル - + Checking for changes in '%1' '%1' の更新を確認しています - + Managed Folders: 管理フォルダー: - + Open folder '%1' フォルダー ’%1’ を開く - + Open %1 in browser %1をブラウザーで開く - + Unknown status 不明な状態 - + Settings... 設定... - + Details... 詳細... - + Help ヘルプ - + Quit %1 %1 を終了 - + Disconnected from %1 %1 から切断されました - + Unsupported Server Version サポートされていないサーバーバージョン - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. %1 アカウントのサーバーのバージョン %2 は古く、未サポートです。この未サポートのサーバーバージョンとこのクライアントでの組み合わせは、未テストで潜在的な危険があります。ご利用は自己責任でお願いいたします。 - + Disconnected from accounts: アカウントから切断: - + Account %1: %2 アカウント %1: %2 - + Account synchronization is disabled アカウントの同期は無効になっています - + Unpause all folders すべてのフォルダーの同期を再開 - + Pause all folders すべてのフォルダーの同期を一時停止 - + Unpause all synchronization すべての同期を再開 - + Unpause synchronization 同期を再開 - + Pause all synchronization すべての同期を一時停止 - + Pause synchronization 同期を一時停止 - + Log out of all accounts 全てのアカウントからログアウト - + Log in to all accounts... 全てのアカウントにログイン - + New account... 新規アカウント... - + Crash now Only shows in debug mode to allow testing the crash handler クラッシュしました。 - + No items synced recently 最近同期されたアイテムはありません。 - + Syncing %1 of %2 (%3 left) 同期中 %2 中 %1 (残り %3) - + Syncing %1 of %2 %2 の %1 を同期しています - + Syncing %1 (%2 left) 同期中 %1 (残り %2) - + Syncing %1 同期中 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新です diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 85d823fc2..20c7f8823 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Forbindelsen fikk tidsavbrudd - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Server-aktivitet - + Sync Protocol Synkroniseringsprotokoll - + Not Synced Ikke synkronisert - + Not Synced (%1) %1 is the number of not synced files. Ikke synkronisert (%1) - + The server activity list has been copied to the clipboard. Server-aktivitetslisten er kopiert til utklippstavlen. - + The sync activity list has been copied to the clipboard. Synkroniserings-aktivitetslisten er kopiert til utklippstavlen. - + The list of unsynced items has been copied to the clipboard. Listen med usynkroniserte elementer ble kopiert til utklippstavlen. - + Copied to clipboard Kopiert til utklippstavlen @@ -469,7 +469,7 @@ Tekst-etikett - + Server Activities Server-aktiviteter @@ -484,32 +484,32 @@ Kopier aktivitetslisten til utklippstavlen. - + Action Required: Notifications Handling kreves: Varsler - + <br/>Account %1 does not have activities enabled. <br/>Konto %1 har ikke aktiviteter aktivert. - + You received %n new notification(s) from %2. Du mottok %n nytt varsel fra %2.Du mottok %n nye varsler fra %2. - + You received %n new notification(s) from %1 and %2. Du mottok %n nytt varsel fra %1 og %2.Du mottok %n nye varsler fra %1 og %2. - + You received new notifications from %1, %2 and other accounts. Du mottok nye varsler fra %1, %2 og andre kontoer. - + %1 Notifications - Action Required %1 varsler - Handling kreves @@ -3451,207 +3451,207 @@ Det er ikke tilrådelig å bruke den. OCC::ownCloudGui - + Please sign in Vennligst logg inn - + Folder %1: %2 Mappe %1: %2 - + No sync folders configured. Ingen synkronisering-mapper konfigurert. - + There are no sync folders configured. Ingen synkroniseringsmapper er konfigurert. - + Open in browser Åpne i nettleser - - - + + + Log in... Logg inn.. - - - + + + Log out Logg ut - + Recent Changes Siste endringer - + Checking for changes in '%1' Ser etter endringer i '%1' - + Managed Folders: Administrerte mapper: - + Open folder '%1' Åpne mappe '%1' - + Open %1 in browser Åpne %1 i nettleser - + Unknown status Ukjent status - + Settings... Innstillinger... - + Details... Detaljer... - + Help Hjelp - + Quit %1 Avslutt %1 - + Disconnected from %1 Koble fra %1 - + Unsupported Server Version Server-versjonen støttes ikke - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Serveren på konto %1 kjører en gammel %2 som ikke støttes. Bruk av denne klienten med ikke-støttede server-versjoner er ikke testet og kan være farlig. Fortsett på egen risiko. - + Disconnected from accounts: Koblet fra kontoer: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Kontosynkronisering er deaktivert - + Unpause all folders Fortsett alle mapper - + Pause all folders Sett alle mapper på pause - + Unpause all synchronization Fortsett all synkronisering - + Unpause synchronization Fortsett synkronisering - + Pause all synchronization Sett all synkronisering på pause - + Pause synchronization Sett synkronisering på pause - + Log out of all accounts Logg ut av alle kontoer - + Log in to all accounts... Logg inn på alle kontoer... - + New account... Ny konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krasj nå - + No items synced recently Ingenting synkronisert nylig - + Syncing %1 of %2 (%3 left) Synkroniserer %1 av %2 (%3 gjenstår) - + Syncing %1 of %2 Synkroniserer %1 av %2 - + Syncing %1 (%2 left) Synkroniserer %1 (%2 gjenstår) - + Syncing %1 Synkroniserer %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Oppdatert diff --git a/translations/client_nl.ts b/translations/client_nl.ts index f16aed90e..07c1a5ee0 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Time-out verbinding - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Serveractiviteit - + Sync Protocol Synchronisatiegeschiedenis - + Not Synced Niet gesynchroniseerd - + Not Synced (%1) %1 is the number of not synced files. Niet gesynchroniseerd (%1) - + The server activity list has been copied to the clipboard. De server activiteitenlijst is gekopieerd naar het klembord. - + The sync activity list has been copied to the clipboard. De sync activiteitenlijst is gekopieerd naar het klembord. - + The list of unsynced items has been copied to the clipboard. De lijst met niet gesyncte objecten is gekopieerd naar het klembord. - + Copied to clipboard Gekopieerd naar het klembord @@ -469,7 +469,7 @@ Tekstlabel - + Server Activities Serveractiviteiten @@ -484,32 +484,32 @@ Kopieer de activiteitenlijst naar het klembord. - + Action Required: Notifications Actie verwacht: Berichten - + <br/>Account %1 does not have activities enabled. <br/>Account %1 heeft geen activiteiten ingeschakeld. - + You received %n new notification(s) from %2. U ontving %n nieuw bericht van %2.U ontving %n nieuwe berichten van %2. - + You received %n new notification(s) from %1 and %2. U ontving %n nieuwe melding(en) van %1 en %2.U ontving %n nieuwe melding(en) van %1 en %2. - + You received new notifications from %1, %2 and other accounts. Je hebt nieuwe berichten ontvangen van %1, %2 en andere acounts - + %1 Notifications - Action Required %1 Berichten - Actie verwacht @@ -3456,207 +3456,207 @@ We adviseren deze site niet te gebruiken. OCC::ownCloudGui - + Please sign in Log alstublieft in - + Folder %1: %2 Map %1: %2 - + No sync folders configured. Geen synchronisatie-mappen geconfigureerd. - + There are no sync folders configured. Er zijn geen synchronisatie-mappen geconfigureerd. - + Open in browser Open in browser - - - + + + Log in... Inloggen... - - - + + + Log out Afmelden - + Recent Changes Recente wijzigingen - + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + Managed Folders: Beheerde mappen: - + Open folder '%1' Open map '%1' - + Open %1 in browser Open %1 in browser - + Unknown status Onbekende status - + Settings... Instellingen... - + Details... Details ... - + Help Help - + Quit %1 %1 afsluiten - + Disconnected from %1 Losgekoppeld van %1 - + Unsupported Server Version Niet-ondersteunde server versie - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. De server van account %1 gebruikt een oude versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is voor uw eigen risico. - + Disconnected from accounts: Losgekoppeld van account: - + Account %1: %2 Account %1: %2 - + Account synchronization is disabled Account synchronisatie is uitgeschakeld - + Unpause all folders Hervat alle mappen - + Pause all folders Pauzeer alle mappen - + Unpause all synchronization Hervat alle synchronisatie - + Unpause synchronization Hervat synchronisatie - + Pause all synchronization Pauzeer alle synchronisatie - + Pause synchronization Pauzeer synchronisatie - + Log out of all accounts Uitloggen van alle accounts... - + Log in to all accounts... Inloggen op alle accounts... - + New account... Nieuw account... - + Crash now Only shows in debug mode to allow testing the crash handler Crash nu - + No items synced recently Recent niets gesynchroniseerd - + Syncing %1 of %2 (%3 left) Sync %1 van %2 (%3 over) - + Syncing %1 of %2 Synchroniseren %1 van %2 - + Syncing %1 (%2 left) Sync %1 (%2 over) - + Syncing %1 Synchroniseren %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Bijgewerkt diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 8a93c50a4..7309c4ff7 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Przekroczono czas odpowiedzi - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Aktywność serwera - + Sync Protocol Protokół synchronizacji - + Not Synced Niezsynchronizowany - + Not Synced (%1) %1 is the number of not synced files. Niezsynchronizowany (%1) - + The server activity list has been copied to the clipboard. Log aktywności serwera został skopiowany do schowka. - + The sync activity list has been copied to the clipboard. Przebieg synchronizacji został skopiowany do schowka. - + The list of unsynced items has been copied to the clipboard. Lista niezsynchronizowanych elementów została skopiowana do schowka - + Copied to clipboard Skopiuj do schowka @@ -469,7 +469,7 @@ Etykieta - + Server Activities Działania serwera @@ -484,32 +484,32 @@ Kopiuj listę aktywności do schowka. - + Action Required: Notifications Wymagana akcja: Powiadomienia - + <br/>Account %1 does not have activities enabled. <br/>Użytkownik %1 nie ma włączonej historii aktywności. - + You received %n new notification(s) from %2. Otrzymano %n nowe powiadomienie od %2.Otrzymano %n nowe powiadomienia od %2.Otrzymano %n nowych powiadomień od %2.Otrzymano %n nowych powiadomień od %2. - + You received %n new notification(s) from %1 and %2. Otrzymano %n nowe powiadomienie od %1 i %2.Otrzymano %n nowe powiadomienia od %1 i %2.Otrzymano %n nowych powiadomień %1 i %2.Otrzymano %n nowych powiadomień %1 i %2. - + You received new notifications from %1, %2 and other accounts. Otrzymałeś nowe powiadomienia z %1, %2 i innych kont. - + %1 Notifications - Action Required %1 Powiadomień - Wymagana akcja @@ -3445,207 +3445,207 @@ Niezalecane jest jego użycie. OCC::ownCloudGui - + Please sign in Proszę się zalogować - + Folder %1: %2 Folder %1: %2 - + No sync folders configured. Nie skonfigurowano synchronizowanych folderów. - + There are no sync folders configured. Nie skonfigurowano żadnych folderów synchronizacji. - + Open in browser Otwórz w przeglądarce - - - + + + Log in... Zaloguj... - - - + + + Log out Wyloguj - + Recent Changes Ostatnie zmiany - + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + Managed Folders: Zarządzane foldery: - + Open folder '%1' Otwórz katalog '%1' - + Open %1 in browser Otwórz %1 w przeglądarce - + Unknown status Nieznany status - + Settings... Ustawienia... - + Details... Szczegóły... - + Help Pomoc - + Quit %1 Wyjdź %1 - + Disconnected from %1 Rozłączony z %1 - + Unsupported Server Version Nie wspierana wersja serwera - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Serwer dla konta %1 uruchomiony jest na starej i niewspieranej wersji %2. Używanie klienta z niewspieranym serwerem nie zostało przetestowane i jest potencjalnie niebezpieczne. Kontynuujesz na własne ryzyko. - + Disconnected from accounts: Rozłączony z kontami: - + Account %1: %2 Dostęp %1: %2 - + Account synchronization is disabled Konto synchronizacji jest wyłączone - + Unpause all folders Wznów wszystkie katalogi - + Pause all folders Wstrzymaj wszystkie katalogi - + Unpause all synchronization Wznów wszystkie synchronizacje - + Unpause synchronization Wznów synchronizację - + Pause all synchronization Wstrzymaj wszystkie synchronizacje - + Pause synchronization Wstrzymaj synchronizację - + Log out of all accounts Wyloguj się się ze wszystkich kont - + Log in to all accounts... Zaloguj się do wszystkich kont - + New account... Nowe konto... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Brak ostatnich synchronizacji - + Syncing %1 of %2 (%3 left) Synchronizacja %1 z %2 (%3 pozostało) - + Syncing %1 of %2 Synchronizowanie %1 of %2 - + Syncing %1 (%2 left) Synchronizuję %1 (%2 pozostało) - + Syncing %1 Synchronizowanie %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktualne diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 5e810af5a..ce6aacc43 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out A ligação expirou - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não Sincronizado (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The sync activity list has been copied to the clipboard. A lista de atividades de sincronização foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para a área de transferência @@ -469,7 +469,7 @@ EtiquetaTexto - + Server Activities Atividades do Servidor @@ -484,32 +484,32 @@ Copiar a lista de actividades para a área de transferência. - + Action Required: Notifications Ação necessária: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Recebeu %n nova notificação de %2.Recebeu %n novas notificações de %2. - + You received %n new notification(s) from %1 and %2. Recebeu %n nova notificação de %1 e %2.Recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Necessária @@ -3452,207 +3452,207 @@ Não é aconselhada a sua utilização. OCC::ownCloudGui - + Please sign in Por favor inicie a sessão - + Folder %1: %2 Pasta %1: %2 - + No sync folders configured. Nenhuma pasta de sincronização configurada. - + There are no sync folders configured. Não há pastas de sincronização configurado. - + Open in browser Abrir no navegador - - - + + + Log in... Iniciar sessão... - - - + + + Log out Terminar sessão - + Recent Changes Alterações recentes - + Checking for changes in '%1' Procurando por alterações em '%1' - + Managed Folders: Pastas Geridas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Estado desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair do %1 - + Disconnected from %1 Desconetado de %1 - + Unsupported Server Version Versão de servidor não suportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. O servidor na conta %1 está a correr uma versão %2 antiga e não suportada. O uso deste cliente com versões de servidor não suportadas não está testado e é potencialmente perigos. Prossiga por sua conta e risco. - + Disconnected from accounts: Desconetado das contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled A sincronização de contas está desactivada - + Unpause all folders Continuar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Continuar toda a sincronização - + Unpause synchronization Continuar sincronização - + Pause all synchronization Pausar toda a sincronização - + Pause synchronization Pausar sincronização - + Log out of all accounts Sair de todas as contas - + Log in to all accounts... Entrar em todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Crash agora - + No items synced recently Sem itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 A sincronizar %1 de %2 - + Syncing %1 (%2 left) A sincronizar %1 (%2 em falta) - + Syncing %1 A sincronizar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Atualizado diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 989a5cb96..b36b8ed89 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Conexão expirou - + Unknown error: network reply was deleted Erro desconhecido: a resposta da rede foi excluída - + Server replied "%1 %2" to "%3 %4" Resposta do servidor "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Atividade do Servidor - + Sync Protocol Protocolo de Sincronização - + Not Synced Não Sincronizado - + Not Synced (%1) %1 is the number of not synced files. Não sincronizada (%1) - + The server activity list has been copied to the clipboard. A lista de atividades do servidor tem sido copiados para o clipboard. - + The sync activity list has been copied to the clipboard. A lista de atividades do servidor foi copiada para a área de transferência. - + The list of unsynced items has been copied to the clipboard. A lista de itens não sincronizados foi copiada para a área de transferência. - + Copied to clipboard Copiado para área de transferência @@ -469,7 +469,7 @@ RótuloTexto - + Server Activities Atividades do Servidor @@ -484,32 +484,32 @@ Copiar a lista de atividades para a área de transferência. - + Action Required: Notifications Ação Requerida: Notificações - + <br/>Account %1 does not have activities enabled. <br/>A conta %1 não tem atividades ativadas. - + You received %n new notification(s) from %2. Você recebeu %n nova notificação de %2.Você recebeu %n notificações de %2. - + You received %n new notification(s) from %1 and %2. Você recebeu %n nova notificação de %1 e %2.Você recebeu %n novas notificações de %1 e %2. - + You received new notifications from %1, %2 and other accounts. Você recebeu novas notificações de %1, %2 e outras contas. - + %1 Notifications - Action Required %1 Notificações - Ação Requerida @@ -3449,207 +3449,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Favor conectar - + Folder %1: %2 Pasta %1: %2 - + No sync folders configured. Pastas de sincronização não configuradas. - + There are no sync folders configured. Não há pastas de sincronização configuradas. - + Open in browser Abrir no navegador - - - + + + Log in... Entrar... - - - + + + Log out Sair - + Recent Changes Alterações Recentes - + Checking for changes in '%1' Verificando por alterações em '%1' - + Managed Folders: Pastas Gerenciadas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Status desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair %1 - + Disconnected from %1 Desconectado de %1 - + Unsupported Server Version Versão do Servidor Não Suportada - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. O servidor da conta %1 está executando uma versão %2 antiga e não suportada. Usar esse cliente junto com versões não suportadas e não testadas é potencialmente perigoso. Prossiga por conta própria. - + Disconnected from accounts: Desconectado de contas: - + Account %1: %2 Conta %1: %2 - + Account synchronization is disabled A sincronização de conta está desativada - + Unpause all folders Retomar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Retomar toda a sincronização - + Unpause synchronization Retomar sincronização - + Pause all synchronization Dar uma pausa em toda a sincronização - + Pause synchronization Dar uma pausa na sincronização - + Log out of all accounts Desconectar todas as contas - + Log in to all accounts... Conectar todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrar agora - + No items synced recently Não há itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (%2 faltando) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Até a data diff --git a/translations/client_ru.ts b/translations/client_ru.ts index d8b2be0ec..c1da82455 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Время ожидания соединения превышено - + Unknown error: network reply was deleted Неизвестная ошибка: сетевой ответ был удален - + Server replied "%1 %2" to "%3 %4" Сервер ответил от "%1 %2" до "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Действия Сервера - + Sync Protocol Протокол синхронизации - + Not Synced Не синхронизировано - + Not Synced (%1) %1 is the number of not synced files. Не синхронизировано (%1) - + The server activity list has been copied to the clipboard. Список активности сервера скопирован в буфер обмена. - + The sync activity list has been copied to the clipboard. Список активности синхронизации скопирован в буфер обмена. - + The list of unsynced items has been copied to the clipboard. Список несинхронизированных элементов скопирован в буфер обмена. - + Copied to clipboard Скопировано в буфер обмена @@ -469,7 +469,7 @@ TextLabel - + Server Activities Действия Сервера @@ -484,32 +484,32 @@ Скопировать журнал синхронизации в буфер обмена. - + Action Required: Notifications Требуется действие: уведомления - + <br/>Account %1 does not have activities enabled. <br/>У учетной записи %1 не включены события. - + You received %n new notification(s) from %2. Вы получили %n новое уведомление от %2.Вы получили %n новых уведомления от %2.Вы получили %n новых уведомлений от %2.Вы получили %n новых уведомлений от %2. - + You received %n new notification(s) from %1 and %2. Вы получили %n новое уведомление от %1 и %2.Вы получили %n новых уведомления от %1 и %2.Вы получили %n новых уведомлений от %1 и %2.Вы получили %n новых уведомлений от %1 и %2. - + You received new notifications from %1, %2 and other accounts. Для Вас получено %n новых уведомлений из %1, %2 и других уч.записей. - + %1 Notifications - Action Required %1 уведомлений - требуются действия. @@ -3449,207 +3449,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пожалуйста войдите в систему - + Folder %1: %2 Каталог %1: %2 - + No sync folders configured. Нет каталогов для синхронизации. - + There are no sync folders configured. Нет настроенных каталогов для синхронизации - + Open in browser Открыть в браузере - - - + + + Log in... Вход... - - - + + + Log out Выйти - + Recent Changes Недавние изменения - + Checking for changes in '%1' Проверка изменений в '%1' - + Managed Folders: Управляемые каталоги: - + Open folder '%1' Открыть каталог '%1' - + Open %1 in browser Открыть %1 в браузере - + Unknown status Неизвестный статус - + Settings... Настройки... - + Details... Детали... - + Help Помощь - + Quit %1 Закрыть %1 - + Disconnected from %1 Отключен от %1 - + Unsupported Server Version Версия сервера не поддерживается - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Сервер для учетной записи %1 использует старую не поддерживаемую версию %2. Использование этого клиента совместно с не поддерживаемым сервером не тестировалось и является потенциально небезопасным. Вы продолжаете на свой страх и риск. - + Disconnected from accounts: Отключен от учетных записей: - + Account %1: %2 Учетная запись %1: %2 - + Account synchronization is disabled Синхронизация учётной записи отключена - + Unpause all folders Снять с паузы все папки - + Pause all folders Поставить на паузу все папки - + Unpause all synchronization Возобновить все синхронизации - + Unpause synchronization Возобновить синхронизацию - + Pause all synchronization Приостановить все синхронизации - + Pause synchronization Приостановить синхронизацию - + Log out of all accounts Выйти из всех учетных записей - + Log in to all accounts... Войти во все учетные записи... - + New account... Новая учётная запись… - + Crash now Only shows in debug mode to allow testing the crash handler Критическая ошибка! - + No items synced recently Недавно ничего не синхронизировалось - + Syncing %1 of %2 (%3 left) Синхронизация %1 из %2 (осталось %3) - + Syncing %1 of %2 Синхронизирую %1 из %2 - + Syncing %1 (%2 left) Синхронизация %1 (осталось %2) - + Syncing %1 Синхронизация %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Актуальная версия diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 0ae3facce..b899d8191 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Pripojenie expirovalo - + Unknown error: network reply was deleted Neznáma chyba: odpoveď siete bola odstránená - + Server replied "%1 %2" to "%3 %4" Server odpovedal "%1 %2" na "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Aktivita servera - + Sync Protocol Záznam synchronizácie - + Not Synced Nezosynchronizované - + Not Synced (%1) %1 is the number of not synced files. Nezosynchronizované (%1) - + The server activity list has been copied to the clipboard. Zoznam aktivít servera bol skopírovaný do schránky. - + The sync activity list has been copied to the clipboard. Zoznam aktivít synchronizácie bol skopírovaný do schránky. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Skopírované do schránky @@ -469,7 +469,7 @@ Štítok - + Server Activities Aktivita servera @@ -484,32 +484,32 @@ Skopírovať zoznam aktivít do schránky. - + Action Required: Notifications Požaduje sa činnosť: oznámenia - + <br/>Account %1 does not have activities enabled. <br/>Účet %1 nemá zapnuté aktivity. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3441,207 +3441,207 @@ Nie je vhodné ju používať. OCC::ownCloudGui - + Please sign in Prihláste sa prosím - + Folder %1: %2 Priečinok %1: %2 - + No sync folders configured. Nie sú nastavené žiadne synchronizačné priečinky. - + There are no sync folders configured. Nie sú nastavené žiadne priečinky na synchronizáciu. - + Open in browser Otvoriť v prehliadači - - - + + + Log in... Prihlásiť sa... - - - + + + Log out Odhlásiť - + Recent Changes Nedávne zmeny - + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + Managed Folders: Spravované priečinky: - + Open folder '%1' Otvoriť priečinok '%1' - + Open %1 in browser Otvoriť %1 v prehliadači - + Unknown status Neznámy stav - + Settings... Nastavenia... - + Details... Podrobnosti... - + Help Pomoc - + Quit %1 Ukončiť %1 - + Disconnected from %1 Odpojený od %1 - + Unsupported Server Version Nepodporovaná verzia servera - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Odpojené od účtov: - + Account %1: %2 Účet %1: %2 - + Account synchronization is disabled Synchronizácia účtu je vypnutá - + Unpause all folders Zrušiť pozastavenie všetkých priečinkov - + Pause all folders Pozastaviť všetky priečinky - + Unpause all synchronization Zrušiť pozastavenie všetkej synchronizácie - + Unpause synchronization Zrušiť pozastavenie synchronizácie - + Pause all synchronization Pozastaviť všetku synchronizáciu - + Pause synchronization Pozastaviť synchronizáciu - + Log out of all accounts Odhlásiť sa zo všetkých účtov - + Log in to all accounts... Prihlásiť sa do všetkých účtov... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Zlyhanie - + No items synced recently Žiadne nedávno synchronizované položky - + Syncing %1 of %2 (%3 left) Synchronizuje sa %1 z %2 (zostáva %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Synchronizuje sa %1 (zostáva %2) - + Syncing %1 Synchronizuje sa %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Až do dnešného dňa diff --git a/translations/client_sl.ts b/translations/client_sl.ts index a43055973..0f06f0814 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Povezava je časovno potekla - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Dejavnost strežnika - + Sync Protocol Protokol usklajevanja - + Not Synced Ni usklajeno - + Not Synced (%1) %1 is the number of not synced files. Ni usklajeno (%1) - + The server activity list has been copied to the clipboard. Seznam opravil strežnika je kopiran v odložišče. - + The sync activity list has been copied to the clipboard. Seznam opravil usklajevanja je kopiran v odložišče. - + The list of unsynced items has been copied to the clipboard. Seznam neusklajenih predmetov je kopiran v odložišče. - + Copied to clipboard Kopirano v odložišče @@ -469,7 +469,7 @@ Besedilna oznaka - + Server Activities Dejavnosti strežnika @@ -484,32 +484,32 @@ Kopiraj seznam opravil v odložišče. - + Action Required: Notifications Zahtevano je dejanje: obvestila - + <br/>Account %1 does not have activities enabled. <br/>Za račun %1 možnosti opravil niso omogočene. - + You received %n new notification(s) from %2. Prejeli ste %n novo obvestilo od %2.Prejeli ste %n novi obvestili od %2.Prejeli ste %n nova obvestila od %2.Prejeli ste %n novih obvestil od %2. - + You received %n new notification(s) from %1 and %2. Prejeli ste %n novo obvestilo od %1 in %2.Prejeli ste %n novi obvestili od %1 in %2.Prejeli ste %n nova obvestila od %1 in %2.Prejeli ste %n novih obvestil od %1 in %2. - + You received new notifications from %1, %2 and other accounts. Prejeli ste nova obvestila prek %1, %2 in drugih računov. - + %1 Notifications - Action Required %1 obvestil ‒ zahtevajo odziv @@ -3452,207 +3452,207 @@ Uporaba ni priporočljiva. OCC::ownCloudGui - + Please sign in Pred nadaljevanjem je zahtevana prijava - + Folder %1: %2 Mapa %1: %2 - + No sync folders configured. Ni nastavljenih map za usklajevanje. - + There are no sync folders configured. Ni nastavljenih map za usklajevanje. - + Open in browser Odpri v brskalniku - - - + + + Log in... Prijava ... - - - + + + Log out Odjava - + Recent Changes Nedavne spremembe - + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + Managed Folders: Upravljane mape: - + Open folder '%1' Odpri mapo '%1' - + Open %1 in browser Odpri %1 v brskalniku - + Unknown status Neznano stanje - + Settings... Nastavitve ... - + Details... Podrobnosti ... - + Help Pomoč - + Quit %1 Končaj %1 - + Disconnected from %1 Prekinjena povezava z %1 - + Unsupported Server Version Nepodprta različica strežnika - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Na strežniku računua %1 teče starejša nepodprta različica %2. Z uporabo trenutno nameščenega odjemalca z nepodporo različico strežnika ni varno. Nadaljujete na lastno odgovornost. - + Disconnected from accounts: Prekinjena je povezava z računi: - + Account %1: %2 Račun %1: %2 - + Account synchronization is disabled Usklajevanje računa je onemogočeno - + Unpause all folders Nadaljuj usklajevanje vseh map - + Pause all folders Ustavi usklajevanje vseh map - + Unpause all synchronization Nadaljuj usklajevanje vsega - + Unpause synchronization Nadaljuj usklajevanje - + Pause all synchronization Ustavi vse usklajevanje - + Pause synchronization Ustavi usklajevanje - + Log out of all accounts Odjavi vse račune - + Log in to all accounts... Prijavi z vsemi računi ... - + New account... Nov račun ... - + Crash now Only shows in debug mode to allow testing the crash handler Sesuj zdaj - + No items synced recently Ni nedavno usklajenih predmetov - + Syncing %1 of %2 (%3 left) Poteka usklajevanje %1 od %2 (preostaja %3) - + Syncing %1 of %2 Poteka usklajevanje %1 od %2 - + Syncing %1 (%2 left) Usklajevanje %1 (%2 do konca) - + Syncing %1 Usklajevanje %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ni posodobitev diff --git a/translations/client_sr.ts b/translations/client_sr.ts index f0d5fee72..1fac7e0fd 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Време повезивања истекло - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Активност сервера - + Sync Protocol Протокол синхронизације - + Not Synced Несинхронизовано - + Not Synced (%1) %1 is the number of not synced files. - + The server activity list has been copied to the clipboard. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Копирано у клипборд @@ -469,7 +469,7 @@ Текст ознака - + Server Activities Активности сервера @@ -484,32 +484,32 @@ Копирај активност у клипборд. - + Action Required: Notifications - + <br/>Account %1 does not have activities enabled. <br/>Налог %1 нема укључене активности. - + You received %n new notification(s) from %2. - + You received %n new notification(s) from %1 and %2. - + You received new notifications from %1, %2 and other accounts. - + %1 Notifications - Action Required @@ -3441,207 +3441,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пријавите се - + Folder %1: %2 Фасцикла %1: %2 - + No sync folders configured. Нема подешених фасцикли за синхронизацију. - + There are no sync folders configured. Нема подешених фасцикли за синхронизацију. - + Open in browser Отвори у прегледачу - - - + + + Log in... Пријави се... - - - + + + Log out Одјава - + Recent Changes Недавне измене - + Checking for changes in '%1' Проверавам измене у „%1“ - + Managed Folders: Управљане фасцикле: - + Open folder '%1' Отвори фасциклу „%1“ - + Open %1 in browser Отвори %1 у прегледачу - + Unknown status Непознато стање - + Settings... Поставке... - + Details... Детаљи... - + Help Помоћ - + Quit %1 Напусти %1 - + Disconnected from %1 Одјављен са %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: Одјављен са налога: - + Account %1: %2 Налог %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Одјави се са свих налога - + Log in to all accounts... Пријави се на све налоге... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Падни сада - + No items synced recently Ништа није недавно синхронизовано - + Syncing %1 of %2 (%3 left) Синхронизујем %1 од %2 (преостало %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронизујем %1 (преостало %2) - + Syncing %1 Синхронизујем %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ажурно diff --git a/translations/client_sv.ts b/translations/client_sv.ts index d0085e94f..63bc66327 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Tidsgräns för anslutningen överskreds - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Serveraktivitet - + Sync Protocol Synkprotokoll - + Not Synced Inte synkroniserad - + Not Synced (%1) %1 is the number of not synced files. Inte synkad (%1) - + The server activity list has been copied to the clipboard. Listan på serveraktivitet har kopierats till urklipp. - + The sync activity list has been copied to the clipboard. Listan på synkaktivitet har kopierats till urklipp. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Kopierat till urklipp @@ -469,7 +469,7 @@ Textetikett - + Server Activities Serveraktivitet @@ -484,32 +484,32 @@ Kopiera aktivitetslistan till urklipp. - + Action Required: Notifications Åtgärd krävs: Notifieringar - + <br/>Account %1 does not have activities enabled. <br/>Kontot %1 har inte aktiviteter aktiverade - + You received %n new notification(s) from %2. Du har mottagit %n ny notifiering från %2.Du har mottagit %n nya notifieringar från %2. - + You received %n new notification(s) from %1 and %2. Du tog emot %1 ny notis från %1 och %2.Du tog emot %n nya notiser från %1 och %2. - + You received new notifications from %1, %2 and other accounts. Du tog emot nya notiser från %1, %2 och andra konton. - + %1 Notifications - Action Required %1 Notiser - Åtgärd krävs @@ -3445,207 +3445,207 @@ Det är inte lämpligt använda den. OCC::ownCloudGui - + Please sign in Vänliga logga in - + Folder %1: %2 Mapp %1: %2 - + No sync folders configured. Ingen synkroniseringsmapp är konfigurerad. - + There are no sync folders configured. Det finns inga synkmappar konfigurerade. - + Open in browser Öppna i webbläsare - - - + + + Log in... Logga in... - - - + + + Log out Logga ut - + Recent Changes Senaste ändringar - + Checking for changes in '%1' Kollar efter ändringar i '%1' - + Managed Folders: Hanterade mappar: - + Open folder '%1' Öppna mapp '%1' - + Open %1 in browser Öppna %1 i webbläsaren - + Unknown status Okänd status - + Settings... Inställningar... - + Details... Detaljer... - + Help Hjälp - + Quit %1 Avsluta %1 - + Disconnected from %1 Koppla från %1 - + Unsupported Server Version Serverversion stöds inte - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. Servern på konto %1 kör en gammal version %2 som inte längre stöds. Att använda den här klienten med den serverversionen är otestat och potentiellt farligt. Fortsätt på egen risk. - + Disconnected from accounts: Bortkopplad från dessa konton: - + Account %1: %2 Konto %1: %2 - + Account synchronization is disabled Synkronisering för konto är avstängd - + Unpause all folders Sluta pausa alla mappar - + Pause all folders Pausa alla mappar - + Unpause all synchronization Sluta pausa all synkroinisering - + Unpause synchronization Sluta pausa synkronisering - + Pause all synchronization Pausa all synkronisering - + Pause synchronization Pausa synkronisering - + Log out of all accounts Logga ut från alla konton - + Log in to all accounts... Logga in på alla konton... - + New account... Nytt konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krascha nu - + No items synced recently Inga filer har synkroniseras nyligen - + Syncing %1 of %2 (%3 left) Synkroniserar %1 av %2 (%3 kvar) - + Syncing %1 of %2 Synkroniserar %1 av %2 - + Syncing %1 (%2 left) Synkroniserar %1 (%2 kvar) - + Syncing %1 Synkroniserar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell version diff --git a/translations/client_th.ts b/translations/client_th.ts index 00086dd88..e86a3c665 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out หมดเวลาการเชื่อมต่อ - + Unknown error: network reply was deleted ข้อผิดพลาดที่ไม่รู้จัก: การตอบกลับของเครือข่ายถูกลบแล้ว - + Server replied "%1 %2" to "%3 %4" เซิร์ฟเวอร์ตอบกลับ "%1 %2" ถึง "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity กิจกรรมของเซิร์ฟเวอร์ - + Sync Protocol โปรโตคอลที่ใช้ในการผสานข้อมูล - + Not Synced ไม่ถูกประสานข้อมูลให้ตรงกัน - + Not Synced (%1) %1 is the number of not synced files. ไม่ถูกประสานข้อมูล (%1) - + The server activity list has been copied to the clipboard. รายการกิจกรรมเซิร์ฟเวอร์ได้ถูกคัดลอกไปยังคลิปบอร์ด - + The sync activity list has been copied to the clipboard. รายการกิจกรรมการประสานข้อมูลได้ถูกคัดลอกไปยังคลิปบอร์ด - + The list of unsynced items has been copied to the clipboard. รายชื่อของรายการที่ไม่ได้ประสานข้อมูล ได้ถูกคัดลอกไปยังคลิปบอร์ด - + Copied to clipboard คัดลอกไปยังคลิปบอร์ด @@ -469,7 +469,7 @@ ป้ายข้อความ - + Server Activities กิจกรรมของเซิร์ฟเวอร์ @@ -484,32 +484,32 @@ คัดลอกรายชื่อกิจกรรมไปยังคลิปบอร์ด - + Action Required: Notifications จำเป็นต้องทำ: การแจ้งเตือน - + <br/>Account %1 does not have activities enabled. <br />บัญชี %1 ไม่มีกิจกรรมที่เปิดใช้งาน - + You received %n new notification(s) from %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %2 - + You received %n new notification(s) from %1 and %2. คุณได้รับ %n การแจ้งเตือนใหม่จาก %1 และ %2 - + You received new notifications from %1, %2 and other accounts. คุณได้รับการแจ้งเตือนใหม่จาก %1, %2 และผู้ใช้อื่นๆ - + %1 Notifications - Action Required %1 การแจ้งเตือน - จำเป็นต้องดำเนินการ @@ -3452,207 +3452,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in กรุณาเข้าสู่ระบบ - + Folder %1: %2 โฟลเดอร์ %1: %2 - + No sync folders configured. ยังไม่มีการกำหนดค่าโฟลเดอร์ที่ต้องการประสานข้อมูล - + There are no sync folders configured. ไม่มีการกำหนดค่าการประสานข้อมูลโฟลเดอร์ - + Open in browser เปิดในเบราว์เซอร์ - - - + + + Log in... เข้าสู่ระบบ... - - - + + + Log out ออกจากระบบ - + Recent Changes การเปลี่ยนแปลงล่าสุด - + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + Managed Folders: โฟลเดอร์ที่มีการจัดการแล้ว: - + Open folder '%1' เปิดโฟลเดอร์ '%1' - + Open %1 in browser เปิด %1 ในเบราว์เซอร์ - + Unknown status สถานะที่ไม่รู้จัก - + Settings... ตั้งค่า... - + Details... รายละเอียด... - + Help ช่วยเหลือ - + Quit %1 ออก %1 - + Disconnected from %1 ถูกตัดการเชื่อมต่อจาก %1 - + Unsupported Server Version ไม่สนับสนุนรุ่นของ Server - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. เซิฟเวอร์บนบัญชี %1 ได้ใช้งานในรุ่นเก่าและเป็นรุ่นที่ไม่ได้รับการสนับสนุนแล้ว %2 หากใช้งานต่อไปอาจเป็นอันตราย ดำเนินการที่มีความเสี่ยงด้วยตัวคุณเอง - + Disconnected from accounts: ยกเลิกการเชื่อมต่อจากบัญชี: - + Account %1: %2 บัญชี %1: %2 - + Account synchronization is disabled บัญชีประสานข้อมูลถูกปิดใช้งาน - + Unpause all folders ทำโฟลเดอร์ทั้งหมดต่อ - + Pause all folders หยุดโฟลเดอร์ทั้งหมดชั่วคราว - + Unpause all synchronization ประสานข้อมูลทั้งหมดต่อ - + Unpause synchronization ประสานข้อมูลต่อ - + Pause all synchronization หยุดการประสานข้อมูลทั้งหมดชั่วคราว - + Pause synchronization หยุดการประสานข้อมูลชั่วคราว - + Log out of all accounts ออกจากระบบของบัญชีทั้งหมด - + Log in to all accounts... เข้าสู่ระบบของบัญชีทั้งหมด... - + New account... สร้างบัญชีใหม่... - + Crash now Only shows in debug mode to allow testing the crash handler ความผิดพลาดในขณะนี้ - + No items synced recently ไม่มีรายการที่ถูกประสานข้อมูลเมื่อเร็วๆ นี้ - + Syncing %1 of %2 (%3 left) กำลังประสานข้อมูล %1 จาก %2 (เหลือ %3) - + Syncing %1 of %2 กำลังประสานข้อมูล %1 จากทั้งหมด %2 - + Syncing %1 (%2 left) กำลังประสานข้อมูล %1 (เหลือ %2) - + Syncing %1 กำลังประสานข้อมูล %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date ถึงวันที่ diff --git a/translations/client_tr.ts b/translations/client_tr.ts index dd21ab148..bed4e076d 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Bağlantı zaman aşımına uğradı - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Sunucu Etkinliği - + Sync Protocol Eşitleme Protokolü - + Not Synced Eşitlenmedi - + Not Synced (%1) %1 is the number of not synced files. Eşitlenmedi (%1) - + The server activity list has been copied to the clipboard. Sunucu etkinlik listesi panoya kopyalandı. - + The sync activity list has been copied to the clipboard. Eşitleme etkinlik listesi panoya kopyalandı. - + The list of unsynced items has been copied to the clipboard. Eşitlenmemiş ögelerin listesi panoya kopyalandı. - + Copied to clipboard Panoya kopyalandı @@ -469,7 +469,7 @@ MetinEtiketi - + Server Activities Sunucu Etkinlikleri @@ -484,32 +484,32 @@ Etkinlik listesini panoya kopyala. - + Action Required: Notifications Eylem Gerekiyor: Bildirimler - + <br/>Account %1 does not have activities enabled. <br/>%1 hesabının geçerli kılınmış etkinlikleri bulunmamakta. - + You received %n new notification(s) from %2. %2 için %n yeni bildiriminiz var.%2 için %n yeni bildiriminiz var. - + You received %n new notification(s) from %1 and %2. %2 ve %1 için %n yeni bildiriminiz var.%2 ve %1 için %n yeni bildiriminiz var. - + You received new notifications from %1, %2 and other accounts. %2, %1 ve diğer hesaplardan %n yeni bildiriminiz var. - + %1 Notifications - Action Required %1 Bildirim - Eylem Gerekiyor @@ -3442,207 +3442,207 @@ Kullanmanız önerilmez. OCC::ownCloudGui - + Please sign in Lütfen oturum açın - + Folder %1: %2 Klasör %1: %2 - + No sync folders configured. Yapılandırılmış eşitleme klasörü yok. - + There are no sync folders configured. Yapılandırılmış eşitleme klasörü yok. - + Open in browser Tarayıcıda aç - - - + + + Log in... Giriş yap... - - - + + + Log out Çıkış yap - + Recent Changes Son Değişiklikler - + Checking for changes in '%1' %1 deki değişiklikler denetleniyor - + Managed Folders: Yönetilen Klasörler: - + Open folder '%1' '%1' klasörünü aç - + Open %1 in browser %1'ı tarayıcıda aç - + Unknown status Bilinmeyen durum - + Settings... Ayarlar... - + Details... Ayrıntılar... - + Help Yardım - + Quit %1 %1'tan çık - + Disconnected from %1 %1 ile bağlantı kesildi - + Unsupported Server Version Desteklenmeyen Sunucu Sürümü - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. %1 hesabındaki sunucu eski ve desteklenmeyen %2 sürümünde. Bu istemciyi desteklenmeyen sunucu sürümlerinde kullanmak test edilmemiş olmasının yanında muhtemelen tehlikeli. Kendi riskinizle devam edin. - + Disconnected from accounts: Bu hesapların bağlantıları kesildi: - + Account %1: %2 Hesap %1: %2 - + Account synchronization is disabled Hesap eşitlemesi devre dışı bırakıldı. - + Unpause all folders Tüm klasörleri devam ettir - + Pause all folders Tüm klasörleri durdur - + Unpause all synchronization Tüm eşitlemeleri devam ettir - + Unpause synchronization Eşitlemeyi devam ettir - + Pause all synchronization Tüm eşitlemeleri durdur - + Pause synchronization Eşitlemeyi durdur - + Log out of all accounts Tüm hesaplardan çıkış yap - + Log in to all accounts... Tüm hesaplara giriş yap... - + New account... Yeni hesap... - + Crash now Only shows in debug mode to allow testing the crash handler Şimdi çök - + No items synced recently Yakın zamanda eşitlenen öge yok - + Syncing %1 of %2 (%3 left) Eşitlenen %1/%2 (%3 kaldı) - + Syncing %1 of %2 %2 nin %1 i eşitleniyor - + Syncing %1 (%2 left) Eşitlenen %1 (%2 kaldı) - + Syncing %1 %1 eşitleniyor - + %1 (%2, %3) %1 (%2, %3) - + Up to date Güncel diff --git a/translations/client_uk.ts b/translations/client_uk.ts index c9c98be6f..7a2ffe6fc 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out Час очікування з'єднання вичерпано - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity Серверна активність - + Sync Protocol Протокол Синхронізації - + Not Synced Не синхронізовано - + Not Synced (%1) %1 is the number of not synced files. Not Synced (%1) - + The server activity list has been copied to the clipboard. Список серверних операцій скопійовано до буферу обміну. - + The sync activity list has been copied to the clipboard. - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard Скопійовано в буфер обміну @@ -469,7 +469,7 @@ Мітка - + Server Activities Серверні операції @@ -484,32 +484,32 @@ Скопіювати протокол синхронізації до буферу обміну. - + Action Required: Notifications Необхідна Дія: Сповіщення - + <br/>Account %1 does not have activities enabled. - + You received %n new notification(s) from %2. Ви отримали %n нове сповіщення від %2.Ви отримали %n нових сповіщень від %2.Ви отримали %n нових сповіщень від %2. - + You received %n new notification(s) from %1 and %2. Ви отримали %n нове сповіщення від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2.Ви отримали %n нових сповіщень від %1 та %2. - + You received new notifications from %1, %2 and other accounts. Ви отримали нові сповіщення від %1, %2 та інших облікових записів. - + %1 Notifications - Action Required %1 Сповіщень - Необхідна Дія @@ -3440,207 +3440,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Увійдіть будь ласка - + Folder %1: %2 Тека %1: %2 - + No sync folders configured. Жодна тека не налаштована для синхронізації. - + There are no sync folders configured. Немає налаштованих тек для синхронізації. - + Open in browser Відкрити у переглядачі - - - + + + Log in... Увійти... - - - + + + Log out Вихід - + Recent Changes Недавні зміни - + Checking for changes in '%1' - + Managed Folders: Керовані теки: - + Open folder '%1' Відкрити теку '%1' - + Open %1 in browser Відкрити %1 в браузері - + Unknown status Невідомий статус - + Settings... Налаштування... - + Details... Деталі... - + Help Допомога - + Quit %1 Закрити %1 - + Disconnected from %1 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: - + Account %1: %2 Обліковий запис %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Вийти зі всіх облікових записів - + Log in to all accounts... Увійти до всіх облікових записів... - + New account... Новий обліковий запис... - + Crash now Only shows in debug mode to allow testing the crash handler Критична помилка - + No items synced recently Нещодавно нічого не синхронізувалося - + Syncing %1 of %2 (%3 left) Синхронізовано %1 з %2 (залишилося %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронізовано %1 (залишилося %2) - + Syncing %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Оновлено diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index f5d3c5c54..5768087d9 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out 连接超时 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity 服务器动态 - + Sync Protocol 同步协议 - + Not Synced 未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步 (%1) - + The server activity list has been copied to the clipboard. 服务器动态已被复制到剪贴板。 - + The sync activity list has been copied to the clipboard. 同步动态已被复制到剪贴板。 - + The list of unsynced items has been copied to the clipboard. 未同步列表已复制到剪贴板。 - + Copied to clipboard 复制到剪贴板 @@ -469,7 +469,7 @@ 文本标签 - + Server Activities 服务器动态 @@ -484,32 +484,32 @@ 复制动态列表到剪贴板。 - + Action Required: Notifications 需采取的操作:通知 - + <br/>Account %1 does not have activities enabled. <br/>帐户%1没有同步活动。 - + You received %n new notification(s) from %2. 你收到 %n 新的通知来自于 %2. - + You received %n new notification(s) from %1 and %2. 你收到 %n 新的通知来自 %1 和 %2。 - + You received new notifications from %1, %2 and other accounts. 你收到新的通知 %1, %2 和其它账户。 - + %1 Notifications - Action Required %1 通知 - 需要采取行动 @@ -3451,207 +3451,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 请登录 - + Folder %1: %2 文件夹 %1: %2 - + No sync folders configured. 没有已配置的同步文件夹。 - + There are no sync folders configured. 没有已配置的同步文件夹。 - + Open in browser 在浏览器中打开 - - - + + + Log in... 登录 - - - + + + Log out 注销 - + Recent Changes 最近修改 - + Checking for changes in '%1' 检查 %1 的更改 - + Managed Folders: 管理的文件夹: - + Open folder '%1' 打开文件夹“%1” - + Open %1 in browser 在浏览器中打开%1 - + Unknown status 未知状态 - + Settings... 设置... - + Details... 细节... - + Help 帮助 - + Quit %1 退出 %1 - + Disconnected from %1 已从服务器断开 %1 - + Unsupported Server Version 不支持的服务器版本 - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. 账户 %1 的服务器运行着一个古老而不受支持的版本 %2。使用该客户端未支持的服务器版本未经测试并且可能存在潜在危险。继续操作需要自行承担风险。 - + Disconnected from accounts: 已断开账户: - + Account %1: %2 账户 %1: %2 - + Account synchronization is disabled 帐户同步被禁用 - + Unpause all folders 解除暂停所有文件夹 - + Pause all folders 暂停所有文件夹 - + Unpause all synchronization 解除暂停所有同步 - + Unpause synchronization 解除暂停同步 - + Pause all synchronization 暂停所有同步 - + Pause synchronization 暂停同步 - + Log out of all accounts 注销所有账户 - + Log in to all accounts... 登录所有账户 - + New account... 新账号…… - + Crash now Only shows in debug mode to allow testing the crash handler 发生了崩溃 - + No items synced recently 近期没有项目被同步 - + Syncing %1 of %2 (%3 left) 同步 %2 中的 %1 (剩余 %3) - + Syncing %1 of %2 正在同步 %1,共 %2 - + Syncing %1 (%2 left) 同步 %1 (剩余 %2) - + Syncing %1 正在同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 更新 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 5951c444f..70e1d60cc 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -76,17 +76,17 @@ OCC::AbstractNetworkJob - + Connection timed out 連線逾時 - + Unknown error: network reply was deleted - + Server replied "%1 %2" to "%3 %4" @@ -412,44 +412,44 @@ OCC::ActivitySettings - - + + Server Activity 伺服器活動 - + Sync Protocol 同步協定 - + Not Synced 尚未同步 - + Not Synced (%1) %1 is the number of not synced files. 未同步(%1) - + The server activity list has been copied to the clipboard. 伺服器活動列表已經被複製到剪貼簿。 - + The sync activity list has been copied to the clipboard. 同步活動列表已經被複製到剪貼簿。 - + The list of unsynced items has been copied to the clipboard. - + Copied to clipboard 複製至剪貼簿中 @@ -469,7 +469,7 @@ 文字標籤 - + Server Activities 伺服器活動 @@ -484,32 +484,32 @@ 複製活動列表到剪貼簿。 - + Action Required: Notifications 需要動作: 通知 - + <br/>Account %1 does not have activities enabled. <br/> 帳號 %1 尚未啟用紀錄行為功能 - + You received %n new notification(s) from %2. 您收到 %n 新的通知從 %2 - + You received %n new notification(s) from %1 and %2. 您收到 %n 新的通知從 %1 跟 %2 - + You received new notifications from %1, %2 and other accounts. 您收到 %n 新的通知從 %1, %2 跟其他帳戶 - + %1 Notifications - Action Required %1 通知 - 需要動作 @@ -3443,207 +3443,207 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 請登入 - + Folder %1: %2 資料夾 %1: %2 - + No sync folders configured. 尚未設置同步資料夾。 - + There are no sync folders configured. 尚未設置同步資料夾。 - + Open in browser 用瀏覽器開啟 - - - + + + Log in... 登入... - - - + + + Log out 登出 - + Recent Changes 最近的更動 - + Checking for changes in '%1' 檢查 '%1' 的變動 - + Managed Folders: 管理的資料夾: - + Open folder '%1' 開啟 %1 資料夾 - + Open %1 in browser 瀏覽器中開啟 %1 - + Unknown status 未知狀態 - + Settings... 設定… - + Details... 細節… - + Help 說明 - + Quit %1 離開 %1 - + Disconnected from %1 從 %1 斷線 - + Unsupported Server Version - + The server on account %1 runs an old and unsupported version %2. Using this client with unsupported server versions is untested and potentially dangerous. Proceed at your own risk. - + Disconnected from accounts: 已從帳號離線: - + Account %1: %2 帳號 %1: %2 - + Account synchronization is disabled - + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts 登出所有的帳戶 - + Log in to all accounts... 登入所有的帳戶 - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler 發生非預期結果 - + No items synced recently 最近沒有項目被同步 - + Syncing %1 of %2 (%3 left) 同步中 %1 的 %2 (剩餘 %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) 同步中 %1 (剩餘 %2) - + Syncing %1 同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新的 From 95d23b1914ce0dbe46341c70b9af79fed7e98a96 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 19 Sep 2017 10:53:51 +0200 Subject: [PATCH 088/166] RemotePermissions: Store in a class rather than in a QByteArray to save memory Create a specific type that parses the permissions so we can store it in a short rather than in a QByteArray Note: in RemotePermissions::toString, we make sure the string is not empty by adding a space, this was already existing before commit e8f7adc7cacd4f55e26b2dd14464654e82204307 where it was removed by mistake. --- src/common/common.cmake | 1 + src/common/remotepermissions.cpp | 67 +++++++++++++++++++ src/common/remotepermissions.h | 92 +++++++++++++++++++++++++++ src/common/syncjournaldb.cpp | 8 +-- src/common/syncjournalfilerecord.h | 3 +- src/csync/csync.h | 4 +- src/csync/csync_private.h | 4 +- src/csync/csync_statedb.cpp | 5 +- src/csync/csync_update.cpp | 4 +- src/gui/owncloudgui.cpp | 2 +- src/libsync/discoveryphase.cpp | 37 +++++------ src/libsync/discoveryphase.h | 8 +-- src/libsync/propagatedownload.cpp | 10 +-- src/libsync/syncengine.cpp | 45 ++++++------- src/libsync/syncengine.h | 2 +- src/libsync/syncfileitem.h | 2 +- src/libsync/syncfilestatustracker.cpp | 6 +- test/testsyncjournaldb.cpp | 8 +-- 18 files changed, 234 insertions(+), 74 deletions(-) create mode 100644 src/common/remotepermissions.cpp create mode 100644 src/common/remotepermissions.h diff --git a/src/common/common.cmake b/src/common/common.cmake index e448868c6..9d7898e8a 100644 --- a/src/common/common.cmake +++ b/src/common/common.cmake @@ -8,4 +8,5 @@ set(common_SOURCES ${CMAKE_CURRENT_LIST_DIR}/syncjournaldb.cpp ${CMAKE_CURRENT_LIST_DIR}/syncjournalfilerecord.cpp ${CMAKE_CURRENT_LIST_DIR}/utility.cpp + ${CMAKE_CURRENT_LIST_DIR}/remotepermissions.cpp ) diff --git a/src/common/remotepermissions.cpp b/src/common/remotepermissions.cpp new file mode 100644 index 000000000..ce39460b5 --- /dev/null +++ b/src/common/remotepermissions.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) by Olivier Goffart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "remotepermissions.h" +#include + +namespace OCC { + +static const char letters[] = " WDNVCKRSMm"; + + +template +void RemotePermissions::fromArray(const Char *p) +{ + _value = p ? notNullMask : 0; + if (!p) + return; + while (*p) { + if (auto res = std::strchr(letters, static_cast(*p))) + _value |= (1 << (res - letters)); + ++p; + } +} + +RemotePermissions::RemotePermissions(const char *p) +{ + fromArray(p); +} + +RemotePermissions::RemotePermissions(const QString &s) +{ + fromArray(s.isEmpty() ? nullptr : s.utf16()); +} + +QByteArray RemotePermissions::toString() const +{ + QByteArray result; + if (isNull()) + return result; + result.reserve(PermissionsCount); + for (uint i = 1; i <= PermissionsCount; ++i) { + if (_value & (1 << i)) + result.append(letters[i]); + } + if (result.isEmpty()) { + // Make sure it is not empty so we can differentiate null and empty permissions + result.append(' '); + } + return result; +} + +} // namespace OCC diff --git a/src/common/remotepermissions.h b/src/common/remotepermissions.h new file mode 100644 index 000000000..2b34dcbf0 --- /dev/null +++ b/src/common/remotepermissions.h @@ -0,0 +1,92 @@ +/* + * Copyright (C) by Olivier Goffart + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#pragma once + +#include +#include +#include "ocsynclib.h" + +namespace OCC { + +/** + * Class that store in a memory efficient way the remote permission + */ +class OCSYNC_EXPORT RemotePermissions +{ +private: + // The first bit tells if the value is set or not + // The remaining bits correspond to know if the value is set + quint16 _value = 0; + static constexpr int notNullMask = 0x1; + + template // can be 'char' or 'ushort' if conversion from QString + void fromArray(const Char *p); + +public: + enum Permissions { + CanWrite = 1, // W + CanDelete = 2, // D + CanRename = 3, // N + CanMove = 4, // V + CanAddFile = 5, // C + CanAddSubDirectories = 6, // K + CanReshare = 7, // R + // Note: on the server, this means SharedWithMe, but in discoveryphase.cpp we also set + // this permission when the server reports the any "share-types" + IsShared = 8, // S + IsMounted = 9, // M + IsMountedSub = 10, // m (internal: set if the parent dir has IsMounted) + + // Note: when adding support for more permissions, we need to invalid the cache in the database. + // (by setting forceRemoteDiscovery in SyncJournalDb::checkConnect) + PermissionsCount = IsMountedSub + }; + RemotePermissions() = default; + explicit RemotePermissions(const char *); + explicit RemotePermissions(const QString &); + + QByteArray toString() const; + bool hasPermission(Permissions p) const + { + return _value & (1 << static_cast(p)); + } + void setPermission(Permissions p) + { + _value |= (1 << static_cast(p)) | notNullMask; + } + void unsetPermission(Permissions p) + { + _value &= ~(1 << static_cast(p)); + } + + bool isNull() const { return !(_value & notNullMask); } + friend bool operator==(RemotePermissions a, RemotePermissions b) + { + return a._value == b._value; + } + friend bool operator!=(RemotePermissions a, RemotePermissions b) + { + return !(a == b); + } +}; + + +} // namespace OCC + +Q_DECLARE_METATYPE(OCC::RemotePermissions) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index 65254fd72..9e5052b5a 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -894,7 +894,7 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) qCInfo(lcDb) << "Updating file record for path:" << record._path << "inode:" << record._inode << "modtime:" << record._modtime << "type:" << record._type - << "etag:" << record._etag << "fileId:" << record._fileId << "remotePerm:" << record._remotePerm + << "etag:" << record._etag << "fileId:" << record._fileId << "remotePerm:" << record._remotePerm.toString() << "fileSize:" << record._fileSize << "checksum:" << record._checksumHeader; qlonglong phash = getPHash(record._path); @@ -908,9 +908,7 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) QString fileId(record._fileId); if (fileId.isEmpty()) fileId = ""; - QString remotePerm(record._remotePerm); - if (remotePerm.isEmpty()) - remotePerm = QString(); // have NULL in DB (vs empty) + QByteArray remotePerm = record._remotePerm.toString(); QByteArray checksumType, checksum; parseChecksumHeader(record._checksumHeader, &checksumType, &checksum); int contentChecksumTypeId = mapChecksumType(checksumType); @@ -1001,7 +999,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) rec._type = _getFileRecordQuery->intValue(6); rec._etag = _getFileRecordQuery->baValue(7); rec._fileId = _getFileRecordQuery->baValue(8); - rec._remotePerm = _getFileRecordQuery->baValue(9); + rec._remotePerm = RemotePermissions(_getFileRecordQuery->baValue(9).constData()); rec._fileSize = _getFileRecordQuery->int64Value(10); rec._serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0); rec._checksumHeader = _getFileRecordQuery->baValue(12); diff --git a/src/common/syncjournalfilerecord.h b/src/common/syncjournalfilerecord.h index ba1c7ced0..c6008713e 100644 --- a/src/common/syncjournalfilerecord.h +++ b/src/common/syncjournalfilerecord.h @@ -23,6 +23,7 @@ #include #include "ocsynclib.h" +#include "remotepermissions.h" namespace OCC { @@ -57,7 +58,7 @@ public: QByteArray _etag; QByteArray _fileId; qint64 _fileSize; - QByteArray _remotePerm; + RemotePermissions _remotePerm; bool _serverHasIgnoredFiles; QByteArray _checksumHeader; }; diff --git a/src/csync/csync.h b/src/csync/csync.h index 9eaba2ab4..0e7cf12c5 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -41,6 +41,7 @@ #include #include #include +#include "common/remotepermissions.h" #if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) && (__GNUC__ * 100 + __GNUC_MINOR__ < 408) // openSuse 12.3 didn't like enum bitfields. @@ -163,6 +164,8 @@ struct OCSYNC_EXPORT csync_file_stat_s { time_t modtime; int64_t size; uint64_t inode; + + OCC::RemotePermissions remotePerm; enum csync_ftw_type_e type BITFIELD(4); bool child_modified BITFIELD(1); bool has_ignored_files BITFIELD(1); // Specify that a directory, or child directory contains ignored files. @@ -174,7 +177,6 @@ struct OCSYNC_EXPORT csync_file_stat_s { QByteArray file_id; QByteArray directDownloadUrl; QByteArray directDownloadCookies; - QByteArray remotePerm; QByteArray original_path; // only set if locale conversion fails // In the local tree, this can hold a checksum and its type if it is diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 53383db89..9167a53a4 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -86,7 +86,7 @@ struct OCSYNC_EXPORT csync_s { /* hooks for checking the white list (uses the update_callback_userdata) */ int (*checkSelectiveSyncBlackListHook)(void*, const QByteArray &) = nullptr; - int (*checkSelectiveSyncNewFolderHook)(void*, const QByteArray &/* path */, const QByteArray &/* remotePerm */) = nullptr; + int (*checkSelectiveSyncNewFolderHook)(void *, const QByteArray & /* path */, OCC::RemotePermissions) = nullptr; csync_vio_opendir_hook remote_opendir_hook = nullptr; @@ -126,7 +126,7 @@ struct OCSYNC_EXPORT csync_s { struct { FileMap files; bool read_from_db = false; - QByteArray root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ + OCC::RemotePermissions root_perms; /* Permission of the root folder. (Since the root folder is not in the db tree, we need to keep a separate entry.) */ } remote; /* replica we are currently walking */ diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp index 89ac83fd7..b489b6789 100644 --- a/src/csync/csync_statedb.cpp +++ b/src/csync/csync_statedb.cpp @@ -264,7 +264,10 @@ static int _csync_file_stat_from_metadata_table( std::unique_ptrtype = static_cast(sqlite3_column_int(stmt, 3)); st->etag = (char*)sqlite3_column_text(stmt, 4); st->file_id = (char*)sqlite3_column_text(stmt, 5); - st->remotePerm = (char*)sqlite3_column_text(stmt, 6); + const char *permStr = (char *)sqlite3_column_text(stmt, 6); + // If permStr is empty, construct a null RemotePermissions. We make sure that non-null + // permissions are never empty in RemotePermissions.toString() + st->remotePerm = permStr && *permStr ? OCC::RemotePermissions(permStr) : OCC::RemotePermissions(); st->size = sqlite3_column_int64(stmt, 7); st->has_ignored_files = sqlite3_column_int(stmt, 8); st->checksumHeader = (char *)sqlite3_column_text(stmt, 9); diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 71be03be8..28bf5cd26 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -183,10 +183,10 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f /* we have an update! */ CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 - ", size: %" PRId64 " <-> %" PRId64 ", perms: %s <-> %s, ignore: %d", + ", size: %" PRId64 " <-> %" PRId64 ", perms: %x <-> %x, ignore: %d", ((int64_t) fs->modtime), ((int64_t) tmp->modtime), fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, - (uint64_t) fs->size, (uint64_t) tmp->size, fs->remotePerm.constData(), tmp->remotePerm.constData(), tmp->has_ignored_files ); + (uint64_t) fs->size, (uint64_t) tmp->size, *reinterpret_cast(&fs->remotePerm), *reinterpret_cast(&tmp->remotePerm), tmp->has_ignored_files ); if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { fs->instruction = CSYNC_INSTRUCTION_EVAL; diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 0d2fcffd1..6c57442ea 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -1007,7 +1007,7 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l bool resharingAllowed = true; // lets assume the good if (fileRecord.isValid()) { // check the permission: Is resharing allowed? - if (!fileRecord._remotePerm.contains('R')) { + if (!fileRecord._remotePerm.isNull() && !fileRecord._remotePerm.hasPermission(RemotePermissions::CanReshare)) { resharingAllowed = false; } } diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index 23ac664c6..e5283f131 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -87,10 +87,11 @@ int DiscoveryJob::isInSelectiveSyncBlackListCallback(void *data, const QByteArra return static_cast(data)->isInSelectiveSyncBlackList(path); } -bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, const QByteArray &remotePerm) +bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, RemotePermissions remotePerm) { - if (_syncOptions._confirmExternalStorage && remotePerm.contains('M')) { - // 'M' in the permission means external storage. + if (_syncOptions._confirmExternalStorage + && remotePerm.hasPermission(RemotePermissions::IsMounted)) { + // external storage. /* Note: DiscoverySingleDirectoryJob::directoryListingIteratedSlot make sure that only the * root of a mounted storage has 'M', all sub entries have 'm' */ @@ -144,7 +145,7 @@ bool DiscoveryJob::checkSelectiveSyncNewFolder(const QString &path, const QByteA } } -int DiscoveryJob::checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, const QByteArray &remotePerm) +int DiscoveryJob::checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, RemotePermissions remotePerm) { return static_cast(data)->checkSelectiveSyncNewFolder(QString::fromUtf8(path), remotePerm); } @@ -350,20 +351,19 @@ static std::unique_ptr propertyMapToFileStat(const QMapdirectDownloadCookies = value.toUtf8(); } else if (property == "permissions") { - file_stat->remotePerm = value.toUtf8(); + file_stat->remotePerm = RemotePermissions(value); } else if (property == "checksums") { file_stat->checksumHeader = findBestChecksum(value.toUtf8()); } else if (property == "share-types" && !value.isEmpty()) { - // Since QMap is sorted, "share-types" is always "permissions". - if (file_stat->remotePerm.isEmpty()) { + // Since QMap is sorted, "share-types" is always after "permissions". + if (file_stat->remotePerm.isNull()) { qWarning() << "Server returned a share type, but no permissions?"; } else { // S means shared with me. // But for our purpose, we want to know if the file is shared. It does not matter // if we are the owner or not. - // Piggy back on the persmission field 'S' - if (!file_stat->remotePerm.contains('S')) - file_stat->remotePerm.append('S'); + // Piggy back on the persmission field + file_stat->remotePerm.setPermission(RemotePermissions::IsShared); } } } @@ -376,9 +376,9 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con // The first entry is for the folder itself, we should process it differently. _ignoredFirst = true; if (map.contains("permissions")) { - auto perm = map.value("permissions"); + RemotePermissions perm(map.value("permissions")); emit firstDirectoryPermissions(perm); - _isExternalStorage = perm.contains(QLatin1Char('M')); + _isExternalStorage = perm.hasPermission(RemotePermissions::IsMounted); } if (map.contains("data-fingerprint")) { _dataFingerprint = map.value("data-fingerprint").toUtf8(); @@ -401,11 +401,12 @@ void DiscoverySingleDirectoryJob::directoryListingIteratedSlot(QString file, con if (file_stat->etag.isEmpty()) { qCCritical(lcDiscovery) << "etag of" << file_stat->path << "is" << file_stat->etag << "This must not happen."; } - if (_isExternalStorage) { + if (_isExternalStorage && file_stat->remotePerm.hasPermission(RemotePermissions::IsMounted)) { /* All the entries in a external storage have 'M' in their permission. However, for all purposes in the desktop client, we only need to know about the mount points. So replace the 'M' by a 'm' for every sub entries in an external storage */ - file_stat->remotePerm.replace('M', 'm'); + file_stat->remotePerm.unsetPermission(RemotePermissions::IsMounted); + file_stat->remotePerm.setPermission(RemotePermissions::IsMountedSub); } QStringRef fileRef(&file); @@ -557,12 +558,12 @@ void DiscoveryMainThread::singleDirectoryJobFinishedWithErrorSlot(int csyncErrno _discoveryJob->_vioMutex.unlock(); } -void DiscoveryMainThread::singleDirectoryJobFirstDirectoryPermissionsSlot(const QString &p) +void DiscoveryMainThread::singleDirectoryJobFirstDirectoryPermissionsSlot(RemotePermissions p) { // Should be thread safe since the sync thread is blocked - if (_discoveryJob->_csync_ctx->remote.root_perms.isEmpty()) { - qCDebug(lcDiscovery) << "Permissions for root dir:" << p; - _discoveryJob->_csync_ctx->remote.root_perms = p.toUtf8(); + if (_discoveryJob->_csync_ctx->remote.root_perms.isNull()) { + qCDebug(lcDiscovery) << "Permissions for root dir:" << p.toString(); + _discoveryJob->_csync_ctx->remote.root_perms = p; } } diff --git a/src/libsync/discoveryphase.h b/src/libsync/discoveryphase.h index c3d44405b..eea33ad52 100644 --- a/src/libsync/discoveryphase.h +++ b/src/libsync/discoveryphase.h @@ -113,7 +113,7 @@ public: // This is not actually a network job, it is just a job signals: - void firstDirectoryPermissions(const QString &); + void firstDirectoryPermissions(RemotePermissions); void etagConcatenation(const QString &); void etag(const QString &); void finishedWithResult(); @@ -178,7 +178,7 @@ public slots: // From Job: void singleDirectoryJobResultSlot(); void singleDirectoryJobFinishedWithErrorSlot(int csyncErrnoCode, const QString &msg); - void singleDirectoryJobFirstDirectoryPermissionsSlot(const QString &); + void singleDirectoryJobFirstDirectoryPermissionsSlot(RemotePermissions); void slotGetSizeFinishedWithError(); void slotGetSizeResult(const QVariantMap &); @@ -212,8 +212,8 @@ class DiscoveryJob : public QObject */ bool isInSelectiveSyncBlackList(const QByteArray &path) const; static int isInSelectiveSyncBlackListCallback(void *, const QByteArray &); - bool checkSelectiveSyncNewFolder(const QString &path, const QByteArray &remotePerm); - static int checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, const QByteArray &remotePerm); + bool checkSelectiveSyncNewFolder(const QString &path, RemotePermissions rp); + static int checkSelectiveSyncNewFolderCallback(void *data, const QByteArray &path, RemotePermissions rm); // Just for progress static void update_job_update_callback(bool local, diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 812c01316..4bb4495c9 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -823,13 +823,7 @@ void PropagateDownloadFile::downloadFinished() } // Apply the remote permissions - // Older server versions sometimes provide empty remote permissions - // see #4450 - don't adjust the write permissions there. - const int serverVersionGoodRemotePerm = Account::makeServerVersion(7, 0, 0); - if (propagator()->account()->serverVersionInt() >= serverVersionGoodRemotePerm) { - FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(), - !_item->_remotePerm.contains('W')); - } + FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(), !_item->_remotePerm.isNull() && !_item->_remotePerm.hasPermission(RemotePermissions::CanWrite)); QString error; emit propagator()->touchedFile(fn); @@ -882,7 +876,7 @@ void PropagateDownloadFile::updateMetadata(bool isConflict) done(isConflict ? SyncFileItem::Conflict : SyncFileItem::Success); // handle the special recall file - if (!_item->_remotePerm.contains("S") + if (!_item->_remotePerm.hasPermission(RemotePermissions::IsShared) && (_item->_file == QLatin1String(".sys.admin#recall#") || _item->_file.endsWith("/.sys.admin#recall#"))) { handleRecallFile(fn, propagator()->_localDir, *propagator()->_journal); diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index b4b10d405..22a8068b0 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -411,7 +411,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, if (!file->directDownloadCookies.isEmpty()) { item->_directDownloadCookies = QString::fromUtf8(file->directDownloadCookies); } - if (!file->remotePerm.isEmpty()) { + if (!file->remotePerm.isNull()) { item->_remotePerm = file->remotePerm; } @@ -601,8 +601,8 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, // If the 'W' remote permission changed, update the local filesystem SyncJournalFileRecord prev = _journal->getFileRecord(item->_file); - if (prev.isValid() && prev._remotePerm.contains('W') != item->_remotePerm.contains('W')) { - const bool isReadOnly = !item->_remotePerm.contains('W'); + if (prev.isValid() && prev._remotePerm.hasPermission(RemotePermissions::CanWrite) != item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { + const bool isReadOnly = !item->_remotePerm.isNull() && !item->_remotePerm.hasPermission(RemotePermissions::CanWrite); FileSystem::setFileReadOnlyWeak(filePath, isReadOnly); } @@ -946,7 +946,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult) qCWarning(lcEngine) << "Error in remote treewalk."; } - qCInfo(lcEngine) << "Permissions of the root folder: " << _csync_ctx->remote.root_perms; + qCInfo(lcEngine) << "Permissions of the root folder: " << _csync_ctx->remote.root_perms.toString(); // The map was used for merging trees, convert it to a list: SyncFileItemVector syncItems = _syncItemMap.values().toVector(); @@ -1251,11 +1251,11 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) case CSYNC_INSTRUCTION_NEW: { int slashPos = (*it)->_file.lastIndexOf('/'); QString parentDir = slashPos <= 0 ? "" : (*it)->_file.mid(0, slashPos); - const QByteArray perms = getPermissions(parentDir); + const auto perms = getPermissions(parentDir); if (perms.isNull()) { // No permissions set break; - } else if ((*it)->isDirectory() && !perms.contains("K")) { + } else if ((*it)->isDirectory() && !perms.hasPermission(RemotePermissions::CanAddSubDirectories)) { qCWarning(lcEngine) << "checkForPermission: ERROR" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_ERROR; (*it)->_status = SyncFileItem::NormalError; @@ -1277,7 +1277,7 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_errorString = tr("Not allowed because you don't have permission to add parent folder"); } - } else if (!(*it)->isDirectory() && !perms.contains("C")) { + } else if (!(*it)->isDirectory() && !perms.hasPermission(RemotePermissions::CanAddFile)) { qCWarning(lcEngine) << "checkForPermission: ERROR" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_ERROR; (*it)->_status = SyncFileItem::NormalError; @@ -1286,12 +1286,12 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) break; } case CSYNC_INSTRUCTION_SYNC: { - const QByteArray perms = getPermissions((*it)->_file); + const auto perms = getPermissions((*it)->_file); if (perms.isNull()) { // No permissions set break; } - if (!perms.contains("W")) { + if (!perms.hasPermission(RemotePermissions::CanWrite)) { qCWarning(lcEngine) << "checkForPermission: RESTORING" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_CONFLICT; (*it)->_direction = SyncFileItem::Down; @@ -1312,12 +1312,12 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) break; } case CSYNC_INSTRUCTION_REMOVE: { - const QByteArray perms = getPermissions((*it)->_file); + const auto perms = getPermissions((*it)->_file); if (perms.isNull()) { // No permissions set break; } - if (!perms.contains("D")) { + if (!perms.hasPermission(RemotePermissions::CanDelete)) { qCWarning(lcEngine) << "checkForPermission: RESTORING" << (*it)->_file; (*it)->_instruction = CSYNC_INSTRUCTION_NEW; (*it)->_direction = SyncFileItem::Down; @@ -1344,7 +1344,8 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) (*it)->_errorString = tr("Not allowed to remove, restoring"); } } - } else if (perms.contains("S") && perms.contains("D")) { + } else if (perms.hasPermission(RemotePermissions::IsShared) + && perms.hasPermission(RemotePermissions::CanDelete)) { // this is a top level shared dir which can be removed to unshare it, // regardless if it is a read only share or not. // To avoid that we try to restore files underneath this dir which have @@ -1369,8 +1370,8 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) case CSYNC_INSTRUCTION_RENAME: { int slashPos = (*it)->_renameTarget.lastIndexOf('/'); const QString parentDir = slashPos <= 0 ? "" : (*it)->_renameTarget.mid(0, slashPos); - const QByteArray destPerms = getPermissions(parentDir); - const QByteArray filePerms = getPermissions((*it)->_file); + const auto destPerms = getPermissions(parentDir); + const auto filePerms = getPermissions((*it)->_file); //true when it is just a rename in the same directory. (not a move) bool isRename = (*it)->_file.startsWith(parentDir) && (*it)->_file.lastIndexOf('/') == slashPos; @@ -1381,21 +1382,21 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) if (isRename || destPerms.isNull()) { // no need to check for the destination dir permission destinationOK = true; - } else if ((*it)->isDirectory() && !destPerms.contains("K")) { + } else if ((*it)->isDirectory() && !destPerms.hasPermission(RemotePermissions::CanAddSubDirectories)) { destinationOK = false; - } else if (!(*it)->isDirectory() && !destPerms.contains("C")) { + } else if (!(*it)->isDirectory() && !destPerms.hasPermission(RemotePermissions::CanAddFile)) { destinationOK = false; } // check if we are allowed to move from the source bool sourceOK = true; if (!filePerms.isNull() - && ((isRename && !filePerms.contains("N")) - || (!isRename && !filePerms.contains("V")))) { + && ((isRename && !filePerms.hasPermission(RemotePermissions::CanRename)) + || (!isRename && !filePerms.hasPermission(RemotePermissions::CanMove)))) { // We are not allowed to move or rename this file sourceOK = false; - if (filePerms.contains("D") && destinationOK) { + if (filePerms.hasPermission(RemotePermissions::CanDelete) && destinationOK) { // but we are allowed to delete it // TODO! simulate delete & upload } @@ -1451,13 +1452,13 @@ void SyncEngine::checkForPermission(SyncFileItemVector &syncItems) } } -QByteArray SyncEngine::getPermissions(const QString &file) const +RemotePermissions SyncEngine::getPermissions(const QString &file) const { static bool isTest = qgetenv("OWNCLOUD_TEST_PERMISSIONS").toInt(); if (isTest) { QRegExp rx("_PERM_([^_]*)_[^/]*$"); if (rx.indexIn(file) != -1) { - return rx.cap(1).toLatin1(); + return RemotePermissions(rx.cap(1)); } } @@ -1471,7 +1472,7 @@ QByteArray SyncEngine::getPermissions(const QString &file) const if (it != _csync_ctx->remote.files.end()) { return it->second->remotePerm; } - return QByteArray(); + return RemotePermissions(); } void SyncEngine::restoreOldFiles(SyncFileItemVector &syncItems) diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index 7f96afef9..44c8ca7a2 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -235,7 +235,7 @@ private: * to recover */ void checkForPermission(SyncFileItemVector &syncItems); - QByteArray getPermissions(const QString &file) const; + RemotePermissions getPermissions(const QString &file) const; /** * Instead of downloading files from the server, upload the files to the server diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index ab9526a93..dd364ae43 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -215,6 +215,7 @@ public: Status _status BITFIELD(4); bool _isRestoration BITFIELD(1); // The original operation was forbidden, and this is a restoration quint16 _httpErrorCode; + RemotePermissions _remotePerm; QString _errorString; // Contains a string only in case of error QByteArray _responseTimeStamp; quint32 _affectedItems; // the number of affected items by the operation on this item. @@ -228,7 +229,6 @@ public: quint64 _size; quint64 _inode; QByteArray _fileId; - QByteArray _remotePerm; // This is the value for the 'new' side, matching with _size and _modtime. // diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 4db5b72fc..855abff7a 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -147,7 +147,7 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString &relativePath) // First look it up in the database to know if it's shared SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(relativePath); if (rec.isValid()) { - return resolveSyncAndErrorStatus(relativePath, rec._remotePerm.contains("S") ? Shared : NotShared); + return resolveSyncAndErrorStatus(relativePath, rec._remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared); } // Must be a new file not yet in the database, check if it's syncing or has an error. @@ -226,7 +226,7 @@ void SyncFileStatusTracker::slotAboutToPropagate(SyncFileItemVector &items) _syncProblems[item->_file] = SyncFileStatus::StatusWarning; } - SharedFlag sharedFlag = item->_remotePerm.contains("S") ? Shared : NotShared; + SharedFlag sharedFlag = item->_remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared; if (item->_instruction != CSYNC_INSTRUCTION_NONE && item->_instruction != CSYNC_INSTRUCTION_UPDATE_METADATA && item->_instruction != CSYNC_INSTRUCTION_IGNORE @@ -272,7 +272,7 @@ void SyncFileStatusTracker::slotItemCompleted(const SyncFileItemPtr &item) _syncProblems.erase(item->_file); } - SharedFlag sharedFlag = item->_remotePerm.contains("S") ? Shared : NotShared; + SharedFlag sharedFlag = item->_remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared; if (item->_instruction != CSYNC_INSTRUCTION_NONE && item->_instruction != CSYNC_INSTRUCTION_UPDATE_METADATA && item->_instruction != CSYNC_INSTRUCTION_IGNORE diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index e3ea07cd9..c7d8b85c3 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -54,7 +54,7 @@ private slots: record._type = 5; record._etag = "789789"; record._fileId = "abcd"; - record._remotePerm = "744"; + record._remotePerm = RemotePermissions("RW"); record._fileSize = 213089055; record._checksumHeader = "MD5:mychecksum"; QVERIFY(_db.setFileRecord(record)); @@ -74,7 +74,7 @@ private slots: record._type = 7; record._etag = "789FFF"; record._fileId = "efg"; - record._remotePerm = "777"; + record._remotePerm = RemotePermissions("NV"); record._fileSize = 289055; _db.setFileRecordMetadata(record); storedRecord = _db.getFileRecord("foo"); @@ -91,7 +91,7 @@ private slots: { SyncJournalFileRecord record; record._path = "foo-checksum"; - record._remotePerm = "744"; + record._remotePerm = RemotePermissions("RW"); record._checksumHeader = "MD5:mychecksum"; record._modtime = QDateTime::currentDateTimeUtc(); QVERIFY(_db.setFileRecord(record)); @@ -111,7 +111,7 @@ private slots: { SyncJournalFileRecord record; record._path = "foo-nochecksum"; - record._remotePerm = "744"; + record._remotePerm = RemotePermissions("RWN"); record._modtime = QDateTime::currentDateTimeUtc(); QVERIFY(_db.setFileRecord(record)); From aa322d41aa6192dc7733dd8115ec4327b133f40a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 22 Sep 2017 09:32:29 +0200 Subject: [PATCH 089/166] csync: remove unused type --- src/csync/csync.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/csync/csync.h b/src/csync/csync.h index 0e7cf12c5..ef2d3bada 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -225,8 +225,6 @@ typedef std::unique_ptr (*csync_vio_readdir_hook) (csync_vio_ void *userdata); typedef void (*csync_vio_closedir_hook) (csync_vio_handle_t *dhhandle, void *userdata); -typedef int (*csync_vio_stat_hook) (csync_vio_handle_t *dhhandle, - void *userdata); /* Compute the checksum of the given \a checksumTypeId for \a path. */ typedef QByteArray (*csync_checksum_hook)( From eae3f7ce0acb163b50be32d93af88f2ea99c7282 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 11:06:29 +0200 Subject: [PATCH 090/166] SyncEngine: Adjust free space messaging Before, the way the info message was phrased implied a failure. And since the large numbers can be hard to compare that can be confusing. --- src/libsync/syncengine.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 22a8068b0..48d439b76 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -762,9 +762,9 @@ void SyncEngine::startSync() const qint64 minFree = criticalFreeSpaceLimit(); const qint64 freeBytes = Utility::freeDiskSpace(_localPath); if (freeBytes >= 0) { - qCInfo(lcEngine) << "There are" << freeBytes << "bytes available at" << _localPath - << "and at least" << minFree << "are required"; if (freeBytes < minFree) { + qCWarning(lcEngine()) << "Too little space available at" << _localPath << ". Have" + << freeBytes << "bytes and require at least" << minFree << "bytes"; _anotherSyncNeeded = DelayedFollowUp; csyncError(tr("Only %1 are available, need at least %2 to start", "Placeholders are postfixed with file sizes using Utility::octetsToString()") @@ -773,6 +773,8 @@ void SyncEngine::startSync() Utility::octetsToString(minFree))); finalize(false); return; + } else { + qCInfo(lcEngine) << "There are" << freeBytes << "bytes available at" << _localPath; } } else { qCWarning(lcEngine) << "Could not determine free space available at" << _localPath; From 1dc44c0f62bb3f6e50156cd08c1a2a82d67c0d0d Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 21 Sep 2017 15:45:56 +0200 Subject: [PATCH 091/166] csync_update/reconcile: replace CSYNC_LOG with qDebug/qInfo CSYNC_LOG has quite an overhead as it uses vsprintf and it might be run even if the category is disabled --- src/csync/csync_reconcile.cpp | 34 +++++++++---------- src/csync/csync_update.cpp | 61 +++++++++++++++++------------------ src/csync/vio/csync_vio.cpp | 46 ++++++++------------------ 3 files changed, 60 insertions(+), 81 deletions(-) diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index dd1cad68e..76fd08408 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -27,9 +27,10 @@ #include "csync_statedb.h" #include "csync_rename.h" #include "common/c_jhash.h" +#include "common/asserts.h" -#define CSYNC_LOG_CATEGORY_NAME "csync.reconciler" -#include "csync_log.h" +#include +Q_LOGGING_CATEGORY(lcReconcile, "sync.csync.reconciler", QtInfoMsg) // Needed for PRIu64 on MinGW in C++ mode. #define __STDC_FORMAT_MACROS @@ -156,14 +157,13 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { if(ctx->current == LOCAL_REPLICA ) { /* use the old name to find the "other" node */ tmp = csync_statedb_get_stat_by_inode(ctx, cur->inode); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Finding opposite temp through inode %" PRIu64 ": %s", + qCDebug(lcReconcile, "Finding opposite temp through inode %" PRIu64 ": %s", cur->inode, tmp ? "true":"false"); - } else if( ctx->current == REMOTE_REPLICA ) { - tmp = csync_statedb_get_stat_by_file_id(ctx, cur->file_id); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Finding opposite temp through file ID %s: %s", - cur->file_id.constData(), tmp ? "true":"false"); } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Unknown replica..."); + ASSERT( ctx->current == REMOTE_REPLICA ); + tmp = csync_statedb_get_stat_by_file_id(ctx, cur->file_id); + qCDebug(lcReconcile, "Finding opposite temp through file ID %s: %s", + cur->file_id.constData(), tmp ? "true":"false"); } if( tmp ) { @@ -171,7 +171,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { /* First, check that the file is NOT in our tree (another file with the same name was added) */ csync_s::FileMap *our_tree = ctx->current == REMOTE_REPLICA ? &ctx->remote.files : &ctx->local.files; if (our_tree->findFile(tmp->path)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Origin found in our tree : %s", tmp->path.constData()); + qCDebug(lcReconcile, "Origin found in our tree : %s", tmp->path.constData()); } else { /* Find the temporar file in the other tree. * If the renamed file could not be found in the opposite tree, that is because it @@ -179,7 +179,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { * The journal is cleaned up later after propagation. */ other = other_tree->findFile(tmp->path); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Temporary opposite (%s) %s", + qCDebug(lcReconcile, "Temporary opposite (%s) %s", tmp->path.constData() , other ? "found": "not found" ); } } @@ -206,7 +206,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { other->inode = cur->inode; cur->instruction = CSYNC_INSTRUCTION_NONE; } else if (other->instruction == CSYNC_INSTRUCTION_NEW) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "OOOO=> NEW detected in other tree!"); + qCDebug(lcReconcile, "OOOO=> NEW detected in other tree!"); cur->instruction = CSYNC_INSTRUCTION_CONFLICT; } else { assert(other->type != CSYNC_FTW_TYPE_DIR); @@ -242,13 +242,13 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { case CSYNC_INSTRUCTION_NEW: // This operation is usually a no-op and will by default return false if (csync_file_locked_or_open(ctx->local.uri, cur->path)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] IGNORING file %s/%s since it is locked / open", ctx->local.uri, cur->path.constData()); + qCDebug(lcReconcile, "[Reconciler] IGNORING file %s/%s since it is locked / open", ctx->local.uri, cur->path.constData()); cur->instruction = CSYNC_INSTRUCTION_ERROR; if (cur->error_status == CSYNC_STATUS_OK) // don't overwrite error cur->error_status = CYSNC_STATUS_FILE_LOCKED_OR_OPEN; break; } else { - //CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "[Reconciler] not ignoring file %s/%s", ctx->local.uri, cur->path); + //qCDebug(lcReconcile, "[Reconciler] not ignoring file %s/%s", ctx->local.uri, cur->path); } switch (other->instruction) { /* file on other replica is changed or new */ @@ -329,7 +329,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { { if(cur->type == CSYNC_FTW_TYPE_DIR) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, + qCDebug(lcReconcile, "%-30s %s dir: %s", csync_instruction_str(cur->instruction), repo, @@ -337,7 +337,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, + qCDebug(lcReconcile, "%-30s %s file: %s", csync_instruction_str(cur->instruction), repo, @@ -348,7 +348,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { { if(cur->type == CSYNC_FTW_TYPE_DIR) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, + qCInfo(lcReconcile, "%-30s %s dir: %s", csync_instruction_str(cur->instruction), repo, @@ -356,7 +356,7 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, + qCInfo(lcReconcile, "%-30s %s file: %s", csync_instruction_str(cur->instruction), repo, diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 28bf5cd26..0c2d9d384 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -42,16 +42,17 @@ #include "vio/csync_vio.h" -#define CSYNC_LOG_CATEGORY_NAME "csync.updater" -#include "csync_log.h" #include "csync_rename.h" #include "common/utility.h" +#include "common/asserts.h" // Needed for PRIu64 on MinGW in C++ mode. #define __STDC_FORMAT_MACROS #include +Q_LOGGING_CATEGORY(lcUpdate, "sync.csync.updater", QtInfoMsg) + #ifdef NO_RENAME_EXTENSION /* Return true if the two path have the same extension. false otherwise. */ static bool _csync_sameextension(const char *p1, const char *p2) { @@ -132,12 +133,12 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * This code should probably be in csync_exclude, but it does not have the fs parameter. * Keep it here for now */ if (ctx->ignore_hidden_files && (fs->is_hidden)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file excluded because it is a hidden file: %s", fs->path.constData()); + qCDebug(lcUpdate, "file excluded because it is a hidden file: %s", fs->path.constData()); excluded = CSYNC_FILE_EXCLUDE_HIDDEN; } } else { /* File is ignored because it's matched by a user- or system exclude pattern. */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", fs->path.constData(), excluded); + qCDebug(lcUpdate, "%s excluded (%d)", fs->path.constData(), excluded); if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE) { return 1; } @@ -154,7 +155,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f if (fs->type == CSYNC_FTW_TYPE_FILE ) { if (fs->modtime == 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s - mtime is zero!", fs->path.constData()); + qCDebug(lcUpdate, "file: %s - mtime is zero!", fs->path.constData()); } } @@ -181,7 +182,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f if(tmp && tmp->path == fs->path ) { /* there is an entry in the database */ /* we have an update! */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Database entry found, compare: %" PRId64 " <-> %" PRId64 + qCInfo(lcUpdate, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 ", size: %" PRId64 " <-> %" PRId64 ", perms: %x <-> %x, ignore: %d", ((int64_t) fs->modtime), ((int64_t) tmp->modtime), @@ -216,7 +217,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f checksumIdentical = fs->checksumHeader == tmp->checksumHeader; } if (checksumIdentical) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); + qCDebug(lcUpdate, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; goto out; } @@ -240,7 +241,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * The metadata comparison ensure that we fetch all the file id or permission when * upgrading owncloud */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Reading from database: %s", fs->path.constData()); + qCDebug(lcUpdate, "Reading from database: %s", fs->path.constData()); ctx->remote.read_from_db = true; } /* If it was remembered in the db that the remote dir has ignored files, store @@ -251,7 +252,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f } if (metadata_differ) { /* file id or permissions has changed. Which means we need to update them in the DB. */ - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Need to update metadata for: %s", fs->path.constData()); + qCDebug(lcUpdate, "Need to update metadata for: %s", fs->path.constData()); fs->instruction = CSYNC_INSTRUCTION_UPDATE_METADATA; } else { fs->instruction = CSYNC_INSTRUCTION_NONE; @@ -259,7 +260,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f } else { /* check if it's a file and has been renamed */ if (ctx->current == LOCAL_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); + qCDebug(lcUpdate, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); tmp = csync_statedb_get_stat_by_inode(ctx, fs->inode); @@ -287,13 +288,13 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f _rel_to_abs(ctx, fs->path), tmp->checksumHeader, ctx->callbacks.checksum_userdata); if (!fs->checksumHeader.isEmpty()) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); + qCDebug(lcUpdate, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); isRename = fs->checksumHeader == tmp->checksumHeader; } } if (isRename) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); + qCDebug(lcUpdate, "pot rename detected based on inode # %" PRId64 "", (uint64_t) fs->inode); /* inode found so the file has been renamed */ fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { @@ -312,11 +313,11 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f } if(tmp ) { /* tmp existing at all */ if (tmp->type != fs->type) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "file types different is not!"); + qCWarning(lcUpdate, "file types different is not!"); fs->instruction = CSYNC_INSTRUCTION_NEW; goto out; } - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); + qCDebug(lcUpdate, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { csync_rename_record(ctx, tmp->path, fs->path); @@ -384,7 +385,7 @@ out: ctx->current_fs = fs.get(); - CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "file: %s, instruction: %s <<=", fs->path.constData(), + qCInfo(lcUpdate, "file: %s, instruction: %s <<=", fs->path.constData(), csync_instruction_str(fs->instruction)); QByteArray path = fs->path; @@ -406,7 +407,7 @@ int csync_walker(CSYNC *ctx, std::unique_ptr fs) { int rc = -1; if (ctx->abort) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Aborted!"); + qCDebug(lcUpdate, "Aborted!"); ctx->status_code = CSYNC_STATUS_ABORTED; return -1; } @@ -414,20 +415,20 @@ int csync_walker(CSYNC *ctx, std::unique_ptr fs) { switch (fs->type) { case CSYNC_FTW_TYPE_FILE: if (ctx->current == REMOTE_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [file_id=%s size=%" PRIu64 "]", fs->path.constData(), fs->file_id.constData(), fs->size); + qCDebug(lcUpdate, "file: %s [file_id=%s size=%" PRIu64 "]", fs->path.constData(), fs->file_id.constData(), fs->size); } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "file: %s [inode=%" PRIu64 " size=%" PRIu64 "]", fs->path.constData(), fs->inode, fs->size); + qCDebug(lcUpdate, "file: %s [inode=%" PRIu64 " size=%" PRIu64 "]", fs->path.constData(), fs->inode, fs->size); } break; case CSYNC_FTW_TYPE_DIR: /* enter directory */ if (ctx->current == REMOTE_REPLICA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [file_id=%s]", fs->path.constData(), fs->file_id.constData()); + qCDebug(lcUpdate, "directory: %s [file_id=%s]", fs->path.constData(), fs->file_id.constData()); } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "directory: %s [inode=%" PRIu64 "]", fs->path.constData(), fs->inode); + qCDebug(lcUpdate, "directory: %s [inode=%" PRIu64 "]", fs->path.constData(), fs->inode); } break; case CSYNC_FTW_TYPE_SLINK: - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "symlink: %s - not supported", fs->path.constData()); + qCDebug(lcUpdate, "symlink: %s - not supported", fs->path.constData()); break; default: return 0; @@ -442,7 +443,7 @@ int csync_walker(CSYNC *ctx, std::unique_ptr fs) { static bool fill_tree_from_db(CSYNC *ctx, const char *uri) { if( csync_statedb_get_below_path(ctx, uri) < 0 ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "StateDB could not be read!"); + qCWarning(lcUpdate, "StateDB could not be read!"); return false; } @@ -502,7 +503,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, if ((dh = csync_vio_opendir(ctx, uri)) == NULL) { if (ctx->abort) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Aborted!"); + qCDebug(lcUpdate, "Aborted!"); ctx->status_code = CSYNC_STATUS_ABORTED; goto error; } @@ -510,20 +511,18 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, /* permission denied */ ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_OPENDIR_ERROR); if (errno == EACCES) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Permission denied."); + qCWarning(lcUpdate, "Permission denied."); if (mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_PERMISSION_DENIED)) { return 0; } } else if(errno == ENOENT) { asp = asprintf( &ctx->error_string, "%s", uri); - if (asp < 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "asprintf failed!"); - } + ASSERT(asp); } // 403 Forbidden can be sent by the server if the file firewall is active. // A file or directory should be ignored and sync must continue. See #3490 else if(errno == ERRNO_FORBIDDEN) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Directory access Forbidden (File Firewall?)"); + qCWarning(lcUpdate, "Directory access Forbidden (File Firewall?)"); if( mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_FORBIDDEN) ) { return 0; } @@ -534,13 +533,13 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, // is returned too. Thus we can't distinguish the two and will treat any // 503 as request to ignore the folder. See #3113 #2884. else if(errno == ERRNO_STORAGE_UNAVAILABLE || errno == ERRNO_SERVICE_UNAVAILABLE) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Storage was not available!"); + qCWarning(lcUpdate, "Storage was not available!"); if( mark_current_item_ignored(ctx, previous_fs, CSYNC_STATUS_STORAGE_UNAVAILABLE ) ) { return 0; } /* if current_fs is not defined here, better throw an error */ } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "opendir failed for %s - errno %d", uri, errno); + qCWarning(lcUpdate, "opendir failed for %s - errno %d", uri, errno); } goto error; } @@ -648,7 +647,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, } csync_vio_closedir(ctx, dh); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, " <= Closing walk for %s with read_from_db %d", uri, read_from_db); + qCDebug(lcUpdate, " <= Closing walk for %s with read_from_db %d", uri, read_from_db); return rc; diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index dab04d3df..3f898c63a 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -24,7 +24,8 @@ #include #include -#include +#include +#include "common/asserts.h" #include "csync_private.h" #include "csync_util.h" @@ -33,16 +34,12 @@ #include "csync_statedb.h" #include "common/c_jhash.h" -#define CSYNC_LOG_CATEGORY_NAME "csync.vio.main" - -#include "csync_log.h" +Q_LOGGING_CATEGORY(lcVio, "sync.csync.vio", QtInfoMsg) csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { switch(ctx->current) { case REMOTE_REPLICA: - if(ctx->remote.read_from_db) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Read from db flag is true, should not!" ); - } + ASSERT(!ctx->remote.read_from_db); return ctx->callbacks.remote_opendir_hook(name, ctx->callbacks.vio_userdata); break; case LOCAL_REPLICA: @@ -52,8 +49,7 @@ csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { return csync_vio_local_opendir(name); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); - break; + ASSERT(false); } return NULL; } @@ -68,9 +64,7 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { switch(ctx->current) { case REMOTE_REPLICA: - if( ctx->remote.read_from_db ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Remote ReadFromDb is true, should not!"); - } + ASSERT(!ctx->remote.read_from_db); ctx->callbacks.remote_closedir_hook(dhandle, ctx->callbacks.vio_userdata); rc = 0; break; @@ -78,7 +72,7 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { rc = csync_vio_local_closedir(dhandle); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); + ASSERT(false); break; } return rc; @@ -87,40 +81,26 @@ int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle) { std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle) { switch(ctx->current) { case REMOTE_REPLICA: - if( ctx->remote.read_from_db ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Remote readfromdb is true, should not!"); - } + ASSERT(!ctx->remote.read_from_db); return ctx->callbacks.remote_readdir_hook(dhandle, ctx->callbacks.vio_userdata); break; case LOCAL_REPLICA: return csync_vio_local_readdir(dhandle); break; default: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ALERT, "Invalid replica (%d)", (int)ctx->current); - break; + ASSERT(false); } return NULL; } - int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf) { int rc = -1; - switch(ctx->current) { - case REMOTE_REPLICA: - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "ERROR: Cannot call remote stat, not implemented"); - assert(ctx->current != REMOTE_REPLICA); - break; - case LOCAL_REPLICA: - rc = csync_vio_local_stat(uri, buf); - if (rc < 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Local stat failed, errno %d for %s", errno, uri); - } - break; - default: - break; - } + ASSERT(ctx->current == LOCAL_REPLICA); + rc = csync_vio_local_stat(uri, buf); + if (rc < 0) + qCWarning(lcVio, "Local stat failed, errno %d for %s", errno, uri); return rc; } From 35f80bd4390bb3ab92ccd8fa740d96c18ce16e93 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 22 Sep 2017 09:51:22 +0200 Subject: [PATCH 092/166] csync_vio_local: merge readdir and stat in the same call For the remote this was already done long time ago For windows, this was already partially done The goal is to avoid needless conversion of the path to local encoding. --- src/csync/csync_update.cpp | 14 ++---- src/csync/vio/csync_vio.cpp | 14 ------ src/csync/vio/csync_vio.h | 2 - src/csync/vio/csync_vio_local_unix.cpp | 51 +++++++++++-------- src/csync/vio/csync_vio_local_win.cpp | 70 +++++++++++++++++--------- 5 files changed, 81 insertions(+), 70 deletions(-) diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 0c2d9d384..ffe00d59a 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -565,16 +565,10 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, continue; } - fullpath = uri; - if (!fullpath.isEmpty()) - fullpath += '/'; - fullpath += filename; - /* Only for the local replica we have to stat(), for the remote one we have all data already */ - if (ctx->current == LOCAL_REPLICA) { - if (csync_vio_stat(ctx, fullpath, dirent.get()) != 0) { - // Will get excluded by _csync_detect_update. - dirent->type = CSYNC_FTW_TYPE_SKIP; - } + if (uri[0] == '\0') { + fullpath = filename; + } else { + fullpath = QByteArray() % uri % '/' % filename; } /* if the filename starts with a . we consider it a hidden file diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index 3f898c63a..611fb111b 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -24,7 +24,6 @@ #include #include -#include #include "common/asserts.h" #include "csync_private.h" @@ -34,8 +33,6 @@ #include "csync_statedb.h" #include "common/c_jhash.h" -Q_LOGGING_CATEGORY(lcVio, "sync.csync.vio", QtInfoMsg) - csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { switch(ctx->current) { case REMOTE_REPLICA: @@ -94,17 +91,6 @@ std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handl return NULL; } -int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf) { - int rc = -1; - - ASSERT(ctx->current == LOCAL_REPLICA); - rc = csync_vio_local_stat(uri, buf); - if (rc < 0) - qCWarning(lcVio, "Local stat failed, errno %d for %s", errno, uri); - - return rc; -} - char *csync_vio_get_status_string(CSYNC *ctx) { if(ctx->error_string) { return ctx->error_string; diff --git a/src/csync/vio/csync_vio.h b/src/csync/vio/csync_vio.h index 62522950b..7d3a2e0b4 100644 --- a/src/csync/vio/csync_vio.h +++ b/src/csync/vio/csync_vio.h @@ -36,8 +36,6 @@ csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name); int csync_vio_closedir(CSYNC *ctx, csync_vio_handle_t *dhandle); std::unique_ptr csync_vio_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle); -int csync_vio_stat(CSYNC *ctx, const char *uri, csync_file_stat_t *buf); - char *csync_vio_get_status_string(CSYNC *ctx); diff --git a/src/csync/vio/csync_vio_local_unix.cpp b/src/csync/vio/csync_vio_local_unix.cpp index 5223878a1..b60fe99ce 100644 --- a/src/csync/vio/csync_vio_local_unix.cpp +++ b/src/csync/vio/csync_vio_local_unix.cpp @@ -45,6 +45,8 @@ typedef struct dhandle_s { char *path; } dhandle_t; +static int _csync_vio_local_stat_mb(const mbchar_t *wuri, csync_file_stat_t *buf); + csync_vio_handle_t *csync_vio_local_opendir(const char *name) { dhandle_t *handle = NULL; mbchar_t *dirname = NULL; @@ -84,7 +86,6 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) { return rc; } - std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *dhandle) { dhandle_t *handle = NULL; @@ -93,17 +94,17 @@ std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *d struct _tdirent *dirent = NULL; std::unique_ptr file_stat; - dirent = _treaddir(handle->dh); - if (dirent == NULL) { - return {}; - } + do { + dirent = _treaddir(handle->dh); + if (dirent == NULL) + return {}; + } while (qstrcmp(dirent->d_name, ".") == 0 || qstrcmp(dirent->d_name, "..") == 0); file_stat.reset(new csync_file_stat_t); file_stat->path = c_utf8_from_locale(dirent->d_name); + QByteArray fullPath = QByteArray() % const_cast(handle->path) % '/' % QByteArray() % const_cast(dirent->d_name); if (file_stat->path.isNull()) { - file_stat->original_path = handle->path; - file_stat->original_path += '/'; - file_stat->original_path += dirent->d_name; + file_stat->original_path = fullPath; CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Invalid characters in file/directory name, please rename: \"%s\" (%s)", dirent->d_name, handle->path); } @@ -129,23 +130,35 @@ std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *d } #endif + if (file_stat->path.isNull()) + return file_stat; + + if (_csync_vio_local_stat_mb(fullPath.constData(), file_stat.get()) < 0) { + // Will get excluded by _csync_detect_update. + file_stat->type = CSYNC_FTW_TYPE_SKIP; + } return file_stat; } -int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { - csync_stat_t sb; - - mbchar_t *wuri = c_utf8_path_to_locale( uri ); - - if( _tstat(wuri, &sb) < 0) { +int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) +{ + mbchar_t *wuri = c_utf8_path_to_locale(uri); + *buf = csync_file_stat_t(); + int rc = _csync_vio_local_stat_mb(wuri, buf); c_free_locale_string(wuri); - return -1; - } + return rc; +} - *buf = csync_file_stat_t(); +static int _csync_vio_local_stat_mb(const mbchar_t *wuri, csync_file_stat_t *buf) +{ + csync_stat_t sb; - switch(sb.st_mode & S_IFMT) { + if (_tstat(wuri, &sb) < 0) { + return -1; + } + + switch (sb.st_mode & S_IFMT) { case S_IFDIR: buf->type = CSYNC_FTW_TYPE_DIR; break; @@ -170,7 +183,5 @@ int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { buf->inode = sb.st_ino; buf->modtime = sb.st_mtime; buf->size = sb.st_size; - - c_free_locale_string(wuri); return 0; } diff --git a/src/csync/vio/csync_vio_local_win.cpp b/src/csync/vio/csync_vio_local_win.cpp index 435ad87d6..588575ed1 100644 --- a/src/csync/vio/csync_vio_local_win.cpp +++ b/src/csync/vio/csync_vio_local_win.cpp @@ -45,9 +45,11 @@ typedef struct dhandle_s { WIN32_FIND_DATA ffd; HANDLE hFind; int firstFind; - char *path; + mbchar_t *path; // Always ends with '\' } dhandle_t; +static int _csync_vio_local_stat_mb(const mbchar_t *uri, csync_file_stat_t *buf); + csync_vio_handle_t *csync_vio_local_opendir(const char *name) { dhandle_t *handle = NULL; mbchar_t *dirname = NULL; @@ -73,6 +75,7 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) { } if (!dirname || handle->hFind == INVALID_HANDLE_VALUE) { + c_free_locale_string(dirname); int retcode = GetLastError(); if( retcode == ERROR_FILE_NOT_FOUND ) { errno = ENOENT; @@ -85,8 +88,8 @@ csync_vio_handle_t *csync_vio_local_opendir(const char *name) { handle->firstFind = 1; // Set a flag that there first fileinfo is available. - handle->path = c_strdup(name); - c_free_locale_string(dirname); + dirname[std::wcslen(dirname) - 1] = L'\0'; // remove the * + handle->path = dirname; return (csync_vio_handle_t *) handle; } @@ -109,7 +112,7 @@ int csync_vio_local_closedir(csync_vio_handle_t *dhandle) { errno = EBADF; } - SAFE_FREE(handle->path); + c_free_locale_string(handle->path); SAFE_FREE(handle); return rc; @@ -158,20 +161,24 @@ std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *d return nullptr; } } - file_stat.reset(new csync_file_stat_t); - file_stat->path = c_utf8_from_locale(handle->ffd.cFileName); + auto path = c_utf8_from_locale(handle->ffd.cFileName); + if (path == "." || path == "..") + return csync_vio_local_readdir(dhandle); - 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->type = CSYNC_FTW_TYPE_SLINK; - } 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_FTW_TYPE_FILE; - } + file_stat.reset(new csync_file_stat_t); + file_stat->path = path; + + 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->type = CSYNC_FTW_TYPE_SLINK; + } 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_FTW_TYPE_FILE; + } } else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_DEVICE || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_OFFLINE || handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY) { @@ -189,12 +196,31 @@ std::unique_ptr csync_vio_local_readdir(csync_vio_handle_t *d file_stat->size = (handle->ffd.nFileSizeHigh * ((int64_t)(MAXDWORD)+1)) + handle->ffd.nFileSizeLow; file_stat->modtime = FileTimeToUnixTime(&handle->ffd.ftLastWriteTime, &rem); + + std::wstring fullPath; + fullPath.reserve(std::wcslen(handle->path) + std::wcslen(handle->ffd.cFileName)); + fullPath += handle->path; // path always ends with '\', by construction + fullPath += handle->ffd.cFileName; + + if (_csync_vio_local_stat_mb(fullPath.data(), file_stat.get()) < 0) { + // Will get excluded by _csync_detect_update. + file_stat->type = CSYNC_FTW_TYPE_SKIP; + } + return file_stat; } +int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) +{ + mbchar_t *wuri = c_utf8_path_to_locale(uri); + int rc = _csync_vio_local_stat_mb(wuri, buf); + c_free_locale_string(wuri); + return rc; +} -int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { +static int _csync_vio_local_stat_mb(const mbchar_t *wuri, csync_file_stat_t *buf) +{ /* Almost nothing to do since csync_vio_local_readdir already filled up most of the information But we still need to fetch the file ID. Possible optimisation: only fetch the file id when we need it (for new files) @@ -203,23 +229,20 @@ int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { HANDLE h; BY_HANDLE_FILE_INFORMATION fileInfo; ULARGE_INTEGER FileIndex; - mbchar_t *wuri = c_utf8_path_to_locale( uri ); h = CreateFileW( wuri, 0, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, NULL ); if( h == INVALID_HANDLE_VALUE ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %s", uri ); + CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "CreateFileW failed on %ls", wuri); errno = GetLastError(); - c_free_locale_string(wuri); return -1; } if(!GetFileInformationByHandle( h, &fileInfo ) ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "GetFileInformationByHandle failed on %s", uri ); + CSYNC_LOG(CSYNC_LOG_PRIORITY_CRIT, "GetFileInformationByHandle failed on %ls", wuri); errno = GetLastError(); - c_free_locale_string(wuri); CloseHandle(h); return -1; } @@ -235,7 +258,6 @@ int csync_vio_local_stat(const char *uri, csync_file_stat_t *buf) { DWORD rem; buf->modtime = FileTimeToUnixTime(&fileInfo.ftLastWriteTime, &rem); - c_free_locale_string(wuri); CloseHandle(h); return 0; } From 2112e16cca153eb3d4ee4594f47a664469c8111c Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 23 Sep 2017 02:18:30 +0200 Subject: [PATCH 093/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_ca.ts | 44 +++++++++++++++++----------------- translations/client_cs.ts | 44 +++++++++++++++++----------------- translations/client_de.ts | 44 +++++++++++++++++----------------- translations/client_el.ts | 44 +++++++++++++++++----------------- translations/client_en.ts | 44 +++++++++++++++++----------------- translations/client_es.ts | 44 +++++++++++++++++----------------- translations/client_es_AR.ts | 44 +++++++++++++++++----------------- translations/client_et.ts | 44 +++++++++++++++++----------------- translations/client_eu.ts | 44 +++++++++++++++++----------------- translations/client_fa.ts | 44 +++++++++++++++++----------------- translations/client_fi.ts | 44 +++++++++++++++++----------------- translations/client_fr.ts | 44 +++++++++++++++++----------------- translations/client_gl.ts | 44 +++++++++++++++++----------------- translations/client_hu.ts | 44 +++++++++++++++++----------------- translations/client_it.ts | 44 +++++++++++++++++----------------- translations/client_ja.ts | 44 +++++++++++++++++----------------- translations/client_nb_NO.ts | 44 +++++++++++++++++----------------- translations/client_nl.ts | 44 +++++++++++++++++----------------- translations/client_pl.ts | 44 +++++++++++++++++----------------- translations/client_pt.ts | 44 +++++++++++++++++----------------- translations/client_pt_BR.ts | 44 +++++++++++++++++----------------- translations/client_ru.ts | 46 ++++++++++++++++++------------------ translations/client_sk.ts | 44 +++++++++++++++++----------------- translations/client_sl.ts | 44 +++++++++++++++++----------------- translations/client_sr.ts | 44 +++++++++++++++++----------------- translations/client_sv.ts | 44 +++++++++++++++++----------------- translations/client_th.ts | 44 +++++++++++++++++----------------- translations/client_tr.ts | 44 +++++++++++++++++----------------- translations/client_uk.ts | 44 +++++++++++++++++----------------- translations/client_zh_CN.ts | 44 +++++++++++++++++----------------- translations/client_zh_TW.ts | 44 +++++++++++++++++----------------- 32 files changed, 686 insertions(+), 683 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index e855c0c2b..a8e5106cd 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -144,6 +144,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index c92e718a3..6b564beb2 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Aturat per l'usuari @@ -2146,7 +2146,7 @@ No és aconsellada usar-la. El fitxer ha canviat des de que es va descobrir - + Error writing metadata to the database Error en escriure les metadades a la base de dades @@ -3195,27 +3195,27 @@ No és aconsellada usar-la. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3325,69 +3325,69 @@ No és aconsellada usar-la. Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen diff --git a/translations/client_cs.ts b/translations/client_cs.ts index c96312d13..9d3db42bb 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušeno uživatelem @@ -2149,7 +2149,7 @@ Nedoporučuje se jí používat. Soubor se mezitím změnil - + Error writing metadata to the database Chyba zápisu metadat do databáze @@ -3198,27 +3198,27 @@ Nedoporučuje se jí používat. Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3328,69 +3328,69 @@ Nedoporučuje se jí používat. Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj diff --git a/translations/client_de.ts b/translations/client_de.ts index 3fa4c15fd..9f16de93d 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abbruch durch den Benutzer @@ -2150,7 +2150,7 @@ Es ist nicht ratsam, diese zu benutzen. Datei ist seit der Entdeckung geändert worden - + Error writing metadata to the database Fehler beim Schreiben der Metadaten in die Datenbank @@ -3199,27 +3199,27 @@ Es ist nicht ratsam, diese zu benutzen. Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3329,69 +3329,69 @@ Es ist nicht ratsam, diese zu benutzen. Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle diff --git a/translations/client_el.ts b/translations/client_el.ts index 5e6c49dd7..73669cb9c 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Ματαιώθηκε από το χρήστη @@ -2151,7 +2151,7 @@ It is not advisable to use it. Το αρχείο έχει αλλάξει από όταν ανακαλύφθηκε - + Error writing metadata to the database Σφάλμα εγγραφής μεταδεδομένων στην βάση δεδομένων @@ -3200,27 +3200,27 @@ It is not advisable to use it. Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3330,69 +3330,69 @@ It is not advisable to use it. Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση diff --git a/translations/client_en.ts b/translations/client_en.ts index 812fb0ab8..df5666f65 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -645,7 +645,7 @@ OCC::DiscoveryMainThread - + Aborted by the user @@ -2170,7 +2170,7 @@ It is not advisable to use it. - + Error writing metadata to the database @@ -3217,27 +3217,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3347,69 +3347,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_es.ts b/translations/client_es.ts index eeb7b7b0f..233411451 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -2150,7 +2150,7 @@ No se recomienda usarla. El archivo ha cambiado desde que fue descubierto - + Error writing metadata to the database Error al escribir los metadatos en la base de datos @@ -3199,27 +3199,27 @@ No se recomienda usarla. Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. - + There is insufficient space available on the server for some uploads. No hay suficiente espacio libre en el servidor para algunas subidas. @@ -3329,69 +3329,69 @@ No se recomienda usarla. Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 1418cd184..40d69c9f7 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario @@ -2138,7 +2138,7 @@ It is not advisable to use it. - + Error writing metadata to the database @@ -3185,27 +3185,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3315,69 +3315,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_et.ts b/translations/client_et.ts index ca28fe19e..ef128b2f8 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kasutaja poolt tühistatud @@ -2139,7 +2139,7 @@ Selle kasutamine pole soovitatav. Faili on pärast avastamist muudetud - + Error writing metadata to the database @@ -3188,27 +3188,27 @@ Selle kasutamine pole soovitatav. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3318,69 +3318,69 @@ Selle kasutamine pole soovitatav. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas diff --git a/translations/client_eu.ts b/translations/client_eu.ts index f449aa047..693a72148 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Erabiltzaileak bertan behera utzita @@ -2141,7 +2141,7 @@ Ez da gomendagarria erabltzea. - + Error writing metadata to the database Errorea metadatuak datu-basean idaztean @@ -3188,27 +3188,27 @@ Ez da gomendagarria erabltzea. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3318,69 +3318,69 @@ Ez da gomendagarria erabltzea. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria diff --git a/translations/client_fa.ts b/translations/client_fa.ts index e36f07582..ce8c0dab7 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user متوقف شده توسط کاربر @@ -2138,7 +2138,7 @@ It is not advisable to use it. - + Error writing metadata to the database @@ -3185,27 +3185,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3315,69 +3315,69 @@ It is not advisable to use it. کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 29ee07cca..75efd4c8b 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Keskeytetty käyttäjän toimesta @@ -2141,7 +2141,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Tiedosto on muuttunut löytymisen jälkeen - + Error writing metadata to the database Virhe kirjoittaessa metadataa tietokantaan @@ -3190,27 +3190,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3320,69 +3320,69 @@ Osoitteen käyttäminen ei ole suositeltavaa. Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde diff --git a/translations/client_fr.ts b/translations/client_fr.ts index fff796b55..d30c79d73 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompu par l'utilisateur @@ -2152,7 +2152,7 @@ Il est déconseillé de l'utiliser. Le fichier a changé depuis sa découverte - + Error writing metadata to the database Erreur à l'écriture des métadonnées dans la base de données @@ -3201,27 +3201,27 @@ Il est déconseillé de l'utiliser. Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3331,69 +3331,69 @@ Il est déconseillé de l'utiliser. Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 7ba44f0b6..3ec54f25d 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompido polo usuario @@ -2140,7 +2140,7 @@ Recomendámoslle que non o use. O ficheiro cambiou após seren atopado - + Error writing metadata to the database @@ -3189,27 +3189,27 @@ Recomendámoslle que non o use. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3319,69 +3319,69 @@ Recomendámoslle que non o use. Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe diff --git a/translations/client_hu.ts b/translations/client_hu.ts index c34e68f35..f313627c3 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Felhasználó megszakította @@ -2138,7 +2138,7 @@ It is not advisable to use it. - + Error writing metadata to the database @@ -3186,27 +3186,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3316,69 +3316,69 @@ It is not advisable to use it. Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás diff --git a/translations/client_it.ts b/translations/client_it.ts index b99f586e1..0f29110fb 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrotto dall'utente @@ -2146,7 +2146,7 @@ Non è consigliabile utilizzarlo. Il file è stato modificato dal suo rilevamento - + Error writing metadata to the database Errore durante la scrittura dei metadati nel database @@ -3195,27 +3195,27 @@ Non è consigliabile utilizzarlo. Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3325,69 +3325,69 @@ Non è consigliabile utilizzarlo. Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 5763d6a5a..e2446900a 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ユーザーによって中止されました @@ -2147,7 +2147,7 @@ It is not advisable to use it. ファイルは発見以降に変更されました - + Error writing metadata to the database メタデータのデータベースへの書き込みに失敗 @@ -3196,27 +3196,27 @@ It is not advisable to use it. %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3326,69 +3326,69 @@ It is not advisable to use it. 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 20c7f8823..88133825c 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbrutt av brukeren @@ -2150,7 +2150,7 @@ Det er ikke tilrådelig å bruke den. Filen er endret siden den ble oppdaget - + Error writing metadata to the database Feil ved skriving av metadata til databasen @@ -3199,27 +3199,27 @@ Det er ikke tilrådelig å bruke den. Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3329,69 +3329,69 @@ Det er ikke tilrådelig å bruke den. Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 07c1a5ee0..285b5a0f4 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Afgebroken door de gebruiker @@ -2155,7 +2155,7 @@ We adviseren deze site niet te gebruiken. Het bestand is gewijzigd sinds het is gevonden - + Error writing metadata to the database Fout bij schrijven van Metadata naar de database @@ -3204,27 +3204,27 @@ We adviseren deze site niet te gebruiken. Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3334,69 +3334,69 @@ We adviseren deze site niet te gebruiken. Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 7309c4ff7..e917d919b 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Anulowane przez użytkownika @@ -2144,7 +2144,7 @@ Niezalecane jest jego użycie. - + Error writing metadata to the database Błąd podczas zapisu metadanych do bazy @@ -3193,27 +3193,27 @@ Niezalecane jest jego użycie. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3323,69 +3323,69 @@ Niezalecane jest jego użycie. - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło diff --git a/translations/client_pt.ts b/translations/client_pt.ts index ce6aacc43..580d1989c 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo utilizador @@ -2151,7 +2151,7 @@ Não é aconselhada a sua utilização. O ficheiro alterou-se desde a sua descoberta - + Error writing metadata to the database Erro ao gravar os metadados para a base de dados @@ -3200,27 +3200,27 @@ Não é aconselhada a sua utilização. Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3330,69 +3330,69 @@ Não é aconselhada a sua utilização. Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index b36b8ed89..63193f25c 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo usuário @@ -2148,7 +2148,7 @@ It is not advisable to use it. Arquivo foi alterado desde a descoberta - + Error writing metadata to the database Ocorreu um erro ao escrever metadados ao banco de dados @@ -3197,27 +3197,27 @@ It is not advisable to use it. Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. @@ -3327,69 +3327,69 @@ It is not advisable to use it. Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte diff --git a/translations/client_ru.ts b/translations/client_ru.ts index c1da82455..33974337d 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прервано пользов @@ -2148,7 +2148,7 @@ It is not advisable to use it. После обнаружения файл был изменен - + Error writing metadata to the database Ошибка записи метаданных в базу данных @@ -3197,27 +3197,27 @@ It is not advisable to use it. Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Мало места на диске: Скачивания, которые сократят свободное место ниже %1, будут пропущены. - + There is insufficient space available on the server for some uploads. На сервере недостаточно места для некоторых закачек. @@ -3309,7 +3309,7 @@ It is not advisable to use it. Unresolved conflict. - + Неразрешённый конфликт. @@ -3327,69 +3327,69 @@ It is not advisable to use it. Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник diff --git a/translations/client_sk.ts b/translations/client_sk.ts index b899d8191..4cec41833 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušené používateľom @@ -2140,7 +2140,7 @@ Nie je vhodné ju používať. Súbor sa medzitým zmenil - + Error writing metadata to the database Chyba pri zápise metadát do databázy @@ -3189,27 +3189,27 @@ Nie je vhodné ju používať. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3319,69 +3319,69 @@ Nie je vhodné ju používať. Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 0f06f0814..6549e15a7 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika @@ -2151,7 +2151,7 @@ Uporaba ni priporočljiva. Datoteka je bila spremenjena po usklajevanju seznama datotek - + Error writing metadata to the database Napaka zapisovanja metapodatkov v podatkovno zbirko @@ -3200,27 +3200,27 @@ Uporaba ni priporočljiva. Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3330,69 +3330,69 @@ Uporaba ni priporočljiva. Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 1fac7e0fd..104c7cdc3 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прекинуо корисник @@ -2140,7 +2140,7 @@ It is not advisable to use it. Фајл је измењен у међувремену - + Error writing metadata to the database @@ -3189,27 +3189,27 @@ It is not advisable to use it. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3319,69 +3319,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 63bc66327..5849b6ebe 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbruten av användare @@ -2144,7 +2144,7 @@ Det är inte lämpligt använda den. Filen har ändrats sedan upptäckten - + Error writing metadata to the database Fel vid skrivning av metadata till databasen @@ -3193,27 +3193,27 @@ Det är inte lämpligt använda den. Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3323,69 +3323,69 @@ Det är inte lämpligt använda den. Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan diff --git a/translations/client_th.ts b/translations/client_th.ts index e86a3c665..f0022e1bc 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ยกเลิกโดยผู้ใช้ @@ -2152,7 +2152,7 @@ It is not advisable to use it. ไฟล์มีการเปลี่ยนแปลงตั้งแต่ถูกพบ - + Error writing metadata to the database ข้อผิดพลาดในการเขียนข้อมูลเมตาไปยังฐานข้อมูล @@ -3199,28 +3199,28 @@ It is not advisable to use it. มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป - + There is insufficient space available on the server for some uploads. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ @@ -3330,69 +3330,69 @@ It is not advisable to use it. ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา diff --git a/translations/client_tr.ts b/translations/client_tr.ts index bed4e076d..83d0e203b 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kullanıcı tarafından iptal edildi @@ -2141,7 +2141,7 @@ Kullanmanız önerilmez. Dosya, bulunduğundan itibaren değişmiş - + Error writing metadata to the database Veritabanına üstveri yazma hatası @@ -3190,27 +3190,27 @@ Kullanmanız önerilmez. Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3320,69 +3320,69 @@ Kullanmanız önerilmez. Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 7a2ffe6fc..52a66624a 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Скасовано користувачем @@ -2139,7 +2139,7 @@ It is not advisable to use it. Файл змінився з моменту знаходження - + Error writing metadata to the database @@ -3188,27 +3188,27 @@ It is not advisable to use it. Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3318,69 +3318,69 @@ It is not advisable to use it. - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 5768087d9..a484cc756 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 用户撤销 @@ -2150,7 +2150,7 @@ It is not advisable to use it. 自从发现文件以来,它已经被改变了 - + Error writing metadata to the database 向数据库写入元数据错误 @@ -3199,27 +3199,27 @@ It is not advisable to use it. 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3329,69 +3329,69 @@ It is not advisable to use it. 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 70e1d60cc..2f99276f5 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 使用者中斷 @@ -2142,7 +2142,7 @@ It is not advisable to use it. 尋找的過程中檔案已經被更改 - + Error writing metadata to the database 寫入後設資料(metadata) 時發生錯誤 @@ -3191,27 +3191,27 @@ It is not advisable to use it. 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3321,69 +3321,69 @@ It is not advisable to use it. 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 From 0cec6f08ca5fda12a1dcef6bc406c3b223cdcec3 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 22 Sep 2017 18:05:47 +0200 Subject: [PATCH 094/166] OAuth2: Fix double slash in URL We need to use concatPath to avoid possible double '/' in the URLs if the account url() ends with '/'. This has become even more of a problem since commit d1b8370a4ad21c741da507f64a5dbfe82a3fad05 which was resolving the url after a redirect where most server actually add a '/' if the url is a folder --- src/gui/creds/oauth.cpp | 10 +++++----- src/libsync/creds/httpcredentials.cpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index 0155b0810..05ef093b3 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -76,7 +76,7 @@ void OAuth::start() QString code = rx.cap(1); // The 'code' is the first capture of the regexp - QUrl requestToken(_account->url().toString() + QLatin1String("/index.php/apps/oauth2/api/v1/token")); + QUrl requestToken = Utility::concatUrlPath(_account->url().toString(), QLatin1String("/index.php/apps/oauth2/api/v1/token")); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); @@ -154,10 +154,10 @@ void OAuth::start() QUrl OAuth::authorisationLink() const { Q_ASSERT(_server.isListening()); - QUrl url = QUrl(_account->url().toString() - + QLatin1String("/index.php/apps/oauth2/authorize?response_type=code&client_id=") - + Theme::instance()->oauthClientId() - + QLatin1String("&redirect_uri=http://localhost:") + QString::number(_server.serverPort())); + QUrl url = Utility::concatUrlPath(_account->url(), QLatin1String("/index.php/apps/oauth2/authorize"), + { { QLatin1String("response_type"), QLatin1String("code") }, + { QLatin1String("client_id"), Theme::instance()->oauthClientId() }, + { QLatin1String("redirect_uri"), QLatin1String("http://localhost:") + QString::number(_server.serverPort()) } }); if (!_expectedUser.isNull()) url.addQueryItem("user", _expectedUser); return url; diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp index 52e96edf3..771008bf6 100644 --- a/src/libsync/creds/httpcredentials.cpp +++ b/src/libsync/creds/httpcredentials.cpp @@ -344,7 +344,7 @@ bool HttpCredentials::refreshAccessToken() if (_refreshToken.isEmpty()) return false; - QUrl requestToken(_account->url().toString() + QLatin1String("/index.php/apps/oauth2/api/v1/token")); + QUrl requestToken = Utility::concatUrlPath(_account->url(), QLatin1String("/index.php/apps/oauth2/api/v1/token")); QNetworkRequest req; req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); From 382cc444f0c4a44d4d9208e91560fee84fcac125 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 22 Sep 2017 18:59:48 +0200 Subject: [PATCH 095/166] Httpcreds: Fix double slash in the Request App Password url Issue #6044 --- src/gui/creds/httpcredentialsgui.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index bc533db86..366cbe161 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -148,7 +148,10 @@ QString HttpCredentialsGui::requestAppPasswordText(const Account *account) return QString(); } + auto baseUrl = account->url().toString(); + if (baseUrl.endsWith('/')) + baseUrl.chop(1); return tr("Click here to request an app password from the web interface.") - .arg(account->url().toString() + path); + .arg(baseUrl + path); } } // namespace OCC From 81d9f94a29b1f990b85f6dc120c95d000cd55764 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Sat, 23 Sep 2017 13:42:39 +0200 Subject: [PATCH 096/166] macOS: Fix compile --- src/gui/socketapi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index b46ff1c21..91e7b20b6 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -207,7 +207,7 @@ SocketApi::SocketApi(QObject *parent) qCInfo(lcSocketApi) << "server started, listening at " << socketPath; } - connect(&_localServer, &QLocalServer::newConnection, this, &SocketApi::slotNewConnection); + connect(&_localServer, &SocketApiServer::newConnection, this, &SocketApi::slotNewConnection); // folder watcher connect(FolderMan::instance(), &FolderMan::folderSyncStateChange, this, &SocketApi::slotUpdateFolderView); From fbd8de1c246c95c96320e1fedaefcccb959ed16b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 24 Sep 2017 02:18:33 +0200 Subject: [PATCH 097/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_ca.ts | 2 +- translations/client_cs.ts | 2 +- translations/client_de.ts | 2 +- translations/client_el.ts | 2 +- translations/client_en.ts | 2 +- translations/client_es.ts | 2 +- translations/client_es_AR.ts | 2 +- translations/client_et.ts | 2 +- translations/client_eu.ts | 2 +- translations/client_fa.ts | 2 +- translations/client_fi.ts | 2 +- translations/client_fr.ts | 2 +- translations/client_gl.ts | 2 +- translations/client_hu.ts | 2 +- translations/client_it.ts | 2 +- translations/client_ja.ts | 2 +- translations/client_nb_NO.ts | 2 +- translations/client_nl.ts | 2 +- translations/client_pl.ts | 2 +- translations/client_pt.ts | 2 +- translations/client_pt_BR.ts | 2 +- translations/client_ru.ts | 2 +- translations/client_sk.ts | 2 +- translations/client_sl.ts | 2 +- translations/client_sr.ts | 2 +- translations/client_sv.ts | 2 +- translations/client_th.ts | 2 +- translations/client_tr.ts | 2 +- translations/client_uk.ts | 2 +- translations/client_zh_CN.ts | 2 +- translations/client_zh_TW.ts | 2 +- 32 files changed, 34 insertions(+), 31 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index a8e5106cd..a22c74308 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -147,6 +147,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 6b564beb2..b3d88666c 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -1301,7 +1301,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Escriviu contrasenya - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 9d3db42bb..8ce2c8c7d 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -1304,7 +1304,7 @@ Pokračováním v synchronizaci způsobí přepsání všech vašich souborů st Zadejte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikněte sem</a> pro vyžádání hesla aplikace z webového rozhraní. diff --git a/translations/client_de.ts b/translations/client_de.ts index 9f16de93d..af4c59d93 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1306,7 +1306,7 @@ Wenn diese Synchronisation fortgesetzt wird, werden Dateien eventuell von älter Passwort eingeben - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicken Sie hier</a> um ein App-Passwort von dem Web-Interface zu erhalten. diff --git a/translations/client_el.ts b/translations/client_el.ts index 73669cb9c..d0c759c63 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -1306,7 +1306,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Εισάγετε Κωδικό Πρόσβασης - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">πατήστε εδώ</a>για να ζητήσετε έναν κωδικό πρόσβασης εφαρμογής από τη διεπαφή ιστού. diff --git a/translations/client_en.ts b/translations/client_en.ts index df5666f65..c68f193ff 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -1329,7 +1329,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_es.ts b/translations/client_es.ts index 233411451..28fbdef80 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -1306,7 +1306,7 @@ Si continua con la sincronización todos los archivos serán remplazados por su Introduzca la contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Haga clic aquí</a> para solicitar una contraseña de aplicación desde la interfaz web. diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 40d69c9f7..0aaf36a31 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Ingresar contraseña - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_et.ts b/translations/client_et.ts index ef128b2f8..813cec250 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Sisesta parool - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 693a72148..a5bf9687f 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Sartu Pasahitza - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_fa.ts b/translations/client_fa.ts index ce8c0dab7..524c096e1 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an رمز را وارد کنید - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 75efd4c8b..c0dc512fc 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Anna salasana - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_fr.ts b/translations/client_fr.ts index d30c79d73..c3be15e30 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -1307,7 +1307,7 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Saisissez le mot de passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Cliquez ici</a> pour demander un mot de passe d'application depuis l'interface web. diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 3ec54f25d..d8665cc0e 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Escriba o contrasinal - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_hu.ts b/translations/client_hu.ts index f313627c3..2a6b14870 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Jelszómegadás - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_it.ts b/translations/client_it.ts index 0f29110fb..44b2e6896 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -1302,7 +1302,7 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut Digita password - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Fai clic qui</a> per richiedere una password dell'applicazione dall'interfaccia web. diff --git a/translations/client_ja.ts b/translations/client_ja.ts index e2446900a..2c8bff56c 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -1304,7 +1304,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an パスワードを入力してください - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">ここをクリック</a>してウェブインターフェースからアプリパスワードをリクエストしてください。 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 88133825c..41b318292 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -1305,7 +1305,7 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Legg inn passord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klikk her</a> for å be om et app-passord fra web-grensesnittet. diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 285b5a0f4..8fe3903ed 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -1310,7 +1310,7 @@ Account: %3 Vul het wachtwoord in - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klik hier</a> om een nieuw app wachtwoord via de web interface op te vragen. diff --git a/translations/client_pl.ts b/translations/client_pl.ts index e917d919b..c52ad3c91 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -1299,7 +1299,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Wprowadź hasło - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 580d1989c..243931ec1 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -1306,7 +1306,7 @@ Continuando a sincronização fará com que todos os seus ficheiros sejam substi Insira a Palavra-passe - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma palavra-passe da aplicação a partir da interface da Web. diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 63193f25c..77b50a2c7 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -1305,7 +1305,7 @@ Continuar a sincronização como normal fará com que todos os seus arquivos sej Entrar Senha - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Clique aqui</a> para solicitar uma senha de aplicativo na interface da web. diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 33974337d..134c8faf1 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -1304,7 +1304,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Введите пароль - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Кликните здесь</a> чтобы запросить пароль приложения через веб-интерфейс. diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 4cec41833..804ae392f 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Vložte heslo - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 6549e15a7..f10d3f64c 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -1306,7 +1306,7 @@ Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi Vnos gesla - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Kliknite tu</a> za dodelitev gesla za program prek spletnega vmesnika. diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 104c7cdc3..ff35869c2 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Унесите лозинку - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 5849b6ebe..2fda8a96a 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -1299,7 +1299,7 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Ange lösenord - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">Klicka här</a> för att begära ett app-lösenord från webbgränssnittet. diff --git a/translations/client_th.ts b/translations/client_th.ts index f0022e1bc..53db5be06 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -1308,7 +1308,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an ป้อนรหัสผ่าน - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">คลิกที่นี่</a> เพื่อขอรหัสผ่านแอพฯ จากเว็บอินเตอร์เฟส diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 83d0e203b..58c3ab520 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Parolayı Girin - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 52a66624a..d60600385 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Введіть Пароль - + <a href="%1">Click here</a> to request an app password from the web interface. diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index a484cc756..bba7fb9ed 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -1306,7 +1306,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an 输入密码 - + <a href="%1">Click here</a> to request an app password from the web interface. <a href="%1">点击这里</a>从 web 界面请求一个 app 密码。 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 2f99276f5..aa4ba635c 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -1297,7 +1297,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an 輸入密碼 - + <a href="%1">Click here</a> to request an app password from the web interface. From d8206ccbc791a8bae7e0a2ac626b957f3e49f182 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 23 Sep 2017 14:01:07 +0200 Subject: [PATCH 098/166] csync_update: fix assert Amend 1dc44c0f62bb3f6e50156cd08c1a2a82d67c0d0d --- src/csync/csync_update.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index ffe00d59a..c42eaa928 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -517,7 +517,7 @@ int csync_ftw(CSYNC *ctx, const char *uri, csync_walker_fn fn, } } else if(errno == ENOENT) { asp = asprintf( &ctx->error_string, "%s", uri); - ASSERT(asp); + ASSERT(asp >= 0); } // 403 Forbidden can be sent by the server if the file firewall is active. // A file or directory should be ignored and sync must continue. See #3490 From d113498c7b3ab7dfd02e265e51169c244afeb80e Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sun, 24 Sep 2017 20:06:08 +0200 Subject: [PATCH 099/166] chsck_vio: fix readdir test by removing it. The code that was creating the files in the directory was removed in commit 6906b8d30c846bf0e03f1252b71e169e50786efa. The directory is empty so the result is expected to be null. It was passing before because the code was returning an entry for . and .., but since commit 35f80bd4390bb3ab92ccd8fa740d96c18ce16e93 this is no longer the case --- test/csync/vio_tests/check_vio.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index 31da1113b..0607dcaa8 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -137,31 +137,12 @@ static void check_csync_vio_closedir_null(void **state) assert_int_equal(rc, -1); } -static void check_csync_vio_readdir(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - csync_vio_handle_t *dh; - std::unique_ptr dirent; - int rc; - - dh = csync_vio_opendir(csync, CSYNC_TEST_DIR); - assert_non_null(dh); - - dirent = csync_vio_readdir(csync, dh); - assert_non_null(dirent.get()); - - rc = csync_vio_closedir(csync, dh); - assert_int_equal(rc, 0); -} - - int torture_run_tests(void) { const struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(check_csync_vio_opendir, setup_dir, teardown), cmocka_unit_test_setup_teardown(check_csync_vio_opendir_perm, setup, teardown), cmocka_unit_test(check_csync_vio_closedir_null), - cmocka_unit_test_setup_teardown(check_csync_vio_readdir, setup_dir, teardown), }; return cmocka_run_group_tests(tests, NULL, NULL); From 2ec8194d0187c45671f12faf216c1ca9dfad6a56 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 25 Sep 2017 02:18:29 +0200 Subject: [PATCH 100/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_th.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index a22c74308..8c14ca7a8 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -150,6 +150,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_th.ts b/translations/client_th.ts index 53db5be06..e04a4c8b0 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -3312,7 +3312,7 @@ It is not advisable to use it. Unresolved conflict. - + ข้อขัดแย้งที่ยังไม่ได้แก้ไข From 3107e630407e9aafca23a6ac85ddb8c8a19cb574 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 23 Sep 2017 13:49:30 +0200 Subject: [PATCH 101/166] csync: use a unordered_map for the FileMap Saves more than 10% of csync_update on LargeSyncBench --- src/csync/csync_private.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 9167a53a4..f3398f7a7 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -32,7 +32,8 @@ #ifndef _CSYNC_PRIVATE_H #define _CSYNC_PRIVATE_H -#include +#include +#include #include #include #include @@ -70,7 +71,8 @@ enum csync_replica_e { * @brief csync public structure */ struct OCSYNC_EXPORT csync_s { - class FileMap : public std::map> { + struct FileMapHash { uint operator()(const QByteArray &a) const { return qHash(a); } }; + class FileMap : public std::unordered_map, FileMapHash> { public: csync_file_stat_t *findFile(const QByteArray &key) const { auto it = find(key); From bf2b089c5c5af0377ee4d3d4f15e58bbbb85eca6 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 23 Sep 2017 14:09:19 +0200 Subject: [PATCH 102/166] c_utf8_from_locale: optimize the UTF8 case on Linux Avoid converting to a QString as an intermediate step --- src/csync/std/c_utf8.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/csync/std/c_utf8.cpp b/src/csync/std/c_utf8.cpp index f4f5d1ac2..2f862b5ce 100644 --- a/src/csync/std/c_utf8.cpp +++ b/src/csync/std/c_utf8.cpp @@ -59,7 +59,15 @@ QByteArray c_utf8_from_locale(const mbchar_t *wstr) } return dst; #else - QTextDecoder dec(QTextCodec::codecForLocale()); + auto codec = QTextCodec::codecForLocale(); +#ifndef __APPLE__ + if (codec->mibEnum() == 106) { // UTF-8 + // Optimisation for UTF-8: no need to convert to QString. + // We still need to do it for mac because of normalization + return QByteArray(wstr); + } +#endif + QTextDecoder dec(codec); QString s = dec.toUnicode(wstr, qstrlen(wstr)); if (s.isEmpty() || dec.hasFailure()) { /* Conversion error: since we can't report error from this function, just return the original From 2953eed729e8e89c76ac4bdf18d7fe81715bb2a8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 12:48:33 +0200 Subject: [PATCH 103/166] benchlargesync: Do several syncs Make sure there is already a small sync before so the database is queried. Make also a sync after to run an update with many files in the database. --- test/benchmarks/benchlargesync.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/benchmarks/benchlargesync.cpp b/test/benchmarks/benchlargesync.cpp index 88a774b90..9e78b9d5c 100644 --- a/test/benchmarks/benchlargesync.cpp +++ b/test/benchmarks/benchlargesync.cpp @@ -34,10 +34,16 @@ void addBunchOfFiles(int depth, const QString &path, FileModifier &fi) { int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); - FakeFolder fakeFolder{FileInfo{}}; + FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; addBunchOfFiles<10, 8, 4>(0, "", fakeFolder.localModifier()); qDebug() << "NUMFILES" << numFiles; qDebug() << "NUMDIRS" << numDirs; - return fakeFolder.syncOnce() ? 0 : -1; + QElapsedTimer timer; + timer.start(); + bool result1 = fakeFolder.syncOnce(); + qDebug() << "FIRST SYNC: " << result1 << timer.restart(); + bool result2 = fakeFolder.syncOnce(); + qDebug() << "SECOND SYNC: " << result2 << timer.restart(); + return (result1 && result2) ? 0 : -1; } From ce04a76b17ba045c153aed4ac8ab07c60b6b856b Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 11:58:30 +0200 Subject: [PATCH 104/166] PropagateUpload: Fix another non-normalized connect that appears while profiling --- src/libsync/propagateupload.h | 2 +- src/libsync/propagateuploadng.cpp | 4 ++-- src/libsync/propagateuploadv1.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libsync/propagateupload.h b/src/libsync/propagateupload.h index a43048eb6..016824464 100644 --- a/src/libsync/propagateupload.h +++ b/src/libsync/propagateupload.h @@ -71,7 +71,7 @@ private: bool _bandwidthLimited; // if _bandwidthQuota will be used bool _choked; // if upload is paused (readData() will return 0) friend class BandwidthManager; -protected slots: +public slots: void slotJobUploadProgress(qint64 sent, qint64 t); }; diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 379726672..6d3ddfb80 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -327,8 +327,8 @@ void PropagateUploadFileNG::startNextChunk() connect(job, &PUTFileJob::finishedSignal, this, &PropagateUploadFileNG::slotPutFinished); connect(job, &PUTFileJob::uploadProgress, this, &PropagateUploadFileNG::slotUploadProgress); - connect(job, SIGNAL(uploadProgress(qint64, qint64)), - device, SLOT(slotJobUploadProgress(qint64, qint64))); + connect(job, &PUTFileJob::uploadProgress, + device, &UploadDevice::slotJobUploadProgress); connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); propagator()->_activeJobList.append(this); diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index b03ac6d9e..0d0b2cd0f 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -128,7 +128,7 @@ void PropagateUploadFileV1::startNextChunk() _jobs.append(job); connect(job, &PUTFileJob::finishedSignal, this, &PropagateUploadFileV1::slotPutFinished); connect(job, &PUTFileJob::uploadProgress, this, &PropagateUploadFileV1::slotUploadProgress); - connect(job, SIGNAL(uploadProgress(qint64, qint64)), device, SLOT(slotJobUploadProgress(qint64, qint64))); + connect(job, &PUTFileJob::uploadProgress, device, &UploadDevice::slotJobUploadProgress); connect(job, &QObject::destroyed, this, &PropagateUploadFileCommon::slotJobDestroyed); job->start(); propagator()->_activeJobList.append(this); From 090abdee879d08a7561693f4fbc310a9fe34b5be Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 11:55:18 +0200 Subject: [PATCH 105/166] bandwidthmanager: Fix unregistering devices on delete from the destroyed signal, qobject_cast won't work because the object is already destroyed. One must use reinterpret_cast then --- src/libsync/bandwidthmanager.cpp | 24 +++++------------------- src/libsync/bandwidthmanager.h | 2 -- 2 files changed, 5 insertions(+), 21 deletions(-) diff --git a/src/libsync/bandwidthmanager.cpp b/src/libsync/bandwidthmanager.cpp index 0393b353f..c1ed6adcd 100644 --- a/src/libsync/bandwidthmanager.cpp +++ b/src/libsync/bandwidthmanager.cpp @@ -95,7 +95,7 @@ void BandwidthManager::registerUploadDevice(UploadDevice *p) { _absoluteUploadDeviceList.append(p); _relativeUploadDeviceList.append(p); - QObject::connect(p, SIGNAL(destroyed(QObject *)), this, SLOT(unregisterUploadDevice(QObject *))); + QObject::connect(p, &QObject::destroyed, this, &BandwidthManager::unregisterUploadDevice); if (usingAbsoluteUploadLimit()) { p->setBandwidthLimited(true); @@ -111,14 +111,7 @@ void BandwidthManager::registerUploadDevice(UploadDevice *p) void BandwidthManager::unregisterUploadDevice(QObject *o) { - UploadDevice *p = qobject_cast(o); - if (p) { - unregisterUploadDevice(p); - } -} - -void BandwidthManager::unregisterUploadDevice(UploadDevice *p) -{ + auto p = reinterpret_cast(o); // note, we might already be in the ~QObject _absoluteUploadDeviceList.removeAll(p); _relativeUploadDeviceList.removeAll(p); if (p == _relativeLimitCurrentMeasuredDevice) { @@ -130,7 +123,7 @@ void BandwidthManager::unregisterUploadDevice(UploadDevice *p) void BandwidthManager::registerDownloadJob(GETFileJob *j) { _downloadJobList.append(j); - QObject::connect(j, SIGNAL(destroyed(QObject *)), this, SLOT(unregisterDownloadJob(QObject *))); + QObject::connect(j, &QObject::destroyed, this, &BandwidthManager::unregisterDownloadJob); if (usingAbsoluteDownloadLimit()) { j->setBandwidthLimited(true); @@ -144,8 +137,9 @@ void BandwidthManager::registerDownloadJob(GETFileJob *j) } } -void BandwidthManager::unregisterDownloadJob(GETFileJob *j) +void BandwidthManager::unregisterDownloadJob(QObject *o) { + GETFileJob *j = reinterpret_cast(o); // note, we might already be in the ~QObject _downloadJobList.removeAll(j); if (_relativeLimitCurrentMeasuredJob == j) { _relativeLimitCurrentMeasuredJob = 0; @@ -153,14 +147,6 @@ void BandwidthManager::unregisterDownloadJob(GETFileJob *j) } } -void BandwidthManager::unregisterDownloadJob(QObject *o) -{ - GETFileJob *p = qobject_cast(o); - if (p) { - unregisterDownloadJob(p); - } -} - void BandwidthManager::relativeUploadMeasuringTimerExpired() { if (!usingRelativeUploadLimit() || _relativeUploadDeviceList.count() == 0) { diff --git a/src/libsync/bandwidthmanager.h b/src/libsync/bandwidthmanager.h index 77a327287..691e11162 100644 --- a/src/libsync/bandwidthmanager.h +++ b/src/libsync/bandwidthmanager.h @@ -45,11 +45,9 @@ public: public slots: void registerUploadDevice(UploadDevice *); - void unregisterUploadDevice(UploadDevice *); void unregisterUploadDevice(QObject *); void registerDownloadJob(GETFileJob *); - void unregisterDownloadJob(GETFileJob *); void unregisterDownloadJob(QObject *); void absoluteLimitTimerExpired(); From c34ec00d3aff38c1f8743e29c5d56eb1a0a8b655 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 26 Sep 2017 02:18:33 +0200 Subject: [PATCH 106/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index 8c14ca7a8..5cb300bd6 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -153,6 +153,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From e1d482ea7cded147dbac5c799a81d13687d9db99 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 6 Sep 2017 11:55:37 +0200 Subject: [PATCH 107/166] SyncJournalDB: Bind phash as a qlonglong instead of a QString This is what csync does and we don't need to pass it as a string to let sqlite convert it back to a uint64 later. --- src/common/syncjournaldb.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index 9e5052b5a..aa173c861 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -913,7 +913,7 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) parseChecksumHeader(record._checksumHeader, &checksumType, &checksum); int contentChecksumTypeId = mapChecksumType(checksumType); _setFileRecordQuery->reset_and_clear_bindings(); - _setFileRecordQuery->bindValue(1, QString::number(phash)); + _setFileRecordQuery->bindValue(1, phash); _setFileRecordQuery->bindValue(2, plen); _setFileRecordQuery->bindValue(3, record._path); _setFileRecordQuery->bindValue(4, record._inode); @@ -951,7 +951,7 @@ bool SyncJournalDb::deleteFileRecord(const QString &filename, bool recursively) qlonglong phash = getPHash(filename); _deleteFileRecordPhash->reset_and_clear_bindings(); - _deleteFileRecordPhash->bindValue(1, QString::number(phash)); + _deleteFileRecordPhash->bindValue(1, phash); if (!_deleteFileRecordPhash->exec()) { return false; @@ -981,7 +981,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) if (!filename.isEmpty() && checkConnect()) { _getFileRecordQuery->reset_and_clear_bindings(); - _getFileRecordQuery->bindValue(1, QString::number(phash)); + _getFileRecordQuery->bindValue(1, phash); if (!_getFileRecordQuery->exec()) { locker.unlock(); @@ -1108,7 +1108,7 @@ bool SyncJournalDb::updateFileRecordChecksum(const QString &filename, auto &query = _setFileRecordChecksumQuery; query->reset_and_clear_bindings(); - query->bindValue(1, QString::number(phash)); + query->bindValue(1, phash); query->bindValue(2, contentChecksum); query->bindValue(3, checksumTypeId); @@ -1136,7 +1136,7 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename, auto &query = _setFileRecordLocalMetadataQuery; query->reset_and_clear_bindings(); - query->bindValue(1, QString::number(phash)); + query->bindValue(1, phash); query->bindValue(2, inode); query->bindValue(3, modtime); query->bindValue(4, size); From 6f46764daa59460a4cbdc7327255a6dc4d631590 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Wed, 13 Sep 2017 19:02:38 +0200 Subject: [PATCH 108/166] SyncJournalDB: Allow callers of getFileRecord if the query failed The current implementation would return the same value whether the query failed or if no row would be found. This is something that is currently checked by csync and needs to be provided if we want to use SyncJournalDB there. Adjusted all call sites to also check the return value even though they could still just rely on rec.isValid(), but makes it more explicit as to what happens for database errors in those cases, if we ever want to gracefully handle them. --- src/common/syncjournaldb.cpp | 51 +++++++++++++++------------ src/common/syncjournaldb.h | 5 ++- src/gui/folder.cpp | 6 ++-- src/gui/owncloudgui.cpp | 4 +-- src/gui/socketapi.cpp | 4 +-- src/libsync/owncloudpropagator.cpp | 4 +-- src/libsync/propagatedownload.cpp | 4 +-- src/libsync/propagateremotemove.cpp | 4 +-- src/libsync/propagatorjobs.cpp | 4 +-- src/libsync/syncengine.cpp | 6 ++-- src/libsync/syncfilestatustracker.cpp | 4 +-- test/testsyncengine.cpp | 3 +- test/testsyncjournaldb.cpp | 20 ++++++----- 13 files changed, 67 insertions(+), 52 deletions(-) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index aa173c861..2146e6945 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -972,37 +972,42 @@ bool SyncJournalDb::deleteFileRecord(const QString &filename, bool recursively) } -SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) +bool SyncJournalDb::getFileRecord(const QString &filename, SyncJournalFileRecord *rec) { QMutexLocker locker(&_mutex); - qlonglong phash = getPHash(filename); - SyncJournalFileRecord rec; + // Reset the output var in case the caller is reusing it. + Q_ASSERT(rec); + rec->_path.clear(); + Q_ASSERT(!rec->isValid()); - if (!filename.isEmpty() && checkConnect()) { + if (!checkConnect()) + return false; + + if (!filename.isEmpty()) { _getFileRecordQuery->reset_and_clear_bindings(); - _getFileRecordQuery->bindValue(1, phash); + _getFileRecordQuery->bindValue(1, getPHash(filename)); if (!_getFileRecordQuery->exec()) { locker.unlock(); close(); - return rec; + return false; } if (_getFileRecordQuery->next()) { - rec._path = _getFileRecordQuery->stringValue(0); - rec._inode = _getFileRecordQuery->intValue(1); - //rec._uid = _getFileRecordQuery->value(2).toInt(&ok); Not Used - //rec._gid = _getFileRecordQuery->value(3).toInt(&ok); Not Used - //rec._mode = _getFileRecordQuery->intValue(4); - rec._modtime = Utility::qDateTimeFromTime_t(_getFileRecordQuery->int64Value(5)); - rec._type = _getFileRecordQuery->intValue(6); - rec._etag = _getFileRecordQuery->baValue(7); - rec._fileId = _getFileRecordQuery->baValue(8); - rec._remotePerm = RemotePermissions(_getFileRecordQuery->baValue(9).constData()); - rec._fileSize = _getFileRecordQuery->int64Value(10); - rec._serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0); - rec._checksumHeader = _getFileRecordQuery->baValue(12); + rec->_path = _getFileRecordQuery->stringValue(0); + rec->_inode = _getFileRecordQuery->intValue(1); + //rec->_uid = _getFileRecordQuery->value(2).toInt(&ok); Not Used + //rec->_gid = _getFileRecordQuery->value(3).toInt(&ok); Not Used + //rec->_mode = _getFileRecordQuery->intValue(4); + rec->_modtime = Utility::qDateTimeFromTime_t(_getFileRecordQuery->int64Value(5)); + rec->_type = _getFileRecordQuery->intValue(6); + rec->_etag = _getFileRecordQuery->baValue(7); + rec->_fileId = _getFileRecordQuery->baValue(8); + rec->_remotePerm = RemotePermissions(_getFileRecordQuery->baValue(9).constData()); + rec->_fileSize = _getFileRecordQuery->int64Value(10); + rec->_serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0); + rec->_checksumHeader = _getFileRecordQuery->baValue(12); } else { int errId = _getFileRecordQuery->errorId(); if (errId != SQLITE_DONE) { // only do this if the problem is different from SQLITE_DONE @@ -1014,7 +1019,7 @@ SyncJournalFileRecord SyncJournalDb::getFileRecord(const QString &filename) } } } - return rec; + return true; } bool SyncJournalDb::postSyncCleanup(const QSet &filepathsToKeep, @@ -1150,10 +1155,12 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename, bool SyncJournalDb::setFileRecordMetadata(const SyncJournalFileRecord &record) { - SyncJournalFileRecord existing = getFileRecord(record._path); + SyncJournalFileRecord existing; + if (!getFileRecord(record._path, &existing)) + return false; // If there's no existing record, just insert the new one. - if (existing._path.isEmpty()) { + if (!existing.isValid()) { return setFileRecord(record); } diff --git a/src/common/syncjournaldb.h b/src/common/syncjournaldb.h index 0afefebcf..8ad2b0852 100644 --- a/src/common/syncjournaldb.h +++ b/src/common/syncjournaldb.h @@ -53,9 +53,8 @@ public: /// Migrate a csync_journal to the new path, if necessary. Returns false on error static bool maybeMigrateDb(const QString &localPath, const QString &absoluteJournalPath); - // to verify that the record could be queried successfully check - // with SyncJournalFileRecord::isValid() - SyncJournalFileRecord getFileRecord(const QString &filename); + // To verify that the record could be found check with SyncJournalFileRecord::isValid() + bool getFileRecord(const QString &filename, SyncJournalFileRecord *rec); bool setFileRecord(const SyncJournalFileRecord &record); /// Like setFileRecord, but preserves checksums diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index a6e6e3171..9f20f53fd 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -467,8 +467,10 @@ void Folder::slotWatchedPathChanged(const QString &path) // 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))) { + SyncJournalFileRecord record; + if (_journal.getFileRecord(relativePath, &record) + && record.isValid() + && !FileSystem::fileChanged(path, record._fileSize, Utility::qDateTimeToTime_t(record._modtime))) { qCInfo(lcFolder) << "Ignoring spurious notification for file" << relativePath; return; // probably a spurious notification } diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 6c57442ea..76128a85e 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -1002,10 +1002,10 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l const auto accountState = folder->accountState(); const QString file = localPath.mid(folder->cleanPath().length() + 1); - SyncJournalFileRecord fileRecord = folder->journalDb()->getFileRecord(file); + SyncJournalFileRecord fileRecord; bool resharingAllowed = true; // lets assume the good - if (fileRecord.isValid()) { + if (folder->journalDb()->getFileRecord(file, &fileRecord) && fileRecord.isValid()) { // check the permission: Is resharing allowed? if (!fileRecord._remotePerm.isNull() && !fileRecord._remotePerm.hasPermission(RemotePermissions::CanReshare)) { resharingAllowed = false; diff --git a/src/gui/socketapi.cpp b/src/gui/socketapi.cpp index 91e7b20b6..647d24e79 100644 --- a/src/gui/socketapi.cpp +++ b/src/gui/socketapi.cpp @@ -504,8 +504,8 @@ void fetchPrivateLinkUrl(const QString &localFile, SocketApi *target, void (Sock const QString file = localFileClean.mid(shareFolder->cleanPath().length() + 1); // Generate private link ourselves: used as a fallback - const SyncJournalFileRecord rec = shareFolder->journalDb()->getFileRecord(file); - if (!rec.isValid()) + SyncJournalFileRecord rec; + if (!shareFolder->journalDb()->getFileRecord(file, &rec) || !rec.isValid()) return; const QString oldUrl = shareFolder->accountState()->account()->deprecatedPrivateLinkUrl(rec.numericFileId()).toString(QUrl::FullyEncoded); diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 46c3899ae..8af558fa7 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -964,8 +964,8 @@ void CleanupPollsJob::start() auto info = _pollInfos.first(); _pollInfos.pop_front(); - SyncJournalFileRecord record = _journal->getFileRecord(info._file); - if (record.isValid()) { + SyncJournalFileRecord record; + if (_journal->getFileRecord(info._file, &record) && record.isValid()) { SyncFileItemPtr item = SyncFileItem::fromSyncJournalFileRecord(record); PollJob *job = new PollJob(_account, info._url, item, _journal, _localPath, this); connect(job, &PollJob::finishedSignal, this, &CleanupPollsJob::slotPollFinished); diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 4bb4495c9..6466d13b6 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -706,8 +706,8 @@ namespace { // Anonymous namespace for the recall feature // Path of the recalled file in the local folder QString localRecalledFile = recalledFile.mid(folderPath.size()); - SyncJournalFileRecord record = journal.getFileRecord(localRecalledFile); - if (!record.isValid()) { + SyncJournalFileRecord record; + if (!journal.getFileRecord(localRecalledFile, &record) || !record.isValid()) { qCWarning(lcPropagateDownload) << "No db entry for recall of" << localRecalledFile; continue; } diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index db8ab1836..74152f028 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -162,8 +162,8 @@ void PropagateRemoteMove::slotMoveJobFinished() void PropagateRemoteMove::finalize() { - SyncJournalFileRecord oldRecord = - propagator()->_journal->getFileRecord(_item->_originalFile); + SyncJournalFileRecord oldRecord; + propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord); // if reading from db failed still continue hoping that deleteFileRecord // reopens the db successfully. // The db is only queried to transfer the content checksum from the old diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index ecf46f285..949f36b4b 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -231,8 +231,8 @@ void PropagateLocalRename::start() } } - SyncJournalFileRecord oldRecord = - propagator()->_journal->getFileRecord(_item->_originalFile); + SyncJournalFileRecord oldRecord; + propagator()->_journal->getFileRecord(_item->_originalFile, &oldRecord); propagator()->_journal->deleteFileRecord(_item->_originalFile); // store the rename file name in the item. diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 48d439b76..d34c516cd 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -600,8 +600,10 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, } // If the 'W' remote permission changed, update the local filesystem - SyncJournalFileRecord prev = _journal->getFileRecord(item->_file); - if (prev.isValid() && prev._remotePerm.hasPermission(RemotePermissions::CanWrite) != item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { + SyncJournalFileRecord prev; + if (_journal->getFileRecord(item->_file, &prev) + && prev.isValid() + && prev._remotePerm.hasPermission(RemotePermissions::CanWrite) != item->_remotePerm.hasPermission(RemotePermissions::CanWrite)) { const bool isReadOnly = !item->_remotePerm.isNull() && !item->_remotePerm.hasPermission(RemotePermissions::CanWrite); FileSystem::setFileReadOnlyWeak(filePath, isReadOnly); } diff --git a/src/libsync/syncfilestatustracker.cpp b/src/libsync/syncfilestatustracker.cpp index 855abff7a..1cae76986 100644 --- a/src/libsync/syncfilestatustracker.cpp +++ b/src/libsync/syncfilestatustracker.cpp @@ -145,8 +145,8 @@ SyncFileStatus SyncFileStatusTracker::fileStatus(const QString &relativePath) return SyncFileStatus::StatusSync; // First look it up in the database to know if it's shared - SyncJournalFileRecord rec = _syncEngine->journal()->getFileRecord(relativePath); - if (rec.isValid()) { + SyncJournalFileRecord rec; + if (_syncEngine->journal()->getFileRecord(relativePath, &rec) && rec.isValid()) { return resolveSyncAndErrorStatus(relativePath, rec._remotePerm.hasPermission(RemotePermissions::IsShared) ? Shared : NotShared); } diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 9de20a015..032937b62 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -109,7 +109,8 @@ private slots: fakeFolder.syncOnce(); auto getDbChecksum = [&](QString path) { - auto record = fakeFolder.syncJournal().getFileRecord(path); + SyncJournalFileRecord record; + fakeFolder.syncJournal().getFileRecord(path, &record); return record._checksumHeader; }; diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index c7d8b85c3..5219dd8cf 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -45,7 +45,8 @@ private slots: void testFileRecord() { - SyncJournalFileRecord record = _db.getFileRecord("nonexistant"); + SyncJournalFileRecord record; + QVERIFY(_db.getFileRecord("nonexistant", &record)); QVERIFY(!record.isValid()); record._path = "foo"; @@ -59,13 +60,14 @@ private slots: record._checksumHeader = "MD5:mychecksum"; QVERIFY(_db.setFileRecord(record)); - SyncJournalFileRecord storedRecord = _db.getFileRecord("foo"); + SyncJournalFileRecord storedRecord; + QVERIFY(_db.getFileRecord("foo", &storedRecord)); QVERIFY(storedRecord == record); // Update checksum record._checksumHeader = "Adler32:newchecksum"; _db.updateFileRecordChecksum("foo", "newchecksum", "Adler32"); - storedRecord = _db.getFileRecord("foo"); + QVERIFY(_db.getFileRecord("foo", &storedRecord)); QVERIFY(storedRecord == record); // Update metadata @@ -77,11 +79,11 @@ private slots: record._remotePerm = RemotePermissions("NV"); record._fileSize = 289055; _db.setFileRecordMetadata(record); - storedRecord = _db.getFileRecord("foo"); + QVERIFY(_db.getFileRecord("foo", &storedRecord)); QVERIFY(storedRecord == record); QVERIFY(_db.deleteFileRecord("foo")); - record = _db.getFileRecord("foo"); + QVERIFY(_db.getFileRecord("foo", &record)); QVERIFY(!record.isValid()); } @@ -96,7 +98,8 @@ private slots: record._modtime = QDateTime::currentDateTimeUtc(); QVERIFY(_db.setFileRecord(record)); - SyncJournalFileRecord storedRecord = _db.getFileRecord("foo-checksum"); + SyncJournalFileRecord storedRecord; + QVERIFY(_db.getFileRecord("foo-checksum", &storedRecord)); QVERIFY(storedRecord._path == record._path); QVERIFY(storedRecord._remotePerm == record._remotePerm); QVERIFY(storedRecord._checksumHeader == record._checksumHeader); @@ -112,11 +115,12 @@ private slots: SyncJournalFileRecord record; record._path = "foo-nochecksum"; record._remotePerm = RemotePermissions("RWN"); - record._modtime = QDateTime::currentDateTimeUtc(); + record._modtime = QDateTime::currentDateTimeUtc(); QVERIFY(_db.setFileRecord(record)); - SyncJournalFileRecord storedRecord = _db.getFileRecord("foo-nochecksum"); + SyncJournalFileRecord storedRecord; + QVERIFY(_db.getFileRecord("foo-nochecksum", &storedRecord)); QVERIFY(storedRecord == record); } } From a034ee894ccfbab5164ed2800e511fbb7c0fbe70 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 14 Sep 2017 15:50:13 +0200 Subject: [PATCH 109/166] Use SyncJournalDb in csync This gets rid of the csync_statedb sqlite layer and use the same code and same connection as the rest of the SyncEngine. Missing functions are added to SyncJournalDb and change a few minor things (like changing SyncJournalFileRecord::_modtime to be an int64 instead of a QDateTime, like it was in csync). --- src/common/syncjournaldb.cpp | 199 ++++-- src/common/syncjournaldb.h | 24 +- src/common/syncjournalfilerecord.cpp | 2 +- src/common/syncjournalfilerecord.h | 12 +- src/csync/CMakeLists.txt | 1 - src/csync/csync.cpp | 48 +- src/csync/csync.h | 18 + src/csync/csync_private.h | 15 +- src/csync/csync_reconcile.cpp | 36 +- src/csync/csync_statedb.cpp | 627 ------------------ src/csync/csync_statedb.h | 99 --- src/csync/csync_update.cpp | 132 ++-- src/csync/csync_util.cpp | 1 - src/csync/vio/csync_vio.cpp | 1 - src/gui/folder.cpp | 2 +- src/libsync/owncloudpropagator.cpp | 10 +- src/libsync/propagateremotemove.cpp | 2 +- src/libsync/propagateuploadng.cpp | 4 +- src/libsync/propagateuploadv1.cpp | 4 +- src/libsync/propagatorjobs.cpp | 2 +- src/libsync/syncengine.cpp | 3 +- src/libsync/syncfileitem.cpp | 6 +- test/CMakeLists.txt | 1 - test/csync/CMakeLists.txt | 4 - .../csync/csync_tests/check_csync_exclude.cpp | 6 +- .../csync_tests/check_csync_statedb_load.cpp | 127 ---- .../csync_tests/check_csync_statedb_query.cpp | 217 ------ test/csync/csync_tests/check_csync_update.cpp | 20 +- test/csync/vio_tests/check_vio.cpp | 4 +- test/csync/vio_tests/check_vio_ext.cpp | 4 +- test/testcsyncsqlite.cpp | 80 --- test/testsyncengine.cpp | 36 +- test/testsyncjournaldb.cpp | 24 +- test/testuploadreset.cpp | 2 +- 34 files changed, 377 insertions(+), 1396 deletions(-) delete mode 100644 src/csync/csync_statedb.cpp delete mode 100644 src/csync/csync_statedb.h delete mode 100644 test/csync/csync_tests/check_csync_statedb_load.cpp delete mode 100644 test/csync/csync_tests/check_csync_statedb_query.cpp delete mode 100644 test/testcsyncsqlite.cpp diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index 2146e6945..d2b6fb2a7 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -36,6 +36,26 @@ namespace OCC { Q_LOGGING_CATEGORY(lcDb, "sync.database", QtInfoMsg) +#define GET_FILE_RECORD_QUERY \ + "SELECT path, inode, modtime, type, md5, fileid, remotePerm, filesize," \ + " ignoredChildrenRemote, contentchecksumtype.name || ':' || contentChecksum" \ + " FROM metadata" \ + " LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id" + +static void fillFileRecordFromGetQuery(SyncJournalFileRecord &rec, SqlQuery &query) +{ + rec._path = query.baValue(0); + rec._inode = query.intValue(1); + rec._modtime = query.int64Value(2); + rec._type = query.intValue(3); + rec._etag = query.baValue(4); + rec._fileId = query.baValue(5); + rec._remotePerm = RemotePermissions(query.baValue(6).constData()); + rec._fileSize = query.int64Value(7); + rec._serverHasIgnoredFiles = (query.intValue(8) > 0); + rec._checksumHeader = query.baValue(9); +} + static QString defaultJournalMode(const QString &dbPath) { #ifdef Q_OS_WIN @@ -500,14 +520,32 @@ bool SyncJournalDb::checkConnect() _getFileRecordQuery.reset(new SqlQuery(_db)); if (_getFileRecordQuery->prepare( - "SELECT path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize," - " ignoredChildrenRemote, contentchecksumtype.name || ':' || contentChecksum" - " FROM metadata" - " LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id" + GET_FILE_RECORD_QUERY " WHERE phash=?1")) { return sqlFail("prepare _getFileRecordQuery", *_getFileRecordQuery); } + _getFileRecordQueryByInode.reset(new SqlQuery(_db)); + if (_getFileRecordQueryByInode->prepare( + GET_FILE_RECORD_QUERY + " WHERE inode=?1")) { + return sqlFail("prepare _getFileRecordQueryByInode", *_getFileRecordQueryByInode); + } + + _getFileRecordQueryByFileId.reset(new SqlQuery(_db)); + if (_getFileRecordQueryByFileId->prepare( + GET_FILE_RECORD_QUERY + " WHERE fileid=?1")) { + return sqlFail("prepare _getFileRecordQueryByFileId", *_getFileRecordQueryByFileId); + } + + _getFilesBelowPathQuery.reset(new SqlQuery(_db)); + if (_getFilesBelowPathQuery->prepare( + GET_FILE_RECORD_QUERY + " WHERE path > (?1||'/') AND path < (?1||'0') ORDER BY path||'/' ASC")) { + return sqlFail("prepare _getFilesBelowPathQuery", *_getFilesBelowPathQuery); + } + _setFileRecordQuery.reset(new SqlQuery(_db)); if (_setFileRecordQuery->prepare("INSERT OR REPLACE INTO metadata " "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote, contentChecksum, contentChecksumTypeId) " @@ -651,6 +689,9 @@ void SyncJournalDb::close() commitTransaction(); _getFileRecordQuery.reset(0); + _getFileRecordQueryByInode.reset(0); + _getFileRecordQueryByFileId.reset(0); + _getFilesBelowPathQuery.reset(0); _setFileRecordQuery.reset(0); _setFileRecordChecksumQuery.reset(0); _setFileRecordLocalMetadataQuery.reset(0); @@ -860,18 +901,17 @@ QStringList SyncJournalDb::tableColumns(const QString &table) return columns; } -qint64 SyncJournalDb::getPHash(const QString &file) +qint64 SyncJournalDb::getPHash(const QByteArray &file) { - QByteArray utf8File = file.toUtf8(); int64_t h; if (file.isEmpty()) { return -1; } - int len = utf8File.length(); + int len = file.length(); - h = c_jhash64((uint8_t *)utf8File.data(), len, 0); + h = c_jhash64((uint8_t *)file.data(), len, 0); return h; } @@ -882,8 +922,8 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) if (!_avoidReadFromDbOnNextSyncFilter.isEmpty()) { // If we are a directory that should not be read from db next time, don't write the etag - QString prefix = record._path + "/"; - foreach (const QString &it, _avoidReadFromDbOnNextSyncFilter) { + QByteArray prefix = record._path + "/"; + foreach (const QByteArray &it, _avoidReadFromDbOnNextSyncFilter) { if (it.startsWith(prefix)) { qCInfo(lcDb) << "Filtered writing the etag of" << prefix << "because it is a prefix of" << it; record._etag = "_invalid_"; @@ -899,13 +939,12 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) qlonglong phash = getPHash(record._path); if (checkConnect()) { - QByteArray arr = record._path.toUtf8(); - int plen = arr.length(); + int plen = record._path.length(); - QString etag(record._etag); + QByteArray etag(record._etag); if (etag.isEmpty()) etag = ""; - QString fileId(record._fileId); + QByteArray fileId(record._fileId); if (fileId.isEmpty()) fileId = ""; QByteArray remotePerm = record._remotePerm.toString(); @@ -920,8 +959,8 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) _setFileRecordQuery->bindValue(5, 0); // uid Not used _setFileRecordQuery->bindValue(6, 0); // gid Not used _setFileRecordQuery->bindValue(7, 0); // mode Not used - _setFileRecordQuery->bindValue(8, QString::number(Utility::qDateTimeToTime_t(record._modtime))); - _setFileRecordQuery->bindValue(9, QString::number(record._type)); + _setFileRecordQuery->bindValue(8, record._modtime); + _setFileRecordQuery->bindValue(9, record._type); _setFileRecordQuery->bindValue(10, etag); _setFileRecordQuery->bindValue(11, fileId); _setFileRecordQuery->bindValue(12, remotePerm); @@ -949,7 +988,7 @@ bool SyncJournalDb::deleteFileRecord(const QString &filename, bool recursively) // if (!recursively) { // always delete the actual file. - qlonglong phash = getPHash(filename); + qlonglong phash = getPHash(filename.toUtf8()); _deleteFileRecordPhash->reset_and_clear_bindings(); _deleteFileRecordPhash->bindValue(1, phash); @@ -972,7 +1011,7 @@ bool SyncJournalDb::deleteFileRecord(const QString &filename, bool recursively) } -bool SyncJournalDb::getFileRecord(const QString &filename, SyncJournalFileRecord *rec) +bool SyncJournalDb::getFileRecord(const QByteArray &filename, SyncJournalFileRecord *rec) { QMutexLocker locker(&_mutex); @@ -995,19 +1034,7 @@ bool SyncJournalDb::getFileRecord(const QString &filename, SyncJournalFileRecord } if (_getFileRecordQuery->next()) { - rec->_path = _getFileRecordQuery->stringValue(0); - rec->_inode = _getFileRecordQuery->intValue(1); - //rec->_uid = _getFileRecordQuery->value(2).toInt(&ok); Not Used - //rec->_gid = _getFileRecordQuery->value(3).toInt(&ok); Not Used - //rec->_mode = _getFileRecordQuery->intValue(4); - rec->_modtime = Utility::qDateTimeFromTime_t(_getFileRecordQuery->int64Value(5)); - rec->_type = _getFileRecordQuery->intValue(6); - rec->_etag = _getFileRecordQuery->baValue(7); - rec->_fileId = _getFileRecordQuery->baValue(8); - rec->_remotePerm = RemotePermissions(_getFileRecordQuery->baValue(9).constData()); - rec->_fileSize = _getFileRecordQuery->int64Value(10); - rec->_serverHasIgnoredFiles = (_getFileRecordQuery->intValue(11) > 0); - rec->_checksumHeader = _getFileRecordQuery->baValue(12); + fillFileRecordFromGetQuery(*rec, *_getFileRecordQuery); } else { int errId = _getFileRecordQuery->errorId(); if (errId != SQLITE_DONE) { // only do this if the problem is different from SQLITE_DONE @@ -1022,6 +1049,87 @@ bool SyncJournalDb::getFileRecord(const QString &filename, SyncJournalFileRecord return true; } +bool SyncJournalDb::getFileRecordByInode(quint64 inode, SyncJournalFileRecord *rec) +{ + QMutexLocker locker(&_mutex); + + // Reset the output var in case the caller is reusing it. + Q_ASSERT(rec); + rec->_path.clear(); + Q_ASSERT(!rec->isValid()); + + if (!inode) + return true; // no error, yet nothing found (rec->isValid() == false) + + if (!checkConnect()) + return false; + + _getFileRecordQueryByInode->reset_and_clear_bindings(); + _getFileRecordQueryByInode->bindValue(1, inode); + + if (!_getFileRecordQueryByInode->exec()) { + return false; + } + + if (_getFileRecordQueryByInode->next()) { + fillFileRecordFromGetQuery(*rec, *_getFileRecordQueryByInode); + } + + return true; +} + +bool SyncJournalDb::getFileRecordByFileId(const QByteArray &fileId, SyncJournalFileRecord *rec) +{ + QMutexLocker locker(&_mutex); + + // Reset the output var in case the caller is reusing it. + Q_ASSERT(rec); + rec->_path.clear(); + Q_ASSERT(!rec->isValid()); + + if (fileId.isEmpty()) + return true; // no error, yet nothing found (rec->isValid() == false) + + if (!checkConnect()) + return false; + + _getFileRecordQueryByFileId->reset_and_clear_bindings(); + _getFileRecordQueryByFileId->bindValue(1, fileId); + + if (!_getFileRecordQueryByFileId->exec()) { + return false; + } + + if (_getFileRecordQueryByFileId->next()) { + fillFileRecordFromGetQuery(*rec, *_getFileRecordQueryByFileId); + } + + return true; +} + +bool SyncJournalDb::getFilesBelowPath(const QByteArray &path, const std::function &rowCallback) +{ + QMutexLocker locker(&_mutex); + + if (!checkConnect()) + return false; + + _getFilesBelowPathQuery->reset_and_clear_bindings(); + _getFilesBelowPathQuery->bindValue(1, path); + + if (!_getFilesBelowPathQuery->exec()) { + return false; + } + + while (_getFilesBelowPathQuery->next()) { + SyncJournalFileRecord rec; + fillFileRecordFromGetQuery(rec, *_getFilesBelowPathQuery); + rowCallback(rec); + } + + return true; +} + bool SyncJournalDb::postSyncCleanup(const QSet &filepathsToKeep, const QSet &prefixesToKeep) { @@ -1038,10 +1146,10 @@ bool SyncJournalDb::postSyncCleanup(const QSet &filepathsToKeep, return false; } - QStringList superfluousItems; + QByteArrayList superfluousItems; while (query.next()) { - const QString file = query.stringValue(1); + const QString file = query.baValue(1); bool keep = filepathsToKeep.contains(file); if (!keep) { foreach (const QString &prefix, prefixesToKeep) { @@ -1052,12 +1160,12 @@ bool SyncJournalDb::postSyncCleanup(const QSet &filepathsToKeep, } } if (!keep) { - superfluousItems.append(query.stringValue(0)); + superfluousItems.append(query.baValue(0)); } } if (superfluousItems.count()) { - QString sql = "DELETE FROM metadata WHERE phash in (" + superfluousItems.join(",") + ")"; + QByteArray sql = "DELETE FROM metadata WHERE phash in (" + superfluousItems.join(",") + ")"; qCInfo(lcDb) << "Sync Journal cleanup for" << superfluousItems; SqlQuery delQuery(_db); delQuery.prepare(sql); @@ -1103,7 +1211,7 @@ bool SyncJournalDb::updateFileRecordChecksum(const QString &filename, qCInfo(lcDb) << "Updating file checksum" << filename << contentChecksum << contentChecksumType; - qlonglong phash = getPHash(filename); + qlonglong phash = getPHash(filename.toUtf8()); if (!checkConnect()) { qCWarning(lcDb) << "Failed to connect database."; return false; @@ -1132,7 +1240,7 @@ bool SyncJournalDb::updateLocalMetadata(const QString &filename, qCInfo(lcDb) << "Updating local metadata for:" << filename << modtime << size << inode; - qlonglong phash = getPHash(filename); + qlonglong phash = getPHash(filename.toUtf8()); if (!checkConnect()) { qCWarning(lcDb) << "Failed to connect database."; return false; @@ -1328,7 +1436,7 @@ SyncJournalDb::UploadInfo SyncJournalDb::getUploadInfo(const QString &file) res._transferid = _getUploadInfoQuery->intValue(1); res._errorCount = _getUploadInfoQuery->intValue(2); res._size = _getUploadInfoQuery->int64Value(3); - res._modtime = Utility::qDateTimeFromTime_t(_getUploadInfoQuery->int64Value(4)); + res._modtime = _getUploadInfoQuery->int64Value(4); res._valid = ok; } } @@ -1350,7 +1458,7 @@ void SyncJournalDb::setUploadInfo(const QString &file, const SyncJournalDb::Uplo _setUploadInfoQuery->bindValue(3, i._transferid); _setUploadInfoQuery->bindValue(4, i._errorCount); _setUploadInfoQuery->bindValue(5, i._size); - _setUploadInfoQuery->bindValue(6, Utility::qDateTimeToTime_t(i._modtime)); + _setUploadInfoQuery->bindValue(6, i._modtime); if (!_setUploadInfoQuery->exec()) { return; @@ -1539,11 +1647,11 @@ void SyncJournalDb::setErrorBlacklistEntry(const SyncJournalErrorBlacklistRecord _setErrorBlacklistQuery->reset_and_clear_bindings(); _setErrorBlacklistQuery->bindValue(1, item._file); _setErrorBlacklistQuery->bindValue(2, item._lastTryEtag); - _setErrorBlacklistQuery->bindValue(3, QString::number(item._lastTryModtime)); + _setErrorBlacklistQuery->bindValue(3, item._lastTryModtime); _setErrorBlacklistQuery->bindValue(4, item._retryCount); _setErrorBlacklistQuery->bindValue(5, item._errorString); - _setErrorBlacklistQuery->bindValue(6, QString::number(item._lastTryTime)); - _setErrorBlacklistQuery->bindValue(7, QString::number(item._ignoreDuration)); + _setErrorBlacklistQuery->bindValue(6, item._lastTryTime); + _setErrorBlacklistQuery->bindValue(7, item._ignoreDuration); _setErrorBlacklistQuery->bindValue(8, item._renameTarget); _setErrorBlacklistQuery->bindValue(9, item._errorCategory); _setErrorBlacklistQuery->exec(); @@ -1591,7 +1699,7 @@ void SyncJournalDb::setPollInfo(const SyncJournalDb::PollInfo &info) } else { SqlQuery query("INSERT OR REPLACE INTO poll (path, modtime, pollpath) VALUES( ? , ? , ? )", _db); query.bindValue(1, info._file); - query.bindValue(2, QString::number(info._modtime)); + query.bindValue(2, info._modtime); query.bindValue(3, info._url); query.exec(); } @@ -1651,7 +1759,7 @@ void SyncJournalDb::setSelectiveSyncList(SyncJournalDb::SelectiveSyncListType ty } } -void SyncJournalDb::avoidRenamesOnNextSync(const QString &path) +void SyncJournalDb::avoidRenamesOnNextSync(const QByteArray &path) { QMutexLocker locker(&_mutex); @@ -1671,7 +1779,7 @@ void SyncJournalDb::avoidRenamesOnNextSync(const QString &path) avoidReadFromDbOnNextSync(path); } -void SyncJournalDb::avoidReadFromDbOnNextSync(const QString &fileName) +void SyncJournalDb::avoidReadFromDbOnNextSync(const QByteArray &fileName) { // Make sure that on the next sync, fileName is not read from the DB but uses the PROPFIND to // get the info from the server @@ -1798,6 +1906,7 @@ void SyncJournalDb::setDataFingerprint(const QByteArray &dataFingerprint) void SyncJournalDb::clearFileTable() { + QMutexLocker lock(&_mutex); SqlQuery query(_db); query.prepare("DELETE FROM metadata;"); query.exec(); diff --git a/src/common/syncjournaldb.h b/src/common/syncjournaldb.h index 8ad2b0852..10324aba7 100644 --- a/src/common/syncjournaldb.h +++ b/src/common/syncjournaldb.h @@ -23,6 +23,7 @@ #include #include #include +#include #include "common/utility.h" #include "common/ownsql.h" @@ -54,7 +55,11 @@ public: static bool maybeMigrateDb(const QString &localPath, const QString &absoluteJournalPath); // To verify that the record could be found check with SyncJournalFileRecord::isValid() - bool getFileRecord(const QString &filename, SyncJournalFileRecord *rec); + bool getFileRecord(const QString &filename, SyncJournalFileRecord *rec) { return getFileRecord(filename.toUtf8(), rec); } + bool getFileRecord(const QByteArray &filename, SyncJournalFileRecord *rec); + bool getFileRecordByInode(quint64 inode, SyncJournalFileRecord *rec); + bool getFileRecordByFileId(const QByteArray &fileId, SyncJournalFileRecord *rec); + bool getFilesBelowPath(const QByteArray &path, const std::function &rowCallback); bool setFileRecord(const SyncJournalFileRecord &record); /// Like setFileRecord, but preserves checksums @@ -72,7 +77,7 @@ public: QString databaseFilePath() const; - static qint64 getPHash(const QString &); + static qint64 getPHash(const QByteArray &); void setErrorBlacklistEntry(const SyncJournalErrorBlacklistRecord &item); void wipeErrorBlacklistEntry(const QString &file); @@ -105,7 +110,7 @@ public: int _chunk; int _transferid; quint64 _size; //currently unused - QDateTime _modtime; + qint64 _modtime; int _errorCount; bool _valid; }; @@ -114,7 +119,7 @@ public: { QString _file; QString _url; - time_t _modtime; + qint64 _modtime; }; DownloadInfo getDownloadInfo(const QString &file); @@ -130,7 +135,8 @@ public: SyncJournalErrorBlacklistRecord errorBlacklistEntry(const QString &); bool deleteStaleErrorBlacklistEntries(const QSet &keep); - void avoidRenamesOnNextSync(const QString &path); + void avoidRenamesOnNextSync(const QString &path) { avoidRenamesOnNextSync(path.toUtf8()); } + void avoidRenamesOnNextSync(const QByteArray &path); void setPollInfo(const PollInfo &); QVector getPollInfos(); @@ -164,7 +170,8 @@ public: * _csync_detect_update skip them), the _invalid_ marker will stay and it. And any * child items in the db will be ignored when reading a remote tree from the database. */ - void avoidReadFromDbOnNextSync(const QString &fileName); + void avoidReadFromDbOnNextSync(const QString &fileName) { avoidReadFromDbOnNextSync(fileName.toUtf8()); } + void avoidReadFromDbOnNextSync(const QByteArray &fileName); /** * Ensures full remote discovery happens on the next sync. @@ -233,6 +240,9 @@ private: // NOTE! when adding a query, don't forget to reset it in SyncJournalDb::close QScopedPointer _getFileRecordQuery; + QScopedPointer _getFileRecordQueryByInode; + QScopedPointer _getFileRecordQueryByFileId; + QScopedPointer _getFilesBelowPathQuery; QScopedPointer _setFileRecordQuery; QScopedPointer _setFileRecordChecksumQuery; QScopedPointer _setFileRecordLocalMetadataQuery; @@ -258,7 +268,7 @@ private: * It means that they should not be written to the DB in any case since doing * that would write the etag and would void the purpose of avoidReadFromDbOnNextSync */ - QList _avoidReadFromDbOnNextSyncFilter; + QList _avoidReadFromDbOnNextSyncFilter; /** The journal mode to use for the db. * diff --git a/src/common/syncjournalfilerecord.cpp b/src/common/syncjournalfilerecord.cpp index c6a77b997..226c25d6c 100644 --- a/src/common/syncjournalfilerecord.cpp +++ b/src/common/syncjournalfilerecord.cpp @@ -52,7 +52,7 @@ bool operator==(const SyncJournalFileRecord &lhs, { return lhs._path == rhs._path && lhs._inode == rhs._inode - && lhs._modtime.toTime_t() == rhs._modtime.toTime_t() + && lhs._modtime == rhs._modtime && lhs._type == rhs._type && lhs._etag == rhs._etag && lhs._fileId == rhs._fileId diff --git a/src/common/syncjournalfilerecord.h b/src/common/syncjournalfilerecord.h index c6008713e..bc34ef135 100644 --- a/src/common/syncjournalfilerecord.h +++ b/src/common/syncjournalfilerecord.h @@ -24,6 +24,7 @@ #include "ocsynclib.h" #include "remotepermissions.h" +#include "common/utility.h" namespace OCC { @@ -50,10 +51,11 @@ public: * It is used in the construction of private links. */ QByteArray numericFileId() const; + QDateTime modDateTime() const { return Utility::qDateTimeFromTime_t(_modtime); } - QString _path; + QByteArray _path; quint64 _inode; - QDateTime _modtime; + qint64 _modtime; int _type; QByteArray _etag; QByteArray _fileId; @@ -94,14 +96,14 @@ public: /// The error category. Sometimes used for special actions. Category _errorCategory; - time_t _lastTryModtime; + qint64 _lastTryModtime; QByteArray _lastTryEtag; /// The last time the operation was attempted (in s since epoch). - time_t _lastTryTime; + qint64 _lastTryTime; /// The number of seconds the file shall be ignored. - time_t _ignoreDuration; + qint64 _ignoreDuration; QString _file; QString _renameTarget; diff --git a/src/csync/CMakeLists.txt b/src/csync/CMakeLists.txt index acb1cc7c2..701405431 100644 --- a/src/csync/CMakeLists.txt +++ b/src/csync/CMakeLists.txt @@ -67,7 +67,6 @@ set(csync_SRCS csync.cpp csync_exclude.cpp csync_log.cpp - csync_statedb.cpp csync_time.c csync_util.cpp csync_misc.cpp diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index 6c36637b8..d2838884a 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -36,7 +36,6 @@ #include "c_lib.h" #include "csync_private.h" #include "csync_exclude.h" -#include "csync_statedb.h" #include "csync_time.h" #include "csync_util.h" #include "csync_misc.h" @@ -52,7 +51,9 @@ #include "common/c_jhash.h" -csync_s::csync_s(const char *localUri, const char *db_file) { +csync_s::csync_s(const char *localUri, OCC::SyncJournalDb *statedb) + : statedb(statedb) +{ size_t len = 0; /* remove trailing slashes */ @@ -60,8 +61,6 @@ csync_s::csync_s(const char *localUri, const char *db_file) { while(len > 0 && localUri[len - 1] == '/') --len; local.uri = c_strndup(localUri, len); - - statedb.file = c_strdup(db_file); } int csync_update(CSYNC *ctx) { @@ -74,12 +73,6 @@ int csync_update(CSYNC *ctx) { } ctx->status_code = CSYNC_STATUS_OK; - /* Path of database file is set in csync_init */ - if (csync_statedb_load(ctx, ctx->statedb.file, &ctx->statedb.db) < 0) { - rc = -1; - return rc; - } - ctx->status_code = CSYNC_STATUS_OK; csync_memstat_check(); @@ -97,7 +90,7 @@ int csync_update(CSYNC *ctx) { if(ctx->status_code == CSYNC_STATUS_OK) { ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_UPDATE_ERROR); } - goto out; + return rc; } csync_gettime(&finish); @@ -116,7 +109,7 @@ int csync_update(CSYNC *ctx) { if(ctx->status_code == CSYNC_STATUS_OK) { ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_UPDATE_ERROR); } - goto out; + return rc; } csync_gettime(&finish); @@ -130,9 +123,6 @@ int csync_update(CSYNC *ctx) { ctx->status |= CSYNC_STATUS_UPDATE; rc = 0; - -out: - csync_statedb_close(ctx); return rc; } @@ -149,11 +139,6 @@ int csync_reconcile(CSYNC *ctx) { /* Reconciliation for local replica */ csync_gettime(&start); - if (csync_statedb_load(ctx, ctx->statedb.file, &ctx->statedb.db) < 0) { - rc = -1; - return rc; - } - ctx->current = LOCAL_REPLICA; rc = csync_reconcile_updates(ctx); @@ -168,7 +153,7 @@ int csync_reconcile(CSYNC *ctx) { if (!CSYNC_STATUS_IS_OK(ctx->status_code)) { ctx->status_code = csync_errno_to_status( errno, CSYNC_STATUS_RECONCILE_ERROR ); } - goto out; + return rc; } /* Reconciliation for remote replica */ @@ -188,16 +173,13 @@ int csync_reconcile(CSYNC *ctx) { if (!CSYNC_STATUS_IS_OK(ctx->status_code)) { ctx->status_code = csync_errno_to_status(errno, CSYNC_STATUS_RECONCILE_ERROR ); } - goto out; + return rc; } ctx->status |= CSYNC_STATUS_RECONCILE; rc = 0; - -out: - csync_statedb_close(ctx); - return 0; + return rc; } /* @@ -326,13 +308,6 @@ int csync_s::reinitialize() { status_code = CSYNC_STATUS_OK; - if (statedb.db != NULL - && csync_statedb_close(this) < 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "ERR: closing of statedb failed."); - rc = -1; - } - statedb.db = NULL; - remote.read_from_db = 0; read_remote_from_db = true; db_is_empty = false; @@ -348,13 +323,6 @@ int csync_s::reinitialize() { } csync_s::~csync_s() { - if (statedb.db != NULL - && csync_statedb_close(this) < 0) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "ERR: closing of statedb failed."); - } - statedb.db = NULL; - - SAFE_FREE(statedb.file); SAFE_FREE(local.uri); SAFE_FREE(error_string); } diff --git a/src/csync/csync.h b/src/csync/csync.h index ef2d3bada..4dfa989f1 100644 --- a/src/csync/csync.h +++ b/src/csync/csync.h @@ -34,6 +34,8 @@ #include "std/c_private.h" #include "ocsynclib.h" +#include "common/syncjournalfilerecord.h" + #include #include #include @@ -200,6 +202,22 @@ struct OCSYNC_EXPORT csync_file_stat_s { , error_status(CSYNC_STATUS_OK) , instruction(CSYNC_INSTRUCTION_NONE) { } + + static std::unique_ptr fromSyncJournalFileRecord(const OCC::SyncJournalFileRecord &rec) + { + std::unique_ptr st(new csync_file_stat_t); + st->path = rec._path; + st->inode = rec._inode; + st->modtime = rec._modtime; + st->type = static_cast(rec._type); + st->etag = rec._etag; + st->file_id = rec._fileId; + st->remotePerm = rec._remotePerm; + st->size = rec._fileSize; + st->has_ignored_files = rec._serverHasIgnoredFiles; + st->checksumHeader = rec._checksumHeader; + return st; + } }; /** diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index f3398f7a7..c898eeabe 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -39,6 +39,7 @@ #include #include +#include "common/syncjournaldb.h" #include "config_csync.h" #include "std/c_lib.h" #include "std/c_private.h" @@ -103,17 +104,7 @@ struct OCSYNC_EXPORT csync_s { } callbacks; c_strlist_t *excludes = nullptr; - struct { - char *file = nullptr; - sqlite3 *db = nullptr; - bool exists = false; - - sqlite3_stmt* by_hash_stmt = nullptr; - sqlite3_stmt* by_fileid_stmt = nullptr; - sqlite3_stmt* by_inode_stmt = nullptr; - - int lastReturnValue; - } statedb; + OCC::SyncJournalDb *statedb; struct { std::map folder_renamed_to; // map from->to @@ -159,7 +150,7 @@ struct OCSYNC_EXPORT csync_s { bool ignore_hidden_files = true; - csync_s(const char *localUri, const char *db_file); + csync_s(const char *localUri, OCC::SyncJournalDb *statedb); ~csync_s(); int reinitialize(); diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 76fd08408..2fdaa7f38 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -24,7 +24,6 @@ #include "csync_private.h" #include "csync_reconcile.h" #include "csync_util.h" -#include "csync_statedb.h" #include "csync_rename.h" #include "common/c_jhash.h" #include "common/asserts.h" @@ -104,8 +103,6 @@ static bool _csync_is_collision_safe_hash(const char *checksum_header) * source and the destination, have been changed, the newer file wins. */ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { - std::unique_ptr tmp; - csync_s::FileMap *other_tree = nullptr; /* we need the opposite tree! */ @@ -153,35 +150,34 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { } cur->instruction = CSYNC_INSTRUCTION_REMOVE; break; - case CSYNC_INSTRUCTION_EVAL_RENAME: + case CSYNC_INSTRUCTION_EVAL_RENAME: { + OCC::SyncJournalFileRecord base; if(ctx->current == LOCAL_REPLICA ) { /* use the old name to find the "other" node */ - tmp = csync_statedb_get_stat_by_inode(ctx, cur->inode); + ctx->statedb->getFileRecordByInode(cur->inode, &base); qCDebug(lcReconcile, "Finding opposite temp through inode %" PRIu64 ": %s", - cur->inode, tmp ? "true":"false"); + cur->inode, base.isValid() ? "true":"false"); } else { ASSERT( ctx->current == REMOTE_REPLICA ); - tmp = csync_statedb_get_stat_by_file_id(ctx, cur->file_id); + ctx->statedb->getFileRecordByFileId(cur->file_id, &base); qCDebug(lcReconcile, "Finding opposite temp through file ID %s: %s", - cur->file_id.constData(), tmp ? "true":"false"); + cur->file_id.constData(), base.isValid() ? "true":"false"); } - if( tmp ) { - if( !tmp->path.isEmpty() ) { - /* First, check that the file is NOT in our tree (another file with the same name was added) */ - csync_s::FileMap *our_tree = ctx->current == REMOTE_REPLICA ? &ctx->remote.files : &ctx->local.files; - if (our_tree->findFile(tmp->path)) { - qCDebug(lcReconcile, "Origin found in our tree : %s", tmp->path.constData()); - } else { + if( base.isValid() ) { + /* First, check that the file is NOT in our tree (another file with the same name was added) */ + csync_s::FileMap *our_tree = ctx->current == REMOTE_REPLICA ? &ctx->remote.files : &ctx->local.files; + if (our_tree->findFile(base._path)) { + qCDebug(lcReconcile, "Origin found in our tree : %s", base._path.constData()); + } else { /* Find the temporar file in the other tree. * If the renamed file could not be found in the opposite tree, that is because it * is not longer existing there, maybe because it was renamed or deleted. * The journal is cleaned up later after propagation. */ - other = other_tree->findFile(tmp->path); + other = other_tree->findFile(base._path); qCDebug(lcReconcile, "Temporary opposite (%s) %s", - tmp->path.constData() , other ? "found": "not found" ); - } + base._path.constData() , other ? "found": "not found" ); } if(!other) { @@ -213,9 +209,9 @@ static int _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) { cur->instruction = CSYNC_INSTRUCTION_NONE; other->instruction = CSYNC_INSTRUCTION_SYNC; } - } - + } break; + } default: break; } diff --git a/src/csync/csync_statedb.cpp b/src/csync/csync_statedb.cpp deleted file mode 100644 index b489b6789..000000000 --- a/src/csync/csync_statedb.cpp +++ /dev/null @@ -1,627 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * Copyright (c) 2012-2013 by Klaas Freitag - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include "config_csync.h" - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include -#include -#include -#include -#include -#include -#include - -#include "c_lib.h" -#include "csync_private.h" -#include "csync_statedb.h" -#include "csync_util.h" -#include "csync_misc.h" -#include "csync_exclude.h" - -#include "c_string.h" -#include "common/c_jhash.h" -#include "c_utf8.h" -#include "csync_time.h" - -#define CSYNC_LOG_CATEGORY_NAME "csync.statedb" -#include "csync_log.h" -#include "csync_rename.h" - -// Needed for PRIu64 on MinGW in C++ mode. -#define __STDC_FORMAT_MACROS -#include - -#define BUF_SIZE 16 - -#define sqlite_open(A, B) sqlite3_open_v2(A,B, SQLITE_OPEN_READONLY+SQLITE_OPEN_NOMUTEX, NULL) - -#define SQLTM_TIME 150 -#define SQLTM_COUNT 10 - -#define SQLITE_BUSY_HANDLED(F) if(1) { \ - int n = 0; \ - do { rc = F ; \ - if( (rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED) ) { \ - n++; \ - csync_sleep(SQLTM_TIME); \ - } \ - }while( (n < SQLTM_COUNT) && ((rc == SQLITE_BUSY) || (rc == SQLITE_LOCKED))); \ - } - - -void csync_set_statedb_exists(CSYNC *ctx, int val) { - ctx->statedb.exists = val; -} - -int csync_get_statedb_exists(CSYNC *ctx) { - return ctx->statedb.exists; -} - -static int _csync_check_db_integrity(sqlite3 *db) { - c_strlist_t *result = NULL; - int rc = -1; - - result = csync_statedb_query(db, "PRAGMA quick_check;"); - if (result != NULL) { - /* There is a result */ - if (result->count > 0) { - if (c_streq(result->vector[0], "ok")) { - rc = 0; - } - } - c_strlist_destroy(result); - } - - if( sqlite3_threadsafe() == 0 ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "* WARNING: SQLite module is not threadsafe!"); - rc = -1; - } - - return rc; -} - -static int _csync_statedb_is_empty(sqlite3 *db) { - c_strlist_t *result = NULL; - int rc = 0; - - result = csync_statedb_query(db, "SELECT COUNT(phash) FROM metadata LIMIT 1 OFFSET 0;"); - if (result == NULL) { - rc = 1; - } - c_strlist_destroy(result); - - return rc; -} - -#ifndef NDEBUG -static void sqlite_profile( void *x, const char* sql, sqlite3_uint64 time) -{ - (void)x; - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, - "_SQL_ %s: %llu", sql, time); - -} -#endif - -int csync_statedb_load(CSYNC *ctx, const char *statedb, sqlite3 **pdb) { - int rc = -1; - c_strlist_t *result = NULL; - sqlite3 *db = NULL; - - if( !ctx ) { - return -1; - } - - if (ctx->statedb.db) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_NOTICE, "ERR: DB already open"); - ctx->status_code = CSYNC_STATUS_PARAM_ERROR; - return -1; - } - - ctx->statedb.lastReturnValue = SQLITE_OK; - - /* Openthe database */ - if (sqlite_open(statedb, &db) != SQLITE_OK) { - const char *errmsg= sqlite3_errmsg(ctx->statedb.db); - CSYNC_LOG(CSYNC_LOG_PRIORITY_NOTICE, "ERR: Failed to sqlite3 open statedb - bail out: %s.", - errmsg ? errmsg : ""); - - rc = -1; - ctx->status_code = CSYNC_STATUS_STATEDB_LOAD_ERROR; - goto out; - } - - if (_csync_check_db_integrity(db) != 0) { - const char *errmsg= sqlite3_errmsg(db); - CSYNC_LOG(CSYNC_LOG_PRIORITY_NOTICE, "ERR: sqlite3 integrity check failed - bail out: %s.", - errmsg ? errmsg : ""); - rc = -1; - ctx->status_code = CSYNC_STATUS_STATEDB_CORRUPTED; - goto out; - } - - if (_csync_statedb_is_empty(db)) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_NOTICE, "statedb contents doesn't exist"); - csync_set_statedb_exists(ctx, 0); - } else { - csync_set_statedb_exists(ctx, 1); - } - - /* Print out the version */ - // - result = csync_statedb_query(db, "SELECT sqlite_version();"); - if (result && result->count >= 1) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "sqlite3 version \"%s\"", *result->vector); - } - c_strlist_destroy(result); - - /* optimization for speeding up SQLite */ - result = csync_statedb_query(db, "PRAGMA synchronous = NORMAL;"); - c_strlist_destroy(result); - result = csync_statedb_query(db, "PRAGMA case_sensitive_like = ON;"); - c_strlist_destroy(result); - - /* set a busy handler with 5 seconds timeout */ - sqlite3_busy_timeout(db, 5000); - -#ifndef NDEBUG - sqlite3_profile(db, sqlite_profile, 0 ); -#endif - *pdb = db; - - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Success"); - - return 0; -out: - sqlite3_close(db); - return rc; -} - -int csync_statedb_close(CSYNC *ctx) { - int rc = 0; - - if (!ctx) { - return -1; - } - - /* deallocate query resources */ - if( ctx->statedb.by_fileid_stmt ) { - sqlite3_finalize(ctx->statedb.by_fileid_stmt); - ctx->statedb.by_fileid_stmt = NULL; - } - if( ctx->statedb.by_hash_stmt ) { - sqlite3_finalize(ctx->statedb.by_hash_stmt); - ctx->statedb.by_hash_stmt = NULL; - } - if( ctx->statedb.by_inode_stmt) { - sqlite3_finalize(ctx->statedb.by_inode_stmt); - ctx->statedb.by_inode_stmt = NULL; - } - - ctx->statedb.lastReturnValue = SQLITE_OK; - - int sr = sqlite3_close(ctx->statedb.db); - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "sqlite3_close=%d", sr); - - ctx->statedb.db = 0; - - return rc; -} - -#define METADATA_QUERY \ - "path, inode, modtime, type, md5, fileid, remotePerm, " \ - "filesize, ignoredChildrenRemote, " \ - "contentchecksumtype.name || ':' || contentChecksum " \ - "FROM metadata " \ - "LEFT JOIN checksumtype as contentchecksumtype ON metadata.contentChecksumTypeId == contentchecksumtype.id" - -// This funciton parses a line from the metadata table into the given csync_file_stat -// structure which it is also allocating. -// Note that this function calls laso sqlite3_step to actually get the info from db and -// returns the sqlite return type. -static int _csync_file_stat_from_metadata_table( std::unique_ptr &st, sqlite3_stmt *stmt ) -{ - int rc = SQLITE_ERROR; - - if( ! stmt ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Fatal: Statement is NULL."); - return SQLITE_ERROR; - } - - // Callers should all use METADATA_QUERY for their column list. - assert(sqlite3_column_count(stmt) == 10); - - SQLITE_BUSY_HANDLED( sqlite3_step(stmt) ); - - if( rc == SQLITE_ROW ) { - st.reset(new csync_file_stat_t); - - st->path = (char*)sqlite3_column_text(stmt, 0); - st->inode = sqlite3_column_int64(stmt, 1); - st->modtime = strtoul((char*)sqlite3_column_text(stmt, 2), NULL, 10); - st->type = static_cast(sqlite3_column_int(stmt, 3)); - st->etag = (char*)sqlite3_column_text(stmt, 4); - st->file_id = (char*)sqlite3_column_text(stmt, 5); - const char *permStr = (char *)sqlite3_column_text(stmt, 6); - // If permStr is empty, construct a null RemotePermissions. We make sure that non-null - // permissions are never empty in RemotePermissions.toString() - st->remotePerm = permStr && *permStr ? OCC::RemotePermissions(permStr) : OCC::RemotePermissions(); - st->size = sqlite3_column_int64(stmt, 7); - st->has_ignored_files = sqlite3_column_int(stmt, 8); - st->checksumHeader = (char *)sqlite3_column_text(stmt, 9); - } else { - if( rc != SQLITE_DONE ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, "Query results in %d", rc); - } - } - return rc; -} - -/* caller must free the memory */ -std::unique_ptr csync_statedb_get_stat_by_path(CSYNC *ctx, const QByteArray &path) -{ - std::unique_ptr st; - int rc; - - if( !ctx || ctx->db_is_empty ) { - return NULL; - } - - if( ctx->statedb.by_hash_stmt == NULL ) { - const char *hash_query = "SELECT " METADATA_QUERY " WHERE phash=?1"; - - SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, hash_query, strlen(hash_query), &ctx->statedb.by_hash_stmt, NULL)); - ctx->statedb.lastReturnValue = rc; - if( rc != SQLITE_OK ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Unable to create stmt for hash query."); - return NULL; - } - } - - if( ctx->statedb.by_hash_stmt == NULL ) { - return NULL; - } - - uint64_t phash = c_jhash64((const uint8_t*)path.constData(), path.size(), 0); - sqlite3_bind_int64(ctx->statedb.by_hash_stmt, 1, (long long signed int)phash); - - rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_hash_stmt); - ctx->statedb.lastReturnValue = rc; - if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata: %d!", rc); - } - sqlite3_reset(ctx->statedb.by_hash_stmt); - - return st; -} - -std::unique_ptr csync_statedb_get_stat_by_file_id(CSYNC *ctx, - const char *file_id ) { - std::unique_ptr st; - int rc = 0; - - if (!file_id) { - return 0; - } - if (c_streq(file_id, "")) { - return 0; - } - - if( !ctx || ctx->db_is_empty ) { - return NULL; - } - - if( ctx->statedb.by_fileid_stmt == NULL ) { - const char *query = "SELECT " METADATA_QUERY " WHERE fileid=?1"; - - SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, query, strlen(query), &ctx->statedb.by_fileid_stmt, NULL)); - ctx->statedb.lastReturnValue = rc; - if( rc != SQLITE_OK ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Unable to create stmt for file id query."); - return NULL; - } - } - - /* bind the query value */ - sqlite3_bind_text(ctx->statedb.by_fileid_stmt, 1, file_id, -1, SQLITE_STATIC); - - rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_fileid_stmt); - ctx->statedb.lastReturnValue = rc; - if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata: %d!", rc); - } - // clear the resources used by the statement. - sqlite3_reset(ctx->statedb.by_fileid_stmt); - - return st; -} - -/* caller must free the memory */ -std::unique_ptr csync_statedb_get_stat_by_inode(CSYNC *ctx, - uint64_t inode) -{ - std::unique_ptr st; - int rc; - - if (!inode) { - return NULL; - } - - if( !ctx || ctx->db_is_empty ) { - return NULL; - } - - if( ctx->statedb.by_inode_stmt == NULL ) { - const char *inode_query = "SELECT " METADATA_QUERY " WHERE inode=?1"; - - SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, inode_query, strlen(inode_query), &ctx->statedb.by_inode_stmt, NULL)); - ctx->statedb.lastReturnValue = rc; - if( rc != SQLITE_OK ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Unable to create stmt for inode query."); - return NULL; - } - } - - if( ctx->statedb.by_inode_stmt == NULL ) { - return NULL; - } - - sqlite3_bind_int64(ctx->statedb.by_inode_stmt, 1, (long long signed int)inode); - - rc = _csync_file_stat_from_metadata_table(st, ctx->statedb.by_inode_stmt); - ctx->statedb.lastReturnValue = rc; - if( !(rc == SQLITE_ROW || rc == SQLITE_DONE) ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Could not get line from metadata by inode: %d!", rc); - } - sqlite3_reset(ctx->statedb.by_inode_stmt); - - return st; -} - -int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) { - int rc; - sqlite3_stmt *stmt = NULL; - int64_t cnt = 0; - - if( !path ) { - return -1; - } - - if( !ctx || ctx->db_is_empty ) { - return -1; - } - - /* Select the entries for anything that starts with (path+'/') - * In other words, anything that is between path+'/' and path+'0', - * (because '0' follows '/' in ascii) - */ - const char *below_path_query = "SELECT " METADATA_QUERY " WHERE path > (?||'/') AND path < (?||'0') ORDER BY path||'/' ASC"; - SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, below_path_query, -1, &stmt, NULL)); - ctx->statedb.lastReturnValue = rc; - if( rc != SQLITE_OK ) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Unable to create stmt for below path query."); - return -1; - } - - if (stmt == NULL) { - return -1; - } - - sqlite3_bind_text(stmt, 1, path, -1, SQLITE_STATIC); - sqlite3_bind_text(stmt, 2, path, -1, SQLITE_STATIC); - - cnt = 0; - - ctx->statedb.lastReturnValue = rc; - do { - std::unique_ptr st; - - rc = _csync_file_stat_from_metadata_table(st, stmt); - if( st ) { - /* When selective sync is used, the database may have subtrees with a parent - * whose etag (md5) is _invalid_. These are ignored and shall not appear in the - * remote tree. - * Sometimes folders that are not ignored by selective sync get marked as - * _invalid_, but that is not a problem as the next discovery will retrieve - * their correct etags again and we don't run into this case. - */ - if( st->etag == "_invalid_") { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded", st->path.constData()); - QByteArray skipbase = st->path; - skipbase += '/'; - - /* Skip over all entries with the same base path. Note that this depends - * strongly on the ordering of the retrieved items. */ - do { - st.reset(); - rc = _csync_file_stat_from_metadata_table(st, stmt); - if( st ) { - if( !st->path.startsWith(skipbase) ) - break; - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s selective sync excluded because the parent is", st->path.constData()); - } - } while( rc == SQLITE_ROW ); - - /* End of data? */ - if( rc != SQLITE_ROW || !st ) { - continue; - } - } - - /* Check for exclusion from the tree. - * Note that this is only a safety net in case the ignore list changes - * without a full remote discovery being triggered. */ - CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type); - if (excluded != CSYNC_NOT_EXCLUDED) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "%s excluded (%d)", st->path.constData(), excluded); - - if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE - || excluded == CSYNC_FILE_SILENTLY_EXCLUDED) { - st.reset(); - continue; - } - - st->instruction = CSYNC_INSTRUCTION_IGNORE; - } - - /* store into result list. */ - QByteArray path = st->path; - ctx->remote.files[path] = std::move(st); - cnt++; - } - } while( rc == SQLITE_ROW ); - - ctx->statedb.lastReturnValue = rc; - if( rc != SQLITE_DONE ) { - ctx->status_code = CSYNC_STATUS_STATEDB_LOAD_ERROR; - } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "%" PRId64 " entries read below path %s from db.", cnt, path); - } - sqlite3_finalize(stmt); - - return 0; -} - -/* query the statedb, caller must free the memory */ -c_strlist_t *csync_statedb_query(sqlite3 *db, - const char *statement) { - int err = SQLITE_OK; - int rc = SQLITE_OK; - size_t i = 0; - size_t busy_count = 0; - size_t retry_count = 0; - size_t column_count = 0; - sqlite3_stmt *stmt; - const char *tail = NULL; - const char *field = NULL; - c_strlist_t *result = NULL; - int row = 0; - - do { - /* compile SQL program into a virtual machine, reattempteing if busy */ - do { - if (busy_count) { - csync_sleep(100); - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "sqlite3_prepare: BUSY counter: %zu", busy_count); - } - err = sqlite3_prepare(db, statement, -1, &stmt, &tail); - } while (err == SQLITE_BUSY && busy_count ++ < 120); - - if (err != SQLITE_OK) { - if (err == SQLITE_BUSY) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Gave up waiting for lock to clear"); - } - CSYNC_LOG(CSYNC_LOG_PRIORITY_WARN, - "sqlite3_compile error: %s - on query %s", - sqlite3_errmsg(db), statement); - break; - } else { - busy_count = 0; - column_count = sqlite3_column_count(stmt); - - /* execute virtual machine by iterating over rows */ - for(;;) { - err = sqlite3_step(stmt); - - if (err == SQLITE_BUSY) { - if (busy_count++ > 120) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Busy counter has reached its maximum. Aborting this sql statement"); - break; - } - csync_sleep(100); - CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "sqlite3_step: BUSY counter: %zu", busy_count); - continue; - } - - if (err == SQLITE_MISUSE) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "sqlite3_step: MISUSE!!"); - } - - if (err == SQLITE_DONE) { - if (result == NULL) { - result = c_strlist_new(1); - } - break; - } - - if (err == SQLITE_ERROR) { - break; - } - - row++; - if( result ) { - result = c_strlist_expand(result, row*column_count); - } else { - result = c_strlist_new(column_count); - } - - if (result == NULL) { - return NULL; - } - - /* iterate over columns */ - for (i = 0; i < column_count; i++) { - field = (const char *) sqlite3_column_text(stmt, i); - if (!field) - field = ""; - // CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "sqlite3_column_text: %s", field); - if (c_strlist_add(result, field) < 0) { - c_strlist_destroy(result); - return NULL; - } - } - } /* end infinite for loop */ - - /* deallocate vm resources */ - rc = sqlite3_finalize(stmt); - - if (err != SQLITE_DONE && rc != SQLITE_SCHEMA) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "sqlite_step error: %s - on query: %s", sqlite3_errmsg(db), statement); - if (result != NULL) { - c_strlist_destroy(result); - } - return NULL; - } - - if (rc == SQLITE_SCHEMA) { - retry_count ++; - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "SQLITE_SCHEMA error occurred on query: %s", statement); - if (retry_count < 10) { - CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Retrying now."); - } else { - CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "RETRY count has reached its maximum. Aborting statement: %s", statement); - if (result != NULL) { - c_strlist_destroy(result); - } - result = c_strlist_new(1); - } - } - } - } while (rc == SQLITE_SCHEMA && retry_count < 10); - - return result; -} - -/* vim: set ts=8 sw=2 et cindent: */ diff --git a/src/csync/csync_statedb.h b/src/csync/csync_statedb.h deleted file mode 100644 index 28c1cc823..000000000 --- a/src/csync/csync_statedb.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * Copyright (c) 2012-2013 by Klaas Freitag - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file csync_private.h - * - * @brief Private interface of csync - * - * @defgroup csyncstatedbInternals csync statedb internals - * @ingroup csyncInternalAPI - * - * @{ - */ - -#ifndef _CSYNC_STATEDB_H -#define _CSYNC_STATEDB_H - -#include "c_lib.h" -#include "csync_private.h" - -void csync_set_statedb_exists(CSYNC *ctx, int val); - -int csync_get_statedb_exists(CSYNC *ctx); - -/** - * @brief Load the statedb. - * - * This function tries to load the statedb. If it doesn't exists it creates - * the sqlite3 database, but doesn't create the tables. This will be done when - * csync gets destroyed. - * - * @param ctx The csync context. - * @param statedb Path to the statedb file (sqlite3 db). - * - * @return 0 on success, less than 0 if an error occurred with errno set. - */ -OCSYNC_EXPORT int csync_statedb_load(CSYNC *ctx, const char *statedb, sqlite3 **pdb); - -OCSYNC_EXPORT int csync_statedb_close(CSYNC *ctx); - -OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_path(CSYNC *ctx, const QByteArray &path); - -OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_inode(CSYNC *ctx, uint64_t inode); - -OCSYNC_EXPORT std::unique_ptr csync_statedb_get_stat_by_file_id(CSYNC *ctx, const char *file_id); - -/** - * @brief Query all files metadata inside and below a path. - * @param ctx The csync context. - * @param path The path. - * - * This function queries all metadata of all files inside or below the - * given path. The result is a linear string list with a multiple of 9 - * entries. For each result file there are 9 strings which are phash, - * path, inode, uid, gid, mode, modtime, type and md5 (unique id). - * - * Note that not only the files in the given path are part of the result - * but also the files in directories below the given path. Ie. if the - * parameter path is /home/kf/test, we have /home/kf/test/file.txt in - * the result but also /home/kf/test/homework/another_file.txt - * - * @return A stringlist containing a multiple of 9 entries. - */ -int csync_statedb_get_below_path(CSYNC *ctx, const char *path); - -/** - * @brief A generic statedb query. - * - * @param ctx The csync context. - * @param statement The SQL statement to execute - * - * @return A stringlist of the entries of a column. An emtpy stringlist if - * nothing has been found. NULL on error. - */ -c_strlist_t *csync_statedb_query(sqlite3 *db, const char *statement); - -/** - * }@ - */ -#endif /* _CSYNC_STATEDB_H */ -/* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */ diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index c42eaa928..8f88c324b 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -35,7 +35,6 @@ #include "csync_private.h" #include "csync_exclude.h" -#include "csync_statedb.h" #include "csync_update.h" #include "csync_util.h" #include "csync_misc.h" @@ -74,10 +73,6 @@ static bool _csync_sameextension(const char *p1, const char *p2) { } #endif -static bool _last_db_return_error(CSYNC* ctx) { - return ctx->statedb.lastReturnValue != SQLITE_OK && ctx->statedb.lastReturnValue != SQLITE_DONE && ctx->statedb.lastReturnValue != SQLITE_ROW; -} - static QByteArray _rel_to_abs(CSYNC* ctx, const QByteArray &relativePath) { return QByteArray() % const_cast(ctx->local.uri) % '/' % relativePath; } @@ -111,7 +106,7 @@ static bool _csync_mtime_equal(time_t a, time_t b) * See doc/dev/sync-algorithm.md for an overview. */ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr fs) { - std::unique_ptr tmp; + OCC::SyncJournalFileRecord base; CSYNC_EXCLUDE_TYPE excluded; if (fs == NULL) { @@ -173,48 +168,46 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * renamed, the db gets queried by the inode of the file as that one * does not change on rename. */ - tmp = csync_statedb_get_stat_by_path(ctx, fs->path); - - if(_last_db_return_error(ctx)) { + if(!ctx->statedb->getFileRecord(fs->path, &base)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } - if(tmp && tmp->path == fs->path ) { /* there is an entry in the database */ + if(base.isValid()) { /* there is an entry in the database */ /* we have an update! */ qCInfo(lcUpdate, "Database entry found, compare: %" PRId64 " <-> %" PRId64 ", etag: %s <-> %s, inode: %" PRId64 " <-> %" PRId64 ", size: %" PRId64 " <-> %" PRId64 ", perms: %x <-> %x, ignore: %d", - ((int64_t) fs->modtime), ((int64_t) tmp->modtime), - fs->etag.constData(), tmp->etag.constData(), (uint64_t) fs->inode, (uint64_t) tmp->inode, - (uint64_t) fs->size, (uint64_t) tmp->size, *reinterpret_cast(&fs->remotePerm), *reinterpret_cast(&tmp->remotePerm), tmp->has_ignored_files ); - if (ctx->current == REMOTE_REPLICA && fs->etag != tmp->etag) { + ((int64_t) fs->modtime), ((int64_t) base._modtime), + fs->etag.constData(), base._etag.constData(), (uint64_t) fs->inode, (uint64_t) base._inode, + (uint64_t) fs->size, (uint64_t) base._fileSize, *reinterpret_cast(&fs->remotePerm), *reinterpret_cast(&base._remotePerm), base._serverHasIgnoredFiles ); + if (ctx->current == REMOTE_REPLICA && fs->etag != base._etag) { fs->instruction = CSYNC_INSTRUCTION_EVAL; // Preserve the EVAL flag later on if the type has changed. - if (tmp->type != fs->type) { + if (base._type != fs->type) { fs->child_modified = true; } goto out; } if (ctx->current == LOCAL_REPLICA && - (!_csync_mtime_equal(fs->modtime, tmp->modtime) + (!_csync_mtime_equal(fs->modtime, base._modtime) // zero size in statedb can happen during migration - || (tmp->size != 0 && fs->size != tmp->size))) { + || (base._fileSize != 0 && fs->size != base._fileSize))) { // Checksum comparison at this stage is only enabled for .eml files, // check #4754 #4755 bool isEmlFile = csync_fnmatch("*.eml", fs->path, FNM_CASEFOLD) == 0; - if (isEmlFile && fs->size == tmp->size && !tmp->checksumHeader.isEmpty()) { + if (isEmlFile && fs->size == base._fileSize && !base._checksumHeader.isEmpty()) { if (ctx->callbacks.checksum_hook) { fs->checksumHeader = ctx->callbacks.checksum_hook( - _rel_to_abs(ctx, fs->path), tmp->checksumHeader, + _rel_to_abs(ctx, fs->path), base._checksumHeader, ctx->callbacks.checksum_userdata); } bool checksumIdentical = false; if (!fs->checksumHeader.isEmpty()) { - checksumIdentical = fs->checksumHeader == tmp->checksumHeader; + checksumIdentical = fs->checksumHeader == base._checksumHeader; } if (checksumIdentical) { qCDebug(lcUpdate, "NOTE: Checksums are identical, file did not actually change: %s", fs->path.constData()); @@ -224,16 +217,16 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f } // Preserve the EVAL flag later on if the type has changed. - if (tmp->type != fs->type) { + if (base._type != fs->type) { fs->child_modified = true; } fs->instruction = CSYNC_INSTRUCTION_EVAL; goto out; } - bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != tmp->file_id - || fs->remotePerm != tmp->remotePerm)) - || (ctx->current == LOCAL_REPLICA && fs->inode != tmp->inode); + bool metadata_differ = (ctx->current == REMOTE_REPLICA && (fs->file_id != base._fileId + || fs->remotePerm != base._remotePerm)) + || (ctx->current == LOCAL_REPLICA && fs->inode != base._inode); if (fs->type == CSYNC_FTW_TYPE_DIR && ctx->current == REMOTE_REPLICA && !metadata_differ && ctx->read_remote_from_db) { /* If both etag and file id are equal for a directory, read all contents from @@ -248,7 +241,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f * that so that the reconciler can make advantage of. */ if( ctx->current == REMOTE_REPLICA ) { - fs->has_ignored_files = tmp->has_ignored_files; + fs->has_ignored_files = base._serverHasIgnoredFiles; } if (metadata_differ) { /* file id or permissions has changed. Which means we need to update them in the DB. */ @@ -262,9 +255,8 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f if (ctx->current == LOCAL_REPLICA) { qCDebug(lcUpdate, "Checking for rename based on inode # %" PRId64 "", (uint64_t) fs->inode); - tmp = csync_statedb_get_stat_by_inode(ctx, fs->inode); - - if(_last_db_return_error(ctx)) { + OCC::SyncJournalFileRecord base; + if(!ctx->statedb->getFileRecordByInode(fs->inode, &base)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } @@ -273,23 +265,23 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f fs->instruction = CSYNC_INSTRUCTION_NEW; bool isRename = - tmp && tmp->inode == fs->inode && tmp->type == fs->type - && (tmp->modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) + base.isValid() && base._inode == fs->inode && base._type == fs->type + && (base._modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) #ifdef NO_RENAME_EXTENSION - && _csync_sameextension(tmp->path, fs->path) + && _csync_sameextension(base._path, fs->path) #endif ; // Verify the checksum where possible - if (isRename && !tmp->checksumHeader.isEmpty() && ctx->callbacks.checksum_hook + if (isRename && !base._checksumHeader.isEmpty() && ctx->callbacks.checksum_hook && fs->type == CSYNC_FTW_TYPE_FILE) { fs->checksumHeader = ctx->callbacks.checksum_hook( - _rel_to_abs(ctx, fs->path), tmp->checksumHeader, + _rel_to_abs(ctx, fs->path), base._checksumHeader, ctx->callbacks.checksum_userdata); if (!fs->checksumHeader.isEmpty()) { - qCDebug(lcUpdate, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), tmp->checksumHeader.constData()); - isRename = fs->checksumHeader == tmp->checksumHeader; + qCDebug(lcUpdate, "checking checksum of potential rename %s %s <-> %s", fs->path.constData(), fs->checksumHeader.constData(), base._checksumHeader.constData()); + isRename = fs->checksumHeader == base._checksumHeader; } } @@ -298,31 +290,30 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f /* inode found so the file has been renamed */ fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, fs->path); + csync_rename_record(ctx, base._path, fs->path); } } goto out; } else { /* Remote Replica Rename check */ - tmp = csync_statedb_get_stat_by_file_id(ctx, fs->file_id); - - if(_last_db_return_error(ctx)) { + OCC::SyncJournalFileRecord base; + if(!ctx->statedb->getFileRecordByFileId(fs->file_id, &base)) { ctx->status_code = CSYNC_STATUS_UNSUCCESSFUL; return -1; } - if(tmp ) { /* tmp existing at all */ - if (tmp->type != fs->type) { + if (base.isValid()) { /* tmp existing at all */ + if (base._type != fs->type) { qCWarning(lcUpdate, "file types different is not!"); fs->instruction = CSYNC_INSTRUCTION_NEW; goto out; } - qCDebug(lcUpdate, "remote rename detected based on fileid %s --> %s", tmp->path.constData(), fs->path.constData()); + qCDebug(lcUpdate, "remote rename detected based on fileid %s --> %s", base._path.constData(), fs->path.constData()); fs->instruction = CSYNC_INSTRUCTION_EVAL_RENAME; if (fs->type == CSYNC_FTW_TYPE_DIR) { - csync_rename_record(ctx, tmp->path, fs->path); + csync_rename_record(ctx, base._path, fs->path); } else { - if( tmp->etag != fs->etag ) { + if( base._etag != fs->etag ) { /* CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "ETags are different!"); */ /* File with different etag, don't do a rename, but download the file again */ fs->instruction = CSYNC_INSTRUCTION_NEW; @@ -442,10 +433,59 @@ int csync_walker(CSYNC *ctx, std::unique_ptr fs) { static bool fill_tree_from_db(CSYNC *ctx, const char *uri) { - if( csync_statedb_get_below_path(ctx, uri) < 0 ) { - qCWarning(lcUpdate, "StateDB could not be read!"); + int64_t count = 0; + QByteArray skipbase; + auto rowCallback = [ctx, &count, &skipbase](const OCC::SyncJournalFileRecord &rec) { + /* When selective sync is used, the database may have subtrees with a parent + * whose etag (md5) is _invalid_. These are ignored and shall not appear in the + * remote tree. + * Sometimes folders that are not ignored by selective sync get marked as + * _invalid_, but that is not a problem as the next discovery will retrieve + * their correct etags again and we don't run into this case. + */ + if( rec._etag == "_invalid_") { + qCDebug(lcUpdate, "%s selective sync excluded", rec._path.constData()); + skipbase = rec._path; + skipbase += '/'; + return; + } + + /* Skip over all entries with the same base path. Note that this depends + * strongly on the ordering of the retrieved items. */ + if( !skipbase.isEmpty() && rec._path.startsWith(skipbase) ) { + qCDebug(lcUpdate, "%s selective sync excluded because the parent is", rec._path.constData()); + return; + } else { + skipbase.clear(); + } + + std::unique_ptr st = csync_file_stat_t::fromSyncJournalFileRecord(rec); + + /* Check for exclusion from the tree. + * Note that this is only a safety net in case the ignore list changes + * without a full remote discovery being triggered. */ + CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type); + if (excluded != CSYNC_NOT_EXCLUDED) { + qDebug(lcUpdate, "%s excluded (%d)", st->path.constData(), excluded); + + if (excluded == CSYNC_FILE_EXCLUDE_AND_REMOVE + || excluded == CSYNC_FILE_SILENTLY_EXCLUDED) { + return; + } + + st->instruction = CSYNC_INSTRUCTION_IGNORE; + } + + /* store into result list. */ + ctx->remote.files[rec._path] = std::move(st); + ++count; + }; + + if (!ctx->statedb->getFilesBelowPath(uri, rowCallback)) { + ctx->status_code = CSYNC_STATUS_STATEDB_LOAD_ERROR; return false; } + qDebug(lcUpdate, "%" PRId64 " entries read below path %s from db.", count, uri); return true; } diff --git a/src/csync/csync_util.cpp b/src/csync/csync_util.cpp index d90a2eacc..afafafa5b 100644 --- a/src/csync/csync_util.cpp +++ b/src/csync/csync_util.cpp @@ -36,7 +36,6 @@ #define CSYNC_LOG_CATEGORY_NAME "csync.util" #include "csync_log.h" -#include "csync_statedb.h" typedef struct { const char *instr_str; diff --git a/src/csync/vio/csync_vio.cpp b/src/csync/vio/csync_vio.cpp index 611fb111b..3e9403c0e 100644 --- a/src/csync/vio/csync_vio.cpp +++ b/src/csync/vio/csync_vio.cpp @@ -30,7 +30,6 @@ #include "csync_util.h" #include "vio/csync_vio.h" #include "vio/csync_vio_local.h" -#include "csync_statedb.h" #include "common/c_jhash.h" csync_vio_handle_t *csync_vio_opendir(CSYNC *ctx, const char *name) { diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 9f20f53fd..c61c4ea68 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -470,7 +470,7 @@ void Folder::slotWatchedPathChanged(const QString &path) SyncJournalFileRecord record; if (_journal.getFileRecord(relativePath, &record) && record.isValid() - && !FileSystem::fileChanged(path, record._fileSize, Utility::qDateTimeToTime_t(record._modtime))) { + && !FileSystem::fileChanged(path, record._fileSize, record._modtime)) { qCInfo(lcFolder) << "Ignoring spurious notification for file" << relativePath; return; // probably a spurious notification } diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 8af558fa7..4673e9b34 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -112,13 +112,13 @@ PropagateItemJob::~PropagateItemJob() } } -static time_t getMinBlacklistTime() +static qint64 getMinBlacklistTime() { return qMax(qgetenv("OWNCLOUD_BLACKLIST_TIME_MIN").toInt(), 25); // 25 seconds } -static time_t getMaxBlacklistTime() +static qint64 getMaxBlacklistTime() { int v = qgetenv("OWNCLOUD_BLACKLIST_TIME_MAX").toInt(); if (v > 0) @@ -142,15 +142,15 @@ static SyncJournalErrorBlacklistRecord createBlacklistEntry( entry._renameTarget = item._renameTarget; entry._retryCount = old._retryCount + 1; - static time_t minBlacklistTime(getMinBlacklistTime()); - static time_t maxBlacklistTime(qMax(getMaxBlacklistTime(), minBlacklistTime)); + static qint64 minBlacklistTime(getMinBlacklistTime()); + static qint64 maxBlacklistTime(qMax(getMaxBlacklistTime(), minBlacklistTime)); // The factor of 5 feels natural: 25s, 2 min, 10 min, ~1h, ~5h, ~24h entry._ignoreDuration = old._ignoreDuration * 5; if (item._httpErrorCode == 403) { qCWarning(lcPropagator) << "Probably firewall error: " << item._httpErrorCode << ", blacklisting up to 1h only"; - entry._ignoreDuration = qMin(entry._ignoreDuration, time_t(60 * 60)); + entry._ignoreDuration = qMin(entry._ignoreDuration, qint64(60 * 60)); } else if (item._httpErrorCode == 413 || item._httpErrorCode == 415) { qCWarning(lcPropagator) << "Fatal Error condition" << item._httpErrorCode << ", maximum blacklist ignore time!"; diff --git a/src/libsync/propagateremotemove.cpp b/src/libsync/propagateremotemove.cpp index 74152f028..37ca9fecd 100644 --- a/src/libsync/propagateremotemove.cpp +++ b/src/libsync/propagateremotemove.cpp @@ -171,7 +171,7 @@ void PropagateRemoteMove::finalize() propagator()->_journal->deleteFileRecord(_item->_originalFile); SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(propagator()->getFilePath(_item->_renameTarget)); - record._path = _item->_renameTarget; + record._path = _item->_renameTarget.toUtf8(); if (oldRecord.isValid()) { record._checksumHeader = oldRecord._checksumHeader; if (record._fileSize != oldRecord._fileSize) { diff --git a/src/libsync/propagateuploadng.cpp b/src/libsync/propagateuploadng.cpp index 6d3ddfb80..5026f28a3 100644 --- a/src/libsync/propagateuploadng.cpp +++ b/src/libsync/propagateuploadng.cpp @@ -83,7 +83,7 @@ void PropagateUploadFileNG::doStartUpload() propagator()->_activeJobList.append(this); const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file); - if (progressInfo._valid && Utility::qDateTimeToTime_t(progressInfo._modtime) == _item->_modtime) { + if (progressInfo._valid && progressInfo._modtime == _item->_modtime) { _transferId = progressInfo._transferid; auto url = chunkUrl(); auto job = new LsColJob(propagator()->account(), url, this); @@ -229,7 +229,7 @@ void PropagateUploadFileNG::startNewUpload() SyncJournalDb::UploadInfo pi; pi._valid = true; pi._transferid = _transferId; - pi._modtime = Utility::qDateTimeFromTime_t(_item->_modtime); + pi._modtime = _item->_modtime; propagator()->_journal->setUploadInfo(_item->_file, pi); propagator()->_journal->commit("Upload info"); QMap headers; diff --git a/src/libsync/propagateuploadv1.cpp b/src/libsync/propagateuploadv1.cpp index 0d0b2cd0f..c8b0e421d 100644 --- a/src/libsync/propagateuploadv1.cpp +++ b/src/libsync/propagateuploadv1.cpp @@ -43,7 +43,7 @@ void PropagateUploadFileV1::doStartUpload() const SyncJournalDb::UploadInfo progressInfo = propagator()->_journal->getUploadInfo(_item->_file); - if (progressInfo._valid && Utility::qDateTimeToTime_t(progressInfo._modtime) == _item->_modtime) { + if (progressInfo._valid && progressInfo._modtime == _item->_modtime) { _startChunk = progressInfo._chunk; _transferId = progressInfo._transferid; qCInfo(lcPropagateUpload) << _item->_file << ": Resuming from chunk " << _startChunk; @@ -272,7 +272,7 @@ void PropagateUploadFileV1::slotPutFinished() } pi._chunk = (currentChunk + _startChunk + 1) % _chunkCount; // next chunk to start with pi._transferid = _transferId; - pi._modtime = Utility::qDateTimeFromTime_t(_item->_modtime); + pi._modtime = _item->_modtime; pi._errorCount = 0; // successful chunk upload resets propagator()->_journal->setUploadInfo(_item->_file, pi); propagator()->_journal->commit("Upload info"); diff --git a/src/libsync/propagatorjobs.cpp b/src/libsync/propagatorjobs.cpp index 949f36b4b..49ecfe156 100644 --- a/src/libsync/propagatorjobs.cpp +++ b/src/libsync/propagatorjobs.cpp @@ -240,7 +240,7 @@ void PropagateLocalRename::start() _item->_file = _item->_renameTarget; SyncJournalFileRecord record = _item->toSyncJournalFileRecordWithInode(targetFile); - record._path = _item->_renameTarget; + record._path = _item->_renameTarget.toUtf8(); if (oldRecord.isValid()) { record._checksumHeader = oldRecord._checksumHeader; } diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index d34c516cd..f329d42cd 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -87,8 +87,7 @@ SyncEngine::SyncEngine(AccountPtr account, const QString &localPath, // Everything in the SyncEngine expects a trailing slash for the localPath. ASSERT(localPath.endsWith(QLatin1Char('/'))); - const QString dbFile = _journal->databaseFilePath(); - _csync_ctx.reset(new CSYNC(localPath.toUtf8().data(), dbFile.toUtf8().data())); + _csync_ctx.reset(new CSYNC(localPath.toUtf8().data(), journal)); _excludedFiles.reset(new ExcludedFiles(&_csync_ctx->excludes)); _syncFileStatusTracker.reset(new SyncFileStatusTracker(this)); diff --git a/src/libsync/syncfileitem.cpp b/src/libsync/syncfileitem.cpp index 0e6d8cb2a..bfea07163 100644 --- a/src/libsync/syncfileitem.cpp +++ b/src/libsync/syncfileitem.cpp @@ -26,8 +26,8 @@ Q_LOGGING_CATEGORY(lcFileItem, "sync.fileitem", QtInfoMsg) SyncJournalFileRecord SyncFileItem::toSyncJournalFileRecordWithInode(const QString &localFileName) { SyncJournalFileRecord rec; - rec._path = _file; - rec._modtime = Utility::qDateTimeFromTime_t(_modtime); + rec._path = _file.toUtf8(); + rec._modtime = _modtime; rec._type = _type; rec._etag = _etag; rec._fileId = _fileId; @@ -57,7 +57,7 @@ SyncFileItemPtr SyncFileItem::fromSyncJournalFileRecord(const SyncJournalFileRec SyncFileItemPtr item(new SyncFileItem); item->_file = rec._path; item->_inode = rec._inode; - item->_modtime = Utility::qDateTimeToTime_t(rec._modtime); + item->_modtime = rec._modtime; item->_type = static_cast(rec._type); item->_etag = rec._etag; item->_fileId = rec._fileId; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d6b68cb5c..d5cc8615f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -33,7 +33,6 @@ IF( APPLE ) list(APPEND FolderWatcher_SRC ../src/gui/folderwatcher_mac.cpp) list(APPEND FolderWatcher_SRC ../src/gui/socketapisocket_mac.mm) ENDIF() -owncloud_add_test(CSyncSqlite "") owncloud_add_test(NetrcParser ../src/cmd/netrcparser.cpp) owncloud_add_test(OwnSql "") owncloud_add_test(SyncJournalDB "") diff --git a/test/csync/CMakeLists.txt b/test/csync/CMakeLists.txt index 237c52e27..5cb0590e4 100644 --- a/test/csync/CMakeLists.txt +++ b/test/csync/CMakeLists.txt @@ -32,13 +32,9 @@ add_cmocka_test(check_std_c_time std_tests/check_std_c_time.c ${TEST_TARGET_LIBR add_cmocka_test(check_csync_log csync_tests/check_csync_log.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_exclude csync_tests/check_csync_exclude.cpp ${TEST_TARGET_LIBRARIES}) -add_cmocka_test(check_csync_statedb_load csync_tests/check_csync_statedb_load.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_util csync_tests/check_csync_util.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_csync_misc csync_tests/check_csync_misc.cpp ${TEST_TARGET_LIBRARIES}) -# csync tests which require init -add_cmocka_test(check_csync_statedb_query csync_tests/check_csync_statedb_query.cpp ${TEST_TARGET_LIBRARIES}) - # vio add_cmocka_test(check_vio vio_tests/check_vio.cpp ${TEST_TARGET_LIBRARIES}) add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.cpp ${TEST_TARGET_LIBRARIES}) diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 0525942ac..3f0180e42 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -32,7 +32,7 @@ static int setup(void **state) { CSYNC *csync; - csync = new CSYNC("/tmp/check_csync1", ""); + csync = new CSYNC("/tmp/check_csync1", new OCC::SyncJournalDb("")); *state = csync; return 0; @@ -42,7 +42,7 @@ static int setup_init(void **state) { CSYNC *csync; int rc; - csync = new CSYNC("/tmp/check_csync1", ""); + csync = new CSYNC("/tmp/check_csync1", new OCC::SyncJournalDb("")); rc = csync_exclude_load(EXCLUDE_LIST_FILE, &(csync->excludes)); assert_int_equal(rc, 0); @@ -67,7 +67,9 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; + auto statedb = csync->statedb; delete csync; + delete statedb; rc = system("rm -rf /tmp/check_csync1"); assert_int_equal(rc, 0); diff --git a/test/csync/csync_tests/check_csync_statedb_load.cpp b/test/csync/csync_tests/check_csync_statedb_load.cpp deleted file mode 100644 index f5761f9ff..000000000 --- a/test/csync/csync_tests/check_csync_statedb_load.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ -#include - -#define CSYNC_TEST 1 -#include "csync_statedb.cpp" - -#include "torture.h" - -#define TESTDB "/tmp/check_csync1/test.db" - -static int setup(void **state) { - CSYNC *csync; - int rc; - - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - - csync = new CSYNC("/tmp/check_csync1", TESTDB); - *state = csync; - - sqlite3 *db = NULL; - rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); - assert_int_equal(rc, SQLITE_OK); - - rc = sqlite3_close(db); - assert_int_equal(rc, SQLITE_OK); - - return 0; -} - -static int teardown(void **state) { - CSYNC *csync = (CSYNC*)*state; - int rc; - - delete csync; - - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - - *state = NULL; - - return 0; -} - -static void check_csync_statedb_load(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - int rc; - - rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); - assert_int_equal(rc, 0); - - sqlite3_close(csync->statedb.db); -} - -static void check_csync_statedb_close(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - csync_stat_t sb; - time_t modtime; - mbchar_t *testdb = c_utf8_path_to_locale(TESTDB); - int rc; - - /* statedb not written */ - csync_statedb_load(csync, TESTDB, &csync->statedb.db); - - rc = _tstat(testdb, &sb); - assert_int_equal(rc, 0); - modtime = sb.st_mtime; - - rc = csync_statedb_close(csync); - assert_int_equal(rc, 0); - - rc = _tstat(testdb, &sb); - assert_int_equal(rc, 0); - assert_int_equal(modtime, sb.st_mtime); - - csync_statedb_load(csync, TESTDB, &csync->statedb.db); - - rc = _tstat(testdb, &sb); - assert_int_equal(rc, 0); - modtime = sb.st_mtime; - - /* wait a sec or the modtime will be the same */ - sleep(1); - - /* statedb written */ - rc = csync_statedb_close(csync); - assert_int_equal(rc, 0); - - rc = _tstat(testdb, &sb); - assert_int_equal(rc, 0); - - c_free_locale_string(testdb); -} - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test_setup_teardown(check_csync_statedb_load, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_close, setup, teardown), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - diff --git a/test/csync/csync_tests/check_csync_statedb_query.cpp b/test/csync/csync_tests/check_csync_statedb_query.cpp deleted file mode 100644 index 7f3988a71..000000000 --- a/test/csync/csync_tests/check_csync_statedb_query.cpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * libcsync -- a library to sync a directory with another - * - * Copyright (c) 2008-2013 by Andreas Schneider - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#define CSYNC_TEST 1 -#include "csync_statedb.cpp" - -#include "torture.h" - -#define TESTDB "/tmp/check_csync1/test.db" -#define TESTDBTMP "/tmp/check_csync1/test.db.ctmp" - - -static int setup(void **state) -{ - CSYNC *csync; - int rc = 0; - - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - rc = system("mkdir -p /tmp/check_csync1"); - assert_int_equal(rc, 0); - rc = system("mkdir -p /tmp/check_csync"); - assert_int_equal(rc, 0); - csync = new CSYNC("/tmp/check_csync1", TESTDB); - - sqlite3 *db = NULL; - rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); - assert_int_equal(rc, SQLITE_OK); - rc = sqlite3_close(db); - assert_int_equal(rc, SQLITE_OK); - - rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); - assert_int_equal(rc, 0); - - *state = csync; - - return 0; -} - -static int setup_db(void **state) -{ - char *errmsg; - int rc = 0; - sqlite3 *db = NULL; - - const char *sql = "CREATE TABLE IF NOT EXISTS metadata (" - "phash INTEGER(8)," - "pathlen INTEGER," - "path VARCHAR(4096)," - "inode INTEGER," - "uid INTEGER," - "gid INTEGER," - "mode INTEGER," - "modtime INTEGER(8)," - "type INTEGER," - "md5 VARCHAR(32)," - "PRIMARY KEY(phash)" - ");"; - - const char *sql2 = "INSERT INTO metadata" - "(phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5) VALUES" - "(42, 42, 'Its funny stuff', 23, 42, 43, 55, 66, 2, 54);"; - - - setup(state); - rc = sqlite3_open( TESTDB, &db); - assert_int_equal(rc, SQLITE_OK); - - rc = sqlite3_exec( db, sql, NULL, NULL, &errmsg ); - assert_int_equal(rc, SQLITE_OK); - - rc = sqlite3_exec( db, sql2, NULL, NULL, &errmsg ); - assert_int_equal(rc, SQLITE_OK); - - sqlite3_close(db); - - return 0; - -} - -static int teardown(void **state) { - CSYNC *csync = (CSYNC*)*state; - int rc = 0; - - delete csync; - rc = system("rm -rf /tmp/check_csync"); - assert_int_equal(rc, 0); - rc = system("rm -rf /tmp/check_csync1"); - assert_int_equal(rc, 0); - - *state = NULL; - - return 0; -} - - -static void check_csync_statedb_query_statement(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - c_strlist_t *result; - - result = csync_statedb_query(csync->statedb.db, ""); - assert_null(result); - if (result != NULL) { - c_strlist_destroy(result); - } - - result = csync_statedb_query(csync->statedb.db, "SELECT;"); - assert_null(result); - if (result != NULL) { - c_strlist_destroy(result); - } -} - -static void check_csync_statedb_drop_tables(void **state) -{ - // CSYNC *csync = (CSYNC*)*state; - int rc = 0; - (void) state; - - // rc = csync_statedb_drop_tables(csync->statedb.db); - assert_int_equal(rc, 0); - // rc = csync_statedb_create_tables(csync->statedb.db); - assert_int_equal(rc, 0); - // rc = csync_statedb_drop_tables(csync->statedb.db); - assert_int_equal(rc, 0); -} - -static void check_csync_statedb_insert_metadata(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - std::unique_ptr st; - int i, rc = 0; - - // rc = csync_statedb_create_tables(csync->statedb.db); - assert_int_equal(rc, 0); - - for (i = 0; i < 100; i++) { - st.reset(new csync_file_stat_t); - st->path = QString("file_%1").arg(i).toUtf8(); - - csync->local.files[st->path] = std::move(st); - } - - // rc = csync_statedb_insert_metadata(csync, csync->statedb.db); - assert_int_equal(rc, 0); -} - -static void check_csync_statedb_write(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - std::unique_ptr st; - int i, rc = 0; - - for (i = 0; i < 100; i++) { - st.reset(new csync_file_stat_t); - st->path = QString("file_%1").arg(i).toUtf8(); - - csync->local.files[st->path] = std::move(st); - assert_int_equal(rc, 0); - } - - // rc = csync_statedb_write(csync, csync->statedb.db); - assert_int_equal(rc, 0); -} - - -static void check_csync_statedb_get_stat_by_path_not_found(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - std::unique_ptr tmp; - - tmp = csync_statedb_get_stat_by_path(csync, "666"); - assert_null(tmp.get()); -} - - -static void check_csync_statedb_get_stat_by_inode_not_found(void **state) -{ - CSYNC *csync = (CSYNC*)*state; - std::unique_ptr tmp; - - tmp = csync_statedb_get_stat_by_inode(csync, (ino_t) 666); - assert_null(tmp.get()); -} - -int torture_run_tests(void) -{ - const struct CMUnitTest tests[] = { - cmocka_unit_test_setup_teardown(check_csync_statedb_query_statement, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_drop_tables, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_insert_metadata, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_write, setup, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_get_stat_by_path_not_found, setup_db, teardown), - cmocka_unit_test_setup_teardown(check_csync_statedb_get_stat_by_inode_not_found, setup_db, teardown), - }; - - return cmocka_run_group_tests(tests, NULL, NULL); -} - diff --git a/test/csync/csync_tests/check_csync_update.cpp b/test/csync/csync_tests/check_csync_update.cpp index 4fae4e1a7..db6819907 100644 --- a/test/csync/csync_tests/check_csync_update.cpp +++ b/test/csync/csync_tests/check_csync_update.cpp @@ -98,12 +98,10 @@ static int setup(void **state) assert_int_equal(rc, 0); rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync = new CSYNC("/tmp/check_csync1", TESTDB); /* Create a new db with metadata */ sqlite3 *db; - // csync->statedb.file = c_strdup(TESTDB); - rc = sqlite3_open(csync->statedb.file, &db); + rc = sqlite3_open(TESTDB, &db); statedb_create_metadata_table(db); if( firstrun ) { statedb_insert_metadata(db); @@ -111,8 +109,8 @@ static int setup(void **state) } sqlite3_close(db); - rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); - assert_int_equal(rc, 0); + csync = new CSYNC("/tmp/check_csync1", new OCC::SyncJournalDb(TESTDB)); + assert_true(csync->statedb->isConnected()); *state = csync; @@ -128,7 +126,7 @@ static int setup_ftw(void **state) assert_int_equal(rc, 0); rc = system("mkdir -p /tmp/check_csync1"); assert_int_equal(rc, 0); - csync = new CSYNC("/tmp", TESTDB); + csync = new CSYNC("/tmp", new OCC::SyncJournalDb(TESTDB)); sqlite3 *db = NULL; rc = sqlite3_open_v2(TESTDB, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL); @@ -137,10 +135,9 @@ static int setup_ftw(void **state) rc = sqlite3_close(db); assert_int_equal(rc, SQLITE_OK); - rc = csync_statedb_load(csync, TESTDB, &csync->statedb.db); - assert_int_equal(rc, 0); + csync = new CSYNC("/tmp", new OCC::SyncJournalDb(TESTDB)); + assert_true(csync->statedb->isConnected()); - csync->statedb.file = c_strdup( TESTDB ); *state = csync; return 0; @@ -150,8 +147,10 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; - unlink( csync->statedb.file); + unlink(TESTDB); + auto statedb = csync->statedb; delete csync; + delete statedb; *state = NULL; @@ -288,7 +287,6 @@ static void check_csync_detect_update_db_rename(void **state) int rc = 0; fs = create_fstat("wurst.txt", 0, 42); - csync_set_statedb_exists(csync, 1); rc = _csync_detect_update(csync, std::move(fs)); assert_int_equal(rc, 0); diff --git a/test/csync/vio_tests/check_vio.cpp b/test/csync/vio_tests/check_vio.cpp index 0607dcaa8..884accf43 100644 --- a/test/csync/vio_tests/check_vio.cpp +++ b/test/csync/vio_tests/check_vio.cpp @@ -49,7 +49,7 @@ static int setup(void **state) rc = system("rm -rf /tmp/csync_test"); assert_int_equal(rc, 0); - csync = new CSYNC("/tmp/check_csync1", ""); + csync = new CSYNC("/tmp/check_csync1", new OCC::SyncJournalDb("")); csync->current = LOCAL_REPLICA; @@ -78,7 +78,9 @@ static int teardown(void **state) { CSYNC *csync = (CSYNC*)*state; int rc; + auto statedb = csync->statedb; delete csync; + delete statedb; rc = chdir(wd_buffer); assert_int_equal(rc, 0); diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index 625285ce0..f86ce9591 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -97,7 +97,7 @@ static int setup_testenv(void **state) { statevar *mystate = (statevar*)malloc( sizeof(statevar) ); mystate->result = NULL; - mystate->csync = new CSYNC("/tmp/check_csync1", ""); + mystate->csync = new CSYNC("/tmp/check_csync1", new OCC::SyncJournalDb("")); mystate->csync->current = LOCAL_REPLICA; @@ -124,7 +124,9 @@ static int teardown(void **state) { output("================== Tearing down!\n"); + auto statedb = csync->statedb; delete csync; + delete statedb; rc = _tchdir(wd_buffer); assert_int_equal(rc, 0); diff --git a/test/testcsyncsqlite.cpp b/test/testcsyncsqlite.cpp deleted file mode 100644 index 093ee43cb..000000000 --- a/test/testcsyncsqlite.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - This software is in the public domain, furnished "as is", without technical - support, and with no warranty, express or implied, as to its usefulness for - any purpose. -*/ - -#include "csync_statedb.h" -#include "csync_private.h" -#include - - -class TestCSyncSqlite : public QObject -{ - Q_OBJECT - -private: - CSYNC *_ctx; -private slots: - void initTestCase() { - int rc; - - QString db = QCoreApplication::applicationDirPath() + "/test_journal.db"; - _ctx = new CSYNC("/tmp/check_csync1", db.toLocal8Bit()); - - rc = csync_statedb_load(_ctx, _ctx->statedb.file, &(_ctx->statedb.db)); - QVERIFY(rc == 0); - } - - void testFullResult() { - std::unique_ptr st = csync_statedb_get_stat_by_path( _ctx, "test2/zu/zuzu" ); - QVERIFY(st.get()); - QCOMPARE( QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu") ); - QCOMPARE( QString::number(st->inode), QString::number(1709554)); - QCOMPARE( QString::number(st->modtime), QString::number(1384415006)); - QCOMPARE( QString::number(st->type), QString::number(2)); - QCOMPARE( QString::fromUtf8(st->etag), QLatin1String("52847f2090665")); - QCOMPARE( QString::fromUtf8(st->file_id), QLatin1String("00000557525d5af3d9625")); - - } - - void testByHash() { - std::unique_ptr st = csync_statedb_get_stat_by_path(_ctx, "documents/c1"); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1")); - - st = csync_statedb_get_stat_by_path(_ctx, "documents/c1/c2"); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("documents/c1/c2")); - } - - void testByInode() { - std::unique_ptr st = csync_statedb_get_stat_by_inode(_ctx, 1709555); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu/zuzu/zuzuzu")); - - st = csync_statedb_get_stat_by_inode(_ctx, 1706571); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared/for_kf/a2")); - } - - void testByFileId() { - std::unique_ptr st = csync_statedb_get_stat_by_file_id(_ctx, "00000556525d5af3d9625"); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("test2/zu")); - - st = csync_statedb_get_stat_by_file_id(_ctx, "-0000001525d5af3d9625"); - QVERIFY(st.get()); - QCOMPARE(QString::fromUtf8(st->path), QLatin1String("Shared")); - } - - void cleanupTestCase() { - csync_statedb_close(_ctx); - delete _ctx; - _ctx = nullptr; - } - -}; - -QTEST_GUILESS_MAIN(TestCSyncSqlite) -#include "testcsyncsqlite.moc" diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 032937b62..a4c4c5be4 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -183,7 +183,7 @@ private slots: // Remove subFolderA with selectiveSync: fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, {"parentFolder/subFolderA/"}); - fakeFolder.syncEngine().journal()->avoidReadFromDbOnNextSync("parentFolder/subFolderA/"); + fakeFolder.syncEngine().journal()->avoidReadFromDbOnNextSync(QByteArrayLiteral("parentFolder/subFolderA/")); fakeFolder.syncOnce(); @@ -238,7 +238,7 @@ private slots: // folders are uploaded anyway is some circumstances. FakeFolder fakeFolder{FileInfo{ QString(), { FileInfo { QStringLiteral("parentFolder"), { - FileInfo{ QStringLiteral("subFolder"), { + FileInfo{ QStringLiteral("subFolderA"), { { QStringLiteral("fileA.txt"), 400 }, { QStringLiteral("fileB.txt"), 400, 'o' }, FileInfo { QStringLiteral("subsubFolder"), { @@ -252,23 +252,24 @@ private slots: { QStringLiteral("fileF.txt"), 400, 'o' } }} }} - }} + }}, + FileInfo{ QStringLiteral("subFolderB"), {} } }} }}}; QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); auto expectedServerState = fakeFolder.currentRemoteState(); - // Remove subFolder with selectiveSync: + // Remove subFolderA with selectiveSync: fakeFolder.syncEngine().journal()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, - {"parentFolder/subFolder/"}); - fakeFolder.syncEngine().journal()->avoidReadFromDbOnNextSync("parentFolder/subFolder/"); + {"parentFolder/subFolderA/"}); + fakeFolder.syncEngine().journal()->avoidReadFromDbOnNextSync(QByteArrayLiteral("parentFolder/subFolderA/")); // But touch local file before the next sync, such that the local folder // can't be removed - fakeFolder.localModifier().setContents("parentFolder/subFolder/fileB.txt", 'n'); - fakeFolder.localModifier().setContents("parentFolder/subFolder/subsubFolder/fileD.txt", 'n'); - fakeFolder.localModifier().setContents("parentFolder/subFolder/anotherFolder/subsubFolder/fileF.txt", 'n'); + fakeFolder.localModifier().setContents("parentFolder/subFolderA/fileB.txt", 'n'); + fakeFolder.localModifier().setContents("parentFolder/subFolderA/subsubFolder/fileD.txt", 'n'); + fakeFolder.localModifier().setContents("parentFolder/subFolderA/anotherFolder/subsubFolder/fileF.txt", 'n'); // Several follow-up syncs don't change the state at all, // in particular the remote state doesn't change and fileB.txt @@ -282,14 +283,15 @@ private slots: QCOMPARE(fakeFolder.currentRemoteState(), expectedServerState); // The local state should still have subFolderA auto local = fakeFolder.currentLocalState(); - QVERIFY(local.find("parentFolder/subFolder")); - QVERIFY(!local.find("parentFolder/subFolder/fileA.txt")); - QVERIFY(local.find("parentFolder/subFolder/fileB.txt")); - QVERIFY(!local.find("parentFolder/subFolder/subsubFolder/fileC.txt")); - QVERIFY(local.find("parentFolder/subFolder/subsubFolder/fileD.txt")); - QVERIFY(!local.find("parentFolder/subFolder/anotherFolder/subsubFolder/fileE.txt")); - QVERIFY(local.find("parentFolder/subFolder/anotherFolder/subsubFolder/fileF.txt")); - QVERIFY(!local.find("parentFolder/subFolder/anotherFolder/emptyFolder")); + QVERIFY(local.find("parentFolder/subFolderA")); + QVERIFY(!local.find("parentFolder/subFolderA/fileA.txt")); + QVERIFY(local.find("parentFolder/subFolderA/fileB.txt")); + QVERIFY(!local.find("parentFolder/subFolderA/subsubFolder/fileC.txt")); + QVERIFY(local.find("parentFolder/subFolderA/subsubFolder/fileD.txt")); + QVERIFY(!local.find("parentFolder/subFolderA/anotherFolder/subsubFolder/fileE.txt")); + QVERIFY(local.find("parentFolder/subFolderA/anotherFolder/subsubFolder/fileF.txt")); + QVERIFY(!local.find("parentFolder/subFolderA/anotherFolder/emptyFolder")); + QVERIFY(local.find("parentFolder/subFolderB")); } } } diff --git a/test/testsyncjournaldb.cpp b/test/testsyncjournaldb.cpp index 5219dd8cf..0575c0ed5 100644 --- a/test/testsyncjournaldb.cpp +++ b/test/testsyncjournaldb.cpp @@ -26,9 +26,9 @@ public: QVERIFY(_tempDir.isValid()); } - QDateTime dropMsecs(QDateTime time) + qint64 dropMsecs(QDateTime time) { - return Utility::qDateTimeFromTime_t(Utility::qDateTimeToTime_t(time)); + return Utility::qDateTimeToTime_t(time); } private slots: @@ -46,7 +46,7 @@ private slots: void testFileRecord() { SyncJournalFileRecord record; - QVERIFY(_db.getFileRecord("nonexistant", &record)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("nonexistant"), &record)); QVERIFY(!record.isValid()); record._path = "foo"; @@ -61,13 +61,13 @@ private slots: QVERIFY(_db.setFileRecord(record)); SyncJournalFileRecord storedRecord; - QVERIFY(_db.getFileRecord("foo", &storedRecord)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo"), &storedRecord)); QVERIFY(storedRecord == record); // Update checksum record._checksumHeader = "Adler32:newchecksum"; _db.updateFileRecordChecksum("foo", "newchecksum", "Adler32"); - QVERIFY(_db.getFileRecord("foo", &storedRecord)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo"), &storedRecord)); QVERIFY(storedRecord == record); // Update metadata @@ -79,11 +79,11 @@ private slots: record._remotePerm = RemotePermissions("NV"); record._fileSize = 289055; _db.setFileRecordMetadata(record); - QVERIFY(_db.getFileRecord("foo", &storedRecord)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo"), &storedRecord)); QVERIFY(storedRecord == record); QVERIFY(_db.deleteFileRecord("foo")); - QVERIFY(_db.getFileRecord("foo", &record)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo"), &record)); QVERIFY(!record.isValid()); } @@ -95,11 +95,11 @@ private slots: record._path = "foo-checksum"; record._remotePerm = RemotePermissions("RW"); record._checksumHeader = "MD5:mychecksum"; - record._modtime = QDateTime::currentDateTimeUtc(); + record._modtime = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); QVERIFY(_db.setFileRecord(record)); SyncJournalFileRecord storedRecord; - QVERIFY(_db.getFileRecord("foo-checksum", &storedRecord)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo-checksum"), &storedRecord)); QVERIFY(storedRecord._path == record._path); QVERIFY(storedRecord._remotePerm == record._remotePerm); QVERIFY(storedRecord._checksumHeader == record._checksumHeader); @@ -108,19 +108,19 @@ private slots: // Attention: compare time_t types here, as QDateTime seem to maintain // milliseconds internally, which disappear in sqlite. Go for full seconds here. - QVERIFY(storedRecord._modtime.toTime_t() == record._modtime.toTime_t()); + QVERIFY(storedRecord._modtime == record._modtime); QVERIFY(storedRecord == record); } { SyncJournalFileRecord record; record._path = "foo-nochecksum"; record._remotePerm = RemotePermissions("RWN"); - record._modtime = QDateTime::currentDateTimeUtc(); + record._modtime = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); QVERIFY(_db.setFileRecord(record)); SyncJournalFileRecord storedRecord; - QVERIFY(_db.getFileRecord("foo-nochecksum", &storedRecord)); + QVERIFY(_db.getFileRecord(QByteArrayLiteral("foo-nochecksum"), &storedRecord)); QVERIFY(storedRecord == record); } } diff --git a/test/testuploadreset.cpp b/test/testuploadreset.cpp index 9c92d9a1d..ba5489c3a 100644 --- a/test/testuploadreset.cpp +++ b/test/testuploadreset.cpp @@ -35,7 +35,7 @@ private slots: SyncJournalDb::UploadInfo uploadInfo; uploadInfo._transferid = 1; uploadInfo._valid = true; - uploadInfo._modtime = modTime; + uploadInfo._modtime = Utility::qDateTimeToTime_t(modTime); fakeFolder.syncEngine().journal()->setUploadInfo("A/a0", uploadInfo); fakeFolder.uploadState().mkdir("1"); From 54c522c861a86e758fca32737b0cc606c8ac7ca7 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Thu, 14 Sep 2017 16:34:14 +0200 Subject: [PATCH 110/166] SyncJournalDb: Reimplement the db_is_empty logic from csync This reduces the initial sync local discovery time from 2.0 to 0.6 seconds in LargeSyncBench on my machine. --- src/common/syncjournaldb.cpp | 32 ++++++++++++++++++++------------ src/common/syncjournaldb.h | 3 ++- src/csync/csync.cpp | 1 - src/csync/csync_private.h | 6 ------ src/libsync/syncengine.cpp | 10 ++-------- 5 files changed, 24 insertions(+), 28 deletions(-) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index d2b6fb2a7..d4c396e6b 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -76,7 +76,9 @@ static QString defaultJournalMode(const QString &dbPath) SyncJournalDb::SyncJournalDb(const QString &dbFilePath, QObject *parent) : QObject(parent) , _dbFile(dbFilePath) + , _mutex(QMutex::Recursive) , _transaction(0) + , _metadataTableIsEmpty(false) { // Allow forcing the journal mode for debugging static QString envJournalMode = QString::fromLocal8Bit(qgetenv("OWNCLOUD_SQLITE_JOURNAL_MODE")); @@ -672,6 +674,10 @@ bool SyncJournalDb::checkConnect() // don't start a new transaction now commitInternal(QString("checkConnect End"), false); + // This avoid reading from the DB if we already know it is empty + // thereby speeding up the initial discovery significantly. + _metadataTableIsEmpty = (getFileRecordCount() == 0); + // Hide 'em all! FileSystem::setFileHidden(databaseFilePath(), true); FileSystem::setFileHidden(databaseFilePath() + "-wal", true); @@ -715,6 +721,7 @@ void SyncJournalDb::close() _db.close(); _avoidReadFromDbOnNextSyncFilter.clear(); + _metadataTableIsEmpty = false; } @@ -973,6 +980,9 @@ bool SyncJournalDb::setFileRecord(const SyncJournalFileRecord &_record) return false; } + // Can't be true anymore. + _metadataTableIsEmpty = false; + return true; } else { qCWarning(lcDb) << "Failed to connect database."; @@ -1020,6 +1030,9 @@ bool SyncJournalDb::getFileRecord(const QByteArray &filename, SyncJournalFileRec rec->_path.clear(); Q_ASSERT(!rec->isValid()); + if (_metadataTableIsEmpty) + return true; // no error, yet nothing found (rec->isValid() == false) + if (!checkConnect()) return false; @@ -1028,7 +1041,6 @@ bool SyncJournalDb::getFileRecord(const QByteArray &filename, SyncJournalFileRec _getFileRecordQuery->bindValue(1, getPHash(filename)); if (!_getFileRecordQuery->exec()) { - locker.unlock(); close(); return false; } @@ -1040,9 +1052,7 @@ bool SyncJournalDb::getFileRecord(const QByteArray &filename, SyncJournalFileRec if (errId != SQLITE_DONE) { // only do this if the problem is different from SQLITE_DONE QString err = _getFileRecordQuery->error(); qCWarning(lcDb) << "No journal entry found for " << filename << "Error: " << err; - locker.unlock(); close(); - locker.relock(); } } } @@ -1058,7 +1068,7 @@ bool SyncJournalDb::getFileRecordByInode(quint64 inode, SyncJournalFileRecord *r rec->_path.clear(); Q_ASSERT(!rec->isValid()); - if (!inode) + if (!inode || _metadataTableIsEmpty) return true; // no error, yet nothing found (rec->isValid() == false) if (!checkConnect()) @@ -1087,7 +1097,7 @@ bool SyncJournalDb::getFileRecordByFileId(const QByteArray &fileId, SyncJournalF rec->_path.clear(); Q_ASSERT(!rec->isValid()); - if (fileId.isEmpty()) + if (fileId.isEmpty() || _metadataTableIsEmpty) return true; // no error, yet nothing found (rec->isValid() == false) if (!checkConnect()) @@ -1111,6 +1121,9 @@ bool SyncJournalDb::getFilesBelowPath(const QByteArray &path, const std::functio { QMutexLocker locker(&_mutex); + if (_metadataTableIsEmpty) + return true; // no error, yet nothing found + if (!checkConnect()) return false; @@ -1184,15 +1197,11 @@ int SyncJournalDb::getFileRecordCount() { QMutexLocker locker(&_mutex); - if (!checkConnect()) { - return -1; - } - SqlQuery query(_db); query.prepare("SELECT COUNT(*) FROM metadata"); if (!query.exec()) { - return 0; + return -1; } if (query.next()) { @@ -1200,7 +1209,7 @@ int SyncJournalDb::getFileRecordCount() return count; } - return 0; + return -1; } bool SyncJournalDb::updateFileRecordChecksum(const QString &filename, @@ -1775,7 +1784,6 @@ void SyncJournalDb::avoidRenamesOnNextSync(const QByteArray &path) // We also need to remove the ETags so the update phase refreshes the directory paths // on the next sync - locker.unlock(); avoidReadFromDbOnNextSync(path); } diff --git a/src/common/syncjournaldb.h b/src/common/syncjournaldb.h index 10324aba7..cfdced9a3 100644 --- a/src/common/syncjournaldb.h +++ b/src/common/syncjournaldb.h @@ -66,7 +66,6 @@ public: bool setFileRecordMetadata(const SyncJournalFileRecord &record); bool deleteFileRecord(const QString &filename, bool recursively = false); - int getFileRecordCount(); bool updateFileRecordChecksum(const QString &filename, const QByteArray &contentChecksum, const QByteArray &contentChecksumType); @@ -215,6 +214,7 @@ public: void clearFileTable(); private: + int getFileRecordCount(); bool updateDatabaseStructure(); bool updateMetadataTableStructure(); bool updateErrorBlacklistTableStructure(); @@ -237,6 +237,7 @@ private: QString _dbFile; QMutex _mutex; // Public functions are protected with the mutex. int _transaction; + bool _metadataTableIsEmpty; // NOTE! when adding a query, don't forget to reset it in SyncJournalDb::close QScopedPointer _getFileRecordQuery; diff --git a/src/csync/csync.cpp b/src/csync/csync.cpp index d2838884a..4f0c19916 100644 --- a/src/csync/csync.cpp +++ b/src/csync/csync.cpp @@ -310,7 +310,6 @@ int csync_s::reinitialize() { remote.read_from_db = 0; read_remote_from_db = true; - db_is_empty = false; local.files.clear(); remote.files.clear(); diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index c898eeabe..60d12df91 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -142,12 +142,6 @@ struct OCSYNC_EXPORT csync_s { */ bool read_remote_from_db = false; - /** - * If true, the DB is considered empty and all reads are skipped. (default is false) - * This is useful during the initial local discovery as it speeds it up significantly. - */ - bool db_is_empty = false; - bool ignore_hidden_files = true; csync_s(const char *localUri, OCC::SyncJournalDb *statedb); diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index f329d42cd..2c71ae734 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -786,7 +786,6 @@ void SyncEngine::startSync() csync_resume(_csync_ctx.data()); - int fileRecordCount = -1; if (!_journal->exists()) { qCInfo(lcEngine) << "New sync (no sync journal exists)"; } else { @@ -800,9 +799,8 @@ void SyncEngine::startSync() verStr.append(" on ").append(Utility::platformName()); qCInfo(lcEngine) << verStr; - fileRecordCount = _journal->getFileRecordCount(); // this creates the DB if it does not exist yet - - if (fileRecordCount == -1) { + // This creates the DB if it does not exist yet. + if (!_journal->isConnected()) { qCWarning(lcEngine) << "No way to create a sync journal!"; csyncError(tr("Unable to open or create the local sync database. Make sure you have write access in the sync folder.")); finalize(false); @@ -812,10 +810,6 @@ void SyncEngine::startSync() _csync_ctx->read_remote_from_db = true; - // This tells csync to never read from the DB if it is empty - // thereby speeding up the initial discovery significantly. - _csync_ctx->db_is_empty = (fileRecordCount == 0); - bool ok; auto selectiveSyncBlackList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, &ok); if (ok) { From 278129b286dcbf8849b552d3c55b0a86f8a8bbf0 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 14:19:48 +0200 Subject: [PATCH 111/166] OwnSQL: don't parse the error message when we are done --- src/common/ownsql.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/ownsql.cpp b/src/common/ownsql.cpp index 2bda1ab09..d6eb9b858 100644 --- a/src/common/ownsql.cpp +++ b/src/common/ownsql.cpp @@ -33,7 +33,7 @@ #define SQLITE_DO(A) \ if (1) { \ _errId = (A); \ - if (_errId != SQLITE_OK) { \ + if (_errId != SQLITE_OK && _errId != SQLITE_DONE) { \ _error = QString::fromUtf8(sqlite3_errmsg(_db)); \ } \ } From 7af81f76657aa9aed7b3942484f925b9ac9c2574 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 16:44:33 +0200 Subject: [PATCH 112/166] OAuth: Fix crash when closing the browser while identifying To reproduce, log in and click "authorize" on the browser, then close the browser before the client has replied, (but after redirected to localhost, i.e. when the client is asking the server for the token) The problem is that socket can be destroyed so we don't need to answer on a destroyed socket. --- src/gui/creds/oauth.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index 05ef093b3..f06fe3a3c 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -34,6 +34,8 @@ OAuth::~OAuth() static void httpReplyAndClose(QTcpSocket *socket, const char *code, const char *html, const char *moreHeaders = nullptr) { + if (!socket) + return; // socket can have been deleted if the browser was closed socket->write("HTTP/1.1 "); socket->write(code); socket->write("\r\nContent-Type: text/html\r\nConnection: close\r\nContent-Length: "); @@ -62,7 +64,7 @@ void OAuth::start() return; QObject::connect(&_server, &QTcpServer::newConnection, this, [this] { - while (QTcpSocket *socket = _server.nextPendingConnection()) { + while (QPointer socket = _server.nextPendingConnection()) { QObject::connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater); QObject::connect(socket, &QIODevice::readyRead, this, [this, socket] { QByteArray peek = socket->peek(qMin(socket->bytesAvailable(), 4000LL)); //The code should always be within the first 4K From 13e0cc6b501335c4cda9902905f503483237a46a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 11:49:11 +0200 Subject: [PATCH 113/166] Use QDateTime::currentDateTimeUtc instead of the non utc version QDateTime::currentDateTime is terribly slow. --- src/common/utility.cpp | 2 +- src/gui/syncrunfilelog.cpp | 6 +++--- src/libsync/cookiejar.cpp | 2 +- src/libsync/logger.cpp | 4 ++-- src/libsync/owncloudpropagator.cpp | 4 ++-- src/libsync/propagatedownload.cpp | 2 +- src/libsync/propagateupload.cpp | 2 +- src/libsync/syncengine.cpp | 2 +- src/libsync/syncresult.cpp | 2 +- test/mockserver/httpserver.cpp | 2 +- test/syncenginetestutils.h | 4 ++-- test/testsyncengine.cpp | 8 ++++---- 12 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/common/utility.cpp b/src/common/utility.cpp index 460435f1d..212433c75 100644 --- a/src/common/utility.cpp +++ b/src/common/utility.cpp @@ -465,7 +465,7 @@ static const char STOPWATCH_END_TAG[] = "_STOPWATCH_END"; void Utility::StopWatch::start() { - _startTime = QDateTime::currentDateTime(); + _startTime = QDateTime::currentDateTimeUtc(); _timer.start(); } diff --git a/src/gui/syncrunfilelog.cpp b/src/gui/syncrunfilelog.cpp index 51396cbb0..9d4a06d7f 100644 --- a/src/gui/syncrunfilelog.cpp +++ b/src/gui/syncrunfilelog.cpp @@ -127,7 +127,7 @@ void SyncRunFileLog::start(const QString &folderPath) _totalDuration.start(); _lapDuration.start(); - _out << "#=#=#=# Syncrun started " << dateTimeStr(QDateTime::currentDateTime()) << endl; + _out << "#=#=#=# Syncrun started " << dateTimeStr(QDateTime::currentDateTimeUtc()) << endl; } void SyncRunFileLog::logItem(const SyncFileItem &item) @@ -172,14 +172,14 @@ void SyncRunFileLog::logItem(const SyncFileItem &item) void SyncRunFileLog::logLap(const QString &name) { - _out << "#=#=#=#=# " << name << " " << dateTimeStr(QDateTime::currentDateTime()) + _out << "#=#=#=#=# " << name << " " << dateTimeStr(QDateTime::currentDateTimeUtc()) << " (last step: " << _lapDuration.restart() << " msec" << ", total: " << _totalDuration.elapsed() << " msec)" << endl; } void SyncRunFileLog::finish() { - _out << "#=#=#=# Syncrun finished " << dateTimeStr(QDateTime::currentDateTime()) + _out << "#=#=#=# Syncrun finished " << dateTimeStr(QDateTime::currentDateTimeUtc()) << " (last step: " << _lapDuration.elapsed() << " msec" << ", total: " << _totalDuration.elapsed() << " msec)" << endl; _file->close(); diff --git a/src/libsync/cookiejar.cpp b/src/libsync/cookiejar.cpp index 4af34d5e7..a15ac87d1 100644 --- a/src/libsync/cookiejar.cpp +++ b/src/libsync/cookiejar.cpp @@ -124,7 +124,7 @@ QList CookieJar::removeExpired(const QList &cook { QList updatedList; foreach (const QNetworkCookie &cookie, cookies) { - if (cookie.expirationDate() > QDateTime::currentDateTime() && !cookie.isSessionCookie()) { + if (cookie.expirationDate() > QDateTime::currentDateTimeUtc() && !cookie.isSessionCookie()) { updatedList << cookie; } } diff --git a/src/libsync/logger.cpp b/src/libsync/logger.cpp index a0fe727e8..31afbbe8c 100644 --- a/src/libsync/logger.cpp +++ b/src/libsync/logger.cpp @@ -152,7 +152,7 @@ void Logger::mirallLog(const QString &message) { Log log_; log_.source = Log::Occ; - log_.timeStamp = QDateTime::currentDateTime(); + log_.timeStamp = QDateTime::currentDateTimeUtc(); log_.message = message; Logger::instance()->log(log_); @@ -236,7 +236,7 @@ void Logger::enterNextLogFile() QDir::Files); QRegExp rx("owncloud.log.(\\d+)"); uint maxNumber = 0; - QDateTime now = QDateTime::currentDateTime(); + QDateTime now = QDateTime::currentDateTimeUtc(); foreach (const QString &s, files) { if (rx.exactMatch(s)) { maxNumber = qMax(maxNumber, rx.cap(1).toUInt()); diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 4673e9b34..281f34548 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -138,7 +138,7 @@ static SyncJournalErrorBlacklistRecord createBlacklistEntry( entry._errorString = item._errorString; entry._lastTryModtime = item._modtime; entry._lastTryEtag = item._etag; - entry._lastTryTime = Utility::qDateTimeToTime_t(QDateTime::currentDateTime()); + entry._lastTryTime = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); entry._renameTarget = item._renameTarget; entry._retryCount = old._retryCount + 1; @@ -309,7 +309,7 @@ bool PropagateItemJob::checkForProblemsWithShared(int httpStatusCode, const QStr // HACK to avoid continuation: See task #1448: We do not know the _modtime from the // server, at this point, so just set the current one. (rather than the one locally) - downloadItem->_modtime = Utility::qDateTimeToTime_t(QDateTime::currentDateTime()); + downloadItem->_modtime = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); } else { // the file was removed or renamed, just recover the old one downloadItem->_instruction = CSYNC_INSTRUCTION_SYNC; diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp index 6466d13b6..11207d2ad 100644 --- a/src/libsync/propagatedownload.cpp +++ b/src/libsync/propagatedownload.cpp @@ -673,7 +673,7 @@ namespace { // Anonymous namespace for the recall feature dotLocation = recallFileName.size(); } - QString timeString = QDateTime::currentDateTime().toString("yyyyMMdd-hhmmss"); + QString timeString = QDateTime::currentDateTimeUtc().toString("yyyyMMdd-hhmmss"); recallFileName.insert(dotLocation, "_.sys.admin#recall#-" + timeString); return recallFileName; diff --git a/src/libsync/propagateupload.cpp b/src/libsync/propagateupload.cpp index 5ba8a5c6b..eca042678 100644 --- a/src/libsync/propagateupload.cpp +++ b/src/libsync/propagateupload.cpp @@ -53,7 +53,7 @@ Q_LOGGING_CATEGORY(lcPropagateUpload, "sync.propagator.upload", QtInfoMsg) static bool fileIsStillChanging(const SyncFileItem &item) { const QDateTime modtime = Utility::qDateTimeFromTime_t(item._modtime); - const qint64 msSinceMod = modtime.msecsTo(QDateTime::currentDateTime()); + const qint64 msSinceMod = modtime.msecsTo(QDateTime::currentDateTimeUtc()); return msSinceMod < SyncEngine::minimumFileAgeForUpload // if the mtime is too much in the future we *do* upload the file diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 2c71ae734..80d36d4be 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -219,7 +219,7 @@ bool SyncEngine::checkErrorBlacklisting(SyncFileItem &item) item._hasBlacklistEntry = true; // If duration has expired, it's not blacklisted anymore - time_t now = Utility::qDateTimeToTime_t(QDateTime::currentDateTime()); + time_t now = Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc()); if (now >= entry._lastTryTime + entry._ignoreDuration) { qCInfo(lcEngine) << "blacklist entry for " << item._file << " has expired!"; return false; diff --git a/src/libsync/syncresult.cpp b/src/libsync/syncresult.cpp index 52ce018d1..c2aeb24ed 100644 --- a/src/libsync/syncresult.cpp +++ b/src/libsync/syncresult.cpp @@ -85,7 +85,7 @@ QString SyncResult::statusString() const void SyncResult::setStatus(Status stat) { _status = stat; - _syncTime = QDateTime::currentDateTime(); + _syncTime = QDateTime::currentDateTimeUtc(); } QDateTime SyncResult::syncTime() const diff --git a/test/mockserver/httpserver.cpp b/test/mockserver/httpserver.cpp index c1f2a0cee..fbc24e847 100644 --- a/test/mockserver/httpserver.cpp +++ b/test/mockserver/httpserver.cpp @@ -32,7 +32,7 @@ void HttpServer::readClient() "Content-Type: text/html; charset=\"utf-8\"\r\n" "\r\n" "

Nothing to see here

\n" - << QDateTime::currentDateTime().toString() << "\n"; + << QDateTime::currentDateTimeUtc().toString() << "\n"; socket->close(); QtServiceBase::instance()->logMessage("Wrote to client"); diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index cabac73bf..9253b6285 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -41,7 +41,7 @@ inline QString getFilePathFromUrl(const QUrl &url) { inline QString generateEtag() { - return QString::number(QDateTime::currentDateTime().toMSecsSinceEpoch(), 16); + return QString::number(QDateTime::currentDateTimeUtc().toMSecsSinceEpoch(), 16); } inline QByteArray generateFileId() { return QByteArray::number(qrand(), 16); @@ -97,7 +97,7 @@ public: file.write(buf.data(), size % buf.size()); file.close(); // Set the mtime 30 seconds in the past, for some tests that need to make sure that the mtime differs. - OCC::FileSystem::setModTime(file.fileName(), OCC::Utility::qDateTimeToTime_t(QDateTime::currentDateTime().addSecs(-30))); + OCC::FileSystem::setModTime(file.fileName(), OCC::Utility::qDateTimeToTime_t(QDateTime::currentDateTimeUtc().addSecs(-30))); QCOMPARE(file.size(), size); } void setContents(const QString &relativePath, char contentChar) override { diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index a4c4c5be4..169c2e6fb 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -358,7 +358,7 @@ private slots: FileInfo &remoteInfo = dynamic_cast(fakeFolder.remoteModifier()); // Base mtime with no ms content (filesystem is seconds only) - auto mtime = QDateTime::currentDateTime().addDays(-4); + auto mtime = QDateTime::currentDateTimeUtc().addDays(-4); mtime.setMSecsSinceEpoch(mtime.toMSecsSinceEpoch() / 1000 * 1000); // Conflict: Same content, mtime, but no server checksum @@ -414,9 +414,9 @@ private slots: */ void testSyncFileItemProperties() { - auto initialMtime = QDateTime::currentDateTime().addDays(-7); - auto changedMtime = QDateTime::currentDateTime().addDays(-4); - auto changedMtime2 = QDateTime::currentDateTime().addDays(-3); + auto initialMtime = QDateTime::currentDateTimeUtc().addDays(-7); + auto changedMtime = QDateTime::currentDateTimeUtc().addDays(-4); + auto changedMtime2 = QDateTime::currentDateTimeUtc().addDays(-3); // Base mtime with no ms content (filesystem is seconds only) initialMtime.setMSecsSinceEpoch(initialMtime.toMSecsSinceEpoch() / 1000 * 1000); From 706c68f69cd0e118745b466925afeb9ff4ca9816 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 27 Sep 2017 02:18:33 +0200 Subject: [PATCH 114/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 160 +++++++++++++++++------------------ translations/client_cs.ts | 160 +++++++++++++++++------------------ translations/client_de.ts | 160 +++++++++++++++++------------------ translations/client_el.ts | 160 +++++++++++++++++------------------ translations/client_en.ts | 160 +++++++++++++++++------------------ translations/client_es.ts | 160 +++++++++++++++++------------------ translations/client_es_AR.ts | 160 +++++++++++++++++------------------ translations/client_et.ts | 160 +++++++++++++++++------------------ translations/client_eu.ts | 160 +++++++++++++++++------------------ translations/client_fa.ts | 160 +++++++++++++++++------------------ translations/client_fi.ts | 160 +++++++++++++++++------------------ translations/client_fr.ts | 160 +++++++++++++++++------------------ translations/client_gl.ts | 160 +++++++++++++++++------------------ translations/client_hu.ts | 160 +++++++++++++++++------------------ translations/client_it.ts | 160 +++++++++++++++++------------------ translations/client_ja.ts | 160 +++++++++++++++++------------------ translations/client_nb_NO.ts | 160 +++++++++++++++++------------------ translations/client_nl.ts | 160 +++++++++++++++++------------------ translations/client_pl.ts | 160 +++++++++++++++++------------------ translations/client_pt.ts | 160 +++++++++++++++++------------------ translations/client_pt_BR.ts | 160 +++++++++++++++++------------------ translations/client_ru.ts | 160 +++++++++++++++++------------------ translations/client_sk.ts | 160 +++++++++++++++++------------------ translations/client_sl.ts | 160 +++++++++++++++++------------------ translations/client_sr.ts | 160 +++++++++++++++++------------------ translations/client_sv.ts | 160 +++++++++++++++++------------------ translations/client_th.ts | 160 +++++++++++++++++------------------ translations/client_tr.ts | 160 +++++++++++++++++------------------ translations/client_uk.ts | 160 +++++++++++++++++------------------ translations/client_zh_CN.ts | 160 +++++++++++++++++------------------ translations/client_zh_TW.ts | 160 +++++++++++++++++------------------ 32 files changed, 2483 insertions(+), 2480 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 5cb300bd6..d6bbc9d00 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -156,6 +156,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index b3d88666c..025759838 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -741,31 +741,31 @@ Consulteu el registre per obtenir més informació.
Activitat de sincronització - + Could not read system exclude file No s'ha pogut llegir el fitxer d'exclusió del sistema - + A new folder larger than %1 MB has been added: %2. S'ha afegit una carpeta de més de %1 MB: %2. - + A folder from an external storage has been added. S'ha afegit una carpeta d'una font d'emmagatzematge extern. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -773,46 +773,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Esborra tots els fitxers? - + Remove all files Esborra tots els fitxers - + Keep files Mantén els fitxers - + This sync would reset the files to an earlier 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? - + Backup detected Copia de seguretat detectada - + Normal Synchronisation Sincronització normal - + Keep Local Files as Conflict Manté els fitxers locals com a conflicte @@ -1683,32 +1683,32 @@ Els elements que poden ser eliminats s'eliminaran si impedeixen que una car OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3094,300 +3094,300 @@ No és aconsellada usar-la. OCC::SyncEngine - + Success. Èxit. - + CSync failed to load the journal file. The journal file is corrupted. CSync ha fallat en carregar el fitxer del registre de transaccions. El fitxer està corromput. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>No s'ha pogut carregar el connector %1 per csync.<br/>Comproveu la instal·lació!</p> - + CSync fatal parameter error. Error fatal de paràmetre en CSync. - + CSync processing step update failed. El pas d'actualització del processat de CSync ha fallat. - + CSync processing step reconcile failed. El pas de reconciliació del processat de CSync ha fallat. - + CSync could not authenticate at the proxy. CSync no s'ha pogut acreditar amb el proxy. - + CSync failed to lookup proxy or server. CSync ha fallat en cercar el proxy o el servidor. - + CSync failed to authenticate at the %1 server. L'autenticació de CSync ha fallat al servidor %1. - + CSync failed to connect to the network. CSync ha fallat en connectar-se a la xarxa. - + A network connection timeout happened. Temps excedit en la connexió. - + A HTTP transmission error happened. S'ha produït un error en la transmissió HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder S'ha produït un error en obrir una carpeta - + Error while reading folder. Error en llegir la carpeta. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. El fitxer/carpeta s'ha ignorat perquè és ocult. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: No hi ha espai disponible al servidor %1. - + CSync unspecified error. Error inespecífic de CSync. - + Aborted by the user Aturat per l'usuari - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable El servei no està disponible temporalment - + Access is forbidden Accés prohibit - + An internal error number %1 occurred. S'ha produït l'error intern número %1. - + Symbolic links are not supported in syncing. La sincronització d'enllaços simbòlics no està implementada. - + File is listed on the ignore list. El fitxer està a la llista d'ignorats. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. El nom de fitxer és massa llarg. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid La codificació del nom de fitxer no és vàlida - + Invalid characters, please rename "%1" Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 8ce2c8c7d..0252d31cf 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -739,30 +739,30 @@ Průběh synchronizace - + Could not read system exclude file Nezdařilo se přečtení systémového exclude souboru - + A new folder larger than %1 MB has been added: %2. Nová složka větší než %1 MB byla přidána: %2. - + A folder from an external storage has been added. Byla přidána složka z externího úložiště. - + Please go in the settings to select it if you wish to download it. Pokud to chcete stáhnout, běžte do nastavení a vyberte to. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -772,7 +772,7 @@ Tyto soubory budou smazány i ve vaší místní synchronizované složce a nebu Rozhodnete-li se soubory smazat, budou vám nedostupné, nejste-li jejich vlastníkem. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -781,22 +781,22 @@ Jste si jisti, že chcete tyto akce synchronizovat se serverem? Pokud to byl omyl a chcete si soubory ponechat, budou opět synchronizovány ze serveru. - + Remove All Files? Odstranit všechny soubory? - + Remove all files Odstranit všechny soubory - + Keep files Ponechat soubory - + This sync would reset the files to an earlier 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? @@ -805,17 +805,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? - + Backup detected Záloha nalezena - + Normal Synchronisation Normální synchronizace - + Keep Local Files as Conflict Ponechat místní soubory jako konflikt @@ -1686,32 +1686,32 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3097,300 +3097,300 @@ Nedoporučuje se jí používat. OCC::SyncEngine - + Success. Úspěch. - + CSync failed to load the journal file. The journal file is corrupted. Nezdařilo se načtení žurnálovacího souboru CSync. Žurnálovací soubor je poškozený. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Plugin %1 pro csync nelze načíst.<br/>Zkontrolujte prosím instalaci!</p> - + CSync fatal parameter error. CSync: kritická chyba parametrů. - + CSync processing step update failed. CSync se nezdařilo zpracovat krok aktualizace. - + CSync processing step reconcile failed. CSync se nezdařilo zpracovat krok sladění. - + CSync could not authenticate at the proxy. CSync se nemohlo přihlásit k proxy. - + CSync failed to lookup proxy or server. CSync se nezdařilo najít proxy server nebo cílový server. - + CSync failed to authenticate at the %1 server. CSync se nezdařilo přihlásit k serveru %1. - + CSync failed to connect to the network. CSync se nezdařilo připojit k síti. - + A network connection timeout happened. Došlo k vypršení časového limitu síťového spojení. - + A HTTP transmission error happened. Nastala chyba HTTP přenosu. - + The mounted folder is temporarily not available on the server Připojený adresář je na serveru dočasně nedostupný - + An error occurred while opening a folder Došlo k chybě při otvírání adresáře - + Error while reading folder. Chyba při čtení adresáře. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Soubor/adresář je ignorován, protože je skrytý. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Nedostatek volného místa na serveru %1. - + CSync unspecified error. Nespecifikovaná chyba CSync. - + Aborted by the user Zrušeno uživatelem - + CSync failed to access Selhal přístup pro CSync - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync se nepodařilo načíst či vytvořit soubor žurnálu. Ujistěte se, že máte oprávnění pro čtení a zápis do místního adresáře synchronizace. - + CSync failed due to unhandled permission denied. CSync selhalo z důvodu nezpracovaného zamítnutí oprávnění. - + CSync tried to create a folder that already exists. CSync se pokusil vytvořit adresář, který již existuje. - + The service is temporarily unavailable Služba je dočasně nedostupná - + Access is forbidden Přístup je zakázán - + An internal error number %1 occurred. Došlo k interní chybě číslo %1. - + Symbolic links are not supported in syncing. Symbolické odkazy nejsou při synchronizaci podporovány. - + File is listed on the ignore list. Soubor se nachází na seznamu ignorovaných. - + File names ending with a period are not supported on this file system. Jména souborů končících tečkou nejsou na tomto systému souborů podporována. - + File names containing the character '%1' are not supported on this file system. Názvy souborů obsahující znak '%1' nejsou na tomto souborovém systému podporovány. - + The file name is a reserved name on this file system. Jméno souboru je na tomto systému souborů rezervovaným jménem. - + Filename contains trailing spaces. Jméno souboru obsahuje mezery na konci řádky. - + Filename is too long. Jméno souboru je příliš dlouhé. - + Unresolved conflict. - + Stat failed. Stat selhal. - + Filename encoding is not valid Kódování znaků jména soubor je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj diff --git a/translations/client_de.ts b/translations/client_de.ts index af4c59d93..def42154d 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -739,31 +739,31 @@ Synchronisierungsaktivität - + Could not read system exclude file Systemeigene Ausschlussdatei kann nicht gelesen werden - + A new folder larger than %1 MB has been added: %2. Ein neues Verzeichnis größer als %1 MB wurde hinzugefügt: %2. - + A folder from an external storage has been added. Ein Verzeichnis, von einem externen Speicher wurde hinzugefügt. - + Please go in the settings to select it if you wish to download it. Bitte wechseln Sie zu den Einstellungen, falls Sie das Verzeichnis herunterladen möchten. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ Wenn Sie sich dazu entscheiden, diese Dateien zu behalten, werden diese wieder z Wenn Sie sich zum Löschen der Dateien entscheiden, sind diese nicht mehr verfügbar, außer Sie sind der Eigentümer. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ Sind Sie sich sicher, dass Sie diese Aktion mit Ihrem Server synchronisieren mö Falls dies ein Missgeschick war und Sie sich zum Behalten der Dateien entscheiden, werden diese wieder vom Server synchronisiert. - + Remove All Files? Alle Dateien löschen? - + Remove all files Lösche alle Dateien - + Keep files Dateien behalten - + This sync would reset the files to an earlier 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? @@ -807,17 +807,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 lokalen Dateien als Konflikt-Dateien behalten? - + Backup detected Backup erkannt - + Normal Synchronisation Normale Synchronisation - + Keep Local Files as Conflict Lokale Konfliktdateien behalten @@ -1688,32 +1688,32 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun OCC::OAuth - + Error returned from the server: <em>%1</em> Fehler vom Server zurückgegeben: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3098,300 +3098,300 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SyncEngine - + Success. Erfolgreich - + CSync failed to load the journal file. The journal file is corrupted. CSync konnte die Journaldatei nicht laden. Die Journaldatei ist beschädigt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Das %1-Plugin für csync konnte nicht geladen werden.<br/>Bitte überprüfen Sie die Installation!</p> - + CSync fatal parameter error. CSync hat einen schwerwiegender Parameterfehler festgestellt. - + CSync processing step update failed. CSync Verarbeitungsschritt "Aktualisierung" fehlgeschlagen. - + CSync processing step reconcile failed. CSync Verarbeitungsschritt "Abgleich" fehlgeschlagen. - + CSync could not authenticate at the proxy. CSync konnte sich nicht am Proxy authentifizieren. - + CSync failed to lookup proxy or server. CSync konnte den Proxy oder Server nicht auflösen. - + CSync failed to authenticate at the %1 server. CSync konnte sich nicht am Server %1 authentifizieren. - + CSync failed to connect to the network. CSync konnte sich nicht mit dem Netzwerk verbinden. - + A network connection timeout happened. Eine Zeitüberschreitung der Netzwerkverbindung ist aufgetreten. - + A HTTP transmission error happened. Es hat sich ein HTTP-Übertragungsfehler ereignet. - + The mounted folder is temporarily not available on the server Der auf dem Server eingehängte Ordner ist vorübergehend nicht verfügbar - + An error occurred while opening a folder Beim Öffnen eines Ordners ist ein Fehler aufgetreten. - + Error while reading folder. Fehler beim Lesen eines Ordners. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Datei wird ignoriert, weil sie versteckt ist. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Kein Platz auf Server %1 frei. - + CSync unspecified error. CSync unbekannter Fehler. - + Aborted by the user Abbruch durch den Benutzer - + CSync failed to access CSync-Zugriff fehlgeschlagen - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync konnte das Journal nicht laden oder erstellen. Stellen Sie bitte sicher, dass Sie Lese- und Schreibrechte im lokalen Synchronisationsordner haben. - + CSync failed due to unhandled permission denied. CSync wegen fehlender Berechtigung fehlgeschlagen. - + CSync tried to create a folder that already exists. CSync versuchte einen Ordner anzulegen, der schon existiert. - + The service is temporarily unavailable Der Dienst ist vorübergehend nicht erreichbar - + Access is forbidden Zugriff verboten - + An internal error number %1 occurred. Ein interner Fehler mit der Fehlernummer %1 ist aufgetreten. - + Symbolic links are not supported in syncing. Symbolische Verknüpfungen werden bei der Synchronisation nicht unterstützt. - + File is listed on the ignore list. Die Datei ist in der Ignorierliste geführt. - + File names ending with a period are not supported on this file system. Dateinamen enden mit einem Punkt, die in diesem Dateisystem nicht unterstützt wird. - + File names containing the character '%1' are not supported on this file system. Dateinamen beinhalten das Zeichen '%1' und diese werden in diesem Dateisystems nicht unterstützt. - + The file name is a reserved name on this file system. Der Dateiname ist ein reservierter Name in diesem Dateisystem. - + Filename contains trailing spaces. Dateiname endet mit Leerzeichen. - + Filename is too long. Der Dateiname ist zu lang. - + Unresolved conflict. - + Stat failed. Stat fehlgeschlagen. - + Filename encoding is not valid Dateikodierung ist ungültig - + Invalid characters, please rename "%1" Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle diff --git a/translations/client_el.ts b/translations/client_el.ts index d0c759c63..d68b3af48 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -739,31 +739,31 @@ Δραστηριότητα Συγχρονισμού - + Could not read system exclude file Αδυναμία ανάγνωσης αρχείου αποκλεισμού συστήματος - + A new folder larger than %1 MB has been added: %2. Προστέθηκε ένας νέος φάκελος μεγαλύτερος από %1 MB: %2 - + A folder from an external storage has been added. Προστέθηκε ένας φάκελος από εξωτερικό αποθηκευτικό χώρο. - + Please go in the settings to select it if you wish to download it. Μεταβείτε στις ρυθμίσεις για να το επιλέξετε εάν επιθυμείτε να το κατεβάσετε. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Εφόσον επιλέξετε να διαγράψετε τα αρχεία, δε θα είναι διαθέσιμα σε εσάς, εκτός εάν είστε ο ιδιοκτήτης τους. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Αν αυτό ήταν ένα ατύχημα και αποφασίσατε να διατηρήσετε τα αρχεία σας, θα συγχρονιστούν εκ νέου από το διακομιστή. - + Remove All Files? Αφαίρεση Όλων των Αρχείων; - + Remove all files Αφαίρεση όλων των αρχείων - + Keep files Διατήρηση αρχείων - + This sync would reset the files to an earlier 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? @@ -807,17 +807,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an Η συνέχιση του συγχρονισμού κανονικά θα προκαλέσει την αντικατάσταση όλων των αρχείων σας από παλιότερο αρχείο σε προηγούμενη κατάσταση. Θέλετε να διατηρήσετε τα τοπικά σας πιο πρόσφατα αρχεία ως αρχεία σύγκρουσης; - + Backup detected Ανιχνεύθηκε αντίγραφο ασφαλείας - + Normal Synchronisation Κανονικός συγχρονισμός - + Keep Local Files as Conflict Διατήρηση τοπικών αρχείων ως Διένεξη @@ -1688,32 +1688,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3099,300 +3099,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Επιτυχία. - + CSync failed to load the journal file. The journal file is corrupted. Το CSync απέτυχε να φορτώσει ο αρχείο καταλόγου. Το αρχείο καταλόγου έχει καταστραφεί. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Το πρόσθετο του %1 για το csync δεν μπόρεσε να φορτωθεί.<br/>Παρακαλούμε επαληθεύσετε την εγκατάσταση!</p> - + CSync fatal parameter error. Μοιραίο σφάλμα παράμετρου CSync. - + CSync processing step update failed. Η ενημέρωση του βήματος επεξεργασίας του CSync απέτυχε. - + CSync processing step reconcile failed. CSync στάδιο επεξεργασίας συμφιλίωση απέτυχε. - + CSync could not authenticate at the proxy. Το CSync δεν μπόρεσε να πιστοποιηθεί στο διακομιστή μεσολάβησης. - + CSync failed to lookup proxy or server. Το CSync απέτυχε να διερευνήσει το διαμεσολαβητή ή το διακομιστή. - + CSync failed to authenticate at the %1 server. Το CSync απέτυχε να πιστοποιηθεί στο διακομιστή 1%. - + CSync failed to connect to the network. Το CSync απέτυχε να συνδεθεί με το δίκτυο. - + A network connection timeout happened. Διακοπή σύνδεσης δικτύου λόγω παρέλευσης χρονικού ορίου. - + A HTTP transmission error happened. Ένα σφάλμα μετάδοσης HTTP συνέβη. - + The mounted folder is temporarily not available on the server Ο προσαρτημένος φάκελος δεν είναι διαθέσιμος στον δικομιστή προσωρινά - + An error occurred while opening a folder Παρουσιάστηκε σφάλμα κατά το άνοιγμα του φακέλου - + Error while reading folder. Σφάλμα κατά την ανάγνωση του φακέλου. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Το Αρχείο/ο Φάκελος αγνοήθηκε επειδή είναι κρυφό. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Δεν υπάρχει διαθέσιμος χώρος στο διακομιστή 1%. - + CSync unspecified error. Άγνωστο σφάλμα CSync. - + Aborted by the user Ματαιώθηκε από το χρήστη - + CSync failed to access Το CSync απέτυχε να αποκτήσει πρόσβαση - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Το CSync απέτυχε να φορτώσει ή να δημιουργήσει το αρχείο καταγραφής. Βεβαιωθείτε ότι έχετε άδεια ανάγνωσης και εγγραφής στον τοπικό κατάλογο συγχρονισμού. - + CSync failed due to unhandled permission denied. Το CSync απέτυχε λόγω κατάστασης "permission denied" - + CSync tried to create a folder that already exists. Το CSync προσπάθησε να δημιουργήσει φάκελο που υπάρχει ήδη. - + The service is temporarily unavailable Η υπηρεσία δεν είναι διαθέσιμη προσωρινά - + Access is forbidden Δεν επιτρέπεται η πρόσβαση - + An internal error number %1 occurred. Προέκυψε ένα εσωτερικό σφάλμα με αριθμό %1. - + Symbolic links are not supported in syncing. Οι συμβολικού σύνδεσμοι δεν υποστηρίζονται για το συγχρονισμό. - + File is listed on the ignore list. Το αρχείο περιέχεται στη λίστα αρχείων προς αγνόηση. - + File names ending with a period are not supported on this file system. Τα ονόματα αρχείων που διαρκούν μια ορισμένη χρονική περίοδο δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + File names containing the character '%1' are not supported on this file system. Τα ονόματα αρχείων που περιέχουν τον χαρακτήρα '% 1' δεν υποστηρίζονται σε αυτό το σύστημα αρχείων. - + The file name is a reserved name on this file system. Το όνομα αρχείου είναι ένα κατοχυρωμένο όνομα σε αυτό το σύστημα αρχείων. - + Filename contains trailing spaces. Το όνομα του αρχείου περιέχει συνεχόμενα κενά. - + Filename is too long. Το όνομα αρχείου είνια πολύ μεγάλο. - + Unresolved conflict. - + Stat failed. Απέτυχε. - + Filename encoding is not valid Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Invalid characters, please rename "%1" Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση diff --git a/translations/client_en.ts b/translations/client_en.ts index c68f193ff..60387dfaf 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -768,29 +768,29 @@ - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -798,46 +798,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? - + Remove all files - + Keep files - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1709,32 +1709,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3116,300 +3116,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> - + CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. - + A network connection timeout happened. - + A HTTP transmission error happened. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. - + CSync unspecified error. - + Aborted by the user - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_es.ts b/translations/client_es.ts index 28fbdef80..41c44fdc8 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -739,31 +739,31 @@ Actividad de la sincronización - + Could not read system exclude file No se ha podido leer el archivo de exclusión del sistema - + A new folder larger than %1 MB has been added: %2. Una carpeta mayor de %1 MB ha sido añadida: %2. - + A folder from an external storage has been added. Una carpeta de almacenamiento externo ha sido añadida. - + Please go in the settings to select it if you wish to download it. Por favor vaya a opciones a seleccionarlo si desea descargar esto. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ Si decide mantener estos archivos, serán re-sincronizados con el servidor si Vd Si decide borrarlos, no serán visibles para Vd. a menos que sea usted el propietario. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Si ha sido un accidente, y decide mantener los archivos, serán re-sincronizados con el servidor. - + Remove All Files? ¿Eliminar todos los archivos? - + Remove all files Eliminar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? @@ -807,17 +807,17 @@ Esto puede deberse a que una copia de seguridad fue restaurada en el servidor. Si continua con la sincronización todos los archivos serán remplazados por su versión previa. ¿Desea mantener los archivos locales en su versión actual como archivos en conflicto? - + Backup detected Backup detectado - + Normal Synchronisation Sincronización Normal - + Keep Local Files as Conflict Mantener los archivos locales en caso de conflicto @@ -1688,32 +1688,32 @@ Los elementos cuya eliminación está permitida serán eliminados si impiden que OCC::OAuth - + Error returned from the server: <em>%1</em> Error devuelto desde el servidor: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> Ha ocurrido un error accediendo al Token endpoint:: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> No puedo procesar el código JSON recibido del servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields La respuesta del servidor no contiene todos los campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Error de Login</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> <h1>Usuario incorrecto</h1><p>Se ha intentado logar con el usuario: <em>%1</em>, pero debe logarse con el usuario: <em>%2</em>.<br>Por favor des-loguese de %3 en otra pestaña, entonces<a href='%4'>click aqui</a> y loguese como el usuario %2</p> @@ -3098,300 +3098,300 @@ No se recomienda usarla. OCC::SyncEngine - + Success. Completado con éxito. - + CSync failed to load the journal file. The journal file is corrupted. CSync falló al cargar el archivo de diaro. El darchivo de diario se encuentra corrupto. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>El %1 complemento para csync no se ha podido cargar.<br/>Por favor, verifique la instalación</p> - + CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. El proceso de actualización de CSync ha fallado. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la búsqueda del proxy - + CSync failed to authenticate at the %1 server. CSync: Falló la autenticación con el servidor %1. - + CSync failed to connect to the network. CSync: Falló la conexión con la red. - + A network connection timeout happened. Se sobrepasó el tiempo de espera de la conexión de red. - + A HTTP transmission error happened. Se ha producido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server El directorio montado no está disponible temporalmente en el servidor - + An error occurred while opening a folder Se produjo un error al abrir un directorio - + Error while reading folder. Error al leer el directorio. - + %1 (skipped due to earlier error, trying again in %2) %1 (no realizado por el error anterior, intente de nuevo %2) - + File/Folder is ignored because it's hidden. Se ignoran los Archivos/Carpetas ocultos. - + Folder hierarchy is too deep demasiadas subcarpetas anidadas - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflicto: Versión del servidor descargada, La copia local ha sido renombrada pero no se ha podido subir. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. - + There is insufficient space available on the server for some uploads. No hay suficiente espacio libre en el servidor para algunas subidas. - + CSync: No space on %1 server available. CSync: No queda espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access CSync ha fallado al acceder - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falló al cargar o crear el archivo de diario. Asegúrese de tener permisos de lectura y escritura en el directorio local de sincronización. - + CSync failed due to unhandled permission denied. CSync falló debido a un permiso denegado. - + CSync tried to create a folder that already exists. CSync trató de crear un directorio que ya existe. - + The service is temporarily unavailable El servicio no está disponible temporalmente - + Access is forbidden Acceso prohibido - + An internal error number %1 occurred. Ocurrió un error interno número %1. - + Symbolic links are not supported in syncing. No se admiten enlaces simbólicos en la sincronización. - + File is listed on the ignore list. El fichero está en la lista de ignorados - + File names ending with a period are not supported on this file system. Los nombres de archivo que terminan con un punto no son compatibles con este sistema de archivos. - + File names containing the character '%1' are not supported on this file system. Los nombres de archivo que contengan el caracter '%1' no son compatibles con este sistema de archivos. - + The file name is a reserved name on this file system. El nombre del archivo es una palabra reservada del sistema de archivos. - + Filename contains trailing spaces. El nombre del archivo contiene espacios finales. - + Filename is too long. El nombre del archivo es demasiado largo. - + Unresolved conflict. Conflicto sin resolver. - + Stat failed. Stat ha fallado. - + Filename encoding is not valid Los caracteres del nombre de fichero no son válidos - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 0aaf36a31..6ce2177fe 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -739,29 +739,29 @@ Actividad de Sync - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? ¿Borrar todos los archivos? - + Remove all files Borrar todos los archivos - + Keep files Conservar archivos - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3084,300 +3084,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Éxito. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>No fue posible cargar el plugin de %1 para csync.<br/>Por favor, verificá la instalación</p> - + CSync fatal parameter error. Error fatal de parámetro en CSync. - + CSync processing step update failed. Falló el proceso de actualización de CSync. - + CSync processing step reconcile failed. Falló el proceso de composición de CSync - + CSync could not authenticate at the proxy. CSync no pudo autenticar el proxy. - + CSync failed to lookup proxy or server. CSync falló al realizar la busqueda del proxy. - + CSync failed to authenticate at the %1 server. CSync: fallo al autenticarse en el servidor %1. - + CSync failed to connect to the network. CSync: fallo al conectarse a la red - + A network connection timeout happened. - + A HTTP transmission error happened. Ha ocurrido un error de transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: No hay más espacio disponible en el servidor %1. - + CSync unspecified error. Error no especificado de CSync - + Aborted by the user Interrumpido por el usuario - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Los vínculos simbólicos no está soportados al sincronizar. - + File is listed on the ignore list. El archivo está en la lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_et.ts b/translations/client_et.ts index 813cec250..8dbc49a9c 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -739,29 +739,29 @@ Sünkroniseerimise tegevus - + Could not read system exclude file Süsteemi väljajätmiste faili lugemine ebaõnnestus - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Kustutada kõik failid? - + Remove all files Kustutada kõik failid - + Keep files Säilita failid - + This sync would reset the files to an earlier 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? - + Backup detected Leiti varukoopia - + Normal Synchronisation Tavaline sünkroonimine - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3087,300 +3087,300 @@ Selle kasutamine pole soovitatav. OCC::SyncEngine - + Success. Korras. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Ei suuda laadida csync lisa %1.<br/>Palun kontrolli paigaldust!</p> - + CSync fatal parameter error. CSync parameetri saatuslik viga. - + CSync processing step update failed. CSync uuendusprotsess ebaõnnestus. - + CSync processing step reconcile failed. CSync tasakaalustuse protsess ebaõnnestus. - + CSync could not authenticate at the proxy. CSync ei suutnud puhverserveris autoriseerida. - + CSync failed to lookup proxy or server. Csync ei suuda leida puhverserverit. - + CSync failed to authenticate at the %1 server. CSync autoriseering serveris %1 ebaõnnestus. - + CSync failed to connect to the network. CSync võrguga ühendumine ebaõnnestus. - + A network connection timeout happened. Toimus võrgukatkestus. - + A HTTP transmission error happened. HTTP ülekande viga. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Serveris %1 on ruum otsas. - + CSync unspecified error. CSync tuvastamatu viga. - + Aborted by the user Kasutaja poolt tühistatud - + CSync failed to access CSyncile ligipääs ebaõnnestus - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Teenus pole ajutiselt saadaval - + Access is forbidden Ligipääs on keelatud - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Sümboolsed lingid ei ole sünkroniseerimisel toetatud. - + File is listed on the ignore list. Fail on märgitud ignoreeritavate nimistus. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Faili nimi on liiga pikk. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid Failinime kodeering pole kehtiv - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas diff --git a/translations/client_eu.ts b/translations/client_eu.ts index a5bf9687f..acecf0164 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -739,29 +739,29 @@ Sinkronizazio Jarduerak - + Could not read system exclude file Ezin izan da sistemako baztertutakoen fitxategia irakurri - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ezabatu Fitxategi Guztiak? - + Remove all files Ezabatu fitxategi guztiak - + Keep files Mantendu fitxategiak - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1679,32 +1679,32 @@ Ezabatzeko baimena duten itemak ezabatuko dira hauek karpeta bat ezabatzea uzten OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3087,300 +3087,300 @@ Ez da gomendagarria erabltzea. OCC::SyncEngine - + Success. Arrakasta. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csyncen %1 plugina ezin da kargatu.<br/>Mesedez egiaztatu instalazioa!</p> - + CSync fatal parameter error. CSync parametro larri errorea. - + CSync processing step update failed. CSync prozesatzearen eguneratu urratsak huts egin du. - + CSync processing step reconcile failed. CSync prozesatzearen berdinkatze urratsak huts egin du. - + CSync could not authenticate at the proxy. CSyncek ezin izan du proxya autentikatu. - + CSync failed to lookup proxy or server. CSyncek huts egin du zerbitzaria edo proxia bilatzean. - + CSync failed to authenticate at the %1 server. CSyncek huts egin du %1 zerbitzarian autentikatzean. - + CSync failed to connect to the network. CSyncek sarera konektatzean huts egin du. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP transmisio errore bat gertatu da. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Errore bat egon da karpeta bat irekitzearkoan - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ez dago lekurik %1 zerbitzarian. - + CSync unspecified error. CSyncen zehaztugabeko errorea. - + Aborted by the user Erabiltzaileak bertan behera utzita - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. Esteka sinbolikoak ezin dira sinkronizatu. - + File is listed on the ignore list. Fitxategia baztertutakoen zerrendan dago. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 524c096e1..818d6f64d 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -739,29 +739,29 @@ فعالیت همگام سازی - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? حذف تمام فایل ها؟ - + Remove all files حذف تمام فایل ها - + Keep files نگه داشتن فایل ها - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3084,300 +3084,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. موفقیت - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>ماژول %1 برای csync نمی تواند بارگذاری شود.<br/>لطفا نصب را بررسی کنید!</p> - + CSync fatal parameter error. - + CSync processing step update failed. مرحله به روز روسانی پردازش CSync ناموفق بود. - + CSync processing step reconcile failed. مرحله تطبیق پردازش CSync ناموفق بود. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. عدم موفقیت CSync برای مراجعه به پروکسی یا سرور. - + CSync failed to authenticate at the %1 server. عدم موفقیت CSync برای اعتبار دادن در %1 سرور. - + CSync failed to connect to the network. عدم موفقیت CSync برای اتصال به شبکه. - + A network connection timeout happened. - + A HTTP transmission error happened. خطا در انتقال HTTP اتفاق افتاده است. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder یک خطا در هنگام باز کردن یک پوشه رخ داده‌ است - + Error while reading folder. خطا در هنگام خواندن پوشه - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: فضا در %1 سرور در دسترس نیست. - + CSync unspecified error. خطای نامشخص CSync - + Aborted by the user متوقف شده توسط کاربر - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable سرویس بصورت موقت خارج از دسترس است - + Access is forbidden - + An internal error number %1 occurred. یک خطای داخلی با شماره خطای %1 رخ داده است. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. نام فایل خیلی طولانی است. - + Unresolved conflict. - + Stat failed. وضعیت ناموفق - + Filename encoding is not valid رمزگذاری نام فایل معتبر نیست - + Invalid characters, please rename "%1" کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا diff --git a/translations/client_fi.ts b/translations/client_fi.ts index c0dc512fc..b20990aaa 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -739,29 +739,29 @@ Synkronointiaktiviteetti - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Poistetaanko kaikki tiedostot? - + Remove all files Poista kaikki tiedostot - + Keep files Säilytä tiedostot - + This sync would reset the files to an earlier 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? - + Backup detected Varmuuskopio poistettu - + Normal Synchronisation Normaali synkronointi - + Keep Local Files as Conflict @@ -1679,32 +1679,32 @@ Kohteet, joiden poisto on sallittu, poistetaan, jos ne estävät kansion poistam OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3089,300 +3089,300 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SyncEngine - + Success. Onnistui. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>%1-liitännäistä csyncia varten ei voitu ladata.<br/>Varmista asennuksen toimivuus!</p> - + CSync fatal parameter error. - + CSync processing step update failed. - + CSync processing step reconcile failed. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. - + CSync failed to authenticate at the %1 server. - + CSync failed to connect to the network. CSync ei onnistunut yhdistämään verkkoon. - + A network connection timeout happened. Tapahtui verkon aikakatkaisu. - + A HTTP transmission error happened. Tapahtui HTTP-välitysvirhe. - + The mounted folder is temporarily not available on the server Liitetty kansio on väliaikaisesti pois käytöstä tällä palvelimella - + An error occurred while opening a folder Kansiota avatessa tapahtui virhe - + Error while reading folder. Kansiota lukiessa tapahtui virhe - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Tiedosto/kansi ohitetaan, koska se on piilotettu. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1-palvelimella ei ole tilaa vapaana. - + CSync unspecified error. CSync - määrittämätön virhe. - + Aborted by the user Keskeytetty käyttäjän toimesta - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Palvelu ei ole juuri nyt käytettävissä - + Access is forbidden Pääsy estetty - + An internal error number %1 occurred. Sisäinen virhe, numero %1. - + Symbolic links are not supported in syncing. Symboliset linkit eivät ole tuettuja synkronoinnissa. - + File is listed on the ignore list. Tiedosto on ohituslistalla. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Tiedoston nimi on liian pitkä. - + Unresolved conflict. - + Stat failed. Stat epäonnistui. - + Filename encoding is not valid Tiedostonimen merkistökoodaus ei ole kelvollista - + Invalid characters, please rename "%1" Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde diff --git a/translations/client_fr.ts b/translations/client_fr.ts index c3be15e30..b0209b248 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -739,19 +739,19 @@ Activité de synchronisation - + Could not read system exclude file Impossible de lire le fichier d'exclusion du système - + A new folder larger than %1 MB has been added: %2. Un nouveau dossier de taille supérieure à %1 Mo a été ajouté : %2. - + A folder from an external storage has been added. Un nouveau dossier localisé sur un stockage externe a été ajouté. @@ -759,12 +759,12 @@ - + Please go in the settings to select it if you wish to download it. Merci d'aller dans les Paramètres pour indiquer si vous souhaitez le télécharger. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -775,7 +775,7 @@ Si vous décidez de garder ces fichiers, ils seront synchronisés à nouveau ave Si vous décidez de supprimer ces fichiers, ils vous seront inaccessibles, sauf si vous en êtes le propriétaire. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -784,22 +784,22 @@ If this was an accident and you decide to keep your files, they will be re-synce S'il s'agissait d'un accident et que vous choisissiez de garder vos fichiers, ils seront synchronisés à nouveau depuis le serveur. - + Remove All Files? Supprimer tous les fichiers ? - + Remove all files Supprimer tous les fichiers - + Keep files Garder les fichiers - + This sync would reset the files to an earlier 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? @@ -808,17 +808,17 @@ Cela peut être dû à une copie de sauvegarde restaurée sur le serveur. Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? - + Backup detected Sauvegarde détectée - + Normal Synchronisation Synchronisation normale - + Keep Local Files as Conflict Garder les fichiers locaux comme Conflits @@ -1689,32 +1689,32 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3100,300 +3100,300 @@ Il est déconseillé de l'utiliser. OCC::SyncEngine - + Success. Succès. - + CSync failed to load the journal file. The journal file is corrupted. CSync a échoué à charger du fichier journal. Le fichier journal est corrompu. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Le module additionnel %1 pour csync n'a pas pu être chargé.<br/>Merci de vérifier votre installation !</p> - + CSync fatal parameter error. Erreur fatale CSync : mauvais paramètre. - + CSync processing step update failed. Erreur CSync lors de l'opération de mise à jour - + CSync processing step reconcile failed. Erreur CSync lors de l'opération de réconciliation - + CSync could not authenticate at the proxy. CSync n'a pu s'authentifier auprès du proxy. - + CSync failed to lookup proxy or server. CSync n'a pu trouver le proxy ou serveur auquel se connecter. - + CSync failed to authenticate at the %1 server. CSync n'a pu s'authentifier auprès du serveur %1. - + CSync failed to connect to the network. CSync n'a pu établir une connexion au réseau. - + A network connection timeout happened. Le délai d'attente de la connexion réseau a été dépassé. - + A HTTP transmission error happened. Une erreur de transmission HTTP s'est produite. - + The mounted folder is temporarily not available on the server Le dossier monté est temporairement indisponible sur le serveur - + An error occurred while opening a folder Une erreur est survenue lors de l'ouverture d'un dossier - + Error while reading folder. Erreur lors de la lecture du dossier. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Le fichier ou dossier a été ignoré car il est masqué. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync : Aucun espace disponible sur le serveur %1. - + CSync unspecified error. Erreur CSync inconnue. - + Aborted by the user Interrompu par l'utilisateur - + CSync failed to access CSync n'a pas pu accéder à - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync n’a pu charger ou créer le fichier de journalisation. Veuillez vérifier que vous possédez les droits en lecture/écriture dans le dossier de synchronisation local. - + CSync failed due to unhandled permission denied. CSync a échoué en raison d'un refus de permission non pris en charge. - + CSync tried to create a folder that already exists. CSync a tenté de créer un dossier déjà présent. - + The service is temporarily unavailable Le service est temporairement indisponible. - + Access is forbidden L'accès est interdit - + An internal error number %1 occurred. Une erreur interne numéro %1 est survenue. - + Symbolic links are not supported in syncing. Les liens symboliques ne sont pas pris en charge par la synchronisation. - + File is listed on the ignore list. Le fichier est présent dans la liste des fichiers à exclure. - + File names ending with a period are not supported on this file system. Les noms de fichier se terminant par un point ne sont pas pris en charge sur votre système. - + File names containing the character '%1' are not supported on this file system. Les noms de fichier contenant le caractère '%1' ne sont pas pris en charge sur votre système. - + The file name is a reserved name on this file system. Le nom du fichier est réservé sur votre système. - + Filename contains trailing spaces. Le nom du fichier se fini par des espaces. - + Filename is too long. Le nom de fichier est trop long. - + Unresolved conflict. - + Stat failed. Stat échoué. - + Filename encoding is not valid L'encodage du nom de fichier n'est pas valide - + Invalid characters, please rename "%1" Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source diff --git a/translations/client_gl.ts b/translations/client_gl.ts index d8665cc0e..ab9eb015c 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -739,29 +739,29 @@ Actividade de sincronización - + Could not read system exclude file Non foi posíbel ler o ficheiro de exclusión do sistema - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Retirar todos os ficheiros? - + Remove all files Retirar todos os ficheiros - + Keep files Manter os ficheiros - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3088,300 +3088,300 @@ Recomendámoslle que non o use. OCC::SyncEngine - + Success. Correcto. - + CSync failed to load the journal file. The journal file is corrupted. Produciuse un fallo en CSync ao cargar o ficheiro de rexistro. O ficheiro de rexistro está estragado. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Non foi posíbel cargar o engadido %1 para CSync.<br/>Verifique a instalación!</p> - + CSync fatal parameter error. Produciuse un erro fatal de parámetro CSync. - + CSync processing step update failed. Produciuse un fallo ao procesar o paso de actualización de CSync. - + CSync processing step reconcile failed. Produciuse un fallo ao procesar o paso de reconciliación de CSync. - + CSync could not authenticate at the proxy. CSync non puido autenticarse no proxy. - + CSync failed to lookup proxy or server. CSYNC no puido atopar o servidor proxy. - + CSync failed to authenticate at the %1 server. CSync non puido autenticarse no servidor %1. - + CSync failed to connect to the network. CSYNC no puido conectarse á rede. - + A network connection timeout happened. Excedeuse do tempo de espera para a conexión á rede. - + A HTTP transmission error happened. Produciuse un erro na transmisión HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Non hai espazo dispoñíbel no servidor %1. - + CSync unspecified error. Produciuse un erro non especificado de CSync - + Aborted by the user Interrompido polo usuario - + CSync failed to access Produciuse un fallo ao reservar memoria para CSync. - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable O servizo está temporalmente inaccesíbel. - + Access is forbidden - + An internal error number %1 occurred. Produciuse un erro interno número %1. - + Symbolic links are not supported in syncing. As ligazóns simbolicas non son admitidas nas sincronizacións - + File is listed on the ignore list. O ficheiro está na lista de ignorados. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. O nome de ficheiro é longo de máis. - + Unresolved conflict. - + Stat failed. Fallou a obtención de estatísticas. - + Filename encoding is not valid O nome de ficheiro codificado non é correcto - + Invalid characters, please rename "%1" Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 2a6b14870..3fe2ec6fb 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -739,29 +739,29 @@ Szinkronizálási aktivitás - + Could not read system exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Törli az összes fájlt? - + Remove all files Összes fájl eltávolítása - + Keep files Fájlok megtartása - + This sync would reset the files to an earlier 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? - + Backup detected Biztonsági mentés észlelve - + Normal Synchronisation Normal szinkronizáció - + Keep Local Files as Conflict Helyi file-ok megtartása konfliktusként @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3085,300 +3085,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Sikerült. - + CSync failed to load the journal file. The journal file is corrupted. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Az %1 beépülőmodul a csync-hez nem tölthető be.<br/>Ellenőrizze a telepítést!</p> - + CSync fatal parameter error. CSync hibás paraméterhiba. - + CSync processing step update failed. CSync frissítés feldolgozása meghíusult. - + CSync processing step reconcile failed. CSync egyeztetési lépés meghíusult. - + CSync could not authenticate at the proxy. - + CSync failed to lookup proxy or server. A CSync nem találja a proxy kiszolgálót. - + CSync failed to authenticate at the %1 server. A CSync nem tuja azonosítani magát a %1 kiszolgálón. - + CSync failed to connect to the network. CSync hálózati kapcsolódási hiba. - + A network connection timeout happened. - + A HTTP transmission error happened. HTTP átviteli hiba történt. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Nincs szabad tárhely az %1 kiszolgálón. - + CSync unspecified error. CSync ismeretlen hiba. - + Aborted by the user Felhasználó megszakította - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable A szolgáltatás ideiglenesen nem elérhető - + Access is forbidden - + An internal error number %1 occurred. - + Symbolic links are not supported in syncing. - + File is listed on the ignore list. Fájl a kizárási listán. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Fájlnév túl nagy. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid - + Invalid characters, please rename "%1" Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás diff --git a/translations/client_it.ts b/translations/client_it.ts index 44b2e6896..94f7a2891 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -739,19 +739,19 @@ Sincronizza attività - + Could not read system exclude file Impossibile leggere il file di esclusione di sistema - + A new folder larger than %1 MB has been added: %2. Una nuova cartella più grande di %1 MB è stata aggiunta: %2. - + A folder from an external storage has been added. Una nuova cartella da un'archiviazione esterna è stata aggiunta. @@ -759,12 +759,12 @@ - + Please go in the settings to select it if you wish to download it. Vai nelle impostazioni e selezionala se vuoi scaricarla. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -772,29 +772,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Vuoi rimuovere tutti i file? - + Remove all files Rimuovi tutti i file - + Keep files Mantieni i file - + This sync would reset the files to an earlier 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? @@ -803,17 +803,17 @@ Ciò potrebbe verificarsi in seguito al ripristino di un backup sul server. Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tutti i tuoi file con file più datati in uno stato precedente. Vuoi mantenere i tuoi file locali più recenti come file di conflitto? - + Backup detected Backup rilevato - + Normal Synchronisation Sincronizzazione normale - + Keep Local Files as Conflict Mantieni i file locali come conflitto @@ -1684,32 +1684,32 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3094,300 +3094,300 @@ Non è consigliabile utilizzarlo. OCC::SyncEngine - + Success. Successo. - + CSync failed to load the journal file. The journal file is corrupted. CSync non è riuscito a scrivere il file di registro. Il file di registro è danneggiato. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Il plugin %1 per csync non può essere caricato.<br/>Verifica l'installazione!</p> - + CSync fatal parameter error. Errore grave di parametro di CSync. - + CSync processing step update failed. La fase di aggiornamento di CSync non è riuscita. - + CSync processing step reconcile failed. La fase di riconciliazione di CSync non è riuscita. - + CSync could not authenticate at the proxy. CSync non è in grado di autenticarsi al proxy. - + CSync failed to lookup proxy or server. CSync non è riuscito a trovare un proxy o server. - + CSync failed to authenticate at the %1 server. CSync non è riuscito ad autenticarsi al server %1. - + CSync failed to connect to the network. CSync non è riuscito a connettersi alla rete. - + A network connection timeout happened. Si è verificato un timeout della connessione di rete. - + A HTTP transmission error happened. Si è verificato un errore di trasmissione HTTP. - + The mounted folder is temporarily not available on the server La cartella montata è temporaneamente indisponibile sul server - + An error occurred while opening a folder Si è verificato un errore durante l'apertura di una cartella - + Error while reading folder. Errore durante la lettura della cartella. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Il file/cartella è ignorato poiché è nascosto. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: spazio insufficiente sul server %1. - + CSync unspecified error. Errore non specificato di CSync. - + Aborted by the user Interrotto dall'utente - + CSync failed to access CSync non è riuscito ad accedere - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync non è riuscito a caricare o a creare il file journal. Assicurati di avere i permessi di lettura e scrittura nella cartella di sincronizzazione locale. - + CSync failed due to unhandled permission denied. Problema di CSync a causa di un permesso negato non gestito. - + CSync tried to create a folder that already exists. CSync ha cercato di creare una cartella già esistente. - + The service is temporarily unavailable Il servizio è temporaneamente non disponibile - + Access is forbidden L'accesso è vietato - + An internal error number %1 occurred. SI è verificato un errore interno numero %1. - + Symbolic links are not supported in syncing. I collegamenti simbolici non sono supportati dalla sincronizzazione. - + File is listed on the ignore list. Il file è stato aggiunto alla lista ignorati. - + File names ending with a period are not supported on this file system. I nomi del file che terminano con un punto non sono supportati su questo file system. - + File names containing the character '%1' are not supported on this file system. I nomi del file che contengono il carattere '%1' non sono supportati su questo file system. - + The file name is a reserved name on this file system. Il nome del file è un nome riservato su questo file system. - + Filename contains trailing spaces. Il nome del file contiene spazi alla fine. - + Filename is too long. Il nome del file è troppo lungo. - + Unresolved conflict. - + Stat failed. Stat non riuscita. - + Filename encoding is not valid La codifica del nome del file non è valida - + Invalid characters, please rename "%1" Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 2c8bff56c..05e1a1d8b 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -739,31 +739,31 @@ 同期アクティビティ - + Could not read system exclude file システム上の除外ファイルを読み込めません - + A new folder larger than %1 MB has been added: %2. %1 MB より大きな新しいフォルダーが追加されました: %2 - + A folder from an external storage has been added. 外部ストレージからフォルダーが追加されました。 - + Please go in the settings to select it if you wish to download it. このフォルダーをダウンロードするには設定画面で選択してください。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 「すべてのファイルを削除」を選択すると、あなたが所有者でない限り、ファイルは使用できなくなります。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,39 +783,39 @@ If this was an accident and you decide to keep your files, they will be re-synce 「ファイルを残す」を選択した場合、ファイルはサーバーから再同期されます。 - + Remove All Files? すべてのファイルを削除しますか? - + Remove all files すべてのファイルを削除 - + Keep files ファイルを残す - + This sync would reset the files to an earlier 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? この同期により同期フォルダー '%1' のファイルが以前のものに戻されます。 これは、バックアップがサーバー上に復元されたためです。 通常と同じように同期を続けると、すべてのファイルが以前の状態の古いファイルによって上書きされます。最新のローカルファイルを競合ファイルとして保存しますか? - + Backup detected バックアップが検出されました - + Normal Synchronisation 正常同期 - + Keep Local Files as Conflict コンフリクト時にローカルファイルを保持 @@ -1686,32 +1686,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3095,300 +3095,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSyncはジャーナルファイルの読み込みに失敗しました。ジャーナルファイルが破損しています。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csync 用の %1 プラグインをロードできませんでした。<br/>インストール状態を確認してください!</p> - + CSync fatal parameter error. CSyncの致命的なパラメータエラーです。 - + CSync processing step update failed. CSyncの処理ステップの更新に失敗しました。 - + CSync processing step reconcile failed. CSyncの処理ステップの調停に失敗しました。 - + CSync could not authenticate at the proxy. CSyncはそのプロキシで認証できませんでした。 - + CSync failed to lookup proxy or server. CSyncはプロキシもしくはサーバーの参照に失敗しました。 - + CSync failed to authenticate at the %1 server. CSyncは %1 サーバーでの認証に失敗しました。 - + CSync failed to connect to the network. CSyncはネットワークへの接続に失敗しました。 - + A network connection timeout happened. ネットワーク接続のタイムアウトが発生しました。 - + A HTTP transmission error happened. HTTPの伝送エラーが発生しました。 - + The mounted folder is temporarily not available on the server サーバー上のマウント済フォルダーが一時的に利用できません。 - + An error occurred while opening a folder フォルダーを開く際にエラーが発生しました - + Error while reading folder. フォルダーの読み込みエラー - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. 隠しファイル/フォルダーのため無視されました - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1 サーバーには利用可能な空き領域がありません。 - + CSync unspecified error. CSyncの未指定のエラーです。 - + Aborted by the user ユーザーによって中止されました - + CSync failed to access CSync は接続できませんでした - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSyncはジャーナルファイルの読み込みや作成に失敗しました。ローカルの同期フォルダーに読み書きの権限があるか確認してください。 - + CSync failed due to unhandled permission denied. CSync が処理できないパーミション拒否により失敗しました - + CSync tried to create a folder that already exists. CSyncはすでに存在するフォルダーを作成しようとしました。 - + The service is temporarily unavailable サーバーは一時的に利用できません - + Access is forbidden アクセスが禁止されています - + An internal error number %1 occurred. 内部エラー番号 %1 が発生しました。 - + Symbolic links are not supported in syncing. 同期機能はシンボリックリンクをサポートしていません。 - + File is listed on the ignore list. ファイルは除外リストに登録されています。 - + File names ending with a period are not supported on this file system. 末尾にピリオドを使うファイル名はサポートされていません - + File names containing the character '%1' are not supported on this file system. ファイル名に使用できない文字列が含まれています: '%1' - + The file name is a reserved name on this file system. ファイル名はこのファイルシステムで予約されている名前です。 - + Filename contains trailing spaces. ファイル名末尾にスペースが含まれます。 - + Filename is too long. ファイル名が長すぎます - + Unresolved conflict. - + Stat failed. 情報取得エラー - + Filename encoding is not valid ファイル名のエンコーディングが無効です。 - + Invalid characters, please rename "%1" 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 41b318292..de9a331a5 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -739,30 +739,30 @@ Synkroniseringsaktivitet - + Could not read system exclude file Klarte ikke å lese systemets ekskluderingsfil - + A new folder larger than %1 MB has been added: %2. En ny mappe større enn %1 MB er blitt lagt til: %2. - + A folder from an external storage has been added. En mappe fra et eksternt lager er blitt lagt til. - + Please go in the settings to select it if you wish to download it. Gå til Innstillinger og velg den hvis du ønsker å laste den ned. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -773,7 +773,7 @@ Hvis du velger å beholde filene, vil de bli synkronisert tilbake til serveren h Hvis du velger å slette filene, blir de utilgjengelige for deg hvis du ikke er eieren av filen. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -782,22 +782,22 @@ Er du sikker på at du ønsker å synkronisere denne handlingen med serveren? Hvis det var et uhell og du velger å beholde filene, vil de bli synkronisert tilbake fra serveren. - + Remove All Files? Fjerne alle filer? - + Remove all files Fjern alle filer - + Keep files Behold filer - + This sync would reset the files to an earlier 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? @@ -806,17 +806,17 @@ Dette kan være fordi en backup ble gjenopprettet på serveren. Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrevet av en eldre fil i en tidligere tilstand. Ønsker du å beholde dine ferskeste lokale filer som konflikt-filer? - + Backup detected Backup oppdaget - + Normal Synchronisation Normal synkronisering - + Keep Local Files as Conflict Behold lokale filer som konflikt @@ -1687,32 +1687,32 @@ Elementer hvor sletting er tillatt, vil bli slettet hvis de forhindrer fjerning OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3098,300 +3098,300 @@ Det er ikke tilrådelig å bruke den. OCC::SyncEngine - + Success. Suksess. - + CSync failed to load the journal file. The journal file is corrupted. CSync kunne ikke laste inn journalfilen. Journalfilen er ødelagt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Klarte ikke å laste utvidelse %1 for csync.<br/>Verifiser installasjonen!</p> - + CSync fatal parameter error. CSync fatal parmeterfeil. - + CSync processing step update failed. CSync-behandlingssteg oppdatering feilet. - + CSync processing step reconcile failed. CSync-behandlingssteg overensstemming feilet. - + CSync could not authenticate at the proxy. CSync klarte ikke å autentisere mot proxy. - + CSync failed to lookup proxy or server. CSync klarte ikke å slå opp proxy eller server. - + CSync failed to authenticate at the %1 server. CSync karte ikke å autentisere på serveren %1. - + CSync failed to connect to the network. CSync klarte ikke å koble seg til nettverket. - + A network connection timeout happened. Det oppstod et tidsavbrudd for en nettverksforbindelse. - + A HTTP transmission error happened. En HTTP-overføringsfeil oppstod. - + The mounted folder is temporarily not available on the server Den oppkoblede mappen er for tiden ikke tilgjengelig på serveren - + An error occurred while opening a folder Det oppstod en feil ved åpning av en mappe - + Error while reading folder. Feil ved lesing av mappe. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Filen/mappen ignoreres fordi den er skjult. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ikke ledig plass tilgjengelig på server %1. - + CSync unspecified error. CSync uspesifisert feil. - + Aborted by the user Avbrutt av brukeren - + CSync failed to access CSync klarte ikke å aksessere - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync klarte ikke å laste eller opprette journalfilen. Sjekk at du har lese- og skrivetilgang i den lokale synkroniseringsmappen. - + CSync failed due to unhandled permission denied. CSync feilet fordi nektet tilgang ikke ble håndtert. - + CSync tried to create a folder that already exists. CSync prøvde å opprette en mappe som finnes allerede. - + The service is temporarily unavailable Tjenesten er midlertidig utilgjengelig - + Access is forbidden Tilgang er nektet - + An internal error number %1 occurred. En intern feil nummer %1 oppstod. - + Symbolic links are not supported in syncing. Symbolske lenker støttes ikke i synkronisering. - + File is listed on the ignore list. Filen ligger på ignoreringslisten. - + File names ending with a period are not supported on this file system. Filnavn som slutter med punktum er ikke tillatt på dette filsystemet - + File names containing the character '%1' are not supported on this file system. Filnavn som inneholder '%1' er ikke tillatt på dette filsystemet - + The file name is a reserved name on this file system. Filnavnet er et reservert navn på dette filsystemet. - + Filename contains trailing spaces. Filnavn inneholder blanke på slutten. - + Filename is too long. Filnavn er for langt. - + Unresolved conflict. - + Stat failed. Stat feilet. - + Filename encoding is not valid Filnavn-koding er ikke gyldig - + Invalid characters, please rename "%1" Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 8fe3903ed..304a1007c 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -739,31 +739,31 @@ Synchronisatie-activiteit - + Could not read system exclude file Kon het systeem-uitsluitingsbestand niet lezen - + A new folder larger than %1 MB has been added: %2. Er is een nieuwe map groter dan %1 MB toegevoegd: %2. - + A folder from an external storage has been added. Er is een map op externe opslag toegevoegd. - + Please go in the settings to select it if you wish to download it. Ga naar de instellingen om het te selecteren als u deze wilt downloaden. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ Als u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de serv Als u de bestanden wilt verwijderen, worden ze niet beschikbaar, tenzij u de eigenaar bent. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -782,22 +782,22 @@ If this was an accident and you decide to keep your files, they will be re-synce Als dit een ongelukje was en u de bestanden wilt behouden, worden ze opnieuw gesynchroniseerd met de server. - + Remove All Files? Verwijder alle bestanden? - + Remove all files Verwijder alle bestanden - + Keep files Bewaar bestanden - + This sync would reset the files to an earlier 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? @@ -806,17 +806,17 @@ Dit kan komen doordat een backup is hersteld op de server. Doorgaan met deze synchronisatie overschrijft al uw bestanden door een eerdere versie. Wilt u uw lokale meer recente bestanden behouden als conflict bestanden? - + Backup detected Backup gedetecteerd - + Normal Synchronisation Normale synchronisatie - + Keep Local Files as Conflict Behoud lokale bestanden als conflict @@ -1692,32 +1692,32 @@ Onderdelen die gewist mogen worden worden verwijderd als ze voorkomen dat een ma OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3103,300 +3103,300 @@ We adviseren deze site niet te gebruiken. OCC::SyncEngine - + Success. Succes. - + CSync failed to load the journal file. The journal file is corrupted. CSync kon het journal bestand niet inladen. Het journal bestand is kapot. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>De %1 plugin voor csync kon niet worden geladen.<br/>Verifieer de installatie!</p> - + CSync fatal parameter error. CSync fatale parameter fout. - + CSync processing step update failed. CSync verwerkingsstap bijwerken mislukt. - + CSync processing step reconcile failed. CSync verwerkingsstap verzamelen mislukt. - + CSync could not authenticate at the proxy. CSync kon niet authenticeren bij de proxy. - + CSync failed to lookup proxy or server. CSync kon geen proxy of server vinden. - + CSync failed to authenticate at the %1 server. CSync kon niet authenticeren bij de %1 server. - + CSync failed to connect to the network. CSync kon niet verbinden met het netwerk. - + A network connection timeout happened. Er trad een netwerk time-out op. - + A HTTP transmission error happened. Er trad een HTTP transmissiefout plaats. - + The mounted folder is temporarily not available on the server De gemounte map is tijdelijk niet beschikbaar op de server - + An error occurred while opening a folder Er trad een fout op bij het openen van een map - + Error while reading folder. Fout tijdens lezen map. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Bestand/Map is genegeerd omdat het verborgen is. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Geen ruimte op %1 server beschikbaar. - + CSync unspecified error. CSync ongedefinieerde fout. - + Aborted by the user Afgebroken door de gebruiker - + CSync failed to access CSync kreeg geen toegang - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync kon het journal bestand niet maken of lezen. Controleer of u de juiste lees- en schrijfrechten in de lokale syncmap hebt. - + CSync failed due to unhandled permission denied. CSync mislukt omdat de benodigde toegang werd geweigerd. - + CSync tried to create a folder that already exists. CSync probeerde een al bestaande map aan te maken. - + The service is temporarily unavailable De dienst is tijdelijk niet beschikbaar - + Access is forbidden Toegang verboden - + An internal error number %1 occurred. Een interne fout met nummer %1 is opgetreden. - + Symbolic links are not supported in syncing. Symbolische links worden niet ondersteund bij het synchroniseren. - + File is listed on the ignore list. Het bestand is opgenomen op de negeerlijst. - + File names ending with a period are not supported on this file system. Bestandsnamen die eindigen met een punt worden niet ondersteund door het bestandssysteem. - + File names containing the character '%1' are not supported on this file system. Bestandsnamen met een '%1' symbool worden niet ondersteund door het bestandssysteem. - + The file name is a reserved name on this file system. De bestandsnaam is een gereserveerde naam op dit bestandssysteem. - + Filename contains trailing spaces. De bestandsnaam bevat spaties achteraan. - + Filename is too long. De bestandsnaam is te lang. - + Unresolved conflict. - + Stat failed. Stat mislukt. - + Filename encoding is not valid Bestandsnaamcodering is niet geldig - + Invalid characters, please rename "%1" Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron diff --git a/translations/client_pl.ts b/translations/client_pl.ts index c52ad3c91..e86992b8b 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -739,31 +739,31 @@ Aktywności synchronizacji - + Could not read system exclude file Nie można przeczytać pliku wyłączeń - + A new folder larger than %1 MB has been added: %2. Nowy folder większy niż %1MB został dodany: %2 - + A folder from an external storage has been added. Folder z pamięci zewnętrznej został dodany . - + Please go in the settings to select it if you wish to download it. Przejdź do ustawień żeby go zaznaczyć i pobrać. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -771,46 +771,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Usunąć wszystkie pliki? - + Remove all files Usuń wszystkie pliki - + Keep files Pozostaw pliki - + This sync would reset the files to an earlier 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? - + Backup detected Wykryto kopię zapasową. - + Normal Synchronisation Normalna synchronizacja. - + Keep Local Files as Conflict Zatrzymaj pliki lokalne i ustaw status konfliktu. @@ -1681,32 +1681,32 @@ Pozycje, dla których usuwanie jest dozwolone zostaną usunięte, jeżeli uprawn OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3092,300 +3092,300 @@ Niezalecane jest jego użycie. OCC::SyncEngine - + Success. Sukces. - + CSync failed to load the journal file. The journal file is corrupted. CSync nie udało się wczytać pliku dziennika. Plik dziennika jest uszkodzony. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Wtyczka %1 do csync nie może być załadowana.<br/>Sprawdź poprawność instalacji!</p> - + CSync fatal parameter error. Krytyczny błąd parametru CSync. - + CSync processing step update failed. Aktualizacja procesu przetwarzania CSync nie powiodła się. - + CSync processing step reconcile failed. Scalenie w procesie przetwarzania CSync nie powiodło się. - + CSync could not authenticate at the proxy. CSync nie mógł się uwierzytelnić przez proxy. - + CSync failed to lookup proxy or server. CSync nie mógł odnaleźć serwera proxy. - + CSync failed to authenticate at the %1 server. CSync nie mógł uwierzytelnić się na serwerze %1. - + CSync failed to connect to the network. CSync nie mógł połączyć się z siecią. - + A network connection timeout happened. Upłynął limit czasu połączenia. - + A HTTP transmission error happened. Wystąpił błąd transmisji HTTP. - + The mounted folder is temporarily not available on the server Chwilowy brak dostępu do serwera, z którego montowany jest folder. - + An error occurred while opening a folder Wystąpił błąd podczas otwierania katalogu - + Error while reading folder. Błąd podczas odczytu katalogu. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Plik / katalog zostanie zignorowany, ponieważ jest ukryty. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Brak dostępnego miejsca na serwerze %1. - + CSync unspecified error. Nieokreślony błąd CSync. - + Aborted by the user Anulowane przez użytkownika - + CSync failed to access - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Usługa jest czasowo niedostępna - + Access is forbidden Dostęp zabroniony - + An internal error number %1 occurred. Wystąpił błąd wewnętrzny %1 - + Symbolic links are not supported in syncing. Linki symboliczne nie są wspierane przy synchronizacji. - + File is listed on the ignore list. Plik jest na liście plików ignorowanych. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. Nazwy plików zawierające znaki '%1' nie są wspierane - + The file name is a reserved name on this file system. Nazwa pliku jest zarezerwowana dla plików systemowych - + Filename contains trailing spaces. Nazwa pliku zawiera spacje - + Filename is too long. Nazwa pliku zbyt długa - + Unresolved conflict. - + Stat failed. Błąd statystyk. - + Filename encoding is not valid - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 243931ec1..256aba8b4 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -739,31 +739,31 @@ Atividade de Sincronização - + Could not read system exclude file Não foi possível ler o ficheiro excluir do sistema - + A new folder larger than %1 MB has been added: %2. Foi adicionada uma nova pasta maior que %1 MB: %2. - + A folder from an external storage has been added. Foi adicionada uma pasta vinda de armazenamento externo. - + Please go in the settings to select it if you wish to download it. Por favor, vá às configurações para a selecionar se a desejar transferir. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ Se decidir manter os ficheiros, eles serão sincronizados novamento para o servi Se decidir apagar os ficheiros, eles ficaram indisponíveis para si, a não ser que seja o seu proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ Tem a certeza que deseja sincronizar essas ações com o servidor? Se foi acidental e decidir manter os seus ficheiros, eles serão sincronizados novamente apartir do servidor. - + Remove All Files? Remover todos os ficheiros? - + Remove all files Remover todos os ficheiros - + Keep files Manter ficheiros - + This sync would reset the files to an earlier 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? @@ -807,17 +807,17 @@ Isto pode ser porque um backup foi restaurado no servidor. Continuando a sincronização fará com que todos os seus ficheiros sejam substituídos por um ficheiro mais velho num estado anterior. Deseja manter os seus ficheiros locais mais recentes como ficheiros de conflito? - + Backup detected Detetada cópia de segurança - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Ficheiros Locais como Conflito @@ -1688,32 +1688,32 @@ Os itens onde é permitido a eliminação serão eliminados se estes impedirem a OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3099,300 +3099,300 @@ Não é aconselhada a sua utilização. OCC::SyncEngine - + Success. Sucesso - + CSync failed to load the journal file. The journal file is corrupted. CSync falhou a carregar o ficheiro do jornal. O ficheiro do jornal está corrupto. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>O plugin %1 para o CSync não foi carregado.<br/>Por favor verifique a instalação!</p> - + CSync fatal parameter error. Parametro errado, CSync falhou - + CSync processing step update failed. O passo de processamento do CSyn falhou - + CSync processing step reconcile failed. CSync: Processo de reconciliação falhou. - + CSync could not authenticate at the proxy. CSync: não foi possível autenticar no servidor proxy. - + CSync failed to lookup proxy or server. CSync: não conseguiu contactar o proxy ou o servidor. - + CSync failed to authenticate at the %1 server. CSync: Erro a autenticar no servidor %1 - + CSync failed to connect to the network. CSync: Erro na conecção à rede - + A network connection timeout happened. Houve um erro de timeout de rede. - + A HTTP transmission error happened. Ocorreu um erro de transmissão HTTP - + The mounted folder is temporarily not available on the server O pasta montada está temporariamente indisponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler o ficheiro. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. O ficheiro/pasta foi ignorado porque está oculto. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Não ha espaço disponível no servidor %1 - + CSync unspecified error. CSync: erro não especificado - + Aborted by the user Cancelado pelo utilizador - + CSync failed to access CSync falhou o acesso - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falhou no carregamento ou criação do ficheiro jornal. Certifique-se de que tem permissões de gravação e leitura na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão não tratada negada. - + CSync tried to create a folder that already exists. O CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden O acesso é proibido - + An internal error number %1 occurred. Ocorreu o erro interno número %1. - + Symbolic links are not supported in syncing. Hiperligações simbólicas não são suportadas em sincronização. - + File is listed on the ignore list. O ficheiro está na lista de ficheiros a ignorar. - + File names ending with a period are not supported on this file system. Nomes de ficheiros acabados com um ponto final não são suportados neste sistema de ficheiros. - + File names containing the character '%1' are not supported on this file system. Nomes de ficheiros que contêm o caractér '%1' não são suportados neste sistema de ficheiros. - + The file name is a reserved name on this file system. O nome de ficheiro é um nome reservado neste sistema de ficheiros. - + Filename contains trailing spaces. Nome de ficheiro contém espaços em branco seguidos. - + Filename is too long. O nome do ficheiro é muito grande - + Unresolved conflict. - + Stat failed. Estado falhou. - + Filename encoding is not valid Codificação de nome de ficheiro não é válida - + Invalid characters, please rename "%1" Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 77b50a2c7..530e5b9fc 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -739,31 +739,31 @@ Atividade de Sincronização - + Could not read system exclude file Não foi possível ler o sistema de arquivo de exclusão - + A new folder larger than %1 MB has been added: %2. Uma nova pasta maior que %1 MB foi adicionada: %2 - + A folder from an external storage has been added. Uma pasta de um armazenamento externo foi adicionada. - + Please go in the settings to select it if you wish to download it. Por favor, vá nas configurações para selecioná-lo se você deseja baixá-lo. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,29 +774,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a Se você decidir excluir os arquivos, eles não estarão disponíveis para você, a menos que você seja o proprietário. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. Todos os arquivos na pasta de sincronização local '%1' foram excluídos. Essas exclusões serão sincronizadas com o servidor, tornando tais arquivos indisponíveis, a menos que restaurados.Tem certeza de que deseja sincronizar essas ações com o servidor?Se isso foi um acidente e você decidir manter seus arquivos, eles serão re-sincronizados a partir do servidor. - + Remove All Files? Deseja Remover Todos os Arquivos? - + Remove all files Remover todos os arquivos - + Keep files Manter arquivos - + This sync would reset the files to an earlier 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? @@ -805,17 +805,17 @@ Isso pode ser porque um backup foi restaurado no servidor. Continuar a sincronização como normal fará com que todos os seus arquivos sejam substituídos por um arquivo antigo em um estado anterior. Deseja manter seus arquivos mais recentes locais como arquivos de conflito? - + Backup detected Backup detectado - + Normal Synchronisation Sincronização Normal - + Keep Local Files as Conflict Manter Arquivos Locais como Conflito @@ -1687,32 +1687,32 @@ Itens onde a eliminação é permitida serão excluídos se eles evitarem que um OCC::OAuth - + Error returned from the server: <em>%1</em> Erro retornado do servidor: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> Ocorreu um erro ao acessar o ponto final do token: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Não foi possível analisar o JSON retornado do servidor: <br><em>%1</em> - + The reply from the server did not contain all expected fields A resposta do servidor não continha todos os campos esperados - + <h1>Login Error</h1><p>%1</p> <h1>Erro de Login</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> <h1>Usuário errado</h1><p>Você fez logon com o usuário <em>%1</em>, mas deve fazer login com o usuário <em>%2</em>.<br>Faça o logout de %3 em outra guia, então<a href='%4'>clique aqui</a> e faça o login como usuário%2</p> @@ -3096,300 +3096,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Sucesso. - + CSync failed to load the journal file. The journal file is corrupted. CSync não conseguiu carregar o arquivo journal. O arquivo journal está corrompido. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>O plugin %1 para csync não foi carregado.<br/>Por favor verifique a instalação!</p> - + CSync fatal parameter error. Erro fatal de parametro do CSync. - + CSync processing step update failed. Processamento da atualização do CSync falhou. - + CSync processing step reconcile failed. Processamento da conciliação do CSync falhou. - + CSync could not authenticate at the proxy. Csync não conseguiu autenticação no proxy. - + CSync failed to lookup proxy or server. CSync falhou ao localizar o proxy ou servidor. - + CSync failed to authenticate at the %1 server. CSync falhou ao autenticar no servidor %1. - + CSync failed to connect to the network. CSync falhou ao conectar à rede. - + A network connection timeout happened. Ocorreu uma desconexão de rede. - + A HTTP transmission error happened. Houve um erro na transmissão HTTP. - + The mounted folder is temporarily not available on the server A pasta montada não está temporariamente disponível no servidor - + An error occurred while opening a folder Ocorreu um erro ao abrir uma pasta - + Error while reading folder. Erro ao ler pasta. - + %1 (skipped due to earlier error, trying again in %2) %1 (ignorado devido a um erro anterior, tentando novamente em %2) - + File/Folder is ignored because it's hidden. Arquivo/pasta ignorado porque porque está escondido. - + Folder hierarchy is too deep A hierarquia de pastas é muito profunda - + Conflict: Server version downloaded, local copy renamed and not uploaded. Conflito: Versão do servidor baixada, cópia local renomeada e não carregada. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. - + CSync: No space on %1 server available. CSync: Sem espaço disponível no servidor %1. - + CSync unspecified error. Erro não especificado no CSync. - + Aborted by the user Abortado pelo usuário - + CSync failed to access CSync não conseguiu o acesso - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync falhou ao carregar ou criar o arquivo de diário. Certifique-se de ter permissão de ler e escrever na pasta de sincronização local. - + CSync failed due to unhandled permission denied. CSync falhou devido a permissão de não manipulação negada. - + CSync tried to create a folder that already exists. CSync tentou criar uma pasta que já existe. - + The service is temporarily unavailable O serviço está temporariamente indisponível - + Access is forbidden Acesso proibido - + An internal error number %1 occurred. Um erro interno de número %1 ocorreu. - + Symbolic links are not supported in syncing. Linques simbólicos não são suportados em sincronização. - + File is listed on the ignore list. O arquivo está listado na lista de ignorados. - + File names ending with a period are not supported on this file system. Os nomes de arquivos que terminam com um ponto não são suportados neste sistema de arquivos. - + File names containing the character '%1' are not supported on this file system. Os nomes de arquivos que contêm o caractere '%1' não são suportados neste sistema de arquivos. - + The file name is a reserved name on this file system. O nome do arquivo é um nome reservado neste sistema de arquivos. - + Filename contains trailing spaces. O nome do arquivo contém espaços deixados para trás. - + Filename is too long. O nome do arquivo é muito longo. - + Unresolved conflict. Conflito não solucionado. - + Stat failed. Stat falhou. - + Filename encoding is not valid A codificação do nome do arquivo não é válida - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 134c8faf1..8759cfaeb 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -739,31 +739,31 @@ Журнал синхронизации - + Could not read system exclude file Невозможно прочесть системный файл исключений - + A new folder larger than %1 MB has been added: %2. Был добавлен новый каталог размером более %1 МБ: %2. - + A folder from an external storage has been added. Добавлен каталог из внешнего хранилища. - + Please go in the settings to select it if you wish to download it. Пожалуйста, перейдите в настройки, чтобы выбрать его, если вы хотите его скачать. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a Если вы решили удалить файлы, они станут вам недоступны, крмое случая, когда вы сам владелец. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,39 +783,39 @@ If this was an accident and you decide to keep your files, they will be re-synce Если это произошло случайно и вы решите сохранить файлы, они будут перезакачаны с сервера. - + Remove All Files? Удалить все файлы? - + Remove all files Удалить все файлы - + Keep files Сохранить файлы - + This sync would reset the files to an earlier 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? Эта синхронизация собирается сбросить файлы в катлоге '%1' в более ранее состояние. Такое может случиться, если на сервере восстановлена резервная копия. Если продолжать синхронизацию как обычно, то ваши файлы будут перетёрты более старыми версиями. Хотите сохранить ваши локальные свежие файлы в качестве конфликтных? - + Backup detected Обнаружена резервная копия - + Normal Synchronisation Обычная синхронизация - + Keep Local Files as Conflict Сохранить локальные файлы как конфликтующие @@ -1685,32 +1685,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> Сервер вернул ошибку: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> При доступе к конечной точке 'токена' произошла ошибка: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> Не удалось разобрать JSON, пришедший с сервера: <br><em>%1</em> - + The reply from the server did not contain all expected fields В ответе сервера содержатся не все ожидаемые поля - + <h1>Login Error</h1><p>%1</p> <h1>Ошибка входа</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> <h1>Неверный пользователь</h1><p>Вы вошли, как пользователь <em>%1</em>, но нужно войти под пользователем <em>%2</em>.<br>Пожалуйста, выйдите из %3 в другой вкладке, а затем <a href='%4'>кликните здесь</a> и войдите, как пользователь %2</p> @@ -3096,300 +3096,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успешно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не удалось загрузить файл журнала. Файл журнала повреждён. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Не удается загрузить плагин 1% для csync.<br/>Проверьте установку!</p> - + CSync fatal parameter error. Критическая ошибка параметра CSync. - + CSync processing step update failed. Процесс обновления CSync не удался. - + CSync processing step reconcile failed. Процесс согласования CSync не удался. - + CSync could not authenticate at the proxy. CSync не удалось авторизоваться на прокси сервере. - + CSync failed to lookup proxy or server. CSync не удалось найти прокси сервер. - + CSync failed to authenticate at the %1 server. CSync не удалось авторизоваться на сервере %1. - + CSync failed to connect to the network. CSync не удалось подключиться к сети. - + A network connection timeout happened. Вышло время ожидания подключения к сети. - + A HTTP transmission error happened. Произошла ошибка передачи HTTP. - + The mounted folder is temporarily not available on the server Смонтированная папка временно недоступна на сервере - + An error occurred while opening a folder Произошла ошибка во время открытия папки - + Error while reading folder. Произошла ошибка во время чтения папки. - + %1 (skipped due to earlier error, trying again in %2) %1 (пропущено из-за предыдущей ошибки, повторная попытка через %2) - + File/Folder is ignored because it's hidden. Файл/папка проигнорированы, так как являются скрытыми. - + Folder hierarchy is too deep Иерархия каталогов слишком глубока - + Conflict: Server version downloaded, local copy renamed and not uploaded. Конфликт: Серверная версия скачана, локальная копия переименована и не закачана. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Мало места на диске: Скачивания, которые сократят свободное место ниже %1, будут пропущены. - + There is insufficient space available on the server for some uploads. На сервере недостаточно места для некоторых закачек. - + CSync: No space on %1 server available. CSync: Нет свободного пространства на сервере %1. - + CSync unspecified error. Неизвестная ошибка CSync. - + Aborted by the user Прервано пользователем - + CSync failed to access CSync отказано в доступе - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync не удалось загрузить файл журнала. Убедитесь в наличии прав на чтение и запись в локальную папку. - + CSync failed due to unhandled permission denied. CSync не выполнен из-за отказа в доступе для необработанного разрешения. - + CSync tried to create a folder that already exists. CSync попытался создать папку, которая уже существует. - + The service is temporarily unavailable Сервис временно недоступен - + Access is forbidden Доступ запрещен - + An internal error number %1 occurred. Произошла внутренняя ошибка номер %1. - + Symbolic links are not supported in syncing. Синхронизация символических ссылок не поддерживается. - + File is listed on the ignore list. Файл присутствует в списке игнорируемых. - + File names ending with a period are not supported on this file system. Эта файловая система не поддерживает имена файлов, оканчивающиеся на точку. - + File names containing the character '%1' are not supported on this file system. Эта файловая система не поддерживает имена файлов, содержащие символ '%1'. - + The file name is a reserved name on this file system. Данное имя файла зарезервировано в данной файловой системе. - + Filename contains trailing spaces. Имя файла содержит пробелы на конце. - + Filename is too long. Имя файла слишком длинное. - + Unresolved conflict. Неразрешённый конфликт. - + Stat failed. Не удалось загрузить статистику. - + Filename encoding is not valid Кодировка имени файла не верна - + Invalid characters, please rename "%1" Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 804ae392f..7bda71288 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -739,29 +739,29 @@ Aktivita synchronizácie - + Could not read system exclude file Nemožno čítať systémový exclude file - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Odstrániť všetky súbory? - + Remove all files Odstrániť všetky súbory - + Keep files Ponechať súbory - + This sync would reset the files to an earlier 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? - + Backup detected Záloha je dostupná - + Normal Synchronisation Bežná synchronizácia - + Keep Local Files as Conflict Ponechať lokálne súbory ako konfliktné @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3088,300 +3088,300 @@ Nie je vhodné ju používať. OCC::SyncEngine - + Success. Úspech. - + CSync failed to load the journal file. The journal file is corrupted. Nepodarilo sa načítanie žurnálovacieho súboru CSync. Súbor je poškodený. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>%1 zásuvný modul pre "CSync" nebolo možné načítať.<br/>Prosím skontrolujte inštaláciu!</p> - + CSync fatal parameter error. CSync kritická chyba parametrov. - + CSync processing step update failed. CSync sa nepodarilo spracovať krok aktualizácie. - + CSync processing step reconcile failed. CSync sa nepodarilo spracovať krok zladenia. - + CSync could not authenticate at the proxy. CSync sa nemohol prihlásiť k proxy. - + CSync failed to lookup proxy or server. CSync sa nepodarilo nájsť proxy alebo server. - + CSync failed to authenticate at the %1 server. CSync sa nepodarilo prihlásiť na server %1. - + CSync failed to connect to the network. CSync sa nepodarilo pripojiť k sieti. - + A network connection timeout happened. Skončil časový limit sieťového spojenia. - + A HTTP transmission error happened. Chyba HTTP prenosu. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder Nastala chyba počas otvárania priečinka - + Error while reading folder. Chyba pri čítaní adresára - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Na serveri %1 nie je žiadne voľné miesto. - + CSync unspecified error. CSync nešpecifikovaná chyba. - + Aborted by the user Zrušené používateľom - + CSync failed to access Prístup pre CSync zlyhal - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Služba je dočasne nedostupná - + Access is forbidden Prístup odmietnutý - + An internal error number %1 occurred. Vyskytla sa interná chyba číslo %1. - + Symbolic links are not supported in syncing. Symbolické odkazy nie sú podporované pri synchronizácii. - + File is listed on the ignore list. Súbor je zapísaný na zozname ignorovaných. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Meno súboru je veľmi dlhé. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid Kódovanie znakov názvu súboru je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj diff --git a/translations/client_sl.ts b/translations/client_sl.ts index f10d3f64c..2be2b2833 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -739,31 +739,31 @@ Dejavnost usklajevanja - + Could not read system exclude file Ni mogoče prebrati sistemske izločitvene datoteke - + A new folder larger than %1 MB has been added: %2. Dodana je nova mapa, ki presega %1 MB: %2. - + A folder from an external storage has been added. Dodana je mapa iz zunanje shrambe. - + Please go in the settings to select it if you wish to download it. Med nastavitvami jo lahko izberete in označite za prejem. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ V kolikor se odločite te datoteke ohraniti, in so na voljo ustrezna dovoljenja, Nasprotno, če potrdite izbris in niste lastnik datotek, te ne bodo več na voljo. - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ Ali ste prepričani, da želite posodobiti spremembe s strežnikom? Če je prišlo do napake in se odločite datoteke ohraniti, bodo te ponovno usklajene s strežnika. - + Remove All Files? Ali naj bodo odstranjene vse datoteke? - + Remove all files Odstrani vse datoteke - + Keep files Ohrani datoteke - + This sync would reset the files to an earlier 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? @@ -807,17 +807,17 @@ To se lahko zgodi, če je na strežniku na primer obnovljena varnostna kopija. Z nadaljevanjem usklajevanja bodo vse trenutne datoteke prepisane s starejšimi različicami. Ali želite ohraniti trenutne krajevne datoteke kot preimenovane datoteke v usklajevalnem sporu? - + Backup detected Varnostna kopija je zaznana - + Normal Synchronisation Običajno usklajevanje - + Keep Local Files as Conflict Ohrani krajevne datoteke kot datoteke v sporu @@ -1688,32 +1688,32 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3099,300 +3099,300 @@ Uporaba ni priporočljiva. OCC::SyncEngine - + Success. Uspešno končano. - + CSync failed to load the journal file. The journal file is corrupted. Nalaganje dnevniške datoteke s CSync je spodletelo. Dnevniška datoteka je okvarjena. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Vstavka %1 za CSync ni mogoče naložiti.<br/>Preverite namestitev!</p> - + CSync fatal parameter error. Usodna napaka parametra CSync. - + CSync processing step update failed. Korak opravila posodobitve CSync je spodletel. - + CSync processing step reconcile failed. Korak opravila poravnave CSync je spodletel. - + CSync could not authenticate at the proxy. Overitev CSync na posredniškem strežniku je spodletela. - + CSync failed to lookup proxy or server. Poizvedba posredniškega strežnika s CSync je spodletela. - + CSync failed to authenticate at the %1 server. Overitev CSync pri strežniku %1 je spodletela. - + CSync failed to connect to the network. Povezava CSync v omrežje je spodletela. - + A network connection timeout happened. Omrežna povezava je časovno potekla. - + A HTTP transmission error happened. Prišlo je do napake med prenosom HTTP. - + The mounted folder is temporarily not available on the server Priklopljena mapa trenutno ni na voljo na strežniku - + An error occurred while opening a folder Med odpiranjem mape je prišlo do napake. - + Error while reading folder. Napaka med branjem mape - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Datoteka/Mapa je prezrta, ker je skrita. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. Odziv CSync: na strežniku %1 ni razpoložljivega prostora. - + CSync unspecified error. Nedoločena napaka CSync. - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika - + CSync failed to access Dostop s CSync je spodletel - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Nalaganje ali ustvarjanje dnevniške datoteke s CSync je spodletelo. Za to opravilo so zahtevana dovoljenja branja in zapisovanja krajevne mape za usklajevanje. - + CSync failed due to unhandled permission denied. Delovanje CSync je zaradi nerazrešenih dovoljenj spodletelo. - + CSync tried to create a folder that already exists. Ustvarjanje mape s CSync je spodletelo. Mapa že obstaja. - + The service is temporarily unavailable Storitev trenutno ni na voljo - + Access is forbidden Dostop je prepovedan. - + An internal error number %1 occurred. Prišlo je do notranje napake %1. - + Symbolic links are not supported in syncing. Usklajevanje simbolnih povezav ni podprto. - + File is listed on the ignore list. Datoteka je na seznamu prezrtih datotek. - + File names ending with a period are not supported on this file system. Imena datotek, ki vsebujejo piko, na tem sistemu niso podprta. - + File names containing the character '%1' are not supported on this file system. Imena datotek, ki vsebujejo znak »%1«, na tem sistemu niso podprta. - + The file name is a reserved name on this file system. Ime datoteke je na tem sistemu zadržano za sistemsko datoteko. - + Filename contains trailing spaces. Datoteka vsebuje pripete presledne znake - + Filename is too long. Ime datoteke je predolgo. - + Unresolved conflict. - + Stat failed. Določanje statističnih podatkov je spodletelo. - + Filename encoding is not valid Kodni zapis imena datoteke ni veljaven. - + Invalid characters, please rename "%1" Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir diff --git a/translations/client_sr.ts b/translations/client_sr.ts index ff35869c2..d07b253c9 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -739,29 +739,29 @@ Активност синхронизације - + Could not read system exclude file Не могу да прочитам системски списак за игнорисање - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Уклонити све фајлове? - + Remove all files Уклони све фајлове - + Keep files Остави фајлове - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3088,300 +3088,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успешно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не може да учита фајл дневника. Фајл дневника је оштећен. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Прикључак %1 за csync се не може учитати.<br/>Проверите инсталацију!</p> - + CSync fatal parameter error. CSync фатална грешка параметара. - + CSync processing step update failed. CSync није успео да ажурира корак процесирања. - + CSync processing step reconcile failed. CSync није успео да усклади корак процесирања. - + CSync could not authenticate at the proxy. CSync не може да се аутентификује на проксију. - + CSync failed to lookup proxy or server. CSync не налази прокси или сервер. - + CSync failed to authenticate at the %1 server. CSync не може да се аутентификује на %1 серверу. - + CSync failed to connect to the network. CSync не може да приступи мрежи. - + A network connection timeout happened. Истекло је време за повезивање. - + A HTTP transmission error happened. Дошло је до грешке ХТТП преноса. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: нема простора на %1 серверу. - + CSync unspecified error. CSync недефинисана грешка. - + Aborted by the user Прекинуо корисник - + CSync failed to access CSync није приступио - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Услуга је привремено недоступна - + Access is forbidden Приступ је забрањен - + An internal error number %1 occurred. Десила се интерна грешка број %1. - + Symbolic links are not supported in syncing. Симболичке везе нису подржане у синхронизацији. - + File is listed on the ignore list. Фајл се налази на листи за игнорисање. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Назив фајла је предугачак. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid Кодирање назива фајла није исправно - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 2fda8a96a..1fb6b025c 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -739,29 +739,29 @@ Synk aktivitet - + Could not read system exclude file Kunde inte läsa systemets exkluderings-fil - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,29 +769,29 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Ta bort alla filer? - + Remove all files Ta bort alla filer - + Keep files Behåll filer - + This sync would reset the files to an earlier 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? @@ -800,17 +800,17 @@ Detta kan vara för att en säkerhetskopia har återställts på servern. Om du fortsätter synkningen kommer alla dina filer återställas med en äldre version av filen. Vill du behålla dina nyare lokala filer som konfliktfiler? - + Backup detected Backup upptäckt - + Normal Synchronisation Normal synkronisation - + Keep Local Files as Conflict Behåll lokala filer som konflikt @@ -1681,32 +1681,32 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3092,300 +3092,300 @@ Det är inte lämpligt använda den. OCC::SyncEngine - + Success. Lyckades. - + CSync failed to load the journal file. The journal file is corrupted. CSync misslyckades med att ladda journalfilen. Journalfilen är korrupt. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Plugin %1 för csync kunde inte laddas.<br/>Var god verifiera installationen!</p> - + CSync fatal parameter error. CSync fatal parameter fel. - + CSync processing step update failed. CSync processteg update misslyckades. - + CSync processing step reconcile failed. CSync processteg reconcile misslyckades. - + CSync could not authenticate at the proxy. CSync kunde inte autentisera mot proxy. - + CSync failed to lookup proxy or server. CSync misslyckades att hitta proxy eller server. - + CSync failed to authenticate at the %1 server. CSync misslyckades att autentisera mot %1 servern. - + CSync failed to connect to the network. CSync misslyckades att ansluta mot nätverket. - + A network connection timeout happened. En timeout på nätverksanslutningen har inträffat. - + A HTTP transmission error happened. Ett HTTP överföringsfel inträffade. - + The mounted folder is temporarily not available on the server Den monterade mappen är tillfälligt otillgänglig på servern - + An error occurred while opening a folder En fel inträffande under öppnandet av en mapp - + Error while reading folder. Fel vid mappinläsning. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Filen/Mappen är ignorerad för att den är dold. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: Ingen plats på %1 server tillgänglig. - + CSync unspecified error. CSync ospecificerat fel. - + Aborted by the user Avbruten av användare - + CSync failed to access CSync misslyckades med att läsa - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync misslyckades med att ladda eller skapa journalfilen. Säkerställ att du har rättigheter att läsa och skriva i den lokala synkmappen. - + CSync failed due to unhandled permission denied. CSync misslyckades på grund av ohanterad avslagning av rättighet. - + CSync tried to create a folder that already exists. CSync försökte skapa en mapp som redan finns. - + The service is temporarily unavailable Tjänsten är tillfälligt otillgänglig - + Access is forbidden Tillgång förbjuden - + An internal error number %1 occurred. Ett internt fel nummer %1 inträffade. - + Symbolic links are not supported in syncing. Symboliska länkar stöds ej i synkningen. - + File is listed on the ignore list. Filen är listad i ignorerings listan. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. Filnamn innehåller mellanslag i slutet. - + Filename is too long. Filnamnet är för långt. - + Unresolved conflict. - + Stat failed. Stat misslyckades. - + Filename encoding is not valid Filnamnskodning är inte giltig - + Invalid characters, please rename "%1" Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan diff --git a/translations/client_th.ts b/translations/client_th.ts index e04a4c8b0..4b2ccf30d 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -739,31 +739,31 @@ ความเคลื่อนไหวของการประสานข้อมูล - + Could not read system exclude file ไม่สามารถอ่าน ยกเว้นไฟล์ระบบ - + A new folder larger than %1 MB has been added: %2. โฟลเดอร์ใหม่มีขนาดใหญ่กว่า %1 เมกะไบต์ ได้ถูกเพิ่ม: %2 - + A folder from an external storage has been added. โฟลเดอร์ที่มีพื้นที่จัดเก็บข้อมูลภายนอกได้ถูกเพิ่ม - + Please go in the settings to select it if you wish to download it. กรุณาไปในส่วนของการตั้งค่าเพื่อเลือก ถ้าคุณต้องการจะดาวน์โหลด - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a หากคุณตัดสินใจที่จะลบไฟล์ก็จะทำให้ไม่มีใครสามารถใช้งานโฟลเดอร์นี้ได้เพราะคุณเป็นเจ้าของ - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -784,22 +784,22 @@ If this was an accident and you decide to keep your files, they will be re-synce ถ้าเรื่องนี้เป็นอุบัติเหตุและคุณตัดสินใจที่จะเก็บไฟล์ของคุณ ไฟล์ของคุณก็จะถูกประสานข้อมูลใหม่อีกครั้ง - + Remove All Files? ลบไฟล์ทั้งหมด? - + Remove all files ลบไฟล์ทั้งหมด - + Keep files เก็บไฟล์เอาไว้ - + This sync would reset the files to an earlier 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? @@ -808,17 +808,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an ไฟล์ปัจจุบันของคุณทั้งหมดจะถูกเขียนทับด้วยไฟล์เก่า คุณต้องการเก็บไฟล์ไว้? - + Backup detected ตรวจพบการสำรองข้อมูล - + Normal Synchronisation ประสานข้อมูลปกติ - + Keep Local Files as Conflict เก็บไฟล์ต้นทางเป็นไฟล์ที่มีปัญหา @@ -1690,32 +1690,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> เกิดข้อผิดพลาดจากเซิร์ฟเวอร์: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> เกิดข้อผิดพลาดในการเข้าถึง 'โทเค็น' ปลายทาง: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> ไม่สามารถแยกวิเคราะห์ JSON ที่ส่งมาจากเซิร์ฟเวอร์: <br><em>%1</em> - + The reply from the server did not contain all expected fields การตอบกลับจากเซิร์ฟเวอร์ไม่ได้มีฟิลด์ที่ต้องการ - + <h1>Login Error</h1><p>%1</p> <h1>เข้าสู่ระบบล้มเหลว</h1>%1<p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> <h1>บัญผู้ใช้ไม่ถูกต้อง</h1> <p>คุณลงชื่อเข้าใช้ด้วยบัญชีผู้ใช้ <em>%1</em> คุณจะต้องลงชื่อเข้าใช้ด้วยบัญชี <em>%2</em> <br>โปรดออกจากระบบ %3 ในแท็บอื่นแล้ว <a href='%4'>คลิกที่นี่</a> เพื่อเข้าสู่ระบบในฐานะผู้ใช้ </p> @@ -3098,301 +3098,301 @@ It is not advisable to use it. OCC::SyncEngine - + Success. เสร็จสิ้น - + CSync failed to load the journal file. The journal file is corrupted. CSync ไม่สามารถโหลดไฟล์เจอร์นัล ไฟล์เจอร์นัลได้รับความเสียหาย - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>ปลั๊กอิน %1 สำหรับ csync ไม่สามารถโหลดได้.<br/>กรุณาตรวจสอบความถูกต้องในการติดตั้ง!</p> - + CSync fatal parameter error. พบข้อผิดพลาดเกี่ยวกับ CSync fatal parameter - + CSync processing step update failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync processing step reconcile failed. การอัพเดทขั้นตอนการประมวลผล CSync ล้มเหลว - + CSync could not authenticate at the proxy. CSync ไม่สามารถรับรองความถูกต้องที่พร็อกซี่ - + CSync failed to lookup proxy or server. CSync ไม่สามารถค้นหาพร็อกซี่บนเซิร์ฟเวอร์ได้ - + CSync failed to authenticate at the %1 server. CSync ล้มเหลวในการยืนยันสิทธิ์การเข้าใช้งานที่เซิร์ฟเวอร์ %1 - + CSync failed to connect to the network. CSync ล้มเหลวในการเชื่อมต่อกับเครือข่าย - + A network connection timeout happened. หมดเวลาการเชื่อมต่อเครือข่าย - + A HTTP transmission error happened. เกิดข้อผิดพลาดเกี่ยวกับ HTTP transmission - + The mounted folder is temporarily not available on the server โฟลเดอร์ที่ติดตั้งชั่วคราว ไม่สามารถใช้งานบนเซิร์ฟเวอร์ - + An error occurred while opening a folder เกิดข้อผิดพลาดบางอย่างขณะกำลังเปิดโฟลเดอร์ - + Error while reading folder. เกิดข้อผิดพลาดขณะกำลังอ่านโฟลเดอร์ - + %1 (skipped due to earlier error, trying again in %2) %1 (ข้ามไปเนื่องจากข้อผิดพลาดก่อนหน้านี้ กำลังลองอีกครั้งใน %2) - + File/Folder is ignored because it's hidden. ไฟล์/โฟลเดอร์ ที่ซ่อนอยู่จะถูกละเว้น - + Folder hierarchy is too deep โฟลเดอร์มีโฟลเดอร์ย่อยเกินไป - + Conflict: Server version downloaded, local copy renamed and not uploaded. เกิดปัญหาความขัดแย้ง: สำเนาที่อยู่ในเครื่องถูกเปลี่ยนชื่อและไม่ได้ถูกอัพโหลด เลยไม่ตรงกับข้อมูลที่เคยอัพโหลดไว้ในเซิฟเวอร์ - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป - + There is insufficient space available on the server for some uploads. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ - + CSync: No space on %1 server available. CSync: ไม่มีพื้นที่เหลือเพียงพอบนเซิร์ฟเวอร์ %1 - + CSync unspecified error. CSync ไม่สามารถระบุข้อผิดพลาดได้ - + Aborted by the user ยกเลิกโดยผู้ใช้ - + CSync failed to access ล้มเหลวในการเข้าถึง CSync - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync ผิดพลาด ไม่สามารถโหลดหรือสร้างไฟล์เจอร์นัล ให้แน่ใจว่าคุณได้อ่านและเขียนสิทธิ์ในการประสานโฟลเดอร์ต้นทาง - + CSync failed due to unhandled permission denied. CSync ล้มเหลวเนื่องจากการอนุญาตให้จัดการได้ถูกปฏิเสธ - + CSync tried to create a folder that already exists. CSync พยายามสร้างโฟลเดอร์ที่มีอยู่แล้ว - + The service is temporarily unavailable ไม่สามารถใช้บริการได้ชั่วคราว - + Access is forbidden ถูกปฏิเสธการเข้าถึง - + An internal error number %1 occurred. จำนวนข้อผิดพลาดภายในที่เกิดขึ้น %1 - + Symbolic links are not supported in syncing. ลิงค์สัญลักษณ์จะไม่ได้รับการสนับสนุนในการประสานข้อมูล - + File is listed on the ignore list. ไฟล์อยู่ในรายการที่ละเว้น - + File names ending with a period are not supported on this file system. ชื่อไฟล์ที่ลงท้ายด้วยระยะเวลา ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + File names containing the character '%1' are not supported on this file system. ชื่อไฟล์ที่มีตัวอักษร '%1' ยังไม่ได้รับการสนับสนุนบนระบบไฟล์นี้ - + The file name is a reserved name on this file system. ชื่อไฟล์นี้เป็นชื่อที่ถูกสงวนไว้ - + Filename contains trailing spaces. ชื่อไฟล์มีช่องว่างต่อท้าย - + Filename is too long. ชื่อไฟล์ยาวเกินไป - + Unresolved conflict. ข้อขัดแย้งที่ยังไม่ได้แก้ไข - + Stat failed. สถิติความล้มเหลว - + Filename encoding is not valid การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - + Invalid characters, please rename "%1" ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 58c3ab520..f25fd98a5 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -739,29 +739,29 @@ Eşitleme Etkinliği - + Could not read system exclude file Sistem hariç tutulma dosyası okunamadı - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Tüm Dosyalar Kaldırılsın mı? - + Remove all files Tüm dosyaları kaldır - + Keep files Dosyaları koru - + This sync would reset the files to an earlier 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? - + Backup detected Yedek bulundu - + Normal Synchronisation Normal Eşitleme - + Keep Local Files as Conflict Çakışma Durumunda Yerel Dosyaları Tut @@ -1679,32 +1679,32 @@ Bir dizinin silinmesine engel oluyorsa silmeye izin verilen yerlerdeki ögeler s OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3089,300 +3089,300 @@ Kullanmanız önerilmez. OCC::SyncEngine - + Success. Başarılı. - + CSync failed to load the journal file. The journal file is corrupted. CSync günlük dosyasını yükleyemedi. Günlük dosyası bozuk. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Csync için %1 eklentisi yüklenemedi.<br/>Lütfen kurulumu doğrulayın!</p> - + CSync fatal parameter error. CSync ciddi parametre hatası. - + CSync processing step update failed. CSync güncelleme süreç adımı başarısız. - + CSync processing step reconcile failed. CSync uzlaştırma süreç adımı başarısız. - + CSync could not authenticate at the proxy. CSync vekil sunucuda kimlik doğrulayamadı. - + CSync failed to lookup proxy or server. CSync bir vekil veya sunucu ararken başarısız oldu. - + CSync failed to authenticate at the %1 server. CSync %1 sunucusunda kimlik doğrularken başarısız oldu. - + CSync failed to connect to the network. CSync ağa bağlanamadı. - + A network connection timeout happened. Bir ağ zaman aşımı meydana geldi. - + A HTTP transmission error happened. Bir HTTP aktarım hatası oluştu. - + The mounted folder is temporarily not available on the server Bağlanan dizin geçici olarak sunucuda mevcut değil - + An error occurred while opening a folder Klasör açılırken bir hata oluştu - + Error while reading folder. Klasör okunurken hata oluştu. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. Dosya/Klasör gizli olduğu için yoksayıldı. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: %1 sunucusunda kullanılabilir alan yok. - + CSync unspecified error. CSync belirtilmemiş hata. - + Aborted by the user Kullanıcı tarafından iptal edildi - + CSync failed to access CSync erişimde başarısız oldu - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync, günlük dosyası yüklenemedi veya oluşturalamadı. Lütfen yerel eşitleme dizininde okuma ve yazma izinleriniz olduğundan emin olun. - + CSync failed due to unhandled permission denied. CSync ele alınmayan izin reddinden dolayı başarısız. - + CSync tried to create a folder that already exists. CSync, zaten mevcut olan bir klasör oluşturmaya çalıştı. - + The service is temporarily unavailable Hizmet geçiçi olarak kullanılamıyor - + Access is forbidden Erişim yasak - + An internal error number %1 occurred. %1 numaralı dahili bir hata oluştu - + Symbolic links are not supported in syncing. Sembolik bağlantılar eşitlemede desteklenmiyor. - + File is listed on the ignore list. Dosya yoksayma listesinde. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. Dosya adı bu dosya sisteminde ayrılmış bir addır. - + Filename contains trailing spaces. - + Filename is too long. Dosya adı çok uzun. - + Unresolved conflict. - + Stat failed. Durum alma başarısız. - + Filename encoding is not valid Dosya adı kodlaması geçerli değil - + Invalid characters, please rename "%1" Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak diff --git a/translations/client_uk.ts b/translations/client_uk.ts index d60600385..a693396be 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -739,29 +739,29 @@ Журнал синхронізації - + Could not read system exclude file Неможливо прочитати виключений системний файл - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? Видалити усі файли? - + Remove all files Видалити усі файли - + Keep files Зберегти файли - + This sync would reset the files to an earlier 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? - + Backup detected Резервну копію знайдено - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1677,32 +1677,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3087,300 +3087,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. Успішно. - + CSync failed to load the journal file. The journal file is corrupted. CSync не вдалося завантажити файл журналу. Файл журналу пошкоджений. - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>Не вдалося завантажити плагін для синхронізації %1.<br/>Будь ласка, перевірте його встановлення!</p> - + CSync fatal parameter error. У CSync сталася фатальна помилка параметра. - + CSync processing step update failed. CSync не вдалася зробити оновлення . - + CSync processing step reconcile failed. CSync не вдалася зробити врегулювання. - + CSync could not authenticate at the proxy. CSync не вдалося аутентифікуватися на проксі-сервері. - + CSync failed to lookup proxy or server. CSync не вдалося знайти Проксі або Сервер. - + CSync failed to authenticate at the %1 server. CSync не вдалося аутентифікуватися на %1 сервері. - + CSync failed to connect to the network. CSync не вдалося приєднатися до мережі. - + A network connection timeout happened. Час під'єднання до мережі вичерпався. - + A HTTP transmission error happened. Сталася помилка передачі даних по HTTP. - + The mounted folder is temporarily not available on the server - + An error occurred while opening a folder - + Error while reading folder. - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync: на сервері %1 скінчилося місце. - + CSync unspecified error. Невизначена помилка CSync. - + Aborted by the user Скасовано користувачем - + CSync failed to access CSync не вдалося отримати доступ - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. - + CSync failed due to unhandled permission denied. - + CSync tried to create a folder that already exists. - + The service is temporarily unavailable Служба тимчасово недоступна - + Access is forbidden Доступ заборонений - + An internal error number %1 occurred. Виникла внутрішня помилка за номером %1. - + Symbolic links are not supported in syncing. Синхронізація символічних посилань не підтримується. - + File is listed on the ignore list. Файл присутній у списку ігнорованих. - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. Шлях до файлу занадто довгий. - + Unresolved conflict. - + Stat failed. - + Filename encoding is not valid Кодування файлу не припустиме - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index bba7fb9ed..957c84663 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -739,31 +739,31 @@ 同步活动 - + Could not read system exclude file 无法读取系统排除的文件 - + A new folder larger than %1 MB has been added: %2. 一个大于 %1 MB 的新文件夹 %2 已被添加。 - + A folder from an external storage has been added. 一个来自外部存储的文件夹已被添加。 - + Please go in the settings to select it if you wish to download it. 如果您想下载,请到设置页面选择它。 - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -774,7 +774,7 @@ If you decide to delete the files, they will be unavailable to you, unless you a 如果您决定删除这些文件,它们将不再可用,除非您是其所有者。 - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. @@ -783,22 +783,22 @@ If this was an accident and you decide to keep your files, they will be re-synce 如果这是一个意外而您想要保留这些文件,他们会被重新从服务器同步过来。 - + Remove All Files? 删除所有文件? - + Remove all files 删除所有文件 - + Keep files 保持所有文件 - + This sync would reset the files to an earlier 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? @@ -807,17 +807,17 @@ Continuing the sync as normal will cause all your files to be overwritten by an 继续正常同步将导致您全部文件被更早状态的旧文件覆盖。您想要保留冲突文件的本地最新版本吗? - + Backup detected 备份已删除 - + Normal Synchronisation 正常同步 - + Keep Local Files as Conflict 保留本地文件为冲突文件 @@ -1689,32 +1689,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3098,300 +3098,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSync同步无法载入日志文件。日志文件已损坏。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>csync 的 %1 插件不能加载。<br/>请校验安装!</p> - + CSync fatal parameter error. CSync 致命参数错误。 - + CSync processing step update failed. CSync 处理步骤更新失败。 - + CSync processing step reconcile failed. CSync 处理步骤调和失败。 - + CSync could not authenticate at the proxy. CSync 代理认证失败。 - + CSync failed to lookup proxy or server. CSync 无法查询代理或服务器。 - + CSync failed to authenticate at the %1 server. CSync 于 %1 服务器认证失败。 - + CSync failed to connect to the network. CSync 联网失败。 - + A network connection timeout happened. 网络连接超时。 - + A HTTP transmission error happened. HTTP 传输错误。 - + The mounted folder is temporarily not available on the server 该文件夹在服务器上不可用 - + An error occurred while opening a folder 打开目录失败 - + Error while reading folder. 读取目录时出错 - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. 已忽略隐藏的文件和文件夹。 - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync:%1 服务器空间已满。 - + CSync unspecified error. CSync 未定义错误。 - + Aborted by the user 用户撤销 - + CSync failed to access 访问 CSync 失败 - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. Csync同步失败,请确定是否有本地同步目录的读写权 - + CSync failed due to unhandled permission denied. 出于未处理的权限拒绝,CSync 失败。 - + CSync tried to create a folder that already exists. CSync 尝试创建了已有的文件夹。 - + The service is temporarily unavailable 服务暂时不可用 - + Access is forbidden 访问被拒绝 - + An internal error number %1 occurred. 发生内部错误 %1 - + Symbolic links are not supported in syncing. 符号链接不被同步支持。 - + File is listed on the ignore list. 文件在忽略列表中。 - + File names ending with a period are not supported on this file system. 文件名结尾不可以为“.”。 - + File names containing the character '%1' are not supported on this file system. 此文件系统不支持包含字符 '%1' 的文件名。 - + The file name is a reserved name on this file system. 文件名为系统保留文件名。 - + Filename contains trailing spaces. 文件名尾部含有空格 - + Filename is too long. 文件名过长。 - + Unresolved conflict. - + Stat failed. 状态失败。 - + Filename encoding is not valid 文件名编码无效 - + Invalid characters, please rename "%1" 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index aa4ba635c..dc598c130 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -739,29 +739,29 @@ 同步活動 - + Could not read system exclude file 無法讀取系統的排除檔案 - + A new folder larger than %1 MB has been added: %2. - + A folder from an external storage has been added. - + Please go in the settings to select it if you wish to download it. - + All files in the sync folder '%1' folder were deleted on the server. These deletes will be synchronized to your local sync folder, making such files unavailable unless you have a right to restore. If you decide to keep the files, they will be re-synced with the server if you have rights to do so. @@ -769,46 +769,46 @@ If you decide to delete the files, they will be unavailable to you, unless you a - + All the files in your local sync folder '%1' were deleted. These deletes will be synchronized with your server, making such files unavailable unless restored. Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. - + Remove All Files? 移除所有檔案? - + Remove all files 移除所有檔案 - + Keep files 保留檔案 - + This sync would reset the files to an earlier 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? - + Backup detected - + Normal Synchronisation - + Keep Local Files as Conflict @@ -1679,32 +1679,32 @@ Items where deletion is allowed will be deleted if they prevent a directory from OCC::OAuth - + Error returned from the server: <em>%1</em> - + There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Could not parse the JSON returned from the server: <br><em>%1</em> - + The reply from the server did not contain all expected fields - + <h1>Login Error</h1><p>%1</p> - + <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> @@ -3090,300 +3090,300 @@ It is not advisable to use it. OCC::SyncEngine - + Success. 成功。 - + CSync failed to load the journal file. The journal file is corrupted. CSync 讀取歷程檔案失敗,歷程檔案已經損毀。 - + <p>The %1 plugin for csync could not be loaded.<br/>Please verify the installation!</p> <p>用於csync的套件%1</p> - + CSync fatal parameter error. CSync 參數錯誤。 - + CSync processing step update failed. CSync 處理步驟 "update" 失敗。 - + CSync processing step reconcile failed. CSync 處理步驟 "reconcile" 失敗。 - + CSync could not authenticate at the proxy. CSync 無法在代理伺服器認證。 - + CSync failed to lookup proxy or server. CSync 查詢代理伺服器或伺服器失敗。 - + CSync failed to authenticate at the %1 server. CSync 於伺服器 %1 認證失敗。 - + CSync failed to connect to the network. CSync 無法連接到網路。 - + A network connection timeout happened. 網路連線逾時。 - + A HTTP transmission error happened. HTTP 傳輸錯誤。 - + The mounted folder is temporarily not available on the server 掛載的資料夾暫時無法在伺服器上使用 - + An error occurred while opening a folder 開啟資料夾時發生錯誤。 - + Error while reading folder. 讀取資料夾時發生錯誤。 - + %1 (skipped due to earlier error, trying again in %2) - + File/Folder is ignored because it's hidden. - + Folder hierarchy is too deep - + Conflict: Server version downloaded, local copy renamed and not uploaded. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. - + CSync: No space on %1 server available. CSync:伺服器 %1 沒有可用空間。 - + CSync unspecified error. CSync 未知的錯誤。 - + Aborted by the user 使用者中斷 - + CSync failed to access CSync 存取失敗。 - + CSync failed to load or create the journal file. Make sure you have read and write permissions in the local sync folder. CSync 讀取或創建歷程檔案時失敗,請確定您在此本地資料夾有讀寫的權限。 - + CSync failed due to unhandled permission denied. CSync 失敗,由於權限未處理被拒。 - + CSync tried to create a folder that already exists. CSync 試圖建立一個已經存在的資料夾。 - + The service is temporarily unavailable 這個服務暫時無法使用。 - + Access is forbidden 存取被拒 - + An internal error number %1 occurred. 發生內部錯誤,錯誤代碼 %1。 - + Symbolic links are not supported in syncing. 同步不支援捷徑連結 - + File is listed on the ignore list. 檔案被列在忽略清單。 - + File names ending with a period are not supported on this file system. - + File names containing the character '%1' are not supported on this file system. - + The file name is a reserved name on this file system. - + Filename contains trailing spaces. - + Filename is too long. 檔案名稱太長了。 - + Unresolved conflict. - + Stat failed. 狀態失敗。 - + Filename encoding is not valid 檔案名稱編碼是無效的 - + Invalid characters, please rename "%1" 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 From 844bfc5f25c178d5093688e7b06dc62a6e42cd6c Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 10:16:26 +0200 Subject: [PATCH 115/166] Move the --version output text to Theme #5957 Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt --- src/cmd/cmd.cpp | 3 +-- src/gui/application.cpp | 13 +------------ src/libsync/theme.cpp | 15 +++++++++++++++ src/libsync/theme.h | 8 ++++++++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index b8116b919..79ff7b35d 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -196,8 +196,7 @@ void help() void showVersion() { - const char *binaryName = APPLICATION_EXECUTABLE "cmd"; - std::cout << binaryName << " version " << qPrintable(Theme::instance()->version()) << std::endl; + std::cout << qPrintableUtf8(Theme::instance()->versionSwitchOutput()); exit(0); } diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 3f58f0bfc..6896857ec 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -487,18 +487,7 @@ void Application::showHelp() void Application::showVersion() { - QString helpText; - QTextStream stream(&helpText); - stream << _theme->appName().toLatin1().constData() - << QLatin1String(" version ") - << _theme->version().toLatin1().constData() << endl; -#ifdef GIT_SHA1 - stream << "Git revision " << GIT_SHA1 << endl; -#endif - stream << "Using Qt " << qVersion() << ", built against Qt " << QT_VERSION_STR << endl; - stream << "Using '" << QSslSocket::sslLibraryVersionString() << "'" << endl; - - displayHelpText(helpText); + displayHelpText(Theme::instance()->versionSwitchOutput()); } void Application::showHint(std::string errorHint) diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 828bbf45e..032a6c761 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -505,5 +505,20 @@ QString Theme::oauthClientSecret() const return "UBntmLjC2yYCeHwsyj73Uwo9TAaecAetRwMw0xYcvNL9yRdLSUi0hUAHfvCHFeFh"; } +QString Theme::versionSwitchOutput() const +{ + QString helpText; + QTextStream stream(&helpText); + stream << appName().toLatin1().constData() + << QLatin1String(" version ") + << version().toLatin1().constData() << endl; +#ifdef GIT_SHA1 + stream << "Git revision " << GIT_SHA1 << endl; +#endif + stream << "Using Qt " << qVersion() << ", built against Qt " << QT_VERSION_STR << endl; + stream << "Using '" << QSslSocket::sslLibraryVersionString() << "'" << endl; + return helpText; +} + } // end namespace client diff --git a/src/libsync/theme.h b/src/libsync/theme.h index bb5c858ae..ffc7569b3 100644 --- a/src/libsync/theme.h +++ b/src/libsync/theme.h @@ -327,6 +327,14 @@ public: virtual QString oauthClientId() const; virtual QString oauthClientSecret() const; + /** + * @brief What should be output for the --version command line switch. + * + * By default, it's a combination of appName(), version(), the GIT SHA1 and some + * important dependency versions. + */ + virtual QString versionSwitchOutput() const; + protected: #ifndef TOKEN_AUTH_ONLY From 82e87805c3a214f0b4a3e22591f8d135566e3eff Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 10:25:51 +0200 Subject: [PATCH 116/166] Packaging: Change directory for docs #5957 Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt --- doc/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index ad3825223..f603eac55 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -12,10 +12,12 @@ if(SPHINX_FOUND) # assets set(LATEX_LOGO "${CMAKE_CURRENT_SOURCE_DIR}/logo-blue.pdf") - install(DIRECTORY ${SPHINX_HTML_DIR} DESTINATION ${CMAKE_INSTALL_DOCDIR} OPTIONAL) + set(APPLICATION_DOC_DIR "${CMAKE_INSTALL_DOCDIR}/${PACKAGE}") + install(DIRECTORY ${SPHINX_HTML_DIR} DESTINATION ${APPLICATION_DOC_DIR} OPTIONAL) + install(DIRECTORY ${SPHINX_PDF_DIR} DESTINATION ${APPLICATION_DOC_DIR} OPTIONAL) + install(DIRECTORY ${SPHINX_QCH_DIR} DESTINATION ${APPLICATION_DOC_DIR} OPTIONAL) + install(DIRECTORY ${SPHINX_MAN_DIR} DESTINATION ${CMAKE_INSTALL_MANDIR} OPTIONAL) - install(DIRECTORY ${SPHINX_PDF_DIR} DESTINATION ${CMAKE_INSTALL_DOCDIR} OPTIONAL) - install(DIRECTORY ${SPHINX_QCH_DIR} DESTINATION ${CMAKE_INSTALL_DOCDIR} OPTIONAL) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in" conf.py @ONLY) From 9a021d227929fbe939d19e0fef16401adbde877c Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 10:28:08 +0200 Subject: [PATCH 117/166] Packaging: Make check for theme.qrc more specific #5957 Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt --- src/gui/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index f7cc0a9db..bf577b454 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -5,7 +5,7 @@ add_subdirectory(updater) #TODO Move resources files qt_add_resources(MIRALL_RC_SRC ../../client.qrc) -if ( IS_DIRECTORY ${OEM_THEME_DIR} ) +if (EXISTS "${OEM_THEME_DIR}/theme.qrc") qt_add_resources(MIRALL_RC_SRC ${OEM_THEME_DIR}/theme.qrc) set(theme_dir ${OEM_THEME_DIR}/theme) else() From 89df8fb6927b8f787ba6ca414b8adc2a32b8283d Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 10:29:17 +0200 Subject: [PATCH 118/166] Packaging: Adjust APPNAME handling #5957 Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt --- CMakeLists.txt | 13 ++++++++----- OWNCLOUD.cmake | 3 +++ OwnCloudCPack.cmake | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b1d4f203..123b3f85d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,16 +22,19 @@ else() set(APPLICATION_REV_DOMAIN_INSTALLER ${APPLICATION_REV_DOMAIN}) endif() -if (NOT DEFINED APPLICATION_SHORTNAME) - set ( APPLICATION_SHORTNAME ${APPLICATION_NAME} ) -endif() - # For usage in XML files we preprocess string(REPLACE "&" "&" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME}") string(REPLACE "<" "<" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}") string(REPLACE ">" ">" APPLICATION_NAME_XML_ESCAPED "${APPLICATION_NAME_XML_ESCAPED}") -set(PACKAGE "${APPLICATION_SHORTNAME}-client") +if (NOT DEFINED LINUX_PACKAGE_SHORTNAME) + set(LINUX_PACKAGE_SHORTNAME "${APPLICATION_SHORTNAME}") +endif() + +if (NOT DEFINED PACKAGE) + set(PACKAGE "${LINUX_PACKAGE_SHORTNAME}-client") +endif() + set( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ) if(NOT CRASHREPORTER_EXECUTABLE) diff --git a/OWNCLOUD.cmake b/OWNCLOUD.cmake index 1a818a4d0..a98c0787f 100644 --- a/OWNCLOUD.cmake +++ b/OWNCLOUD.cmake @@ -1,10 +1,13 @@ set( APPLICATION_NAME "ownCloud" ) +set( APPLICATION_SHORTNAME "ownCloud" ) set( APPLICATION_EXECUTABLE "owncloud" ) set( APPLICATION_DOMAIN "owncloud.com" ) set( APPLICATION_VENDOR "ownCloud" ) set( APPLICATION_UPDATE_URL "https://updates.owncloud.com/client/" CACHE string "URL for updater" ) set( APPLICATION_ICON_NAME "owncloud" ) +set( LINUX_PACKAGE_SHORTNAME "owncloud" ) + set( THEME_CLASS "ownCloudTheme" ) set( APPLICATION_REV_DOMAIN "com.owncloud.desktopclient" ) set( WIN_SETUP_BITMAP_PATH "${CMAKE_SOURCE_DIR}/admin/win/nsi" ) diff --git a/OwnCloudCPack.cmake b/OwnCloudCPack.cmake index cad12d1b9..39eee0080 100644 --- a/OwnCloudCPack.cmake +++ b/OwnCloudCPack.cmake @@ -48,7 +48,7 @@ if(WIN32) set( CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md" ) # File used as a description of a project /path/to/project/ReadMe.txt set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "${APPLICATION_NAME} Syncing Client" ) # Description summary of a project # CPACK_PACKAGE_EXECUTABLES List of pairs of executables and labels. Used by the NSIS generator to create Start Menu shortcuts. ccmake;CMake - set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\fellody + set( CPACK_PACKAGE_INSTALL_DIRECTORY ${APPLICATION_SHORTNAME} ) # Installation directory on the target system -> C:\Program Files\${APPLICATION_SHORTNAME} set( CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${APPLICATION_SHORTNAME} ) # Registry key used when installing this project CMake 2.5.0 set( CPACK_PACKAGE_NAME ${APPLICATION_NAME} ) # Package name, defaults to the project name set( CPACK_PACKAGE_VENDOR "http://${APPLICATION_DOMAIN}" ) # Package vendor name From ca4ad58a06fac3db38e5f6238a84fa26516cc7bc Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 22 Sep 2017 10:32:38 +0200 Subject: [PATCH 119/166] Packaging: Add options for fine-grained builds #5957 Extracted and adjusted from packaging.diff by @jnweiger and @dschmidt --- CMakeLists.txt | 78 ++++++++++++++++++++------------ shell_integration/CMakeLists.txt | 24 ++++++---- 2 files changed, 65 insertions(+), 37 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 123b3f85d..c8ea19820 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,7 +129,22 @@ if(NO_MSG_HANDLER) add_definitions(-DNO_MSG_HANDLER=1) endif() -# this option creates only libocsync and libowncloudsync +# this option builds the shell integration +option(BUILD_SHELL_INTEGRATION "BUILD_SHELL_INTEGRATION" ON) + +# this option builds/installs the generic shell integration icons +option(BUILD_SHELL_INTEGRATION_ICONS "BUILD_SHELL_INTEGRATION_ICONS" ON) + +# this options builds the dolphin integration plugin +option(BUILD_SHELL_INTEGRATION_DOLPHIN "BUILD_SHELL_INTEGRATION_DOLPHIN" ON) + +# this options builds the nautilus (like) integration plugins +option(BUILD_SHELL_INTEGRATION_NAUTILUS "BUILD_SHELL_INTEGRATION_NAUTILUS" ON) + +# this option builds the client +option(BUILD_CLIENT "BUILD_CLIENT" ON) + +# this option creates only libocsync and libowncloudsync (NOTE: BUILD_CLIENT needs to be on) option(BUILD_LIBRARIES_ONLY "BUILD_LIBRARIES_ONLY" OFF) # When this option is enabled, 5xx errors are not added to the blacklist @@ -162,28 +177,30 @@ if(APPLE) set( SOCKETAPI_TEAM_IDENTIFIER_PREFIX "" CACHE STRING "SocketApi prefix (including a following dot) that must match the codesign key's TeamIdentifier/Organizational Unit" ) endif() -if(APPLE) - find_package(Sparkle) -endif(APPLE) +if(BUILD_CLIENT) + if(APPLE) + find_package(Sparkle) + endif(APPLE) -if(UNIX) - find_package(INotify REQUIRED) -else() - find_package(INotify) -endif() -find_package(Sphinx) -find_package(PdfLatex) - -find_package(SQLite3 3.8.0 REQUIRED) -# On some OS, we want to use our own, not the system sqlite -if (USE_OUR_OWN_SQLITE3) - include_directories(BEFORE ${SQLITE3_INCLUDE_DIR}) - if (WIN32) - add_definitions(-DSQLITE_API=__declspec\(dllimport\)) + if(UNIX) + find_package(INotify REQUIRED) + else() + find_package(INotify) endif() -endif() + find_package(Sphinx) + find_package(PdfLatex) -find_package(ZLIB) + find_package(SQLite3 3.8.0 REQUIRED) + # On some OS, we want to use our own, not the system sqlite + if (USE_OUR_OWN_SQLITE3) + include_directories(BEFORE ${SQLITE3_INCLUDE_DIR}) + if (WIN32) + add_definitions(-DSQLITE_API=__declspec\(dllimport\)) + endif() + endif() + + find_package(ZLIB) +endif() if (NOT DEFINED APPLICATION_ICON_NAME) set(APPLICATION_ICON_NAME ${APPLICATION_SHORTNAME}) @@ -223,13 +240,18 @@ set(TRANSLATIONS ${TRANS_FILES}) # Make sure we set this before recursing into child folders. set(WITH_TESTING ${UNIT_TESTING}) -add_subdirectory(src) -if(NOT BUILD_LIBRARIES_ONLY) -add_subdirectory(shell_integration) -add_subdirectory(doc) -add_subdirectory(doc/dev) -add_subdirectory(admin) -endif(NOT BUILD_LIBRARIES_ONLY) +if(BUILD_CLIENT) + add_subdirectory(src) + if(NOT BUILD_LIBRARIES_ONLY) + add_subdirectory(doc) + add_subdirectory(doc/dev) + add_subdirectory(admin) + endif(NOT BUILD_LIBRARIES_ONLY) +endif() + +if(BUILD_SHELL_INTEGRATION) + add_subdirectory(shell_integration) +endif() if(UNIT_TESTING) include(CTest) @@ -243,7 +265,7 @@ configure_file(version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) if(BUILD_OWNCLOUD_OSX_BUNDLE) install(FILES sync-exclude.lst DESTINATION ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/) configure_file(sync-exclude.lst bin/${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/sync-exclude.lst COPYONLY) -else() +elseif(BUILD_CLIENT) install( FILES sync-exclude.lst DESTINATION ${SYSCONFDIR}/${APPLICATION_SHORTNAME} ) configure_file(sync-exclude.lst bin/sync-exclude.lst COPYONLY) endif() diff --git a/shell_integration/CMakeLists.txt b/shell_integration/CMakeLists.txt index 03b2bbc34..87c453bf2 100644 --- a/shell_integration/CMakeLists.txt +++ b/shell_integration/CMakeLists.txt @@ -1,17 +1,23 @@ if (APPLE) add_subdirectory(MacOSX) endif() -add_subdirectory(icons) +if(BUILD_SHELL_INTEGRATION_ICONS) + add_subdirectory(icons) +endif() if( UNIX AND NOT APPLE ) - add_subdirectory(nautilus) + if(BUILD_SHELL_INTEGRATION_NAUTILUS) + add_subdirectory(nautilus) + endif() - find_package(ECM 1.2.0 NO_MODULE QUIET) - set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - find_package(KF5 "5.16" COMPONENTS KIO) - if(KF5_FOUND) - add_subdirectory(dolphin) - else() - message("Dolphin plugin disabled: KDE Frameworks 5.16 not found") + if(BUILD_SHELL_INTEGRATION_DOLPHIN) + find_package(ECM 1.2.0 NO_MODULE QUIET) + set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + find_package(KF5 "5.16" COMPONENTS KIO) + if(KF5_FOUND) + add_subdirectory(dolphin) + else() + message("Dolphin plugin disabled: KDE Frameworks 5.16 not found") + endif() endif() endif() From a2ce739192a1407496ba014b4d8f0099d886157c Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Fri, 22 Sep 2017 10:45:40 +0200 Subject: [PATCH 120/166] Set CMAKE_INSTALL_RPATH as RPATH for installed executables --- src/cmd/CMakeLists.txt | 2 +- src/gui/CMakeLists.txt | 2 +- src/libsync/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt index 26b641f21..50a8e743f 100644 --- a/src/cmd/CMakeLists.txt +++ b/src/cmd/CMakeLists.txt @@ -25,7 +25,7 @@ if(NOT BUILD_LIBRARIES_ONLY) set_target_properties(${cmd_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} ) set_target_properties(${cmd_NAME} PROPERTIES - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE}" ) + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE};${CMAKE_INSTALL_RPATH}" ) target_link_libraries(${cmd_NAME} ${synclib_NAME}) endif() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index bf577b454..d8b2b7745 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -291,7 +291,7 @@ set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES ) # Only relevant for Linux? On OS X it by default properly checks in the bundle directory next to the exe set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE}" ) + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE};${CMAKE_INSTALL_RPATH}" ) target_link_libraries( ${APPLICATION_EXECUTABLE} ${QT_LIBRARIES} ) target_link_libraries( ${APPLICATION_EXECUTABLE} ${synclib_NAME} ) diff --git a/src/libsync/CMakeLists.txt b/src/libsync/CMakeLists.txt index 77b32ba1a..eeb8fa0a9 100644 --- a/src/libsync/CMakeLists.txt +++ b/src/libsync/CMakeLists.txt @@ -131,7 +131,7 @@ set_target_properties( ${synclib_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY} ) set_target_properties( ${synclib_NAME} PROPERTIES - INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE}" ) + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}/${APPLICATION_EXECUTABLE};${CMAKE_INSTALL_RPATH}" ) target_link_libraries(${synclib_NAME} ${libsync_LINK_TARGETS} ) From 041c5e6d441ec2eb5e2bac69b97c82982d0b9ff2 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sun, 24 Sep 2017 21:58:41 +0200 Subject: [PATCH 121/166] csync_reconcile: Optimize reconcile by avoiding alocations Fix performence regression from commit d66c2b5faecc689c52df23d7dbc44c894b92febc For every new file we would look up every parent directories. Allocating a new QByteArreay for every parent riectory just to know if it is in the other tree is wasting lots of CPU. Use a ByteArrayRef trick, similar to QStringRef --- src/csync/csync_private.h | 36 ++++++++++++++++++++++++++++++++--- src/csync/csync_reconcile.cpp | 5 +++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 60d12df91..010e884e3 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -68,14 +68,44 @@ enum csync_replica_e { REMOTE_REPLICA }; + +/* + * This is a structurere similar to QStringRef + * The difference is that it keeps the QByteArray by value and not by pointer + * And it only implements a very small subset of the API that is required by csync, the API can be + * added as we need it. + */ +class ByteArrayRef +{ + QByteArray _arr; + int _begin = 0; + int _size = -1; + +public: + ByteArrayRef(const QByteArray &arr = {}, int begin = 0, int size = -1) + : _arr(arr) + , _begin(begin) + , _size(qMin(arr.size() - begin, size < 0 ? arr.size() : size)) + { + } + ByteArrayRef left(int l) const { return ByteArrayRef(_arr, _begin, l); }; + char at(int x) const { return _arr.at(_begin + x); } + int size() const { return _size; } + /* Pointer to the beginning of the data. WARNING: not null terminated */ + const char *data() const { return _arr.constData() + _begin; } + + friend bool operator==(const ByteArrayRef &a, const ByteArrayRef &b) + { return a.size() == b.size() && qstrncmp(a.data(), b.data(), a.size()) == 0; } +}; + /** * @brief csync public structure */ struct OCSYNC_EXPORT csync_s { - struct FileMapHash { uint operator()(const QByteArray &a) const { return qHash(a); } }; - class FileMap : public std::unordered_map, FileMapHash> { + struct FileMapHash { uint operator()(const ByteArrayRef &a) const { return qHashBits(a.data(), a.size()); } }; + class FileMap : public std::unordered_map, FileMapHash> { public: - csync_file_stat_t *findFile(const QByteArray &key) const { + csync_file_stat_t *findFile(const ByteArrayRef &key) const { auto it = find(key); return it != end() ? it->second.get() : nullptr; } diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 2fdaa7f38..80bd91ee1 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -37,7 +37,8 @@ Q_LOGGING_CATEGORY(lcReconcile, "sync.csync.reconciler", QtInfoMsg) /* Check if a file is ignored because one parent is ignored. * return the node of the ignored directoy if it's the case, or NULL if it is not ignored */ -static csync_file_stat_t *_csync_check_ignored(csync_s::FileMap *tree, const QByteArray &path) { +static csync_file_stat_t *_csync_check_ignored(csync_s::FileMap *tree, const ByteArrayRef &path) +{ /* compute the size of the parent directory */ int parentlen = path.size() - 1; while (parentlen > 0 && path.at(parentlen) != '/') { @@ -46,7 +47,7 @@ static csync_file_stat_t *_csync_check_ignored(csync_s::FileMap *tree, const QBy if (parentlen <= 0) { return nullptr; } - QByteArray parentPath = path.left(parentlen); + auto parentPath = path.left(parentlen); csync_file_stat_t *fs = tree->findFile(parentPath); if (fs) { if (fs->instruction == CSYNC_INSTRUCTION_IGNORE) { From a52dff713bbe4f9c0e6c4c5bb3c9b3c631ecc175 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 10:33:12 +0200 Subject: [PATCH 122/166] csync_rename: optimize lookup Avoid many memory allocations in reconcile --- src/csync/csync_private.h | 23 ++++++++++++++--------- src/csync/csync_reconcile.cpp | 2 +- src/csync/csync_rename.cpp | 14 +++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 010e884e3..09d627b2c 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -81,29 +81,34 @@ class ByteArrayRef int _begin = 0; int _size = -1; + /* Pointer to the beginning of the data. WARNING: not null terminated */ + const char *data() const { return _arr.constData() + _begin; } + friend struct ByteArrayRefHash; + public: - ByteArrayRef(const QByteArray &arr = {}, int begin = 0, int size = -1) - : _arr(arr) + ByteArrayRef(QByteArray arr = {}, int begin = 0, int size = -1) + : _arr(std::move(arr)) , _begin(begin) - , _size(qMin(arr.size() - begin, size < 0 ? arr.size() : size)) + , _size(qMin(_arr.size() - begin, size < 0 ? _arr.size() - begin : size)) { } ByteArrayRef left(int l) const { return ByteArrayRef(_arr, _begin, l); }; char at(int x) const { return _arr.at(_begin + x); } int size() const { return _size; } - /* Pointer to the beginning of the data. WARNING: not null terminated */ - const char *data() const { return _arr.constData() + _begin; } + int length() const { return _size; } + bool isEmpty() const { return _size == 0; } friend bool operator==(const ByteArrayRef &a, const ByteArrayRef &b) { return a.size() == b.size() && qstrncmp(a.data(), b.data(), a.size()) == 0; } }; +struct ByteArrayRefHash { uint operator()(const ByteArrayRef &a) const { return qHashBits(a.data(), a.size()); } }; /** * @brief csync public structure */ struct OCSYNC_EXPORT csync_s { - struct FileMapHash { uint operator()(const ByteArrayRef &a) const { return qHashBits(a.data(), a.size()); } }; - class FileMap : public std::unordered_map, FileMapHash> { + + class FileMap : public std::unordered_map, ByteArrayRefHash> { public: csync_file_stat_t *findFile(const ByteArrayRef &key) const { auto it = find(key); @@ -137,8 +142,8 @@ struct OCSYNC_EXPORT csync_s { OCC::SyncJournalDb *statedb; struct { - std::map folder_renamed_to; // map from->to - std::map folder_renamed_from; // map to->from + std::unordered_map folder_renamed_to; // map from->to + std::unordered_map folder_renamed_from; // map to->from } renames; struct { diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 80bd91ee1..52ebba36f 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -47,7 +47,7 @@ static csync_file_stat_t *_csync_check_ignored(csync_s::FileMap *tree, const Byt if (parentlen <= 0) { return nullptr; } - auto parentPath = path.left(parentlen); + ByteArrayRef parentPath = path.left(parentlen); csync_file_stat_t *fs = tree->findFile(parentPath); if (fs) { if (fs->instruction == CSYNC_INSTRUCTION_IGNORE) { diff --git a/src/csync/csync_rename.cpp b/src/csync/csync_rename.cpp index ef825a606..da76cff52 100644 --- a/src/csync/csync_rename.cpp +++ b/src/csync/csync_rename.cpp @@ -23,7 +23,7 @@ #include -static QByteArray _parentDir(const QByteArray &path) { +static ByteArrayRef _parentDir(const ByteArrayRef &path) { int len = path.length(); while(len > 0 && path.at(len-1)!='/') len--; while(len > 0 && path.at(len-1)=='/') len--; @@ -38,8 +38,10 @@ void csync_rename_record(CSYNC* ctx, const QByteArray &from, const QByteArray &t QByteArray csync_rename_adjust_path(CSYNC* ctx, const QByteArray &path) { - for (QByteArray p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { - std::map< QByteArray, QByteArray >::iterator it = ctx->renames.folder_renamed_to.find(p); + if (ctx->renames.folder_renamed_to.empty()) + return path; + for (auto p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { + auto it = ctx->renames.folder_renamed_to.find(p); if (it != ctx->renames.folder_renamed_to.end()) { QByteArray rep = it->second + path.mid(p.length()); return rep; @@ -50,8 +52,10 @@ QByteArray csync_rename_adjust_path(CSYNC* ctx, const QByteArray &path) QByteArray csync_rename_adjust_path_source(CSYNC* ctx, const QByteArray &path) { - for (QByteArray p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { - std::map< QByteArray, QByteArray >::iterator it = ctx->renames.folder_renamed_from.find(p); + if (ctx->renames.folder_renamed_from.empty()) + return path; + for (auto p = _parentDir(path); !p.isEmpty(); p = _parentDir(p)) { + auto it = ctx->renames.folder_renamed_from.find(p); if (it != ctx->renames.folder_renamed_from.end()) { QByteArray rep = it->second + path.mid(p.length()); return rep; From d68b07dfc7225e4d5e7ed6649ef239ea6c7edf65 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 27 Sep 2017 12:03:16 +0200 Subject: [PATCH 123/166] Fix encoding of version string --- src/cmd/cmd.cpp | 2 +- src/gui/application.cpp | 6 +++--- src/libsync/theme.cpp | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 79ff7b35d..4055ab1b3 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -196,7 +196,7 @@ void help() void showVersion() { - std::cout << qPrintableUtf8(Theme::instance()->versionSwitchOutput()); + std::cout << qUtf8Printable(Theme::instance()->versionSwitchOutput()); exit(0); } diff --git a/src/gui/application.cpp b/src/gui/application.cpp index 6896857ec..934e23ecb 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -460,7 +460,7 @@ static void displayHelpText(QString t) // No console on Windows. static void displayHelpText(const QString &t) { - std::cout << qPrintable(t); + std::cout << qUtf8Printable(t); } #endif @@ -469,9 +469,9 @@ void Application::showHelp() setHelp(); QString helpText; QTextStream stream(&helpText); - stream << _theme->appName().toLatin1().constData() + stream << _theme->appName() << QLatin1String(" version ") - << _theme->version().toLatin1().constData() << endl; + << _theme->version() << endl; stream << QLatin1String("File synchronisation desktop utility.") << endl << endl diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 032a6c761..eba7f8cd6 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -92,17 +92,17 @@ QString Theme::statusHeaderText(SyncResult::Status status) const QString Theme::appNameGUI() const { - return QLatin1String(APPLICATION_NAME); + return APPLICATION_NAME; } QString Theme::appName() const { - return QLatin1String(APPLICATION_SHORTNAME); + return APPLICATION_SHORTNAME; } QString Theme::version() const { - return QString::fromLocal8Bit(MIRALL_VERSION_STRING); + return MIRALL_VERSION_STRING; } #ifndef TOKEN_AUTH_ONLY @@ -509,9 +509,9 @@ QString Theme::versionSwitchOutput() const { QString helpText; QTextStream stream(&helpText); - stream << appName().toLatin1().constData() + stream << appName() << QLatin1String(" version ") - << version().toLatin1().constData() << endl; + << version() << endl; #ifdef GIT_SHA1 stream << "Git revision " << GIT_SHA1 << endl; #endif From 2df74fd9d7ba9ca2473ac5d851b0b565b259d398 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Sat, 23 Sep 2017 13:48:48 +0200 Subject: [PATCH 124/166] Updater: Rudimentary support for beta channel So we can get people update from our alpha to the beta and rc --- src/gui/updater/updater.cpp | 12 ++++++++++++ version.h.in | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/gui/updater/updater.cpp b/src/gui/updater/updater.cpp index 8294bb4be..940f2026b 100644 --- a/src/gui/updater/updater.cpp +++ b/src/gui/updater/updater.cpp @@ -61,6 +61,18 @@ QUrl Updater::addQueryParams(const QUrl &url) paramUrl.addQueryItem(QLatin1String("version"), clientVersion()); paramUrl.addQueryItem(QLatin1String("platform"), platform); paramUrl.addQueryItem(QLatin1String("oem"), theme->appName()); + + QString suffix = QString::fromLatin1(MIRALL_STRINGIFY(MIRALL_VERSION_SUFFIX)); + paramUrl.addQueryItem(QLatin1String("versionsuffix"), suffix); + if (suffix.startsWith("nightly") + || suffix.startsWith("alpha") + || suffix.startsWith("rc") + || suffix.startsWith("beta")) { + paramUrl.addQueryItem(QLatin1String("channel"), "beta"); + // FIXME: Provide a checkbox in UI to enable regular versions to switch + // to beta channel + } + return paramUrl; } diff --git a/version.h.in b/version.h.in index 064309f52..e96ba1fe0 100644 --- a/version.h.in +++ b/version.h.in @@ -30,6 +30,8 @@ #define MIRALL_VERSION_PATCH @MIRALL_VERSION_PATCH@ #define MIRALL_VERSION_BUILD @MIRALL_VERSION_BUILD@ +#define MIRALL_VERSION_SUFFIX @MIRALL_VERSION_SUFFIX@ + #define MIRALL_VERSION @MIRALL_VERSION@ #define MIRALL_VERSION_FULL @MIRALL_VERSION_FULL@ From 074cb132bbf446730b01be3491253bdeb422fec8 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 28 Sep 2017 02:18:36 +0200 Subject: [PATCH 125/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index d6bbc9d00..e68d166dc 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -159,6 +159,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From 1da398e6c65a2823eaa49f7fbbaa5f51ff24cef8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 28 Sep 2017 10:54:27 +0200 Subject: [PATCH 126/166] OAuth: fix compilation with old gcc We need to used QPointer::data in the signal slot connection Relates to pr #6065 --- src/gui/creds/oauth.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/creds/oauth.cpp b/src/gui/creds/oauth.cpp index f06fe3a3c..85a13f4c1 100644 --- a/src/gui/creds/oauth.cpp +++ b/src/gui/creds/oauth.cpp @@ -65,8 +65,8 @@ void OAuth::start() QObject::connect(&_server, &QTcpServer::newConnection, this, [this] { while (QPointer socket = _server.nextPendingConnection()) { - QObject::connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater); - QObject::connect(socket, &QIODevice::readyRead, this, [this, socket] { + QObject::connect(socket.data(), &QTcpSocket::disconnected, socket.data(), &QTcpSocket::deleteLater); + QObject::connect(socket.data(), &QIODevice::readyRead, this, [this, socket] { QByteArray peek = socket->peek(qMin(socket->bytesAvailable(), 4000LL)); //The code should always be within the first 4K if (peek.indexOf('\n') < 0) return; // wait until we find a \n From 800b9cf167092ff86e14929d1de85d0df523e22a Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 20 Sep 2017 11:03:37 +0200 Subject: [PATCH 127/166] SyncEngine: _hasNoneFiles should be set when there are INSTRUCTION_UPDATE_METADATA --- src/libsync/syncengine.cpp | 6 +++++- test/testallfilesdeleted.cpp | 39 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 80d36d4be..8bb336865 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -555,7 +555,7 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, switch (file->instruction) { case CSYNC_INSTRUCTION_NONE: { // Any files that are instruction NONE? - if (!isDirectory && (!other || other->instruction == CSYNC_INSTRUCTION_NONE)) { + if (!isDirectory && (!other || other->instruction == CSYNC_INSTRUCTION_NONE || other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA)) { _hasNoneFiles = true; } // Put none-instruction conflict files into the syncfileitem list @@ -614,6 +614,10 @@ int SyncEngine::treewalkFile(csync_file_stat_t *file, csync_file_stat_t *other, _journal->updateLocalMetadata(item->_file, item->_modtime, item->_size, item->_inode); } + if (!other || other->instruction == CSYNC_INSTRUCTION_NONE || other->instruction == CSYNC_INSTRUCTION_UPDATE_METADATA) { + _hasNoneFiles = true; + } + // Technically we're done with this item. return re; } diff --git a/test/testallfilesdeleted.cpp b/test/testallfilesdeleted.cpp index d9356c844..856fe73e3 100644 --- a/test/testallfilesdeleted.cpp +++ b/test/testallfilesdeleted.cpp @@ -11,6 +11,17 @@ using namespace OCC; + +static void changeAllFileId(FileInfo &info) { + info.fileId = generateFileId(); + if (!info.isDir) + return; + info.etag = generateEtag(); + for (auto it = info.children.begin(); it != info.children.end(); ++it) { + changeAllFileId(*it); + } +} + /* * This test ensure that the SyncEngine::aboutToRemoveAllFiles is correctly called and that when * we the user choose to remove all files SyncJournalDb::clearFileTable makes works as expected @@ -112,6 +123,34 @@ private slots: QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); QCOMPARE(fakeFolder.currentLocalState().children.count(), 0); } + + void testNotDeleteMetaDataChange() { + /** + * This test make sure that we don't popup a file deleted message if all the metadata have + * been updated (for example when the server is upgraded or something) + **/ + + FakeFolder fakeFolder{FileInfo::A12_B12_C12_S12()}; + // We never remove all files. + QObject::connect(&fakeFolder.syncEngine(), &SyncEngine::aboutToRemoveAllFiles, + [&] { QVERIFY(false); }); + QVERIFY(fakeFolder.syncOnce()); + + for (const auto &s : fakeFolder.currentRemoteState().children.keys()) + fakeFolder.syncJournal().avoidRenamesOnNextSync(s); // clears all the fileid and inodes. + fakeFolder.localModifier().remove("A/a1"); + auto expectedState = fakeFolder.currentLocalState(); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), expectedState); + QCOMPARE(fakeFolder.currentRemoteState(), expectedState); + + fakeFolder.remoteModifier().remove("B/b1"); + changeAllFileId(fakeFolder.remoteModifier()); + expectedState = fakeFolder.currentRemoteState(); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), expectedState); + QCOMPARE(fakeFolder.currentRemoteState(), expectedState); + } }; QTEST_GUILESS_MAIN(TestAllFilesDeleted) From 0ceb806f1a075eef8f90c10b26d10410ea5e2228 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 25 Sep 2017 18:23:39 +0200 Subject: [PATCH 128/166] Test OAuth2 Include a test for PR #6057 --- src/gui/creds/oauth.h | 1 + test/CMakeLists.txt | 2 + test/syncenginetestutils.h | 8 +- test/testoauth.cpp | 281 +++++++++++++++++++++++++++++++++++++ 4 files changed, 288 insertions(+), 4 deletions(-) create mode 100644 test/testoauth.cpp diff --git a/src/gui/creds/oauth.h b/src/gui/creds/oauth.h index 702439647..1c6b519e1 100644 --- a/src/gui/creds/oauth.h +++ b/src/gui/creds/oauth.h @@ -16,6 +16,7 @@ #include #include #include +#include "accountfwd.h" namespace OCC { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d5cc8615f..14235a49d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -69,6 +69,8 @@ list(APPEND FolderMan_SRC ${FolderWatcher_SRC}) list(APPEND FolderMan_SRC stub.cpp ) owncloud_add_test(FolderMan "${FolderMan_SRC}") +owncloud_add_test(OAuth "syncenginetestutils.h;../src/gui/creds/oauth.cpp") + configure_file(test_journal.db "${PROJECT_BINARY_DIR}/bin/test_journal.db" COPYONLY) find_package(CMocka) diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 9253b6285..498ebcb4d 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -738,6 +738,10 @@ public: protected: QNetworkReply *createRequest(Operation op, const QNetworkRequest &request, QIODevice *outgoingData = 0) { + if (_override) { + if (auto reply = _override(op, request)) + return reply; + } const QString fileName = getFilePathFromUrl(request.url()); Q_ASSERT(!fileName.isNull()); if (_errorPaths.contains(fileName)) @@ -746,10 +750,6 @@ protected: bool isUpload = request.url().path().startsWith(sUploadUrl.path()); FileInfo &info = isUpload ? _uploadFileInfo : _remoteRootFileInfo; - if (_override) { - if (auto reply = _override(op, request)) - return reply; - } auto verb = request.attribute(QNetworkRequest::CustomVerbAttribute); if (verb == "PROPFIND") diff --git a/test/testoauth.cpp b/test/testoauth.cpp new file mode 100644 index 000000000..76dbb3bc5 --- /dev/null +++ b/test/testoauth.cpp @@ -0,0 +1,281 @@ +/* + * This software is in the public domain, furnished "as is", without technical + * support, and with no warranty, express or implied, as to its usefulness for + * any purpose. + * + */ + +#include +#include + +#include "gui/creds/oauth.h" +#include "syncenginetestutils.h" +#include "theme.h" +#include "common/asserts.h" + +using namespace OCC; + +class DesktopServiceHook : public QObject +{ + Q_OBJECT +signals: + void hooked(const QUrl &); +public: + DesktopServiceHook() { QDesktopServices::setUrlHandler("oauthtest", this, "hooked"); } +} desktopServiceHook; + +static const QUrl sOAuthTestServer("oauthtest://someserver/owncloud"); + + +class FakePostReply : public QNetworkReply +{ + Q_OBJECT +public: + std::unique_ptr payload; + bool aborted = false; + + FakePostReply(QNetworkAccessManager::Operation op, const QNetworkRequest &request, + std::unique_ptr payload_, QObject *parent) + : QNetworkReply{parent}, payload{std::move(payload_)} + { + setRequest(request); + setUrl(request.url()); + setOperation(op); + open(QIODevice::ReadOnly); + payload->open(QIODevice::ReadOnly); + QMetaObject::invokeMethod(this, "respond", Qt::QueuedConnection); + } + + Q_INVOKABLE virtual void respond() { + if (aborted) { + setError(OperationCanceledError, "Operation Canceled"); + emit metaDataChanged(); + emit finished(); + return; + } + setHeader(QNetworkRequest::ContentLengthHeader, payload->size()); + setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 200); + emit metaDataChanged(); + if (bytesAvailable()) + emit readyRead(); + emit finished(); + } + + void abort() override { + aborted = true; + } + qint64 bytesAvailable() const override { + if (aborted) + return 0; + return payload->bytesAvailable(); + } + + qint64 readData(char *data, qint64 maxlen) override { + return payload->read(data, maxlen); + } +}; + +// Reply with a small delay +class SlowFakePostReply : public FakePostReply { + Q_OBJECT +public: + using FakePostReply::FakePostReply; + void respond() override { + // override of FakePostReply::respond, will call the real one with a delay. + QTimer::singleShot(100, this, [this] { this->FakePostReply::respond(); }); + } +}; + + +class OAuthTestCase : public QObject +{ + Q_OBJECT +public: + enum State { StartState, BrowserOpened, TokenAsked, CustomState } state = StartState; + Q_ENUM(State); + bool replyToBrowserOk = false; + bool gotAuthOk = false; + virtual bool done() const { return replyToBrowserOk && gotAuthOk; } + + FakeQNAM *fakeQnam = nullptr; + QNetworkAccessManager realQNAM; + QPointer browserReply = nullptr; + QString code = generateEtag(); + OCC::AccountPtr account; + + QScopedPointer oauth; + + virtual void test() { + fakeQnam = new FakeQNAM({}); + account = OCC::Account::create(); + account->setUrl(sOAuthTestServer); + account->setCredentials(new FakeCredentials{fakeQnam}); + fakeQnam->setParent(this); + fakeQnam->setOverride([this] (QNetworkAccessManager::Operation op, const QNetworkRequest &req) { + return this->tokenReply(op, req); + }); + + QObject::connect(&desktopServiceHook, &DesktopServiceHook::hooked, + this, &OAuthTestCase::openBrowserHook); + + oauth.reset(new OAuth(account.data(), nullptr)); + QObject::connect(oauth.data(), &OAuth::result, this, &OAuthTestCase::oauthResult); + oauth->start(); + QTRY_VERIFY(done()); + } + + virtual void openBrowserHook(const QUrl &url) { + QCOMPARE(state, StartState); + state = BrowserOpened; + QCOMPARE(url.path(), QString(sOAuthTestServer.path() + "/index.php/apps/oauth2/authorize")); + QVERIFY(url.toString().startsWith(sOAuthTestServer.toString())); + QUrlQuery query(url); + QCOMPARE(query.queryItemValue(QLatin1String("response_type")), QLatin1String("code")); + QCOMPARE(query.queryItemValue(QLatin1String("client_id")), Theme::instance()->oauthClientId()); + QUrl redirectUri(query.queryItemValue(QLatin1String("redirect_uri"))); + QCOMPARE(redirectUri.host(), QLatin1String("localhost")); + redirectUri.setQuery("code=" + code); + createBrowserReply(QNetworkRequest(redirectUri)); + } + + virtual QNetworkReply *createBrowserReply(const QNetworkRequest &request) { + browserReply = realQNAM.get(request); + QObject::connect(browserReply, &QNetworkReply::finished, this, &OAuthTestCase::browserReplyFinished); + return browserReply; + } + + virtual void browserReplyFinished() { + QCOMPARE(sender(), browserReply.data()); + QCOMPARE(state, TokenAsked); + browserReply->deleteLater(); + QCOMPARE(browserReply->rawHeader("Location"), QByteArray("owncloud://success")); + replyToBrowserOk = true; + }; + + virtual QNetworkReply *tokenReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req) + { + ASSERT(state == BrowserOpened); + state = TokenAsked; + ASSERT(op == QNetworkAccessManager::PostOperation); + ASSERT(req.url().toString().startsWith(sOAuthTestServer.toString())); + ASSERT(req.url().path() == sOAuthTestServer.path() + "/index.php/apps/oauth2/api/v1/token"); + std::unique_ptr payload(new QBuffer()); + payload->setData(tokenReplyPayload()); + return new FakePostReply(op, req, std::move(payload), fakeQnam); + } + + virtual QByteArray tokenReplyPayload() const { + QJsonDocument jsondata(QJsonObject{ + { "access_token", "123" }, + { "refresh_token" , "456" }, + { "message_url", "owncloud://success"}, + { "user_id", "789" }, + { "token_type", "Bearer" } + }); + return jsondata.toJson(); + } + + virtual void oauthResult(OAuth::Result result, const QString &user, const QString &token , const QString &refreshToken) { + QCOMPARE(state, TokenAsked); + QCOMPARE(result, OAuth::LoggedIn); + QCOMPARE(user, QString("789")); + QCOMPARE(token, QString("123")); + QCOMPARE(refreshToken, QString("456")); + gotAuthOk = true; + } +}; + +class TestOAuth: public QObject +{ + Q_OBJECT + +private slots: + void testBasic() + { + OAuthTestCase test; + test.test(); + } + + // Test for https://github.com/owncloud/client/pull/6057 + void testCloseBrowserDontCrash() + { + struct Test : OAuthTestCase { + QNetworkReply *tokenReply(QNetworkAccessManager::Operation op, const QNetworkRequest & req) override + { + ASSERT(browserReply); + // simulate the fact that the browser is closing the connection + browserReply->abort(); + QCoreApplication::processEvents(); + + ASSERT(state == BrowserOpened); + state = TokenAsked; + + std::unique_ptr payload(new QBuffer); + payload->setData(tokenReplyPayload()); + return new SlowFakePostReply(op, req, std::move(payload), fakeQnam); + } + + void browserReplyFinished() override + { + QCOMPARE(sender(), browserReply.data()); + QCOMPARE(browserReply->error(), QNetworkReply::OperationCanceledError); + replyToBrowserOk = true; + } + } test; + test.test(); + } + + void testRandomConnections() + { + // Test that we can send random garbage to the litening socket and it does not prevent the connection + struct Test : OAuthTestCase { + virtual QNetworkReply *createBrowserReply(const QNetworkRequest &request) override { + QTimer::singleShot(0, this, [this, request] { + auto port = request.url().port(); + state = CustomState; + QVector payloads = { + "GET FOFOFO HTTP 1/1\n\n", + "GET /?code=invalie HTTP 1/1\n\n", + "GET /?code=xxxxx&bar=fff", + QByteArray("\0\0\0", 3), + QByteArray("GET \0\0\0 \n\n\n\n\n\0", 14), + QByteArray("GET /?code=éléphant\xa5 HTTP\n"), + QByteArray("\n\n\n\n"), + }; + foreach (const auto &x, payloads) { + auto socket = new QTcpSocket(this); + socket->connectToHost("localhost", port); + QVERIFY(socket->waitForConnected()); + socket->write(x); + } + + // Do the actual request a bit later + QTimer::singleShot(100, this, [this, request] { + QCOMPARE(state, CustomState); + state = BrowserOpened; + this->OAuthTestCase::createBrowserReply(request); + }); + }); + return nullptr; + } + + QNetworkReply *tokenReply(QNetworkAccessManager::Operation op, const QNetworkRequest &req) override + { + if (state == CustomState) + return new FakeErrorReply{op, req, this, 500}; + return OAuthTestCase::tokenReply(op, req); + } + + void oauthResult(OAuth::Result result, const QString &user, const QString &token , + const QString &refreshToken) override { + if (state != CustomState) + return OAuthTestCase::oauthResult(result, user, token, refreshToken); + QCOMPARE(result, OAuth::Error); + } + } test; + test.test(); + } +}; + +QTEST_GUILESS_MAIN(TestOAuth) +#include "testoauth.moc" From 253d197ccbb3edab63257e4bfec07b8591c59678 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 28 Sep 2017 18:16:10 +0200 Subject: [PATCH 129/166] fixup! [tx-robot] updated from transifex --- test/syncenginetestutils.h | 1 - 1 file changed, 1 deletion(-) diff --git a/test/syncenginetestutils.h b/test/syncenginetestutils.h index 498ebcb4d..e061de222 100644 --- a/test/syncenginetestutils.h +++ b/test/syncenginetestutils.h @@ -750,7 +750,6 @@ protected: bool isUpload = request.url().path().startsWith(sUploadUrl.path()); FileInfo &info = isUpload ? _uploadFileInfo : _remoteRootFileInfo; - auto verb = request.attribute(QNetworkRequest::CustomVerbAttribute); if (verb == "PROPFIND") // Ignore outgoingData always returning somethign good enough, works for now. From 28fe903aee8bbc608a17bfdfb87e5c7c0e0cf7a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Wed, 27 Sep 2017 22:35:12 +0200 Subject: [PATCH 130/166] support old sqlite before 3.7.7 quickfix: define the symbol for backwards compat or FIXME: better solution #ifdef SQLITE_IOERR_SHMMAP where needed... --- src/common/syncjournaldb.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/common/syncjournaldb.cpp b/src/common/syncjournaldb.cpp index d4c396e6b..b827657c7 100644 --- a/src/common/syncjournaldb.cpp +++ b/src/common/syncjournaldb.cpp @@ -345,6 +345,12 @@ bool SyncJournalDb::checkConnect() "PRIMARY KEY(phash)" ");"); +#ifndef SQLITE_IOERR_SHMMAP +// Requires sqlite >= 3.7.7 but old CentOS6 has sqlite-3.6.20 +// Definition taken from https://sqlite.org/c3ref/c_abort_rollback.html +#define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8)) +#endif + if (!createQuery.exec()) { // In certain situations the io error can be avoided by switching // to the DELETE journal mode, see #5723 From 2afcac763dc10f10952bc9b8130879e71e448d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Wed, 27 Sep 2017 18:37:45 +0200 Subject: [PATCH 131/166] Update CMakeLists.txt Make admin folder optional. It is needed for osx, but it is deleted from Linux builds for the sake of easier license review as discussed in https://github.com/owncloud/client/issues/6005 --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8ea19820..9b1790d07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,7 +245,9 @@ if(BUILD_CLIENT) if(NOT BUILD_LIBRARIES_ONLY) add_subdirectory(doc) add_subdirectory(doc/dev) - add_subdirectory(admin) + if(IS_DIRECTORY admin) + add_subdirectory(admin) + endif(IS_DIRECTORY admin) endif(NOT BUILD_LIBRARIES_ONLY) endif() From eb1a96c1649ba8d95d01cf89e3a2d02b5aabfea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Thu, 28 Sep 2017 21:09:43 +0200 Subject: [PATCH 132/166] Update clean_tarball.sh warning against removing sqlite. it is used with Linux with cmake switch on CentOS6 USE_OUR_OWN_SQLITE3=TRUE --- admin/linux/clean_tarball.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/admin/linux/clean_tarball.sh b/admin/linux/clean_tarball.sh index 9c969543c..51d0918a7 100755 --- a/admin/linux/clean_tarball.sh +++ b/admin/linux/clean_tarball.sh @@ -1,7 +1,7 @@ #!/bin/sh rm -vrf admin/ -rm -vrf src/3rdparty/sqlite3 +rm -vrf src/3rdparty/sqlite3 # FIXME: For CentOS6 we have to use our bundled sqlite rm -vrf binary/ rm -vrf src/3rdparty/libcrashreporter-qt rm -vrf shell_integration/windows From 33e421473c891c90c964f5ffcd69ae774194024b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 29 Sep 2017 02:18:33 +0200 Subject: [PATCH 133/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_ca.ts | 44 +++++++++++----------- translations/client_cs.ts | 44 +++++++++++----------- translations/client_de.ts | 72 ++++++++++++++++++------------------ translations/client_el.ts | 44 +++++++++++----------- translations/client_en.ts | 44 +++++++++++----------- translations/client_es.ts | 44 +++++++++++----------- translations/client_es_AR.ts | 44 +++++++++++----------- translations/client_et.ts | 44 +++++++++++----------- translations/client_eu.ts | 44 +++++++++++----------- translations/client_fa.ts | 44 +++++++++++----------- translations/client_fi.ts | 44 +++++++++++----------- translations/client_fr.ts | 44 +++++++++++----------- translations/client_gl.ts | 44 +++++++++++----------- translations/client_hu.ts | 44 +++++++++++----------- translations/client_it.ts | 44 +++++++++++----------- translations/client_ja.ts | 44 +++++++++++----------- translations/client_nb_NO.ts | 44 +++++++++++----------- translations/client_nl.ts | 44 +++++++++++----------- translations/client_pl.ts | 44 +++++++++++----------- translations/client_pt.ts | 44 +++++++++++----------- translations/client_pt_BR.ts | 44 +++++++++++----------- translations/client_ru.ts | 44 +++++++++++----------- translations/client_sk.ts | 44 +++++++++++----------- translations/client_sl.ts | 44 +++++++++++----------- translations/client_sr.ts | 44 +++++++++++----------- translations/client_sv.ts | 44 +++++++++++----------- translations/client_th.ts | 44 +++++++++++----------- translations/client_tr.ts | 44 +++++++++++----------- translations/client_uk.ts | 44 +++++++++++----------- translations/client_zh_CN.ts | 44 +++++++++++----------- translations/client_zh_TW.ts | 44 +++++++++++----------- 32 files changed, 699 insertions(+), 696 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index e68d166dc..428beaeb4 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -162,6 +162,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 025759838..39212fd74 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -3189,33 +3189,33 @@ No és aconsellada usar-la. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3320,74 +3320,74 @@ No és aconsellada usar-la. La codificació del nom de fitxer no és vàlida - + Invalid characters, please rename "%1" Caràcters no vàlids. Reanomeneu "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal No es pot obrir el diari de sincronització - + File name contains at least one invalid character El nom del fitxer conté al menys un caràcter invàlid - - + + Ignored because of the "choose what to sync" blacklist S'ignora degut al filtre a «Trieu què sincronitzar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring No es permet pujar aquest fitxer perquè només és de lectura en el servidor, es restaura - - + + Not allowed to remove, restoring No es permet l'eliminació, es restaura - + Local files and share folder removed. Fitxers locals i carpeta compartida esborrats. - + Move not allowed, item restored No es permet moure'l, l'element es restaura - + Move not allowed because %1 is read-only No es permet moure perquè %1 només és de lectura - + the destination el destí - + the source l'origen diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 0252d31cf..81cb34ada 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -3192,33 +3192,33 @@ Nedoporučuje se jí používat. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Je dostupných pouze %1, pro spuštění je potřeba alespoň %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Není povoleno, protože nemáte oprávnění vytvořit nadřazený adresář - + Not allowed because you don't have permission to add files in that folder Není povoleno, protože nemáte oprávnění přidávat soubory do tohoto adresáře - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3323,74 +3323,74 @@ Nedoporučuje se jí používat. Kódování znaků jména soubor je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, prosím přejmenujte "%1" - + Unable to read the blacklist from the local database Nelze načíst blacklist z místní databáze - + Unable to read from the sync journal. Nelze číst ze žurnálu synchronizace. - + Cannot open the sync journal Nelze otevřít synchronizační žurnál - + File name contains at least one invalid character Jméno souboru obsahuje alespoň jeden neplatný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorováno podle nastavení "vybrat co synchronizovat" - + Not allowed because you don't have permission to add subfolders to that folder Není povoleno, protože nemáte oprávnění přidávat podadresáře do tohoto adresáře - + Not allowed to upload this file because it is read-only on the server, restoring Není povoleno nahrát tento soubor, protože je na serveru uložen pouze pro čtení, obnovuji - - + + Not allowed to remove, restoring Odstranění není povoleno, obnovuji - + Local files and share folder removed. Místní soubory a sdílený adresář byly odstraněny. - + Move not allowed, item restored Přesun není povolen, položka obnovena - + Move not allowed because %1 is read-only Přesun není povolen, protože %1 je pouze pro čtení - + the destination cílové umístění - + the source zdroj diff --git a/translations/client_de.ts b/translations/client_de.ts index def42154d..cbcebd1dc 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -2706,17 +2706,17 @@ Es ist nicht ratsam, diese zu benutzen. Open link in browser - + Link im Browser öffnen Copy link to clipboard - + Link in Zwischenablage kopieren Copy link to clipboard (direct download) - + Link in die Zwischenablage kopieren (direkter download) @@ -2726,7 +2726,7 @@ Es ist nicht ratsam, diese zu benutzen. Send link by email (direct download) - + Link per Email senden (direkter download) @@ -2769,12 +2769,12 @@ Es ist nicht ratsam, diese zu benutzen. Open link in browser - + Link im Browser öffnen Copy link to clipboard - + Link in Zwischenablage kopieren @@ -2789,7 +2789,7 @@ Es ist nicht ratsam, diese zu benutzen. I shared something with you - + Ich habe etwas mit Ihnen geteilt @@ -2882,7 +2882,7 @@ Es ist nicht ratsam, diese zu benutzen. I shared something with you - + Ich habe etwas mit Ihnen geteilt @@ -2892,12 +2892,12 @@ Es ist nicht ratsam, diese zu benutzen. Copy private link to clipboard - + Privater Link in die Zwischenablage kopiert Send private link by email... - + Sende privaten Link per Email... @@ -3190,36 +3190,36 @@ Es ist nicht ratsam, diese zu benutzen. Conflict: Server version downloaded, local copy renamed and not uploaded. - + Konflikt: Serverversion heruntergeladen, lokale Kopie umbenannt und nicht hochgeladen. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Nur %1 sind verfügbar. Zum Beginnen werden mindestens %2 benötigt. - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed because you don't have permission to add files in that folder Nicht erlaubt, da Sie keine Rechte zum Hinzufügen von Dateien in diesen Ordner haben - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3311,7 +3311,7 @@ Es ist nicht ratsam, diese zu benutzen. Unresolved conflict. - + Ungelöster Konflikt. @@ -3324,74 +3324,74 @@ Es ist nicht ratsam, diese zu benutzen. Dateikodierung ist ungültig - + Invalid characters, please rename "%1" Ungültige Zeichenm bitte benennen Sie "%1" um - + Unable to read the blacklist from the local database Fehler beim Einlesen der Blacklist aus der lokalen Datenbank - + Unable to read from the sync journal. Fehler beim Einlesen des Synchronisierungsprotokolls. - + Cannot open the sync journal Synchronisationsbericht kann nicht geöffnet werden - + File name contains at least one invalid character Der Dateiname enthält mindestens ein ungültiges Zeichen - - + + Ignored because of the "choose what to sync" blacklist Aufgrund der »Zu synchronisierende Elemente auswählen«-Sperrliste ignoriert - + Not allowed because you don't have permission to add subfolders to that folder Nicht erlaubt, da Sie keine Rechte zur Erstellung von Unterordnern haben - + Not allowed to upload this file because it is read-only on the server, restoring Das Hochladen dieser Datei ist nicht erlaubt, da die Datei auf dem Server schreibgeschützt ist, Wiederherstellung - - + + Not allowed to remove, restoring Löschen nicht erlaubt, Wiederherstellung - + Local files and share folder removed. Lokale Dateien und Freigabeordner wurden entfernt. - + Move not allowed, item restored Verschieben nicht erlaubt, Element wiederhergestellt - + Move not allowed because %1 is read-only Verschieben nicht erlaubt, da %1 schreibgeschützt ist - + the destination Das Ziel - + the source Die Quelle @@ -3777,7 +3777,7 @@ Es ist nicht ratsam, diese zu benutzen. An error occured while connecting. Please try again. - + Ein Fehler trat während der Verbindung auf. Bitte erneut versuchen. @@ -4109,7 +4109,7 @@ Es ist nicht ratsam, diese zu benutzen. Could not open browser - + Konnte Browser nicht öffnen diff --git a/translations/client_el.ts b/translations/client_el.ts index d68b3af48..75083c405 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -3194,33 +3194,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Μόνο %1 είναι διαθέσιμα, απαιτούνται τουλάχιστον %2 για την εκκίνηση - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε γονικό κατάλογο - + Not allowed because you don't have permission to add files in that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε αρχεία σε αυτόν τον φάκελο - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3325,74 +3325,74 @@ It is not advisable to use it. Η κωδικοποίηση του ονόματος αρχείου δεν είναι έγκυρη - + Invalid characters, please rename "%1" Μη έγκυροι χαρακτήρες, παρακαλώ μετονομάστε το "%1" - + Unable to read the blacklist from the local database Αδυναμία ανάγνωσης της μαύρης λίστας από την τοπική βάση δεδομένων - + Unable to read from the sync journal. Αδυναμία ανάγνωσης από το ημερολόγιο συγχρονισμού. - + Cannot open the sync journal Αδυναμία ανοίγματος του αρχείου συγχρονισμού - + File name contains at least one invalid character Το όνομα αρχείου περιέχει έναν τουλάχιστον μη έγκυρο χαρακτήρα - - + + Ignored because of the "choose what to sync" blacklist Αγνοήθηκε εξαιτίας της μαύρης λίστας "διάλεξε τι να συγχρονιστεί" - + Not allowed because you don't have permission to add subfolders to that folder Δεν επιτρέπεται επειδή δεν έχετε δικαιώματα να προσθέσετε υποφακέλους σε αυτό τον φάκελο - + Not allowed to upload this file because it is read-only on the server, restoring Δεν επιτρέπεται να μεταφορτώσετε αυτό το αρχείο επειδή είναι μόνο για ανάγνωση στο διακομιστή, αποκατάσταση σε εξέλιξη - - + + Not allowed to remove, restoring Δεν επιτρέπεται η αφαίρεση, αποκατάσταση σε εξέλιξη - + Local files and share folder removed. Οι τοπικοί φάκελοι και ο φάκελος κοινής χρήσης αφαιρέθηκαν. - + Move not allowed, item restored Η μετακίνηση δεν επιτρέπεται, το αντικείμενο αποκαταστάθηκε - + Move not allowed because %1 is read-only Η μετακίνηση δεν επιτρέπεται επειδή το %1 είναι μόνο για ανάγνωση - + the destination ο προορισμός - + the source η προέλευση diff --git a/translations/client_en.ts b/translations/client_en.ts index 60387dfaf..751601f3f 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -3211,33 +3211,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3342,74 +3342,74 @@ It is not advisable to use it. - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_es.ts b/translations/client_es.ts index 41c44fdc8..4af54ee37 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -3193,33 +3193,33 @@ No se recomienda usarla. Conflicto: Versión del servidor descargada, La copia local ha sido renombrada pero no se ha podido subir. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Solo %1 disponible, se necesita por lo menos %2 para comenzar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Imposible abrir o crear la BBDD local de sync. Asegurese de que tiene permisos de escritura en la carpeta de sync. - + Not allowed because you don't have permission to add parent folder No permitido porque no tienes permiso para añadir un directorio padre - + Not allowed because you don't have permission to add files in that folder No permitido porque no tienes permiso para añadir archivos a ese directorio - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Poco espacio libre en disco: La descarga lo reducirá por debajo del %1, deberia abortar. - + There is insufficient space available on the server for some uploads. No hay suficiente espacio libre en el servidor para algunas subidas. @@ -3324,74 +3324,74 @@ No se recomienda usarla. Los caracteres del nombre de fichero no son válidos - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renombre "%1" - + Unable to read the blacklist from the local database No se pudo leer la lista de bloqueo de la base de datos local - + Unable to read from the sync journal. No se ha podido leer desde el registro de sincronización - + Cannot open the sync journal No es posible abrir el diario de sincronización - + File name contains at least one invalid character Nombre de archivo contiene al menos un caracter no válido - - + + Ignored because of the "choose what to sync" blacklist Ignorado porque se encuentra en la lista negra de "elija qué va a sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder No permitido porque no tienes permiso para añadir subdirectorios a ese directorio - + Not allowed to upload this file because it is read-only on the server, restoring No está permitido subir este archivo porque es de solo lectura en el servidor, restaurando. - - + + Not allowed to remove, restoring No está permitido borrar, restaurando. - + Local files and share folder removed. Se han eliminado los archivos locales y la carpeta compartida. - + Move not allowed, item restored No está permitido mover, elemento restaurado. - + Move not allowed because %1 is read-only No está permitido mover, porque %1 es de sólo lectura. - + the destination destino - + the source origen diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 6ce2177fe..59d0a1119 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -3179,33 +3179,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3310,74 +3310,74 @@ It is not advisable to use it. - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination - + the source diff --git a/translations/client_et.ts b/translations/client_et.ts index 8dbc49a9c..54c632319 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -3182,33 +3182,33 @@ Selle kasutamine pole soovitatav. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3313,74 +3313,74 @@ Selle kasutamine pole soovitatav. Failinime kodeering pole kehtiv - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ei suuda avada sünkroniseeringu zurnaali - + File name contains at least one invalid character Faili nimesonvähemalt üks keelatud märk - - + + Ignored because of the "choose what to sync" blacklist "Vali, mida sünkroniseerida" musta nimekirja tõttu vahele jäetud - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Pole lubatud üles laadida, kuna tegemist on ainult-loetava serveriga, taastan - - + + Not allowed to remove, restoring Eemaldamine pole lubatud, taastan - + Local files and share folder removed. Kohalikud failid ja jagatud kaustad eemaldatud. - + Move not allowed, item restored Liigutamine pole lubatud, üksus taastatud - + Move not allowed because %1 is read-only Liigutamien pole võimalik kuna %1 on ainult lugemiseks - + the destination sihtkoht - + the source allikas diff --git a/translations/client_eu.ts b/translations/client_eu.ts index acecf0164..c019423f0 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -3182,33 +3182,33 @@ Ez da gomendagarria erabltzea. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3313,74 +3313,74 @@ Ez da gomendagarria erabltzea. - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Ezin da sinkronizazio egunerokoa ireki - + File name contains at least one invalid character Fitxategi izenak behintzat baliogabeko karaktere bat du - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Ezabatzeko baimenik gabe, berrezartzen - + Local files and share folder removed. - + Move not allowed, item restored Mugitzea ez dago baimenduta, elementua berrezarri da - + Move not allowed because %1 is read-only Mugitzea ez dago baimenduta %1 irakurtzeko bakarrik delako - + the destination helburua - + the source jatorria diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 818d6f64d..b610c27ce 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -3179,33 +3179,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3310,74 +3310,74 @@ It is not advisable to use it. رمزگذاری نام فایل معتبر نیست - + Invalid characters, please rename "%1" کاراکتر نامعتبر، لطفا "%1" را تغییر نام دهید - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character نام فایل دارای حداقل یک کاراکتر نامعتبر است - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder با توجه به عدم اجازه‌ی شما به ایجاد زیرپوشه به پوشه مجاز نیست - + Not allowed to upload this file because it is read-only on the server, restoring آپلود این فایل با توجه به فقط-خواندنی بودن آن در سرور مجاز نیست، در حال بازگرداندن - - + + Not allowed to remove, restoring حذف مجاز نیست، در حال بازگردادن - + Local files and share folder removed. فایل‌های محلی و پوشه‌ی اشتراک حذف شد. - + Move not allowed, item restored انتقال مجاز نیست، مورد بازگردانده شد - + Move not allowed because %1 is read-only - + the destination مقصد - + the source مبدا diff --git a/translations/client_fi.ts b/translations/client_fi.ts index b20990aaa..9c361d933 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -3184,33 +3184,33 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Vain %1 on käytettävissä, käynnistymiseen tarvitaan %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ei sallittu, koska käyttöoikeutesi eivät riitä ylätason kansion lisäämiseen - + Not allowed because you don't have permission to add files in that folder Ei sallittu, koska käyttöoikeutesi eivät riitä tiedostojen lisäämiseen kyseiseen kansioon - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3315,74 +3315,74 @@ Osoitteen käyttäminen ei ole suositeltavaa. Tiedostonimen merkistökoodaus ei ole kelvollista - + Invalid characters, please rename "%1" Virheellisiä merkkejä, anna uusi nimi kohteelle "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character Tiedoston nimi sisältää ainakin yhden virheellisen merkin - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Ei sallittu, koska oikeutesi eivät riitä alikansioiden lisäämiseen kyseiseen kansioon - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring Poistaminen ei ole sallittua, palautetaan - + Local files and share folder removed. Paikalliset tiedostot ja jakokansio poistettu. - + Move not allowed, item restored Siirtäminen ei ole sallittua, kohde palautettu - + Move not allowed because %1 is read-only Siirto ei ole sallittu, koska %1 on "vain luku"-tilassa - + the destination kohde - + the source lähde diff --git a/translations/client_fr.ts b/translations/client_fr.ts index b0209b248..54bc735c2 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -3195,33 +3195,33 @@ Il est déconseillé de l'utiliser. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Seulement %1 disponibles, il faut au moins %2 pour démarrer - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non autorisé car vous n'avez pas la permission d'ajouter un dossier parent - + Not allowed because you don't have permission to add files in that folder Non autorisé car vous n'avez pas la permission d'ajouter des fichiers dans ce dossier - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3326,74 +3326,74 @@ Il est déconseillé de l'utiliser. L'encodage du nom de fichier n'est pas valide - + Invalid characters, please rename "%1" Caractères non valides. Veuillez renommer "%1" - + Unable to read the blacklist from the local database Impossible de lire la liste noire de la base de données locale - + Unable to read from the sync journal. Impossible de lire le journal de synchronisation. - + Cannot open the sync journal Impossible d'ouvrir le journal de synchronisation - + File name contains at least one invalid character Le nom de fichier contient au moins un caractère non valable - - + + Ignored because of the "choose what to sync" blacklist Ignoré en raison de la liste noire "Sélectionner le contenu à synchroniser". - + Not allowed because you don't have permission to add subfolders to that folder Non autorisé car vous n'avez pas la permission d'ajouter des sous-dossiers dans ce dossier - + Not allowed to upload this file because it is read-only on the server, restoring Non autorisé à envoyer ce fichier car il est en lecture seule sur le serveur. Restauration - - + + Not allowed to remove, restoring Non autorisé à supprimer. Restauration - + Local files and share folder removed. Fichiers locaux et dossier partagé supprimés. - + Move not allowed, item restored Déplacement non autorisé, élément restauré - + Move not allowed because %1 is read-only Déplacement non autorisé car %1 est en mode lecture seule - + the destination la destination - + the source la source diff --git a/translations/client_gl.ts b/translations/client_gl.ts index ab9eb015c..3d659225a 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -3183,33 +3183,33 @@ Recomendámoslle que non o use. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3314,74 +3314,74 @@ Recomendámoslle que non o use. O nome de ficheiro codificado non é correcto - + Invalid characters, please rename "%1" Caracteres incorrectos, déalle outro nome a «%1» - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Non foi posíbel abrir o rexistro de sincronización - + File name contains at least one invalid character O nome de ficheiro contén algún carácter incorrecto - - + + Ignored because of the "choose what to sync" blacklist Ignorado por mor da lista negra de «escolla que sincronizar» - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Non está permitido o envío xa que o ficheiro é só de lectura no servidor, restaurando - - + + Not allowed to remove, restoring Non está permitido retiralo, restaurando - + Local files and share folder removed. Retirados os ficheiros locais e o cartafol compartido. - + Move not allowed, item restored Nos está permitido movelo, elemento restaurado - + Move not allowed because %1 is read-only Bon está permitido movelo xa que %1 é só de lectura - + the destination o destino - + the source a orixe diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 3fe2ec6fb..1a2bf3426 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -3180,33 +3180,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3311,74 +3311,74 @@ It is not advisable to use it. - + Invalid characters, please rename "%1" Érvénytelen karakterek, kérjük nevezd át: %1 - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal - + File name contains at least one invalid character A fájlnév legalább egy érvénytelen karaktert tartalmaz! - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring - - + + Not allowed to remove, restoring - + Local files and share folder removed. - + Move not allowed, item restored - + Move not allowed because %1 is read-only - + the destination a cél - + the source a forrás diff --git a/translations/client_it.ts b/translations/client_it.ts index 94f7a2891..0c0595f27 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -3189,33 +3189,33 @@ Non è consigliabile utilizzarlo. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sono disponibili solo %1, servono almeno %2 per iniziare - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Non consentito poiché non disponi dei permessi per aggiungere la cartella superiore - + Not allowed because you don't have permission to add files in that folder Non consentito poiché non disponi dei permessi per aggiungere file in quella cartella - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3320,74 +3320,74 @@ Non è consigliabile utilizzarlo. La codifica del nome del file non è valida - + Invalid characters, please rename "%1" Caratteri non validi, rinomina "%1" - + Unable to read the blacklist from the local database Impossibile leggere la lista nera dal database locale - + Unable to read from the sync journal. Impossibile leggere dal registro di sincronizzazione. - + Cannot open the sync journal Impossibile aprire il registro di sincronizzazione - + File name contains at least one invalid character Il nome del file contiene almeno un carattere non valido - - + + Ignored because of the "choose what to sync" blacklist Ignorato in base alla lista nera per la scelta di cosa sincronizzare - + Not allowed because you don't have permission to add subfolders to that folder Non consentito poiché non disponi dei permessi per aggiungere sottocartelle in quella cartella - + Not allowed to upload this file because it is read-only on the server, restoring Il caricamento di questo file non è consentito poiché è in sola lettura sul server, ripristino - - + + Not allowed to remove, restoring Rimozione non consentita, ripristino - + Local files and share folder removed. I file locali e la cartella condivisa sono stati rimossi. - + Move not allowed, item restored Spostamento non consentito, elemento ripristinato - + Move not allowed because %1 is read-only Spostamento non consentito poiché %1 è in sola lettura - + the destination la destinazione - + the source l'origine diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 05e1a1d8b..c0ffa838f 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -3190,33 +3190,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() %1 しか空き容量がありません、開始するためには少なくとも %2 は必要です。 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 親フォルダーを追加する権限がありません - + Not allowed because you don't have permission to add files in that folder そのフォルダーにファイルを追加する権限がありません - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3321,74 +3321,74 @@ It is not advisable to use it. ファイル名のエンコーディングが無効です。 - + Invalid characters, please rename "%1" 無効な文字です、"%1" を変更してください。 - + Unable to read the blacklist from the local database ローカルデータベースからブラックリストを読み込みできません - + Unable to read from the sync journal. 同期ジャーナルから読み込みできません - + Cannot open the sync journal 同期ジャーナルを開くことができません - + File name contains at least one invalid character ファイル名に1文字以上の無効な文字が含まれています - - + + Ignored because of the "choose what to sync" blacklist "同期対象先" ブラックリストにより無視されました。 - + Not allowed because you don't have permission to add subfolders to that folder そのフォルダーにサブフォルダーを追加する権限がありません - + Not allowed to upload this file because it is read-only on the server, restoring サーバーでは読み取り専用となっているため、このファイルをアップロードすることはできません、復元しています - - + + Not allowed to remove, restoring 削除できないので復元しています - + Local files and share folder removed. ローカルファイルと共有フォルダーを削除しました。 - + Move not allowed, item restored 移動できないので項目を復元しました - + Move not allowed because %1 is read-only %1 は読み取り専用のため移動できません - + the destination 移動先 - + the source 移動元 diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index de9a331a5..d72b1d71f 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -3193,33 +3193,33 @@ Det er ikke tilrådelig å bruke den. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Bare %1 er tilgjengelig, trenger minst %2 for å begynne - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Ikke tillatt fordi du ikke har lov til å legge til foreldremappe - + Not allowed because you don't have permission to add files in that folder Ikke tillatt fordi du ikke har lov til å opprette filer i den mappen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3324,74 +3324,74 @@ Det er ikke tilrådelig å bruke den. Filnavn-koding er ikke gyldig - + Invalid characters, please rename "%1" Ugyldige tegn, gi et annet navn til "%1" - + Unable to read the blacklist from the local database Kan ikke lese svartelisten fra den lokale databasen - + Unable to read from the sync journal. Kan ikke lese fra synkroniseringsjournalen - + Cannot open the sync journal Kan ikke åpne synkroniseringsjournalen - + File name contains at least one invalid character Filnavnet inneholder minst ett ulovlig tegn - - + + Ignored because of the "choose what to sync" blacklist Ignorert på grunn av svartelisten "velg hva som skal synkroniseres" - + Not allowed because you don't have permission to add subfolders to that folder Ikke tillatt fordi du ikke har lov til å lage undermapper i den mappen - + Not allowed to upload this file because it is read-only on the server, restoring Ikke tillatt å laste opp denne filenfordi den er skrivebeskyttet på serveren, gjenoppretter - - + + Not allowed to remove, restoring Ikke tillatt å fjerne, gjenoppretter - + Local files and share folder removed. Lokale filer og delingsmappe fjernet. - + Move not allowed, item restored Flytting ikke tillatt, element gjenopprettet - + Move not allowed because %1 is read-only Flytting ikke tillatt fordi %1 er skrivebeskyttet - + the destination målet - + the source kilden diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 304a1007c..39b403dde 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -3198,33 +3198,33 @@ We adviseren deze site niet te gebruiken. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Slechts %1 beschikbaar, maar heeft minimaal %2 nodig om te starten - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niet toegestaan omdat u geen rechten hebt om een bovenliggende map toe te voegen - + Not allowed because you don't have permission to add files in that folder Niet toegestaan omdat u geen rechten hebt om bestanden in die map toe te voegen - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3329,74 +3329,74 @@ We adviseren deze site niet te gebruiken. Bestandsnaamcodering is niet geldig - + Invalid characters, please rename "%1" Ongeldige tekens, hernoem "%1" - + Unable to read the blacklist from the local database Kan de blacklist niet lezen uit de lokale database - + Unable to read from the sync journal. Niet mogelijk om te lezen uit het synchronisatie verslag. - + Cannot open the sync journal Kan het sync transactielog niet openen - + File name contains at least one invalid character De bestandsnaam bevat ten minste één ongeldig teken - - + + Ignored because of the "choose what to sync" blacklist Genegeerd vanwege de "wat synchroniseren" zwarte lijst - + Not allowed because you don't have permission to add subfolders to that folder Niet toegestaan, omdat je geen permissies hebt om submappen aan die map toe te voegen - + Not allowed to upload this file because it is read-only on the server, restoring Niet toegestaan om dit bestand te uploaden, omdat het alleen-lezen is op de server, herstellen - - + + Not allowed to remove, restoring Niet toegestaan om te verwijderen, herstellen - + Local files and share folder removed. Lokale bestanden en share-map verwijderd. - + Move not allowed, item restored Verplaatsen niet toegestaan, object hersteld - + Move not allowed because %1 is read-only Verplaatsen niet toegestaan, omdat %1 alleen-lezen is - + the destination bestemming - + the source bron diff --git a/translations/client_pl.ts b/translations/client_pl.ts index e86992b8b..b64d42151 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -3187,33 +3187,33 @@ Niezalecane jest jego użycie. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Niedozwolone, ponieważ nie masz uprawnień do dodawania katalogu nadrzędnego - + Not allowed because you don't have permission to add files in that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania plików w tym katalogu - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3318,74 +3318,74 @@ Niezalecane jest jego użycie. - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database Nie można odczytać czarnej listy z lokalnej bazy danych - + Unable to read from the sync journal. Nie można czytać z dziennika synchronizacji. - + Cannot open the sync journal Nie można otworzyć dziennika synchronizacji - + File name contains at least one invalid character Nazwa pliku zawiera co najmniej jeden nieprawidłowy znak - - + + Ignored because of the "choose what to sync" blacklist - + Not allowed because you don't have permission to add subfolders to that folder Niedozwolone, ponieważ nie masz uprawnień do dodawania podkatalogów w tym katalogu - + Not allowed to upload this file because it is read-only on the server, restoring Wgrywanie niedozwolone, ponieważ plik jest tylko do odczytu na serwerze, przywracanie - - + + Not allowed to remove, restoring Brak uprawnień by usunąć, przywracanie - + Local files and share folder removed. Lokalne pliki i udostępniane foldery zostały usunięte. - + Move not allowed, item restored Przenoszenie niedozwolone, obiekt przywrócony - + Move not allowed because %1 is read-only Przenoszenie niedozwolone, ponieważ %1 jest tylko do odczytu - + the destination docelowy - + the source źródło diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 256aba8b4..793c95ea0 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -3194,33 +3194,33 @@ Não é aconselhada a sua utilização. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, é preciso um mínimo de %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Não permitido, porque não tem permissão para adicionar a pasta fonte - + Not allowed because you don't have permission to add files in that folder Não permitido, porque não tem permissão para adicionar os ficheiros nessa pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3325,74 +3325,74 @@ Não é aconselhada a sua utilização. Codificação de nome de ficheiro não é válida - + Invalid characters, please rename "%1" Carateres inválidos, por favor, renomeie "%1" - + Unable to read the blacklist from the local database Não foi possível ler a lista negra a partir da base de dados local - + Unable to read from the sync journal. Não foi possível ler a partir do jornal de sincronização. - + Cannot open the sync journal Impossível abrir o jornal de sincronismo - + File name contains at least one invalid character O nome de ficheiro contém pelo menos um caráter inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado devido à blacklist de escolha para sincronização - + Not allowed because you don't have permission to add subfolders to that folder Não permitido, porque não tem permissão para adicionar as subpastas nessa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido enviar este ficheiro porque este é só de leitura no servidor, a restaurar - - + + Not allowed to remove, restoring Não autorizado para remoção, restaurando - + Local files and share folder removed. Ficheiros locais e pasta partilhada removidos. - + Move not allowed, item restored Mover não foi permitido, item restaurado - + Move not allowed because %1 is read-only Mover não foi autorizado porque %1 é só de leitura - + the destination o destino - + the source a origem diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 530e5b9fc..9db1540a4 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -3191,33 +3191,33 @@ It is not advisable to use it. Conflito: Versão do servidor baixada, cópia local renomeada e não carregada. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Apenas %1 estão disponíveis, precisamos de pelo menos %2 para começar - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Não é possível abrir ou criar o banco de dados de sincronização local. Certifique-se de ter acesso de gravação na pasta de sincronização. - + Not allowed because you don't have permission to add parent folder Não permitido porque você não tem permissão para adicionar pasta mãe - + Not allowed because you don't have permission to add files in that folder Não permitido porque você não tem permissão para adicionar arquivos na pasta - + Disk space is low: Downloads that would reduce free space below %1 were skipped. O espaço em disco é pequeno: Os downloads que reduzam o espaço livre abaixo de %1 foram ignorados. - + There is insufficient space available on the server for some uploads. Há espaço disponível no servidor para alguns envios. @@ -3322,74 +3322,74 @@ It is not advisable to use it. A codificação do nome do arquivo não é válida - + Invalid characters, please rename "%1" Caracteres inválidos, por favor renomear "%1" - + Unable to read the blacklist from the local database Não é possível ler a lista negra a partir do banco de dados local - + Unable to read from the sync journal. Não é possível ler a partir do relatório de sincronização. - + Cannot open the sync journal Não é possível abrir o arquivo de sincronização - + File name contains at least one invalid character O nome do arquivo contem pelo menos um caractere inválido - - + + Ignored because of the "choose what to sync" blacklist Ignorado por causa da lista negra "escolher o que sincronizar" - + Not allowed because you don't have permission to add subfolders to that folder Não permitido porque você não tem permissão para adicionar subpastas para essa pasta - + Not allowed to upload this file because it is read-only on the server, restoring Não é permitido fazer o upload deste arquivo porque ele é somente leitura no servidor, restaurando - - + + Not allowed to remove, restoring Não é permitido remover, restaurando - + Local files and share folder removed. Arquivos locais e pasta compartilhada removida. - + Move not allowed, item restored Não é permitido mover, item restaurado - + Move not allowed because %1 is read-only Não é permitido mover porque %1 é somente para leitura - + the destination o destino - + the source a fonte diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 8759cfaeb..a80de79bc 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -3191,33 +3191,33 @@ It is not advisable to use it. Конфликт: Серверная версия скачана, локальная копия переименована и не закачана. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Только %1 доступно, нужно как минимум %2 чтобы начать - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. Не могу открыть или создать локальную базу данных синхронизации. Удостоверьтесь, что у вас есть доступ на запись в каталог синхронизации. - + Not allowed because you don't have permission to add parent folder Не разрешается, так как у вас нет полномочий на добавление родительской папки - + Not allowed because you don't have permission to add files in that folder Не разрешается, так как у вас нет полномочий на добавление файлов в эту папку - + Disk space is low: Downloads that would reduce free space below %1 were skipped. Мало места на диске: Скачивания, которые сократят свободное место ниже %1, будут пропущены. - + There is insufficient space available on the server for some uploads. На сервере недостаточно места для некоторых закачек. @@ -3322,74 +3322,74 @@ It is not advisable to use it. Кодировка имени файла не верна - + Invalid characters, please rename "%1" Недопустимые символы, пожалуйста, переименуйте "%1" - + Unable to read the blacklist from the local database Не удалось прочитать файл чёрного списка из локальной базы данных. - + Unable to read from the sync journal. Не удалось прочитать из журнала синхронизации. - + Cannot open the sync journal Не удаётся открыть журнал синхронизации - + File name contains at least one invalid character Имя файла содержит по крайней мере один некорректный символ - - + + Ignored because of the "choose what to sync" blacklist Игнорируется из-за черного списка в "что синхронизировать" - + Not allowed because you don't have permission to add subfolders to that folder Не разрешается, так как у вас нет полномочий на добавление подпапок в папку. - + Not allowed to upload this file because it is read-only on the server, restoring Не допускается загрузка этого файла, так как на сервере он помечен только для чтения, восстанавливаем - - + + Not allowed to remove, restoring Не допускается удаление, восстанавливаем - + Local files and share folder removed. Локальные файлы и общий каталог удалены. - + Move not allowed, item restored Перемещение не допускается, элемент восстановлен - + Move not allowed because %1 is read-only Перемещение не допускается, поскольку %1 помечен только для чтения - + the destination назначение - + the source источник diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 7bda71288..5e49a46fb 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -3183,33 +3183,33 @@ Nie je vhodné ju používať. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3314,74 +3314,74 @@ Nie je vhodné ju používať. Kódovanie znakov názvu súboru je neplatné - + Invalid characters, please rename "%1" Neplatné znaky, premenujte prosím "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. Nemožno čítať zo synchronizačného žurnálu - + Cannot open the sync journal Nemožno otvoriť sync žurnál - + File name contains at least one invalid character Názov súboru obsahuje nevhodný znak - - + + Ignored because of the "choose what to sync" blacklist Ignorované podľa nastavenia "vybrať čo synchronizovať" - + Not allowed because you don't have permission to add subfolders to that folder Nie je dovolené, lebo nemáte oprávnenie pridávať podpriečinky do tohto priečinka - + Not allowed to upload this file because it is read-only on the server, restoring Nie je dovolené tento súbor nahrať, pretože je na serveri iba na čítanie. Obnovuje sa. - - + + Not allowed to remove, restoring Nie je dovolené odstrániť. Obnovuje sa. - + Local files and share folder removed. Lokálne súbory a zdieľaný priečinok boli odstránené. - + Move not allowed, item restored Presunutie nie je dovolené. Položka obnovená. - + Move not allowed because %1 is read-only Presunutie nie je dovolené, pretože %1 je na serveri iba na čítanie - + the destination cieľ - + the source zdroj diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 2be2b2833..b0193f302 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -3194,33 +3194,33 @@ Uporaba ni priporočljiva. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Le %1 je na voljo, zahtevanih pa je vaj %2 za zagon - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje starševske mape - + Not allowed because you don't have permission to add files in that folder Dejanje ni dovoljeno, ker ni ustreznih dovoljenj za dodajanje datotek v to mapo - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3325,74 +3325,74 @@ Uporaba ni priporočljiva. Kodni zapis imena datoteke ni veljaven. - + Invalid characters, please rename "%1" Uporabljen je neveljaven znak; preimenujte "%1" - + Unable to read the blacklist from the local database Ni mogoče prebrati črnega seznama iz krajevne mape - + Unable to read from the sync journal. Ni mogoče brati iz dnevnika usklajevanja - + Cannot open the sync journal Ni mogoče odpreti dnevnika usklajevanja - + File name contains at least one invalid character Ime datoteke vsebuje vsaj en neveljaven znak. - - + + Ignored because of the "choose what to sync" blacklist Prezrto, ker je predmet označen na črni listi za usklajevanje - + Not allowed because you don't have permission to add subfolders to that folder Dejanje ni dovoljeno! Ni ustreznih dovoljenj za dodajanje podmap v to mapo. - + Not allowed to upload this file because it is read-only on the server, restoring Ni dovoljeno pošiljati te datoteke, ker ima določena dovoljenja le za branje. Datoteka bo obnovljena na izvorno različico. - - + + Not allowed to remove, restoring Odstranitev ni dovoljena, datoteka bo obnovljena. - + Local files and share folder removed. Krajevne datoteke in mape v souporabi so odstranjene. - + Move not allowed, item restored Premikanje ni dovoljeno, datoteka bo obnovljena. - + Move not allowed because %1 is read-only Premikanje ni dovoljeno, ker je nastavljeno določilo %1 le za branje. - + the destination cilj - + the source vir diff --git a/translations/client_sr.ts b/translations/client_sr.ts index d07b253c9..3e9d39243 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -3183,33 +3183,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3314,74 +3314,74 @@ It is not advisable to use it. Кодирање назива фајла није исправно - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не могу да отворим дневник синхронизације - + File name contains at least one invalid character Назив садржи бар један недозвољен карактер - - + + Ignored because of the "choose what to sync" blacklist Игнорисано јер се не налази на листи за синхронизацију - + Not allowed because you don't have permission to add subfolders to that folder - + Not allowed to upload this file because it is read-only on the server, restoring Није могуће отпремити овај фајл јер је на серверу само за читање. Враћам - - + + Not allowed to remove, restoring Није могуће уклањање. Враћам - + Local files and share folder removed. Локални фајлови и дељена фасцикла су уклоњени. - + Move not allowed, item restored Премештање није дозвољено. Ставка је враћена - + Move not allowed because %1 is read-only Премештање није дозвољено јер %1 је само за читање - + the destination одредиште - + the source извор diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 1fb6b025c..8088a09ba 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -3187,33 +3187,33 @@ Det är inte lämpligt använda den. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Endast %1 tillgängligt, behöver minst %2 för att starta - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Otillåtet eftersom du inte har rättigheter att lägga till övermappar - + Not allowed because you don't have permission to add files in that folder Otillåtet eftersom du inte har rättigheter att lägga till filer i den mappen. - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3318,74 +3318,74 @@ Det är inte lämpligt använda den. Filnamnskodning är inte giltig - + Invalid characters, please rename "%1" Otillåtna tecken, var vänlig byt namn på "%1" - + Unable to read the blacklist from the local database Kunde inte läsa svartlistan från den lokala databasen - + Unable to read from the sync journal. Kunde inte läsa från synk-journalen. - + Cannot open the sync journal Kunde inte öppna synk journalen - + File name contains at least one invalid character Filnamnet innehåller minst ett ogiltigt tecken - - + + Ignored because of the "choose what to sync" blacklist Ignorerad eftersom den är svartlistad i "välj vad som ska synkas" - + Not allowed because you don't have permission to add subfolders to that folder Otillåtet eftersom du inte har rättigheter att lägga till undermappar i den mappen. - + Not allowed to upload this file because it is read-only on the server, restoring Inte behörig att ladda upp denna fil då den är skrivskyddad på servern, återställer - - + + Not allowed to remove, restoring Inte behörig att radera, återställer - + Local files and share folder removed. Lokala filer och mappar som är delade är borttagna. - + Move not allowed, item restored Det gick inte att genomföra flytten, objektet återställs - + Move not allowed because %1 is read-only Det gick inte att genomföra flytten då %1 är skrivskyddad - + the destination destinationen - + the source källan diff --git a/translations/client_th.ts b/translations/client_th.ts index 4b2ccf30d..36fa8de35 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -3193,34 +3193,34 @@ It is not advisable to use it. เกิดปัญหาความขัดแย้ง: สำเนาที่อยู่ในเครื่องถูกเปลี่ยนชื่อและไม่ได้ถูกอัพโหลด เลยไม่ตรงกับข้อมูลที่เคยอัพโหลดไว้ในเซิฟเวอร์ - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() มีเพียง %1 ที่พร้อมใช้งาน คุณจำเป็นต้องมีไม่น้อยกว่า %2 เพื่อเริ่มใช้งาน - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. ไม่สามารถเปิดหรือสร้างฐานข้อมูลการประสานข้อมูลในเครื่อง ตรวจสอบว่าคุณมีสิทธิ์การเขียนในโฟลเดอร์ซิงค์ - + Not allowed because you don't have permission to add parent folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์หลัก - + Not allowed because you don't have permission to add files in that folder ไม่ได้รับอนุญาต เพราะคุณไม่มีสิทธิ์ที่จะเพิ่มไฟล์ในโฟลเดอร์นั้น - + Disk space is low: Downloads that would reduce free space below %1 were skipped. พื้นที่จัดเก็บเหลือน้อย: การดาวน์โหลดจะช่วยลดพื้นที่ว่างด้านล่าง %1 ที่ถูกข้ามไป - + There is insufficient space available on the server for some uploads. มีพื้นที่ว่างไม่เพียงพอบนเซิร์ฟเวอร์สำหรับการอัพโหลดบางรายการ @@ -3325,74 +3325,74 @@ It is not advisable to use it. การเข้ารหัสชื่อไฟล์ไม่ถูกต้อง - + Invalid characters, please rename "%1" ตัวอักษรไม่ถูกต้อง โปรดเปลี่ยนชื่อ "%1" - + Unable to read the blacklist from the local database ไม่สามารถอ่านบัญชีดำจากฐานข้อมูลต้นทาง - + Unable to read from the sync journal. ไม่สามารถอ่านจากบันทึกการประสานข้อมูล - + Cannot open the sync journal ไม่สามารถเปิดการผสานข้อมูลเจอร์นัล - + File name contains at least one invalid character มีชื่อแฟ้มอย่างน้อยหนึ่งตัวอักษรที่ไม่ถูกต้อง - - + + Ignored because of the "choose what to sync" blacklist ถูกละเว้นเพราะ "ข้อมูลที่เลือกประสาน" ติดบัญชีดำ - + Not allowed because you don't have permission to add subfolders to that folder ไม่อนุญาติเพราะคุณไม่มีสิทธิ์ที่จะเพิ่มโฟลเดอร์ย่อยของโฟลเดอร์นั้น - + Not allowed to upload this file because it is read-only on the server, restoring ไม่อนุญาตให้อัพโหลดไฟล์นี้เพราะมันจะอ่านได้เพียงอย่างเดียวบนเซิร์ฟเวอร์ กำลังฟื้นฟู - - + + Not allowed to remove, restoring ไม่อนุญาตให้ลบเพราะกำลังฟื้นฟู - + Local files and share folder removed. ไฟล์ต้นทางและโฟลเดอร์ที่แชร์ถูกลบออก - + Move not allowed, item restored ไม่ได้รับอนุญาตให้ย้าย เพราะกำลังกู้คืนรายการ - + Move not allowed because %1 is read-only ไม่อนุญาตให้ย้ายเพราะ %1 จะอ่านได้เพียงอย่างเดียว - + the destination ปลายทาง - + the source แหล่งที่มา diff --git a/translations/client_tr.ts b/translations/client_tr.ts index f25fd98a5..53e108b59 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -3184,33 +3184,33 @@ Kullanmanız önerilmez. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Sadece %1 mevcut, Çalıştırmak için en az %2 gerekmektedir - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder Üst dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed because you don't have permission to add files in that folder Bu klasöre dosya ekleme yetkiniz olmadığından izin verilmedi - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3315,74 +3315,74 @@ Kullanmanız önerilmez. Dosya adı kodlaması geçerli değil - + Invalid characters, please rename "%1" Geçersiz karakterler, lütfen "%1" yerine yeni bir isim girin - + Unable to read the blacklist from the local database Yerel veritabanından kara liste okunamadı - + Unable to read from the sync journal. Eşitleme günlüğünden okunamadı. - + Cannot open the sync journal Eşitleme günlüğü açılamıyor - + File name contains at least one invalid character Dosya adı en az bir geçersiz karakter içeriyor - - + + Ignored because of the "choose what to sync" blacklist "Eşitlenecekleri seçin" kara listesinde olduğundan yoksayıldı. - + Not allowed because you don't have permission to add subfolders to that folder Bu dizine alt dizin ekleme yetkiniz olmadığından izin verilmedi - + Not allowed to upload this file because it is read-only on the server, restoring Sunucuda salt okunur olduğundan, bu dosya yüklenemedi, geri alınıyor - - + + Not allowed to remove, restoring Kaldırmaya izin verilmedi, geri alınıyor - + Local files and share folder removed. Yerel dosyalar ve paylaşım klasörü kaldırıldı. - + Move not allowed, item restored Taşımaya izin verilmedi, öge geri alındı - + Move not allowed because %1 is read-only %1 salt okunur olduğundan taşımaya izin verilmedi - + the destination hedef - + the source kaynak diff --git a/translations/client_uk.ts b/translations/client_uk.ts index a693396be..59a62a168 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -3182,33 +3182,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() Доступно лише %1, для початку необхідно хоча б %2 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder - + Not allowed because you don't have permission to add files in that folder - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3313,74 +3313,74 @@ It is not advisable to use it. Кодування файлу не припустиме - + Invalid characters, please rename "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal Не вдається відкрити протокол синхронізації - + File name contains at least one invalid character Ім’я файлу містить принаймні один некоректний символ - - + + Ignored because of the "choose what to sync" blacklist Ігнорується через чорний список в "обрати що синхронізувати" - + Not allowed because you don't have permission to add subfolders to that folder Заборонено через відсутність прав додавання підкаталогів в цю теку. - + Not allowed to upload this file because it is read-only on the server, restoring Не дозволено завантажувати цей файл, оскільки він має дозвіл лише на перегляд, відновлюємо - - + + Not allowed to remove, restoring Не дозволено видаляти, відновлюємо - + Local files and share folder removed. Локальні файли та теки в загальному доступі було видалено. - + Move not allowed, item restored Переміщення не дозволено, елемент відновлено - + Move not allowed because %1 is read-only Переміщення не дозволено, оскільки %1 помічений тільки для перегляду - + the destination призначення - + the source джерело diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 957c84663..df129d295 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -3193,33 +3193,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 仅有 %1 有效,至少需要 %2 才能开始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 你没有权限增加父目录 - + Not allowed because you don't have permission to add files in that folder 你没有权限增加文件 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3324,74 +3324,74 @@ It is not advisable to use it. 文件名编码无效 - + Invalid characters, please rename "%1" 无效的字符,请更改为 “%1” - + Unable to read the blacklist from the local database 无法从本地数据库读取黑名单 - + Unable to read from the sync journal. 无法读取同步日志。 - + Cannot open the sync journal 无法打开同步日志 - + File name contains at least one invalid character 文件名中存在至少一个非法字符 - - + + Ignored because of the "choose what to sync" blacklist 已忽略(“选择同步内容”黑名单) - + Not allowed because you don't have permission to add subfolders to that folder 你没有权限增加子目录 - + Not allowed to upload this file because it is read-only on the server, restoring 无法上传文件,因为服务器端此文件为只读,正在回退 - - + + Not allowed to remove, restoring 无法删除,正在回退 - + Local files and share folder removed. 本地文件和共享文件夹已被删除。 - + Move not allowed, item restored 无法移动,正在回退 - + Move not allowed because %1 is read-only 无法移动,%1为是只读的 - + the destination 目标 - + the source diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index dc598c130..53a96dfb4 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -3185,33 +3185,33 @@ It is not advisable to use it. - + Only %1 are available, need at least %2 to start Placeholders are postfixed with file sizes using Utility::octetsToString() 目前僅有 %1 可以使用,至少需要 %2 才能開始 - + Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Not allowed because you don't have permission to add parent folder 拒絕此操作,您沒有新增母資料夾的權限。 - + Not allowed because you don't have permission to add files in that folder 拒絕此操作,您沒有新增檔案在此資料夾的權限。 - + Disk space is low: Downloads that would reduce free space below %1 were skipped. - + There is insufficient space available on the server for some uploads. @@ -3316,74 +3316,74 @@ It is not advisable to use it. 檔案名稱編碼是無效的 - + Invalid characters, please rename "%1" 無效的字元,請您重新命名 "%1" - + Unable to read the blacklist from the local database - + Unable to read from the sync journal. - + Cannot open the sync journal 同步處理日誌無法開啟 - + File name contains at least one invalid character 檔案名稱含有不合法的字元 - - + + Ignored because of the "choose what to sync" blacklist 已忽略。根據 "選擇要同步的項目"的黑名單 - + Not allowed because you don't have permission to add subfolders to that folder 拒絕此操作,您沒有在此新增子資料夾的權限。 - + Not allowed to upload this file because it is read-only on the server, restoring 拒絕上傳此檔案,此檔案在伺服器是唯讀檔,復原中 - - + + Not allowed to remove, restoring 不允許刪除,復原中 - + Local files and share folder removed. 本地端檔案和共享資料夾已被刪除。 - + Move not allowed, item restored 不允許移動,物件復原中 - + Move not allowed because %1 is read-only 不允許移動,因為 %1 是唯讀的 - + the destination 目標 - + the source 來源 From ecaa37efbeaf4057825d4bf6a72d10ce4f94e20b Mon Sep 17 00:00:00 2001 From: rockihack Date: Wed, 20 Sep 2017 18:26:06 +0200 Subject: [PATCH 134/166] Linux Hardening see: https://wiki.debian.org/Hardening#User_Space --- src/CMakeLists.txt | 12 ++++++++++++ src/cmd/CMakeLists.txt | 5 +++++ src/gui/CMakeLists.txt | 5 +++++ 3 files changed, 22 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2133b6c2e..5319fbdc2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,6 +12,18 @@ if(WIN32) # Enable DEP & ASLR set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") +elseif(UNIX AND NOT APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong") + + string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) + if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_FORTIFY_SOURCE=2") + endif() + + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now") endif() add_subdirectory(csync) diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt index 50a8e743f..9cdd6cf32 100644 --- a/src/cmd/CMakeLists.txt +++ b/src/cmd/CMakeLists.txt @@ -19,6 +19,11 @@ include_directories(${CMAKE_SOURCE_DIR}/src/csync # Need tokenizer for netrc parser include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer) +if(UNIX AND NOT APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie -fPIE") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE") +endif() + if(NOT BUILD_LIBRARIES_ONLY) add_executable(${cmd_NAME} ${cmd_SRC}) qt5_use_modules(${cmd_NAME} Network Sql) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index d8b2b7745..03d7e0f0b 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -241,6 +241,11 @@ if (NOT NO_SHIBBOLETH) list(APPEND ADDITIONAL_APP_MODULES WebKitWidgets) endif() +if(UNIX AND NOT APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie -fPIE") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE") +endif() + if(NOT BUILD_OWNCLOUD_OSX_BUNDLE) if(NOT WIN32) From 2f15d8aef5ded14c9665bd115208269fb94181eb Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 30 Sep 2017 02:18:32 +0200 Subject: [PATCH 135/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_el.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 428beaeb4..cb0d55869 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -165,6 +165,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_el.ts b/translations/client_el.ts index 75083c405..c884f96a9 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -1409,7 +1409,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from <no filter> - + <no filter> From b13f44023d2d41c75aa720248f6403b28b776c4c Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 1 Oct 2017 02:18:33 +0200 Subject: [PATCH 136/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index cb0d55869..eaa12da16 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -168,6 +168,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From ac5876e94eccf9d405eb2965a4cdf44f28c3e138 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 2 Oct 2017 02:18:33 +0200 Subject: [PATCH 137/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index eaa12da16..f14c9799d 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -171,6 +171,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From 6b3f6d986054c5572e1492833f1f1040ca424eed Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 3 Oct 2017 02:18:33 +0200 Subject: [PATCH 138/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_es_AR.ts | 100 +++++++++++++++++------------------ translations/client_fi.ts | 6 +-- 3 files changed, 56 insertions(+), 53 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index f14c9799d..5386eb2b3 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -174,6 +174,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 59d0a1119..506c5a5f4 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -101,7 +101,7 @@ ... - + ... @@ -116,17 +116,17 @@ Synchronize all - + Sincronizar todos Synchronize none - + Sincronizar ninguno Apply manual changes - + Aplicar cambios manuales @@ -153,7 +153,7 @@ Add new - + Agregar nuevo @@ -168,22 +168,22 @@ Choose what to sync - + Elegir que sincronizar Force sync now - + Forzar sincronización ahora Restart sync - + Reinicia sincronización Remove folder sync connection - + Eliminar conexión de sincronización de carpeta @@ -198,12 +198,12 @@ Confirm Folder Sync Connection Removal - + Confirmar eliminación de conexión de sincronización de carpeta Remove Folder Sync Connection - + Eliminar Conexión de Sincronización de Carpeta @@ -218,7 +218,7 @@ %1 in use - + %1 en uso @@ -228,7 +228,7 @@ The server version %1 is old and unsupported! Proceed at your own risk. - + ¡La versión del servidor% 1 es antigua y no está soportada! Proceda bajo su propio riesgo. @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + Servidor %1 actualmente en modo mantenimiento. @@ -253,12 +253,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Obteniendo autorización del navegador. <a href='%1'>Click aquí</a> para volver a abrir el navegador. Connecting to %1... - + Conectando a %1... @@ -373,7 +373,7 @@ Maintenance mode - + Modo mantenimiento @@ -388,7 +388,7 @@ Asking Credentials - + Pidiendo Credenciales @@ -401,12 +401,12 @@ %1 on %2 - + %1 en %2 %1 on %2 (disconnected) - + %1 en %2 (desconectado) @@ -415,7 +415,7 @@ Server Activity - + Actividad de Servidor @@ -425,13 +425,13 @@ Not Synced - + No Sincronizado Not Synced (%1) %1 is the number of not synced files. - + No Sincronizado (%1) @@ -471,7 +471,7 @@ Server Activities - + Actividades de Servidor @@ -486,7 +486,7 @@ Action Required: Notifications - + Acción Requerida: Notificaciones. @@ -567,7 +567,7 @@ Quit ownCloud - + Salir de ownCloud @@ -598,7 +598,7 @@ Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -805,12 +805,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an Normal Synchronisation - + Sincronizacón Normal. Keep Local Files as Conflict - + Mantener Archivos Locales como Conflicto @@ -828,12 +828,12 @@ Continuing the sync as normal will cause all your files to be overwritten by an (backup) - + (Copia de seguridad) (backup %1) - + (Copia de seguridad %1) @@ -843,7 +843,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Waiting to start syncing. - + Esperando para comenzar sincronización. @@ -888,7 +888,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an No valid folder selected! - + Carpeta válida no seleccionada! @@ -997,13 +997,13 @@ Continuing the sync as normal will cause all your files to be overwritten by an , '%1' Build a list of file names - + , '%1' '%1' Argument is a file name - + '%1' @@ -1021,7 +1021,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an download %1/s Example text: "download 24Kb/s" (%1 is replaced by 24Kb (translated)) - + descargado %1/s @@ -1037,13 +1037,13 @@ Continuing the sync as normal will cause all your files to be overwritten by an u2191 %1/s - + u2191 %1/s %1 %2 (%3 of %4) Example text: "uploading foobar.png (2MB of 2MB)" - + %1 %2 (%3 of %4) @@ -1055,7 +1055,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an %5 left, %1 of %2, file %3 of %4 Example text: "5 minutes left, 12 MB of 345 MB, file 6 of 7" - + %5 izquierda, %1 de %2, archivo %3 de %4 @@ -1135,7 +1135,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Authentication failed accessing %1 - + Autenticación fallida accediendo a %1. @@ -1145,7 +1145,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Failed to list a folder. Error: %1 - + Fallo al listar carpetas. Error: %1 @@ -2092,7 +2092,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2140,7 +2140,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2176,7 +2176,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2208,7 +2208,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2234,7 +2234,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2263,7 +2263,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2297,7 +2297,7 @@ It is not advisable to use it. Error writing metadata to the database - + Error escribiendo metadatos a la base de datos @@ -2805,7 +2805,7 @@ It is not advisable to use it. ... - + ... @@ -3702,7 +3702,7 @@ It is not advisable to use it. Choose what to sync - + Elegir que sincronizar diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 9c361d933..7326169f0 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -2598,12 +2598,12 @@ Osoitteen käyttäminen ei ole suositeltavaa. Users and Groups - + Käyttäjät ja ryhmät Public Links - + Julkiset linkit @@ -2651,7 +2651,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Show file listing - + Näytä tiedostolistaus From 670ff36024d37b9d1bf05b20dada5f1cb0ade7cc Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 4 Oct 2017 02:18:35 +0200 Subject: [PATCH 139/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_cs.ts | 20 +++++++-------- translations/client_fa.ts | 50 ++++++++++++++++++------------------ translations/client_it.ts | 4 +-- translations/client_nb_NO.ts | 22 ++++++++-------- 5 files changed, 51 insertions(+), 48 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 5386eb2b3..632c96d83 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -177,6 +177,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 81cb34ada..a94723418 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -258,7 +258,7 @@ Connecting to %1... - + Připojeno k %1... @@ -1418,12 +1418,12 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Show warnings - + Ukázat varování Show ignored files - + Ukázat ignorované soubory @@ -1448,7 +1448,7 @@ Položky u kterých je povoleno smazání budou vymazány, pokud by bránily ods Issue - + Problém @@ -1881,7 +1881,7 @@ můžete být požádáni o dodatečná oprávnění. Login in your browser - + Přihlášení v prohlížeči @@ -2634,7 +2634,7 @@ Nedoporučuje se jí používat. Enter a name to create a new public link... - + Zadej název nového veřejného odkazu... @@ -2705,7 +2705,7 @@ Nedoporučuje se jí používat. Open link in browser - + Otevřít odkaz v prohlížeči @@ -2768,7 +2768,7 @@ Nedoporučuje se jí používat. Open link in browser - + Otevřít odkaz v prohlížeči @@ -3184,7 +3184,7 @@ Nedoporučuje se jí používat. Folder hierarchy is too deep - + Hierarchie složek je příliš hluboká @@ -3310,7 +3310,7 @@ Nedoporučuje se jí používat. Unresolved conflict. - + Nevyřešený konflikt. diff --git a/translations/client_fa.ts b/translations/client_fa.ts index b610c27ce..be59bfc19 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -116,7 +116,7 @@ Synchronize all - + همگام‌سازی همه @@ -258,7 +258,7 @@ Connecting to %1... - + اتصال به %1... @@ -288,7 +288,7 @@ Confirm Account Removal - + تائید حذف حساب‌کاربری @@ -298,7 +298,7 @@ Remove connection - + حذف ارتباط @@ -415,7 +415,7 @@ Server Activity - + فعالیت سرور @@ -471,7 +471,7 @@ Server Activities - + فعالیت‌های سرور @@ -567,7 +567,7 @@ Quit ownCloud - + خروج از ownCloud @@ -598,7 +598,7 @@ Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -843,7 +843,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Waiting to start syncing. - + انتظار برای شروع همگام‌سازی @@ -936,7 +936,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an Synchronizing with local folder - + همگام‌سازی با پوشه محلی @@ -1003,7 +1003,7 @@ Continuing the sync as normal will cause all your files to be overwritten by an '%1' Argument is a file name - + '%1' @@ -1359,7 +1359,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Cannot write changes to '%1'. - + نمی‌توان تغییرات را در '%1' نوشت. @@ -1598,7 +1598,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from KBytes/s - + کیلوبایت @@ -1654,7 +1654,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Created at %1 - + ایجاد شده در %1 @@ -1943,7 +1943,7 @@ It is not advisable to use it. Invalid URL - + آدرس نامعتبر @@ -2076,7 +2076,7 @@ It is not advisable to use it. Open %1 in Browser - + بازکردن %1 در مرورگر @@ -2092,7 +2092,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2110,7 +2110,7 @@ It is not advisable to use it. Free space on disk is less than %1 - + فضای خالی دیسک کمتر از %1 است @@ -2120,7 +2120,7 @@ It is not advisable to use it. The file could not be downloaded completely. - + فایل به طور کامل قابل دانلود نیست. @@ -2140,7 +2140,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2176,7 +2176,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2208,7 +2208,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2234,7 +2234,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2263,7 +2263,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده @@ -2297,7 +2297,7 @@ It is not advisable to use it. Error writing metadata to the database - + خطا در نوشتن متادیتا در پایگاه داده diff --git a/translations/client_it.ts b/translations/client_it.ts index 0c0595f27..1a2792522 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -1405,7 +1405,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se <no filter> - + <no filter> @@ -1416,7 +1416,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Show warnings - + Mostra warnings diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index d72b1d71f..b529bdaf9 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -83,12 +83,12 @@ Unknown error: network reply was deleted - + Ukjent feil: nettverkssvar ble slettet Server replied "%1 %2" to "%3 %4" - + Server svarte "%1 %2" til "%3 %4" @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + Server %1 er for øyeblikket i vedlikeholdsmodus. @@ -258,7 +258,7 @@ Connecting to %1... - + Kobler til %1... @@ -373,7 +373,7 @@ Maintenance mode - + Vedlikeholdsmodus @@ -3311,7 +3311,7 @@ Det er ikke tilrådelig å bruke den. Unresolved conflict. - + Uløst konflikt @@ -3772,17 +3772,17 @@ Det er ikke tilrådelig å bruke den. Please switch to your browser to proceed. - + Vennligst bytt til nettleseren din for å fortsette. An error occured while connecting. Please try again. - + Det oppstod en feil under tilkobling. Vennligst prøv igjen. Re-open Browser - + Gjenåpne nettleser @@ -4109,12 +4109,12 @@ Det er ikke tilrådelig å bruke den. Could not open browser - + Kunne ikke åpne nettleseren There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + Det oppstod en feil ved start av nettleseren for å gå til URL %1. Kanskje ingen standard nettleser er konfigurert? From 1c03fa8642f1d3d719d93430a9e06455d85eee78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Weigert?= Date: Mon, 2 Oct 2017 18:36:35 +0200 Subject: [PATCH 140/166] use IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin We need to test presence of admin folder using ${CMAKE_SOURCE_DIR}, or it is always false. Bad for ox, (good for everything else) --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b1790d07..c2540f689 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,9 +245,9 @@ if(BUILD_CLIENT) if(NOT BUILD_LIBRARIES_ONLY) add_subdirectory(doc) add_subdirectory(doc/dev) - if(IS_DIRECTORY admin) + if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin) add_subdirectory(admin) - endif(IS_DIRECTORY admin) + endif(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/admin) endif(NOT BUILD_LIBRARIES_ONLY) endif() From e48d55d1261072af239c2cb378bc0ff2f89331af Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 4 Oct 2017 17:12:12 +0200 Subject: [PATCH 141/166] sqlite: Update bundled version to 3.20.1 For OS X and Windows. --- src/3rdparty/sqlite3/sqlite3.c | 15133 +++++++++++++++++++------------ src/3rdparty/sqlite3/sqlite3.h | 552 +- 2 files changed, 9849 insertions(+), 5836 deletions(-) diff --git a/src/3rdparty/sqlite3/sqlite3.c b/src/3rdparty/sqlite3/sqlite3.c index 905176cf9..ea5ba16b6 100644 --- a/src/3rdparty/sqlite3/sqlite3.c +++ b/src/3rdparty/sqlite3/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.16.1. By combining all the individual C code files into this +** version 3.20.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -22,6 +22,758 @@ #ifndef SQLITE_PRIVATE # define SQLITE_PRIVATE static #endif +/************** Begin file ctime.c *******************************************/ +/* +** 2010 February 23 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements routines used to report what compile-time options +** SQLite was built with. +*/ + +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS + +/* +** Include the configuration header output by 'configure' if we're using the +** autoconf-based build +*/ +#if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) +#include "config.h" +#define SQLITECONFIG_H 1 +#endif + +/* These macros are provided to "stringify" the value of the define +** for those options in which the value is meaningful. */ +#define CTIMEOPT_VAL_(opt) #opt +#define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) + +/* +** An array of names of all compile-time options. This array should +** be sorted A-Z. +** +** This array looks large, but in a typical installation actually uses +** only a handful of compile-time options, so most times this array is usually +** rather short and uses little memory space. +*/ +static const char * const sqlite3azCompileOpt[] = { + +/* +** BEGIN CODE GENERATED BY tool/mkctime.tcl +*/ +#if SQLITE_32BIT_ROWID + "32BIT_ROWID", +#endif +#if SQLITE_4_BYTE_ALIGNED_MALLOC + "4_BYTE_ALIGNED_MALLOC", +#endif +#if SQLITE_64BIT_STATS + "64BIT_STATS", +#endif +#if SQLITE_ALLOW_COVERING_INDEX_SCAN + "ALLOW_COVERING_INDEX_SCAN", +#endif +#if SQLITE_ALLOW_URI_AUTHORITY + "ALLOW_URI_AUTHORITY", +#endif +#ifdef SQLITE_BITMASK_TYPE + "BITMASK_TYPE=" CTIMEOPT_VAL(SQLITE_BITMASK_TYPE), +#endif +#if SQLITE_BUG_COMPATIBLE_20160819 + "BUG_COMPATIBLE_20160819", +#endif +#if SQLITE_CASE_SENSITIVE_LIKE + "CASE_SENSITIVE_LIKE", +#endif +#if SQLITE_CHECK_PAGES + "CHECK_PAGES", +#endif +#if defined(__clang__) && defined(__clang_major__) + "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "." + CTIMEOPT_VAL(__clang_minor__) "." + CTIMEOPT_VAL(__clang_patchlevel__), +#elif defined(_MSC_VER) + "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER), +#elif defined(__GNUC__) && defined(__VERSION__) + "COMPILER=gcc-" __VERSION__, +#endif +#if SQLITE_COVERAGE_TEST + "COVERAGE_TEST", +#endif +#if SQLITE_DEBUG + "DEBUG", +#endif +#if SQLITE_DEFAULT_AUTOMATIC_INDEX + "DEFAULT_AUTOMATIC_INDEX", +#endif +#if SQLITE_DEFAULT_AUTOVACUUM + "DEFAULT_AUTOVACUUM", +#endif +#ifdef SQLITE_DEFAULT_CACHE_SIZE + "DEFAULT_CACHE_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_CACHE_SIZE), +#endif +#if SQLITE_DEFAULT_CKPTFULLFSYNC + "DEFAULT_CKPTFULLFSYNC", +#endif +#ifdef SQLITE_DEFAULT_FILE_FORMAT + "DEFAULT_FILE_FORMAT=" CTIMEOPT_VAL(SQLITE_DEFAULT_FILE_FORMAT), +#endif +#ifdef SQLITE_DEFAULT_FILE_PERMISSIONS + "DEFAULT_FILE_PERMISSIONS=" CTIMEOPT_VAL(SQLITE_DEFAULT_FILE_PERMISSIONS), +#endif +#if SQLITE_DEFAULT_FOREIGN_KEYS + "DEFAULT_FOREIGN_KEYS", +#endif +#ifdef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT + "DEFAULT_JOURNAL_SIZE_LIMIT=" CTIMEOPT_VAL(SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT), +#endif +#ifdef SQLITE_DEFAULT_LOCKING_MODE + "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), +#endif +#ifdef SQLITE_DEFAULT_LOOKASIDE + "DEFAULT_LOOKASIDE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOOKASIDE), +#endif +#if SQLITE_DEFAULT_MEMSTATUS + "DEFAULT_MEMSTATUS", +#endif +#ifdef SQLITE_DEFAULT_MMAP_SIZE + "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE), +#endif +#ifdef SQLITE_DEFAULT_PAGE_SIZE + "DEFAULT_PAGE_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_PAGE_SIZE), +#endif +#ifdef SQLITE_DEFAULT_PCACHE_INITSZ + "DEFAULT_PCACHE_INITSZ=" CTIMEOPT_VAL(SQLITE_DEFAULT_PCACHE_INITSZ), +#endif +#ifdef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS + "DEFAULT_PROXYDIR_PERMISSIONS=" CTIMEOPT_VAL(SQLITE_DEFAULT_PROXYDIR_PERMISSIONS), +#endif +#if SQLITE_DEFAULT_RECURSIVE_TRIGGERS + "DEFAULT_RECURSIVE_TRIGGERS", +#endif +#ifdef SQLITE_DEFAULT_ROWEST + "DEFAULT_ROWEST=" CTIMEOPT_VAL(SQLITE_DEFAULT_ROWEST), +#endif +#ifdef SQLITE_DEFAULT_SECTOR_SIZE + "DEFAULT_SECTOR_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_SECTOR_SIZE), +#endif +#ifdef SQLITE_DEFAULT_SYNCHRONOUS + "DEFAULT_SYNCHRONOUS=" CTIMEOPT_VAL(SQLITE_DEFAULT_SYNCHRONOUS), +#endif +#ifdef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT + "DEFAULT_WAL_AUTOCHECKPOINT=" CTIMEOPT_VAL(SQLITE_DEFAULT_WAL_AUTOCHECKPOINT), +#endif +#ifdef SQLITE_DEFAULT_WAL_SYNCHRONOUS + "DEFAULT_WAL_SYNCHRONOUS=" CTIMEOPT_VAL(SQLITE_DEFAULT_WAL_SYNCHRONOUS), +#endif +#ifdef SQLITE_DEFAULT_WORKER_THREADS + "DEFAULT_WORKER_THREADS=" CTIMEOPT_VAL(SQLITE_DEFAULT_WORKER_THREADS), +#endif +#if SQLITE_DIRECT_OVERFLOW_READ + "DIRECT_OVERFLOW_READ", +#endif +#if SQLITE_DISABLE_DIRSYNC + "DISABLE_DIRSYNC", +#endif +#if SQLITE_DISABLE_FTS3_UNICODE + "DISABLE_FTS3_UNICODE", +#endif +#if SQLITE_DISABLE_FTS4_DEFERRED + "DISABLE_FTS4_DEFERRED", +#endif +#if SQLITE_DISABLE_INTRINSIC + "DISABLE_INTRINSIC", +#endif +#if SQLITE_DISABLE_LFS + "DISABLE_LFS", +#endif +#if SQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS + "DISABLE_PAGECACHE_OVERFLOW_STATS", +#endif +#if SQLITE_DISABLE_SKIPAHEAD_DISTINCT + "DISABLE_SKIPAHEAD_DISTINCT", +#endif +#ifdef SQLITE_ENABLE_8_3_NAMES + "ENABLE_8_3_NAMES=" CTIMEOPT_VAL(SQLITE_ENABLE_8_3_NAMES), +#endif +#if SQLITE_ENABLE_API_ARMOR + "ENABLE_API_ARMOR", +#endif +#if SQLITE_ENABLE_ATOMIC_WRITE + "ENABLE_ATOMIC_WRITE", +#endif +#if SQLITE_ENABLE_CEROD + "ENABLE_CEROD", +#endif +#if SQLITE_ENABLE_COLUMN_METADATA + "ENABLE_COLUMN_METADATA", +#endif +#if SQLITE_ENABLE_COLUMN_USED_MASK + "ENABLE_COLUMN_USED_MASK", +#endif +#if SQLITE_ENABLE_COSTMULT + "ENABLE_COSTMULT", +#endif +#if SQLITE_ENABLE_CURSOR_HINTS + "ENABLE_CURSOR_HINTS", +#endif +#if SQLITE_ENABLE_DBSTAT_VTAB + "ENABLE_DBSTAT_VTAB", +#endif +#if SQLITE_ENABLE_EXPENSIVE_ASSERT + "ENABLE_EXPENSIVE_ASSERT", +#endif +#if SQLITE_ENABLE_FTS1 + "ENABLE_FTS1", +#endif +#if SQLITE_ENABLE_FTS2 + "ENABLE_FTS2", +#endif +#if SQLITE_ENABLE_FTS3 + "ENABLE_FTS3", +#endif +#if SQLITE_ENABLE_FTS3_PARENTHESIS + "ENABLE_FTS3_PARENTHESIS", +#endif +#if SQLITE_ENABLE_FTS3_TOKENIZER + "ENABLE_FTS3_TOKENIZER", +#endif +#if SQLITE_ENABLE_FTS4 + "ENABLE_FTS4", +#endif +#if SQLITE_ENABLE_FTS5 + "ENABLE_FTS5", +#endif +#if SQLITE_ENABLE_HIDDEN_COLUMNS + "ENABLE_HIDDEN_COLUMNS", +#endif +#if SQLITE_ENABLE_ICU + "ENABLE_ICU", +#endif +#if SQLITE_ENABLE_IOTRACE + "ENABLE_IOTRACE", +#endif +#if SQLITE_ENABLE_JSON1 + "ENABLE_JSON1", +#endif +#if SQLITE_ENABLE_LOAD_EXTENSION + "ENABLE_LOAD_EXTENSION", +#endif +#ifdef SQLITE_ENABLE_LOCKING_STYLE + "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), +#endif +#if SQLITE_ENABLE_MEMORY_MANAGEMENT + "ENABLE_MEMORY_MANAGEMENT", +#endif +#if SQLITE_ENABLE_MEMSYS3 + "ENABLE_MEMSYS3", +#endif +#if SQLITE_ENABLE_MEMSYS5 + "ENABLE_MEMSYS5", +#endif +#if SQLITE_ENABLE_MULTIPLEX + "ENABLE_MULTIPLEX", +#endif +#if SQLITE_ENABLE_NULL_TRIM + "ENABLE_NULL_TRIM", +#endif +#if SQLITE_ENABLE_OVERSIZE_CELL_CHECK + "ENABLE_OVERSIZE_CELL_CHECK", +#endif +#if SQLITE_ENABLE_PREUPDATE_HOOK + "ENABLE_PREUPDATE_HOOK", +#endif +#if SQLITE_ENABLE_QPSG + "ENABLE_QPSG", +#endif +#if SQLITE_ENABLE_RBU + "ENABLE_RBU", +#endif +#if SQLITE_ENABLE_RTREE + "ENABLE_RTREE", +#endif +#if SQLITE_ENABLE_SELECTTRACE + "ENABLE_SELECTTRACE", +#endif +#if SQLITE_ENABLE_SESSION + "ENABLE_SESSION", +#endif +#if SQLITE_ENABLE_SNAPSHOT + "ENABLE_SNAPSHOT", +#endif +#if SQLITE_ENABLE_SQLLOG + "ENABLE_SQLLOG", +#endif +#if defined(SQLITE_ENABLE_STAT4) + "ENABLE_STAT4", +#elif defined(SQLITE_ENABLE_STAT3) + "ENABLE_STAT3", +#endif +#if SQLITE_ENABLE_STMTVTAB + "ENABLE_STMTVTAB", +#endif +#if SQLITE_ENABLE_STMT_SCANSTATUS + "ENABLE_STMT_SCANSTATUS", +#endif +#if SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + "ENABLE_UNKNOWN_SQL_FUNCTION", +#endif +#if SQLITE_ENABLE_UNLOCK_NOTIFY + "ENABLE_UNLOCK_NOTIFY", +#endif +#if SQLITE_ENABLE_UPDATE_DELETE_LIMIT + "ENABLE_UPDATE_DELETE_LIMIT", +#endif +#if SQLITE_ENABLE_URI_00_ERROR + "ENABLE_URI_00_ERROR", +#endif +#if SQLITE_ENABLE_VFSTRACE + "ENABLE_VFSTRACE", +#endif +#if SQLITE_ENABLE_WHERETRACE + "ENABLE_WHERETRACE", +#endif +#if SQLITE_ENABLE_ZIPVFS + "ENABLE_ZIPVFS", +#endif +#if SQLITE_EXPLAIN_ESTIMATED_ROWS + "EXPLAIN_ESTIMATED_ROWS", +#endif +#if SQLITE_EXTRA_IFNULLROW + "EXTRA_IFNULLROW", +#endif +#ifdef SQLITE_EXTRA_INIT + "EXTRA_INIT=" CTIMEOPT_VAL(SQLITE_EXTRA_INIT), +#endif +#ifdef SQLITE_EXTRA_SHUTDOWN + "EXTRA_SHUTDOWN=" CTIMEOPT_VAL(SQLITE_EXTRA_SHUTDOWN), +#endif +#ifdef SQLITE_FTS3_MAX_EXPR_DEPTH + "FTS3_MAX_EXPR_DEPTH=" CTIMEOPT_VAL(SQLITE_FTS3_MAX_EXPR_DEPTH), +#endif +#if SQLITE_FTS5_ENABLE_TEST_MI + "FTS5_ENABLE_TEST_MI", +#endif +#if SQLITE_FTS5_NO_WITHOUT_ROWID + "FTS5_NO_WITHOUT_ROWID", +#endif +#if SQLITE_HAS_CODEC + "HAS_CODEC", +#endif +#if HAVE_ISNAN || SQLITE_HAVE_ISNAN + "HAVE_ISNAN", +#endif +#if SQLITE_HOMEGROWN_RECURSIVE_MUTEX + "HOMEGROWN_RECURSIVE_MUTEX", +#endif +#if SQLITE_IGNORE_AFP_LOCK_ERRORS + "IGNORE_AFP_LOCK_ERRORS", +#endif +#if SQLITE_IGNORE_FLOCK_LOCK_ERRORS + "IGNORE_FLOCK_LOCK_ERRORS", +#endif +#if SQLITE_INLINE_MEMCPY + "INLINE_MEMCPY", +#endif +#if SQLITE_INT64_TYPE + "INT64_TYPE", +#endif +#ifdef SQLITE_INTEGRITY_CHECK_ERROR_MAX + "INTEGRITY_CHECK_ERROR_MAX=" CTIMEOPT_VAL(SQLITE_INTEGRITY_CHECK_ERROR_MAX), +#endif +#if SQLITE_LIKE_DOESNT_MATCH_BLOBS + "LIKE_DOESNT_MATCH_BLOBS", +#endif +#if SQLITE_LOCK_TRACE + "LOCK_TRACE", +#endif +#if SQLITE_LOG_CACHE_SPILL + "LOG_CACHE_SPILL", +#endif +#ifdef SQLITE_MALLOC_SOFT_LIMIT + "MALLOC_SOFT_LIMIT=" CTIMEOPT_VAL(SQLITE_MALLOC_SOFT_LIMIT), +#endif +#ifdef SQLITE_MAX_ATTACHED + "MAX_ATTACHED=" CTIMEOPT_VAL(SQLITE_MAX_ATTACHED), +#endif +#ifdef SQLITE_MAX_COLUMN + "MAX_COLUMN=" CTIMEOPT_VAL(SQLITE_MAX_COLUMN), +#endif +#ifdef SQLITE_MAX_COMPOUND_SELECT + "MAX_COMPOUND_SELECT=" CTIMEOPT_VAL(SQLITE_MAX_COMPOUND_SELECT), +#endif +#ifdef SQLITE_MAX_DEFAULT_PAGE_SIZE + "MAX_DEFAULT_PAGE_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_DEFAULT_PAGE_SIZE), +#endif +#ifdef SQLITE_MAX_EXPR_DEPTH + "MAX_EXPR_DEPTH=" CTIMEOPT_VAL(SQLITE_MAX_EXPR_DEPTH), +#endif +#ifdef SQLITE_MAX_FUNCTION_ARG + "MAX_FUNCTION_ARG=" CTIMEOPT_VAL(SQLITE_MAX_FUNCTION_ARG), +#endif +#ifdef SQLITE_MAX_LENGTH + "MAX_LENGTH=" CTIMEOPT_VAL(SQLITE_MAX_LENGTH), +#endif +#ifdef SQLITE_MAX_LIKE_PATTERN_LENGTH + "MAX_LIKE_PATTERN_LENGTH=" CTIMEOPT_VAL(SQLITE_MAX_LIKE_PATTERN_LENGTH), +#endif +#ifdef SQLITE_MAX_MEMORY + "MAX_MEMORY=" CTIMEOPT_VAL(SQLITE_MAX_MEMORY), +#endif +#ifdef SQLITE_MAX_MMAP_SIZE + "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE), +#endif +#ifdef SQLITE_MAX_MMAP_SIZE_ + "MAX_MMAP_SIZE_=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE_), +#endif +#ifdef SQLITE_MAX_PAGE_COUNT + "MAX_PAGE_COUNT=" CTIMEOPT_VAL(SQLITE_MAX_PAGE_COUNT), +#endif +#ifdef SQLITE_MAX_PAGE_SIZE + "MAX_PAGE_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_PAGE_SIZE), +#endif +#ifdef SQLITE_MAX_SCHEMA_RETRY + "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), +#endif +#ifdef SQLITE_MAX_SQL_LENGTH + "MAX_SQL_LENGTH=" CTIMEOPT_VAL(SQLITE_MAX_SQL_LENGTH), +#endif +#ifdef SQLITE_MAX_TRIGGER_DEPTH + "MAX_TRIGGER_DEPTH=" CTIMEOPT_VAL(SQLITE_MAX_TRIGGER_DEPTH), +#endif +#ifdef SQLITE_MAX_VARIABLE_NUMBER + "MAX_VARIABLE_NUMBER=" CTIMEOPT_VAL(SQLITE_MAX_VARIABLE_NUMBER), +#endif +#ifdef SQLITE_MAX_VDBE_OP + "MAX_VDBE_OP=" CTIMEOPT_VAL(SQLITE_MAX_VDBE_OP), +#endif +#ifdef SQLITE_MAX_WORKER_THREADS + "MAX_WORKER_THREADS=" CTIMEOPT_VAL(SQLITE_MAX_WORKER_THREADS), +#endif +#if SQLITE_MEMDEBUG + "MEMDEBUG", +#endif +#if SQLITE_MIXED_ENDIAN_64BIT_FLOAT + "MIXED_ENDIAN_64BIT_FLOAT", +#endif +#if SQLITE_MMAP_READWRITE + "MMAP_READWRITE", +#endif +#if SQLITE_MUTEX_NOOP + "MUTEX_NOOP", +#endif +#if SQLITE_MUTEX_NREF + "MUTEX_NREF", +#endif +#if SQLITE_MUTEX_OMIT + "MUTEX_OMIT", +#endif +#if SQLITE_MUTEX_PTHREADS + "MUTEX_PTHREADS", +#endif +#if SQLITE_MUTEX_W32 + "MUTEX_W32", +#endif +#if SQLITE_NEED_ERR_NAME + "NEED_ERR_NAME", +#endif +#if SQLITE_NOINLINE + "NOINLINE", +#endif +#if SQLITE_NO_SYNC + "NO_SYNC", +#endif +#if SQLITE_OMIT_ALTERTABLE + "OMIT_ALTERTABLE", +#endif +#if SQLITE_OMIT_ANALYZE + "OMIT_ANALYZE", +#endif +#if SQLITE_OMIT_ATTACH + "OMIT_ATTACH", +#endif +#if SQLITE_OMIT_AUTHORIZATION + "OMIT_AUTHORIZATION", +#endif +#if SQLITE_OMIT_AUTOINCREMENT + "OMIT_AUTOINCREMENT", +#endif +#if SQLITE_OMIT_AUTOINIT + "OMIT_AUTOINIT", +#endif +#if SQLITE_OMIT_AUTOMATIC_INDEX + "OMIT_AUTOMATIC_INDEX", +#endif +#if SQLITE_OMIT_AUTORESET + "OMIT_AUTORESET", +#endif +#if SQLITE_OMIT_AUTOVACUUM + "OMIT_AUTOVACUUM", +#endif +#if SQLITE_OMIT_BETWEEN_OPTIMIZATION + "OMIT_BETWEEN_OPTIMIZATION", +#endif +#if SQLITE_OMIT_BLOB_LITERAL + "OMIT_BLOB_LITERAL", +#endif +#if SQLITE_OMIT_BTREECOUNT + "OMIT_BTREECOUNT", +#endif +#if SQLITE_OMIT_CAST + "OMIT_CAST", +#endif +#if SQLITE_OMIT_CHECK + "OMIT_CHECK", +#endif +#if SQLITE_OMIT_COMPLETE + "OMIT_COMPLETE", +#endif +#if SQLITE_OMIT_COMPOUND_SELECT + "OMIT_COMPOUND_SELECT", +#endif +#if SQLITE_OMIT_CONFLICT_CLAUSE + "OMIT_CONFLICT_CLAUSE", +#endif +#if SQLITE_OMIT_CTE + "OMIT_CTE", +#endif +#if SQLITE_OMIT_DATETIME_FUNCS + "OMIT_DATETIME_FUNCS", +#endif +#if SQLITE_OMIT_DECLTYPE + "OMIT_DECLTYPE", +#endif +#if SQLITE_OMIT_DEPRECATED + "OMIT_DEPRECATED", +#endif +#if SQLITE_OMIT_DISKIO + "OMIT_DISKIO", +#endif +#if SQLITE_OMIT_EXPLAIN + "OMIT_EXPLAIN", +#endif +#if SQLITE_OMIT_FLAG_PRAGMAS + "OMIT_FLAG_PRAGMAS", +#endif +#if SQLITE_OMIT_FLOATING_POINT + "OMIT_FLOATING_POINT", +#endif +#if SQLITE_OMIT_FOREIGN_KEY + "OMIT_FOREIGN_KEY", +#endif +#if SQLITE_OMIT_GET_TABLE + "OMIT_GET_TABLE", +#endif +#if SQLITE_OMIT_HEX_INTEGER + "OMIT_HEX_INTEGER", +#endif +#if SQLITE_OMIT_INCRBLOB + "OMIT_INCRBLOB", +#endif +#if SQLITE_OMIT_INTEGRITY_CHECK + "OMIT_INTEGRITY_CHECK", +#endif +#if SQLITE_OMIT_LIKE_OPTIMIZATION + "OMIT_LIKE_OPTIMIZATION", +#endif +#if SQLITE_OMIT_LOAD_EXTENSION + "OMIT_LOAD_EXTENSION", +#endif +#if SQLITE_OMIT_LOCALTIME + "OMIT_LOCALTIME", +#endif +#if SQLITE_OMIT_LOOKASIDE + "OMIT_LOOKASIDE", +#endif +#if SQLITE_OMIT_MEMORYDB + "OMIT_MEMORYDB", +#endif +#if SQLITE_OMIT_OR_OPTIMIZATION + "OMIT_OR_OPTIMIZATION", +#endif +#if SQLITE_OMIT_PAGER_PRAGMAS + "OMIT_PAGER_PRAGMAS", +#endif +#if SQLITE_OMIT_PARSER_TRACE + "OMIT_PARSER_TRACE", +#endif +#if SQLITE_OMIT_POPEN + "OMIT_POPEN", +#endif +#if SQLITE_OMIT_PRAGMA + "OMIT_PRAGMA", +#endif +#if SQLITE_OMIT_PROGRESS_CALLBACK + "OMIT_PROGRESS_CALLBACK", +#endif +#if SQLITE_OMIT_QUICKBALANCE + "OMIT_QUICKBALANCE", +#endif +#if SQLITE_OMIT_REINDEX + "OMIT_REINDEX", +#endif +#if SQLITE_OMIT_SCHEMA_PRAGMAS + "OMIT_SCHEMA_PRAGMAS", +#endif +#if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS + "OMIT_SCHEMA_VERSION_PRAGMAS", +#endif +#if SQLITE_OMIT_SHARED_CACHE + "OMIT_SHARED_CACHE", +#endif +#if SQLITE_OMIT_SHUTDOWN_DIRECTORIES + "OMIT_SHUTDOWN_DIRECTORIES", +#endif +#if SQLITE_OMIT_SUBQUERY + "OMIT_SUBQUERY", +#endif +#if SQLITE_OMIT_TCL_VARIABLE + "OMIT_TCL_VARIABLE", +#endif +#if SQLITE_OMIT_TEMPDB + "OMIT_TEMPDB", +#endif +#if SQLITE_OMIT_TEST_CONTROL + "OMIT_TEST_CONTROL", +#endif +#if SQLITE_OMIT_TRACE + "OMIT_TRACE", +#endif +#if SQLITE_OMIT_TRIGGER + "OMIT_TRIGGER", +#endif +#if SQLITE_OMIT_TRUNCATE_OPTIMIZATION + "OMIT_TRUNCATE_OPTIMIZATION", +#endif +#if SQLITE_OMIT_UTF16 + "OMIT_UTF16", +#endif +#if SQLITE_OMIT_VACUUM + "OMIT_VACUUM", +#endif +#if SQLITE_OMIT_VIEW + "OMIT_VIEW", +#endif +#if SQLITE_OMIT_VIRTUALTABLE + "OMIT_VIRTUALTABLE", +#endif +#if SQLITE_OMIT_WAL + "OMIT_WAL", +#endif +#if SQLITE_OMIT_WSD + "OMIT_WSD", +#endif +#if SQLITE_OMIT_XFER_OPT + "OMIT_XFER_OPT", +#endif +#if SQLITE_PCACHE_SEPARATE_HEADER + "PCACHE_SEPARATE_HEADER", +#endif +#if SQLITE_PERFORMANCE_TRACE + "PERFORMANCE_TRACE", +#endif +#if SQLITE_POWERSAFE_OVERWRITE + "POWERSAFE_OVERWRITE", +#endif +#if SQLITE_PREFER_PROXY_LOCKING + "PREFER_PROXY_LOCKING", +#endif +#if SQLITE_PROXY_DEBUG + "PROXY_DEBUG", +#endif +#if SQLITE_REVERSE_UNORDERED_SELECTS + "REVERSE_UNORDERED_SELECTS", +#endif +#if SQLITE_RTREE_INT_ONLY + "RTREE_INT_ONLY", +#endif +#if SQLITE_SECURE_DELETE + "SECURE_DELETE", +#endif +#if SQLITE_SMALL_STACK + "SMALL_STACK", +#endif +#ifdef SQLITE_SORTER_PMASZ + "SORTER_PMASZ=" CTIMEOPT_VAL(SQLITE_SORTER_PMASZ), +#endif +#if SQLITE_SOUNDEX + "SOUNDEX", +#endif +#ifdef SQLITE_STAT4_SAMPLES + "STAT4_SAMPLES=" CTIMEOPT_VAL(SQLITE_STAT4_SAMPLES), +#endif +#ifdef SQLITE_STMTJRNL_SPILL + "STMTJRNL_SPILL=" CTIMEOPT_VAL(SQLITE_STMTJRNL_SPILL), +#endif +#if SQLITE_SUBSTR_COMPATIBILITY + "SUBSTR_COMPATIBILITY", +#endif +#if SQLITE_SYSTEM_MALLOC + "SYSTEM_MALLOC", +#endif +#if SQLITE_TCL + "TCL", +#endif +#ifdef SQLITE_TEMP_STORE + "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), +#endif +#if SQLITE_TEST + "TEST", +#endif +#if defined(SQLITE_THREADSAFE) + "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), +#elif defined(THREADSAFE) + "THREADSAFE=" CTIMEOPT_VAL(THREADSAFE), +#else + "THREADSAFE=1", +#endif +#if SQLITE_UNLINK_AFTER_CLOSE + "UNLINK_AFTER_CLOSE", +#endif +#if SQLITE_UNTESTABLE + "UNTESTABLE", +#endif +#if SQLITE_USER_AUTHENTICATION + "USER_AUTHENTICATION", +#endif +#if SQLITE_USE_ALLOCA + "USE_ALLOCA", +#endif +#if SQLITE_USE_FCNTL_TRACE + "USE_FCNTL_TRACE", +#endif +#if SQLITE_USE_URI + "USE_URI", +#endif +#if SQLITE_VDBE_COVERAGE + "VDBE_COVERAGE", +#endif +#if SQLITE_WIN32_MALLOC + "WIN32_MALLOC", +#endif +#if SQLITE_ZERO_MALLOC + "ZERO_MALLOC", +#endif +/* +** END CODE GENERATED BY tool/mkctime.tcl +*/ +}; + +SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt){ + *pnOpt = sizeof(sqlite3azCompileOpt) / sizeof(sqlite3azCompileOpt[0]); + return (const char**)sqlite3azCompileOpt; +} + +#endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */ + +/************** End of ctime.c ***********************************************/ /************** Begin file sqliteInt.h ***************************************/ /* ** 2001 September 15 @@ -204,12 +956,29 @@ # define _LARGEFILE_SOURCE 1 #endif -/* What version of GCC is being used. 0 means GCC is not being used */ -#ifdef __GNUC__ +/* The GCC_VERSION and MSVC_VERSION macros are used to +** conditionally include optimizations for each of these compilers. A +** value of 0 means that compiler is not being used. The +** SQLITE_DISABLE_INTRINSIC macro means do not use any compiler-specific +** optimizations, and hence set all compiler macros to 0 +** +** There was once also a CLANG_VERSION macro. However, we learn that the +** version numbers in clang are for "marketing" only and are inconsistent +** and unreliable. Fortunately, all versions of clang also recognize the +** gcc version numbers and have reasonable settings for gcc version numbers, +** so the GCC_VERSION macro will be set to a correct non-zero value even +** when compiling with clang. +*/ +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) # define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) #else # define GCC_VERSION 0 #endif +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif /* Needed for various definitions... */ #if defined(__GNUC__) && !defined(_GNU_SOURCE) @@ -259,7 +1028,7 @@ /************** Include sqlite3.h in the middle of sqliteInt.h ***************/ /************** Begin file sqlite3.h *****************************************/ /* -** 2001 September 15 +** 2001-09-15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -374,16 +1143,16 @@ extern "C" { ** system. ^The SQLITE_SOURCE_ID macro evaluates to ** a string which identifies a particular check-in of SQLite ** within its configuration management system. ^The SQLITE_SOURCE_ID -** string contains the date and time of the check-in (UTC) and an SHA1 -** hash of the entire source tree. +** string contains the date and time of the check-in (UTC) and a SHA1 +** or SHA3-256 hash of the entire source tree. ** ** See also: [sqlite3_libversion()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.16.1" -#define SQLITE_VERSION_NUMBER 3016001 -#define SQLITE_SOURCE_ID "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd" +#define SQLITE_VERSION "3.20.1" +#define SQLITE_VERSION_NUMBER 3020001 +#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -519,7 +1288,11 @@ typedef struct sqlite3 sqlite3; */ #ifdef SQLITE_INT64_TYPE typedef SQLITE_INT64_TYPE sqlite_int64; - typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; +# ifdef SQLITE_UINT64_TYPE + typedef SQLITE_UINT64_TYPE sqlite_uint64; +# else + typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; +# endif #elif defined(_MSC_VER) || defined(__BORLANDC__) typedef __int64 sqlite_int64; typedef unsigned __int64 sqlite_uint64; @@ -673,7 +1446,7 @@ SQLITE_API int sqlite3_exec( */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ -#define SQLITE_ERROR 1 /* SQL error or missing database */ +#define SQLITE_ERROR 1 /* Generic error */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ @@ -688,7 +1461,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ -#define SQLITE_EMPTY 16 /* Database is empty */ +#define SQLITE_EMPTY 16 /* Not used */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ @@ -696,7 +1469,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_MISUSE 21 /* Library used incorrectly */ #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ #define SQLITE_AUTH 23 /* Authorization denied */ -#define SQLITE_FORMAT 24 /* Auxiliary database format error */ +#define SQLITE_FORMAT 24 /* Not used */ #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ #define SQLITE_NOTADB 26 /* File opened that is not a database file */ #define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */ @@ -832,7 +1605,7 @@ SQLITE_API int sqlite3_exec( ** file that were written at the application level might have changed ** and that adjacent bytes, even bytes within the same sector are ** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN -** flag indicate that a file cannot be deleted when open. The +** flag indicates that a file cannot be deleted when open. The ** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on ** read-only media and cannot be changed even by processes with ** elevated privileges. @@ -982,6 +1755,9 @@ struct sqlite3_file { **
  • [SQLITE_IOCAP_ATOMIC64K] **
  • [SQLITE_IOCAP_SAFE_APPEND] **
  • [SQLITE_IOCAP_SEQUENTIAL] +**
  • [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN] +**
  • [SQLITE_IOCAP_POWERSAFE_OVERWRITE] +**
  • [SQLITE_IOCAP_IMMUTABLE] ** ** ** The SQLITE_IOCAP_ATOMIC property means that all writes of @@ -1110,7 +1886,7 @@ struct sqlite3_io_methods { ** opcode allows these two values (10 retries and 25 milliseconds of delay) ** to be adjusted. The values are changed for all database connections ** within the same process. The argument is a pointer to an array of two -** integers where the first integer i the new retry count and the second +** integers where the first integer is the new retry count and the second ** integer is the delay. If either integer is negative, then the setting ** is not changed but instead the prior value of that setting is written ** into the array entry, allowing the current retry settings to be @@ -2260,6 +3036,17 @@ struct sqlite3_mem_methods { ** have been disabled - 0 if they are not disabled, 1 if they are. ** ** +**
    SQLITE_DBCONFIG_ENABLE_QPSG
    +**
    ^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates +** the [query planner stability guarantee] (QPSG). When the QPSG is active, +** a single SQL query statement will always use the same algorithm regardless +** of values of [bound parameters].)^ The QPSG disables some query optimizations +** that look at the values of bound parameters, which can make some queries +** slower. But the QPSG has the advantage of more predictable behavior. With +** the QPSG active, SQLite will always use the same query plan in the field as +** was used during testing in the lab. +**
    +** ** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -2269,6 +3056,7 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ #define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ /* @@ -2293,20 +3081,30 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** ^The sqlite3_last_insert_rowid(D) interface returns the [rowid] of the -** most recent successful [INSERT] into a rowid table or [virtual table] -** on database connection D. -** ^Inserts into [WITHOUT ROWID] tables are not recorded. -** ^If no successful [INSERT]s into rowid tables -** have ever occurred on the database connection D, -** then sqlite3_last_insert_rowid(D) returns zero. +** ^The sqlite3_last_insert_rowid(D) interface usually returns the [rowid] of +** the most recent successful [INSERT] into a rowid table or [virtual table] +** on database connection D. ^Inserts into [WITHOUT ROWID] tables are not +** recorded. ^If no successful [INSERT]s into rowid tables have ever occurred +** on the database connection D, then sqlite3_last_insert_rowid(D) returns +** zero. ** -** ^(If an [INSERT] occurs within a trigger or within a [virtual table] -** method, then this routine will return the [rowid] of the inserted -** row as long as the trigger or virtual table method is running. -** But once the trigger or virtual table method ends, the value returned -** by this routine reverts to what it was before the trigger or virtual -** table method began.)^ +** As well as being set automatically as rows are inserted into database +** tables, the value returned by this function may be set explicitly by +** [sqlite3_set_last_insert_rowid()] +** +** Some virtual table implementations may INSERT rows into rowid tables as +** part of committing a transaction (e.g. to flush data accumulated in memory +** to disk). In this case subsequent calls to this function return the rowid +** associated with these internal INSERT operations, which leads to +** unintuitive results. Virtual table implementations that do write to rowid +** tables in this way can avoid this problem by restoring the original +** rowid value using [sqlite3_set_last_insert_rowid()] before returning +** control to the user. +** +** ^(If an [INSERT] occurs within a trigger then this routine will +** return the [rowid] of the inserted row as long as the trigger is +** running. Once the trigger program ends, the value returned +** by this routine reverts to what it was before the trigger was fired.)^ ** ** ^An [INSERT] that fails due to a constraint violation is not a ** successful [INSERT] and does not change the value returned by this @@ -2333,6 +3131,16 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); */ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); +/* +** CAPI3REF: Set the Last Insert Rowid value. +** METHOD: sqlite3 +** +** The sqlite3_set_last_insert_rowid(D, R) method allows the application to +** set the value returned by calling sqlite3_last_insert_rowid(D) to R +** without inserting a row into the database. +*/ +SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64); + /* ** CAPI3REF: Count The Number Of Rows Modified ** METHOD: sqlite3 @@ -2444,9 +3252,6 @@ SQLITE_API int sqlite3_total_changes(sqlite3*); ** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. -** -** If the database connection closes while [sqlite3_interrupt()] -** is running then bad things will likely happen. */ SQLITE_API void sqlite3_interrupt(sqlite3*); @@ -2909,12 +3714,14 @@ SQLITE_API void sqlite3_randomness(int N, void *P); /* ** CAPI3REF: Compile-Time Authorization Callbacks ** METHOD: sqlite3 +** KEYWORDS: {authorizer callback} ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], -** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. ^At various +** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()], +** and [sqlite3_prepare16_v3()]. ^At various ** points during the compilation process, as logic is being created ** to perform various actions, the authorizer callback is invoked to ** see if those actions are allowed. ^The authorizer callback should @@ -2936,8 +3743,10 @@ SQLITE_API void sqlite3_randomness(int N, void *P); ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter ** to the callback is an integer [SQLITE_COPY | action code] that specifies ** the particular action to be authorized. ^The third through sixth parameters -** to the callback are zero-terminated strings that contain additional -** details about the action to be authorized. +** to the callback are either NULL pointers or zero-terminated strings +** that contain additional details about the action to be authorized. +** Applications must always be prepared to encounter a NULL pointer in any +** of the third through the sixth parameters of the authorization callback. ** ** ^If the action code is [SQLITE_READ] ** and the callback returns [SQLITE_IGNORE] then the @@ -2946,6 +3755,10 @@ SQLITE_API void sqlite3_randomness(int N, void *P); ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] ** return can be used to deny an untrusted user access to individual ** columns of a table. +** ^When a table is referenced by a [SELECT] but no column values are +** extracted from that table (for example in a query like +** "SELECT count(*) FROM tab") then the [SQLITE_READ] authorizer callback +** is invoked once for that table with a column name that is an empty string. ** ^If the action code is [SQLITE_DELETE] and the callback returns ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the ** [truncate optimization] is disabled and all rows are deleted individually. @@ -3657,9 +4470,9 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ** [[SQLITE_LIMIT_VDBE_OP]] ^(
    SQLITE_LIMIT_VDBE_OP
    **
    The maximum number of instructions in a virtual machine program -** used to implement an SQL statement. This limit is not currently -** enforced, though that might be added in some future release of -** SQLite.
    )^ +** used to implement an SQL statement. If [sqlite3_prepare_v2()] or +** the equivalent tries to allocate space for more than this many opcodes +** in a single prepared statement, an SQLITE_NOMEM error is returned.)^ ** ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
    SQLITE_LIMIT_FUNCTION_ARG
    **
    The maximum number of arguments on a function.
    )^ @@ -3697,23 +4510,59 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); #define SQLITE_LIMIT_TRIGGER_DEPTH 10 #define SQLITE_LIMIT_WORKER_THREADS 11 +/* +** CAPI3REF: Prepare Flags +** +** These constants define various flags that can be passed into +** "prepFlags" parameter of the [sqlite3_prepare_v3()] and +** [sqlite3_prepare16_v3()] interfaces. +** +** New flags may be added in future releases of SQLite. +** +**
    +** [[SQLITE_PREPARE_PERSISTENT]] ^(
    SQLITE_PREPARE_PERSISTENT
    +**
    The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner +** that the prepared statement will be retained for a long time and +** probably reused many times.)^ ^Without this flag, [sqlite3_prepare_v3()] +** and [sqlite3_prepare16_v3()] assume that the prepared statement will +** be used just once or at most a few times and then destroyed using +** [sqlite3_finalize()] relatively soon. The current implementation acts +** on this hint by avoiding the use of [lookaside memory] so as not to +** deplete the limited store of lookaside memory. Future versions of +** SQLite may act on this hint differently. +**
    +*/ +#define SQLITE_PREPARE_PERSISTENT 0x01 + /* ** CAPI3REF: Compiling An SQL Statement ** KEYWORDS: {SQL statement compiler} ** METHOD: sqlite3 ** CONSTRUCTOR: sqlite3_stmt ** -** To execute an SQL query, it must first be compiled into a byte-code -** program using one of these routines. +** To execute an SQL statement, it must first be compiled into a byte-code +** program using one of these routines. Or, in other words, these routines +** are constructors for the [prepared statement] object. +** +** The preferred routine to use is [sqlite3_prepare_v2()]. The +** [sqlite3_prepare()] interface is legacy and should be avoided. +** [sqlite3_prepare_v3()] has an extra "prepFlags" option that is used +** for special purposes. +** +** The use of the UTF-8 interfaces is preferred, as SQLite currently +** does all parsing using UTF-8. The UTF-16 interfaces are provided +** as a convenience. The UTF-16 interfaces work by converting the +** input text into UTF-8, then invoking the corresponding UTF-8 interface. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or ** [sqlite3_open16()]. The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded -** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2() -** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() -** use UTF-16. +** as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(), +** and sqlite3_prepare_v3() +** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() use UTF-16. ** ** ^If the nByte argument is negative, then zSql is read up to the ** first zero terminator. ^If nByte is positive, then it is the @@ -3740,10 +4589,11 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; ** otherwise an [error code] is returned. ** -** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are -** recommended for all new programs. The two older interfaces are retained -** for backwards compatibility, but their use is discouraged. -** ^In the "v2" interfaces, the prepared statement +** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() interfaces are recommended for all new programs. +** The older interfaces (sqlite3_prepare() and sqlite3_prepare16()) +** are retained for backwards compatibility, but their use is discouraged. +** ^In the "vX" interfaces, the prepared statement ** that is returned (the [sqlite3_stmt] object) contains a copy of the ** original SQL text. This causes the [sqlite3_step()] interface to ** behave differently in three ways: @@ -3776,6 +4626,12 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. **
  • +** +**

    ^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having +** the extra prepFlags parameter, which is a bit array consisting of zero or +** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The +** sqlite3_prepare_v2() interface works exactly the same as +** sqlite3_prepare_v3() with a zero prepFlags parameter. ** */ SQLITE_API int sqlite3_prepare( @@ -3792,6 +4648,14 @@ SQLITE_API int sqlite3_prepare_v2( sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); +SQLITE_API int sqlite3_prepare_v3( + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL statement, UTF-8 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const char **pzTail /* OUT: Pointer to unused portion of zSql */ +); SQLITE_API int sqlite3_prepare16( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ @@ -3806,6 +4670,14 @@ SQLITE_API int sqlite3_prepare16_v2( sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); +SQLITE_API int sqlite3_prepare16_v3( + sqlite3 *db, /* Database handle */ + const void *zSql, /* SQL statement, UTF-16 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const void **pzTail /* OUT: Pointer to unused portion of zSql */ +); /* ** CAPI3REF: Retrieving Statement SQL @@ -3813,7 +4685,8 @@ SQLITE_API int sqlite3_prepare16_v2( ** ** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8 ** SQL text used to create [prepared statement] P if P was -** created by either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. +** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. ** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8 ** string containing the SQL text of prepared statement P with ** [bound parameters] expanded. @@ -3937,7 +4810,7 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); ** The [sqlite3_value_blob | sqlite3_value_type()] family of ** interfaces require protected sqlite3_value objects. */ -typedef struct Mem sqlite3_value; +typedef struct sqlite3_value sqlite3_value; /* ** CAPI3REF: SQL Function Context Object @@ -4039,6 +4912,15 @@ typedef struct sqlite3_context sqlite3_context; ** [sqlite3_blob_open | incremental BLOB I/O] routines. ** ^A negative value for the zeroblob results in a zero-length BLOB. ** +** ^The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in +** [prepared statement] S to have an SQL value of NULL, but to also be +** associated with the pointer P of type T. ^D is either a NULL pointer or +** a pointer to a destructor function for P. ^SQLite will invoke the +** destructor D with a single argument of P when it is finished using +** P. The T parameter should be a static string, preferably a string +** literal. The sqlite3_bind_pointer() routine is part of the +** [pointer passing interface] added for SQLite 3.20.0. +** ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer ** for the [prepared statement] or with a prepared statement for which ** [sqlite3_step()] has been called more recently than [sqlite3_reset()], @@ -4072,6 +4954,7 @@ SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*) SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64, void(*)(void*), unsigned char encoding); SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); +SQLITE_API int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*)); SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64); @@ -4115,8 +4998,8 @@ SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); ** ^If the value N is out of range or if the N-th parameter is ** nameless, then NULL is returned. ^The returned string is ** always in UTF-8 encoding even if the named parameter was -** originally specified as UTF-16 in [sqlite3_prepare16()] or -** [sqlite3_prepare16_v2()]. +** originally specified as UTF-16 in [sqlite3_prepare16()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and @@ -4133,7 +5016,8 @@ SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero ** is returned if no matching parameter is found. ^The parameter ** name must be given in UTF-8 even if the original statement -** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. +** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or +** [sqlite3_prepare16_v3()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and @@ -4156,8 +5040,12 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); ** METHOD: sqlite3_stmt ** ** ^Return the number of columns in the result set returned by the -** [prepared statement]. ^This routine returns 0 if pStmt is an SQL -** statement that does not return data (for example an [UPDATE]). +** [prepared statement]. ^If this routine returns 0, that means the +** [prepared statement] returns no data (for example an [UPDATE]). +** ^However, just because this routine returns a positive number does not +** mean that one or more rows of data will be returned. ^A SELECT statement +** will always have a positive sqlite3_column_count() but depending on the +** WHERE clause constraints and the table content, it might return no rows. ** ** See also: [sqlite3_data_count()] */ @@ -4283,16 +5171,18 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** CAPI3REF: Evaluate An SQL Statement ** METHOD: sqlite3_stmt ** -** After a [prepared statement] has been prepared using either -** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy +** After a [prepared statement] has been prepared using any of +** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()], +** or [sqlite3_prepare16_v3()] or one of the legacy ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function ** must be called one or more times to evaluate the statement. ** ** The details of the behavior of the sqlite3_step() interface depend -** on whether the statement was prepared using the newer "v2" interface -** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy -** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the -** new "v2" interface is recommended for new applications but the legacy +** on whether the statement was prepared using the newer "vX" interfaces +** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()], +** [sqlite3_prepare16_v2()] or the older legacy +** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the +** new "vX" interface is recommended for new applications but the legacy ** interface will continue to be supported. ** ** ^In the legacy interface, the return value will be either [SQLITE_BUSY], @@ -4338,7 +5228,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** other than [SQLITE_ROW] before any subsequent invocation of ** sqlite3_step(). Failure to reset the prepared statement using ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from -** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1], +** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1]), ** sqlite3_step() began ** calling [sqlite3_reset()] automatically in this circumstance rather ** than returning [SQLITE_MISUSE]. This is not considered a compatibility @@ -4353,10 +5243,11 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** specific [error codes] that better describes the error. ** We admit that this is a goofy design. The problem has been fixed ** with the "v2" interface. If you prepare all of your SQL statements -** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead +** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()] +** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, ** then the more specific [error codes] are returned directly -** by sqlite3_step(). The use of the "v2" interface is recommended. +** by sqlite3_step(). The use of the "vX" interfaces is recommended. */ SQLITE_API int sqlite3_step(sqlite3_stmt*); @@ -4418,6 +5309,28 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** KEYWORDS: {column access functions} ** METHOD: sqlite3_stmt ** +** Summary: +**

    +**
    sqlite3_column_blobBLOB result +**
    sqlite3_column_doubleREAL result +**
    sqlite3_column_int32-bit INTEGER result +**
    sqlite3_column_int6464-bit INTEGER result +**
    sqlite3_column_textUTF-8 TEXT result +**
    sqlite3_column_text16UTF-16 TEXT result +**
    sqlite3_column_valueThe result as an +** [sqlite3_value|unprotected sqlite3_value] object. +**
        +**
    sqlite3_column_bytesSize of a BLOB +** or a UTF-8 TEXT result in bytes +**
    sqlite3_column_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
    sqlite3_column_typeDefault +** datatype of the result +**
    +** +** Details: +** ** ^These routines return information about a single column of the current ** result row of a query. ^In every case the first argument is a pointer ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] @@ -4439,16 +5352,29 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** are called from a different thread while any of these routines ** are pending, then the results are undefined. ** +** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16) +** each return the value of a result column in a specific data format. If +** the result column is not initially in the requested format (for example, +** if the query returns an integer but the sqlite3_column_text() interface +** is used to extract the value) then an automatic type conversion is performed. +** ** ^The sqlite3_column_type() routine returns the ** [SQLITE_INTEGER | datatype code] for the initial data type ** of the result column. ^The returned value is one of [SQLITE_INTEGER], -** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value -** returned by sqlite3_column_type() is only meaningful if no type -** conversions have occurred as described below. After a type conversion, -** the value returned by sqlite3_column_type() is undefined. Future +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. +** The return value of sqlite3_column_type() can be used to decide which +** of the first six interface should be used to extract the column value. +** The value returned by sqlite3_column_type() is only meaningful if no +** automatic type conversions have occurred for the value in question. +** After a type conversion, the result of calling sqlite3_column_type() +** is undefined, though harmless. Future ** versions of SQLite may change the behavior of sqlite3_column_type() ** following a type conversion. ** +** If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes() +** or sqlite3_column_bytes16() interfaces can be used to determine the size +** of that BLOB or string. +** ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() ** routine returns the number of bytes in that BLOB or string. ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts @@ -4485,9 +5411,13 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** [sqlite3_column_value()] is used in any other way, including calls ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], ** or [sqlite3_value_bytes()], the behavior is not threadsafe. +** Hence, the sqlite3_column_value() interface +** is normally only useful within the implementation of +** [application-defined SQL functions] or [virtual tables], not within +** top-level application code. ** -** These routines attempt to convert the value where appropriate. ^For -** example, if the internal representation is FLOAT and a text result +** The these routines may attempt to convert the datatype of the result. +** ^For example, if the internal representation is FLOAT and a text result ** is requested, [sqlite3_snprintf()] is used internally to perform the ** conversion automatically. ^(The following table details the conversions ** that are applied: @@ -4559,7 +5489,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** ^The pointers returned are valid until a type conversion occurs as ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or ** [sqlite3_finalize()] is called. ^The memory space used to hold strings -** and BLOBs is freed automatically. Do not pass the pointers returned +** and BLOBs is freed automatically. Do not pass the pointers returned ** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** @@ -4570,15 +5500,15 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** [SQLITE_NOMEM].)^ */ SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); /* ** CAPI3REF: Destroy A Prepared Statement Object @@ -4812,21 +5742,40 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** CAPI3REF: Obtaining SQL Values ** METHOD: sqlite3_value ** -** The C-language implementation of SQL functions and aggregates uses -** this set of interface routines to access the parameter values on -** the function or aggregate. +** Summary: +**
    +**
    sqlite3_value_blobBLOB value +**
    sqlite3_value_doubleREAL value +**
    sqlite3_value_int32-bit INTEGER value +**
    sqlite3_value_int6464-bit INTEGER value +**
    sqlite3_value_pointerPointer value +**
    sqlite3_value_textUTF-8 TEXT value +**
    sqlite3_value_text16UTF-16 TEXT value in +** the native byteorder +**
    sqlite3_value_text16beUTF-16be TEXT value +**
    sqlite3_value_text16leUTF-16le TEXT value +**
        +**
    sqlite3_value_bytesSize of a BLOB +** or a UTF-8 TEXT in bytes +**
    sqlite3_value_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
    sqlite3_value_typeDefault +** datatype of the value +**
    sqlite3_value_numeric_type   +** →  Best numeric datatype of the value +**
    ** -** The xFunc (for scalar functions) or xStep (for aggregates) parameters -** to [sqlite3_create_function()] and [sqlite3_create_function16()] -** define callbacks that implement the SQL functions and aggregates. -** The 3rd parameter to these callbacks is an array of pointers to -** [protected sqlite3_value] objects. There is one [sqlite3_value] object for -** each parameter to the SQL function. These routines are used to -** extract values from the [sqlite3_value] objects. +** Details: +** +** These routines extract type, size, and content information from +** [protected sqlite3_value] objects. Protected sqlite3_value objects +** are used to pass parameter information into implementation of +** [application-defined SQL functions] and [virtual tables]. ** ** These routines work only with [protected sqlite3_value] objects. ** Any attempt to use these routines on an [unprotected sqlite3_value] -** object results in undefined behavior. +** is not threadsafe. ** ** ^These routines work just like the corresponding [column access functions] ** except that these routines take a single [protected sqlite3_value] object @@ -4837,6 +5786,24 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces ** extract UTF-16 strings as big-endian and little-endian respectively. ** +** ^If [sqlite3_value] object V was initialized +** using [sqlite3_bind_pointer(S,I,P,X,D)] or [sqlite3_result_pointer(C,P,X,D)] +** and if X and Y are strings that compare equal according to strcmp(X,Y), +** then sqlite3_value_pointer(V,Y) will return the pointer P. ^Otherwise, +** sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** +** ^(The sqlite3_value_type(V) interface returns the +** [SQLITE_INTEGER | datatype code] for the initial datatype of the +** [sqlite3_value] object V. The returned value is one of [SQLITE_INTEGER], +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].)^ +** Other interfaces might change the datatype for an sqlite3_value object. +** For example, if the datatype is initially SQLITE_INTEGER and +** sqlite3_value_text(V) is called to extract a text value for that +** integer, then subsequent calls to sqlite3_value_type(V) might return +** SQLITE_TEXT. Whether or not a persistent internal datatype conversion +** occurs is undefined and may change from one release of SQLite to the next. +** ** ^(The sqlite3_value_numeric_type() interface attempts to apply ** numeric affinity to the value. This means that an attempt is ** made to convert the value to an integer or floating point. If @@ -4855,15 +5822,16 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** the SQL function that supplied the [sqlite3_value*] parameters. */ SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); -SQLITE_API int sqlite3_value_bytes(sqlite3_value*); -SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API double sqlite3_value_double(sqlite3_value*); SQLITE_API int sqlite3_value_int(sqlite3_value*); SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); +SQLITE_API void *sqlite3_value_pointer(sqlite3_value*, const char*); SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); @@ -4876,10 +5844,6 @@ SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); ** information can be used to pass a limited amount of context from ** one SQL function to another. Use the [sqlite3_result_subtype()] ** routine to set the subtype for the return value of an SQL function. -** -** SQLite makes no use of subtype itself. It merely passes the subtype -** from the result of one [application-defined SQL function] into the -** input of another. */ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); @@ -4987,10 +5951,11 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** the compiled regular expression can be reused on multiple ** invocations of the same function. ** -** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata -** associated by the sqlite3_set_auxdata() function with the Nth argument -** value to the application-defined function. ^If there is no metadata -** associated with the function argument, this sqlite3_get_auxdata() interface +** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata +** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument +** value to the application-defined function. ^N is zero for the left-most +** function argument. ^If there is no metadata +** associated with the function argument, the sqlite3_get_auxdata(C,N) interface ** returns a NULL pointer. ** ** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th @@ -5021,6 +5986,10 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** function parameters that are compile-time constants, including literal ** values and [parameters] and expressions composed from the same.)^ ** +** The value of the N parameter to these interfaces should be non-negative. +** Future enhancements may make use of negative N values to define new +** kinds of function caching behavior. +** ** These routines must be called from the same thread in which ** the SQL function is running. */ @@ -5144,7 +6113,7 @@ typedef void (*sqlite3_destructor_type)(void*); ** when it has finished using that result. ** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT -** then SQLite makes a copy of the result into space obtained from +** then SQLite makes a copy of the result into space obtained ** from [sqlite3_malloc()] before it returns. ** ** ^The sqlite3_result_value() interface sets the result of @@ -5157,6 +6126,17 @@ typedef void (*sqlite3_destructor_type)(void*); ** [unprotected sqlite3_value] object is required, so either ** kind of [sqlite3_value] object can be used with this interface. ** +** ^The sqlite3_result_pointer(C,P,T,D) interface sets the result to an +** SQL NULL value, just like [sqlite3_result_null(C)], except that it +** also associates the host-language pointer P or type T with that +** NULL value such that the pointer can be retrieved within an +** [application-defined SQL function] using [sqlite3_value_pointer()]. +** ^If the D parameter is not NULL, then it is a pointer to a destructor +** for the P parameter. ^SQLite invokes D with P as its only argument +** when SQLite is finished with P. The T parameter should be a static +** string and preferably a string literal. The sqlite3_result_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** ** If these routines are called from within the different thread ** than the one containing the application-defined function that received ** the [sqlite3_context] pointer, the results are undefined. @@ -5180,6 +6160,7 @@ SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(* SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); +SQLITE_API void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*)); SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); @@ -5666,7 +6647,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. ** ** ^In the current implementation, the update hook -** is not invoked when duplication rows are deleted because of an +** is not invoked when conflicting rows are deleted because of an ** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook ** invoked when rows are deleted using the [truncate optimization]. ** The exceptions defined in this paragraph might change in a future @@ -5839,7 +6820,9 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); ** ^If the column-name parameter to sqlite3_table_column_metadata() is a ** NULL pointer, then this routine simply checks for the existence of the ** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it -** does not. +** does not. If the table name parameter T in a call to +** sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is +** undefined behavior. ** ** ^The column is identified by the second, third and fourth parameters to ** this function. ^(The second parameter is either the name of the database @@ -6448,6 +7431,12 @@ typedef struct sqlite3_blob sqlite3_blob; ** [database connection] error code and message accessible via ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** +** A BLOB referenced by sqlite3_blob_open() may be read using the +** [sqlite3_blob_read()] interface and modified by using +** [sqlite3_blob_write()]. The [BLOB handle] can be moved to a +** different row of the same table using the [sqlite3_blob_reopen()] +** interface. However, the column, table, or database of a [BLOB handle] +** cannot be changed after the [BLOB handle] is opened. ** ** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects @@ -6471,6 +7460,10 @@ typedef struct sqlite3_blob sqlite3_blob; ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. +** +** See also: [sqlite3_blob_close()], +** [sqlite3_blob_reopen()], [sqlite3_blob_read()], +** [sqlite3_blob_bytes()], [sqlite3_blob_write()]. */ SQLITE_API int sqlite3_blob_open( sqlite3*, @@ -6486,11 +7479,11 @@ SQLITE_API int sqlite3_blob_open( ** CAPI3REF: Move a BLOB Handle to a New Row ** METHOD: sqlite3_blob ** -** ^This function is used to move an existing blob handle so that it points +** ^This function is used to move an existing [BLOB handle] so that it points ** to a different row of the same database table. ^The new row is identified ** by the rowid value passed as the second argument. Only the row can be ** changed. ^The database, table and column on which the blob handle is open -** remain the same. Moving an existing blob handle to a new row can be +** remain the same. Moving an existing [BLOB handle] to a new row is ** faster than closing the existing handle and opening a new one. ** ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - @@ -7342,6 +8335,24 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); ** used as a proxy for the total work done by the prepared statement. ** If the number of virtual machine operations exceeds 2147483647 ** then the value returned by this statement status code is undefined. +** +** [[SQLITE_STMTSTATUS_REPREPARE]]
    SQLITE_STMTSTATUS_REPREPARE
    +**
    ^This is the number of times that the prepare statement has been +** automatically regenerated due to schema changes or change to +** [bound parameters] that might affect the query plan. +** +** [[SQLITE_STMTSTATUS_RUN]]
    SQLITE_STMTSTATUS_RUN
    +**
    ^This is the number of times that the prepared statement has +** been run. A single "run" for the purposes of this counter is one +** or more calls to [sqlite3_step()] followed by a call to [sqlite3_reset()]. +** The counter is incremented on the first [sqlite3_step()] call of each +** cycle. +** +** [[SQLITE_STMTSTATUS_MEMUSED]]
    SQLITE_STMTSTATUS_MEMUSED
    +**
    ^This is the approximate number of bytes of heap memory +** used to store the prepared statement. ^This value is not actually +** a counter, and so the resetFlg parameter to sqlite3_stmt_status() +** is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED. **
    ** */ @@ -7349,6 +8360,9 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); #define SQLITE_STMTSTATUS_SORT 2 #define SQLITE_STMTSTATUS_AUTOINDEX 3 #define SQLITE_STMTSTATUS_VM_STEP 4 +#define SQLITE_STMTSTATUS_REPREPARE 5 +#define SQLITE_STMTSTATUS_RUN 6 +#define SQLITE_STMTSTATUS_MEMUSED 99 /* ** CAPI3REF: Custom Page Cache Object @@ -8419,7 +9433,7 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** ** ^The [sqlite3_preupdate_hook()] interface registers a callback function ** that is invoked prior to each [INSERT], [UPDATE], and [DELETE] operation -** on a [rowid table]. +** on a database table. ** ^At most one preupdate hook may be registered at a time on a single ** [database connection]; each call to [sqlite3_preupdate_hook()] overrides ** the previous setting. @@ -8428,9 +9442,9 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** ^The third parameter to [sqlite3_preupdate_hook()] is passed through as ** the first parameter to callbacks. ** -** ^The preupdate hook only fires for changes to [rowid tables]; the preupdate -** hook is not invoked for changes to [virtual tables] or [WITHOUT ROWID] -** tables. +** ^The preupdate hook only fires for changes to real database tables; the +** preupdate hook is not invoked for changes to [virtual tables] or to +** system tables like sqlite_master or sqlite_stat1. ** ** ^The second parameter to the preupdate callback is a pointer to ** the [database connection] that registered the preupdate hook. @@ -8444,12 +9458,16 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** databases.)^ ** ^The fifth parameter to the preupdate callback is the name of the ** table that is being modified. -** ^The sixth parameter to the preupdate callback is the initial [rowid] of the -** row being changes for SQLITE_UPDATE and SQLITE_DELETE changes and is -** undefined for SQLITE_INSERT changes. -** ^The seventh parameter to the preupdate callback is the final [rowid] of -** the row being changed for SQLITE_UPDATE and SQLITE_INSERT changes and is -** undefined for SQLITE_DELETE changes. +** +** For an UPDATE or DELETE operation on a [rowid table], the sixth +** parameter passed to the preupdate callback is the initial [rowid] of the +** row being modified or deleted. For an INSERT operation on a rowid table, +** or any operation on a WITHOUT ROWID table, the value of the sixth +** parameter is undefined. For an INSERT or UPDATE on a rowid table the +** seventh parameter is the final rowid value of the row being inserted +** or updated. The value of the seventh parameter passed to the callback +** function is not defined for operations on WITHOUT ROWID tables, or for +** INSERT operations on rowid tables. ** ** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], ** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces @@ -8885,7 +9903,7 @@ typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; ** attached database. It is not an error if database zDb is not attached ** to the database when the session object is created. */ -int sqlite3session_create( +SQLITE_API int sqlite3session_create( sqlite3 *db, /* Database handle */ const char *zDb, /* Name of db (e.g. "main") */ sqlite3_session **ppSession /* OUT: New session object */ @@ -8903,7 +9921,7 @@ int sqlite3session_create( ** are attached is closed. Refer to the documentation for ** [sqlite3session_create()] for details. */ -void sqlite3session_delete(sqlite3_session *pSession); +SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* @@ -8923,7 +9941,7 @@ void sqlite3session_delete(sqlite3_session *pSession); ** The return value indicates the final state of the session object: 0 if ** the session is disabled, or 1 if it is enabled. */ -int sqlite3session_enable(sqlite3_session *pSession, int bEnable); +SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); /* ** CAPI3REF: Set Or Clear the Indirect Change Flag @@ -8952,7 +9970,7 @@ int sqlite3session_enable(sqlite3_session *pSession, int bEnable); ** The return value indicates the final state of the indirect flag: 0 if ** it is clear, or 1 if it is set. */ -int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); +SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); /* ** CAPI3REF: Attach A Table To A Session Object @@ -8982,7 +10000,7 @@ int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); ** SQLITE_OK is returned if the call completes without error. Or, if an error ** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. */ -int sqlite3session_attach( +SQLITE_API int sqlite3session_attach( sqlite3_session *pSession, /* Session object */ const char *zTab /* Table name */ ); @@ -8996,7 +10014,7 @@ int sqlite3session_attach( ** If xFilter returns 0, changes is not tracked. Note that once a table is ** attached, xFilter will not be called again. */ -void sqlite3session_table_filter( +SQLITE_API void sqlite3session_table_filter( sqlite3_session *pSession, /* Session object */ int(*xFilter)( void *pCtx, /* Copy of third arg to _filter_table() */ @@ -9109,7 +10127,7 @@ void sqlite3session_table_filter( ** another field of the same row is updated while the session is enabled, the ** resulting changeset will contain an UPDATE change that updates both fields. */ -int sqlite3session_changeset( +SQLITE_API int sqlite3session_changeset( sqlite3_session *pSession, /* Session object */ int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */ void **ppChangeset /* OUT: Buffer containing changeset */ @@ -9153,7 +10171,8 @@ int sqlite3session_changeset( ** the from-table, a DELETE record is added to the session object. ** **
  • For each row (primary key) that exists in both tables, but features -** different in each, an UPDATE record is added to the session. +** different non-PK values in each, an UPDATE record is added to the +** session. ** ** ** To clarify, if this function is called and then a changeset constructed @@ -9170,7 +10189,7 @@ int sqlite3session_changeset( ** message. It is the responsibility of the caller to free this buffer using ** sqlite3_free(). */ -int sqlite3session_diff( +SQLITE_API int sqlite3session_diff( sqlite3_session *pSession, const char *zFromDb, const char *zTbl, @@ -9206,7 +10225,7 @@ int sqlite3session_diff( ** a single table are grouped together, tables appear in the order in which ** they were attached to the session object). */ -int sqlite3session_patchset( +SQLITE_API int sqlite3session_patchset( sqlite3_session *pSession, /* Session object */ int *pnPatchset, /* OUT: Size of buffer at *ppChangeset */ void **ppPatchset /* OUT: Buffer containing changeset */ @@ -9227,7 +10246,7 @@ int sqlite3session_patchset( ** guaranteed that a call to sqlite3session_changeset() will return a ** changeset containing zero changes. */ -int sqlite3session_isempty(sqlite3_session *pSession); +SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); /* ** CAPI3REF: Create An Iterator To Traverse A Changeset @@ -9262,7 +10281,7 @@ int sqlite3session_isempty(sqlite3_session *pSession); ** the applies to table X, then one for table Y, and then later on visit ** another change for table X. */ -int sqlite3changeset_start( +SQLITE_API int sqlite3changeset_start( sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ int nChangeset, /* Size of changeset blob in bytes */ void *pChangeset /* Pointer to blob containing changeset */ @@ -9291,7 +10310,7 @@ int sqlite3changeset_start( ** codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or ** SQLITE_NOMEM. */ -int sqlite3changeset_next(sqlite3_changeset_iter *pIter); +SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Obtain The Current Operation From A Changeset Iterator @@ -9319,7 +10338,7 @@ int sqlite3changeset_next(sqlite3_changeset_iter *pIter); ** SQLite error code is returned. The values of the output variables may not ** be trusted in this case. */ -int sqlite3changeset_op( +SQLITE_API int sqlite3changeset_op( sqlite3_changeset_iter *pIter, /* Iterator object */ const char **pzTab, /* OUT: Pointer to table name */ int *pnCol, /* OUT: Number of columns in table */ @@ -9352,7 +10371,7 @@ int sqlite3changeset_op( ** SQLITE_OK is returned and the output variables populated as described ** above. */ -int sqlite3changeset_pk( +SQLITE_API int sqlite3changeset_pk( sqlite3_changeset_iter *pIter, /* Iterator object */ unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */ int *pnCol /* OUT: Number of entries in output array */ @@ -9382,7 +10401,7 @@ int sqlite3changeset_pk( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_old( +SQLITE_API int sqlite3changeset_old( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */ @@ -9415,7 +10434,7 @@ int sqlite3changeset_old( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_new( +SQLITE_API int sqlite3changeset_new( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */ @@ -9442,7 +10461,7 @@ int sqlite3changeset_new( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_conflict( +SQLITE_API int sqlite3changeset_conflict( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: Value from conflicting row */ @@ -9458,7 +10477,7 @@ int sqlite3changeset_conflict( ** ** In all other cases this function returns SQLITE_MISUSE. */ -int sqlite3changeset_fk_conflicts( +SQLITE_API int sqlite3changeset_fk_conflicts( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int *pnOut /* OUT: Number of FK violations */ ); @@ -9491,7 +10510,7 @@ int sqlite3changeset_fk_conflicts( ** // An error has occurred ** } */ -int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); +SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Invert A Changeset @@ -9521,7 +10540,7 @@ int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); ** WARNING/TODO: This function currently assumes that the input is a valid ** changeset. If it is not, the results are undefined. */ -int sqlite3changeset_invert( +SQLITE_API int sqlite3changeset_invert( int nIn, const void *pIn, /* Input changeset */ int *pnOut, void **ppOut /* OUT: Inverse of input */ ); @@ -9550,7 +10569,7 @@ int sqlite3changeset_invert( ** ** Refer to the sqlite3_changegroup documentation below for details. */ -int sqlite3changeset_concat( +SQLITE_API int sqlite3changeset_concat( int nA, /* Number of bytes in buffer pA */ void *pA, /* Pointer to buffer containing changeset A */ int nB, /* Number of bytes in buffer pB */ @@ -9600,7 +10619,7 @@ typedef struct sqlite3_changegroup sqlite3_changegroup; ** sqlite3changegroup_output() functions, also available are the streaming ** versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm(). */ -int sqlite3changegroup_new(sqlite3_changegroup **pp); +SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); /* ** CAPI3REF: Add A Changeset To A Changegroup @@ -9677,7 +10696,7 @@ int sqlite3changegroup_new(sqlite3_changegroup **pp); ** ** If no error occurs, SQLITE_OK is returned. */ -int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); +SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup @@ -9703,7 +10722,7 @@ int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); ** responsibility of the caller to eventually free the buffer using a ** call to sqlite3_free(). */ -int sqlite3changegroup_output( +SQLITE_API int sqlite3changegroup_output( sqlite3_changegroup*, int *pnData, /* OUT: Size of output buffer in bytes */ void **ppData /* OUT: Pointer to output buffer */ @@ -9712,7 +10731,7 @@ int sqlite3changegroup_output( /* ** CAPI3REF: Delete A Changegroup Object */ -void sqlite3changegroup_delete(sqlite3_changegroup*); +SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); /* ** CAPI3REF: Apply A Changeset To A Database @@ -9738,7 +10757,7 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); **
      **
    • The table has the same name as the name recorded in the ** changeset, and -**
    • The table has the same number of columns as recorded in the +**
    • The table has at least as many columns as recorded in the ** changeset, and **
    • The table has primary key columns in the same position as ** recorded in the changeset. @@ -9783,7 +10802,11 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** If a row with matching primary key values is found, but one or more of ** the non-primary key fields contains a value different from the original ** row value stored in the changeset, the conflict-handler function is -** invoked with [SQLITE_CHANGESET_DATA] as the second argument. +** invoked with [SQLITE_CHANGESET_DATA] as the second argument. If the +** database table has more columns than are recorded in the changeset, +** only the values of those non-primary key fields are compared against +** the current database contents - any trailing database table columns +** are ignored. ** ** If no row with matching primary key values is found in the database, ** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] @@ -9798,7 +10821,9 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** **
      INSERT Changes
      ** For each INSERT change, an attempt is made to insert the new row into -** the database. +** the database. If the changeset row contains fewer fields than the +** database table, the trailing fields are populated with their default +** values. ** ** If the attempt to insert the row fails because the database already ** contains a row with the same primary key values, the conflict handler @@ -9816,13 +10841,13 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** For each UPDATE change, this function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values -** stored in all non-primary key columns also match the values stored in -** the changeset the row is updated within the target database. +** stored in all modified non-primary key columns also match the values +** stored in the changeset the row is updated within the target database. ** ** If a row with matching primary key values is found, but one or more of -** the non-primary key fields contains a value different from an original -** row value stored in the changeset, the conflict-handler function is -** invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since +** the modified non-primary key fields contains a value different from an +** original row value stored in the changeset, the conflict-handler function +** is invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since ** UPDATE changes only contain values for non-primary key fields that are ** to be modified, only those fields need to match the original values to ** avoid the SQLITE_CHANGESET_DATA conflict-handler callback. @@ -9850,7 +10875,7 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** rolled back, restoring the target database to its original state, and an ** SQLite error code returned. */ -int sqlite3changeset_apply( +SQLITE_API int sqlite3changeset_apply( sqlite3 *db, /* Apply change to "main" db of this handle */ int nChangeset, /* Size of changeset in bytes */ void *pChangeset, /* Changeset blob */ @@ -10051,7 +11076,7 @@ int sqlite3changeset_apply( ** parameter set to a value less than or equal to zero. Other than this, ** no guarantees are made as to the size of the chunks of data returned. */ -int sqlite3changeset_apply_strm( +SQLITE_API int sqlite3changeset_apply_strm( sqlite3 *db, /* Apply change to "main" db of this handle */ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ void *pIn, /* First arg for xInput */ @@ -10066,7 +11091,7 @@ int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ); -int sqlite3changeset_concat_strm( +SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, int (*xInputB)(void *pIn, void *pData, int *pnData), @@ -10074,32 +11099,32 @@ int sqlite3changeset_concat_strm( int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changeset_invert_strm( +SQLITE_API int sqlite3changeset_invert_strm( int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changeset_start_strm( +SQLITE_API int sqlite3changeset_start_strm( sqlite3_changeset_iter **pp, int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn ); -int sqlite3session_changeset_strm( +SQLITE_API int sqlite3session_changeset_strm( sqlite3_session *pSession, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3session_patchset_strm( +SQLITE_API int sqlite3session_patchset_strm( sqlite3_session *pSession, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changegroup_add_strm(sqlite3_changegroup*, +SQLITE_API int sqlite3changegroup_add_strm(sqlite3_changegroup*, int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn ); -int sqlite3changegroup_output_strm(sqlite3_changegroup*, +SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); @@ -10704,8 +11729,9 @@ struct fts5_api { ** Include the configuration header output by 'configure' if we're using the ** autoconf-based build */ -#ifdef _HAVE_SQLITE_CONFIG_H -#include "config.h" +#if defined(_HAVE_SQLITE_CONFIG_H) && !defined(SQLITECONFIG_H) +/* #include "config.h" */ +#define SQLITECONFIG_H 1 #endif /************** Include sqliteLimit.h in the middle of sqliteInt.h ***********/ @@ -10799,7 +11825,7 @@ struct fts5_api { ** Not currently enforced. */ #ifndef SQLITE_MAX_VDBE_OP -# define SQLITE_MAX_VDBE_OP 25000 +# define SQLITE_MAX_VDBE_OP 250000000 #endif /* @@ -10997,6 +12023,7 @@ struct fts5_api { # include # pragma intrinsic(_byteswap_ushort) # pragma intrinsic(_byteswap_ulong) +# pragma intrinsic(_byteswap_uint64) # pragma intrinsic(_ReadWriteBarrier) # else # include @@ -11014,6 +12041,11 @@ struct fts5_api { ** ** Older versions of SQLite used an optional THREADSAFE macro. ** We support that for legacy. +** +** To ensure that the correct value of "THREADSAFE" is reported when querying +** for compile-time options at runtime (e.g. "PRAGMA compile_options"), this +** logic is partially replicated in ctime.c. If it is updated here, it should +** also be updated there. */ #if !defined(SQLITE_THREADSAFE) # if defined(THREADSAFE) @@ -11382,76 +12414,76 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_AS 24 #define TK_WITHOUT 25 #define TK_COMMA 26 -#define TK_OR 27 -#define TK_AND 28 -#define TK_IS 29 -#define TK_MATCH 30 -#define TK_LIKE_KW 31 -#define TK_BETWEEN 32 -#define TK_IN 33 -#define TK_ISNULL 34 -#define TK_NOTNULL 35 -#define TK_NE 36 -#define TK_EQ 37 -#define TK_GT 38 -#define TK_LE 39 -#define TK_LT 40 -#define TK_GE 41 -#define TK_ESCAPE 42 -#define TK_BITAND 43 -#define TK_BITOR 44 -#define TK_LSHIFT 45 -#define TK_RSHIFT 46 -#define TK_PLUS 47 -#define TK_MINUS 48 -#define TK_STAR 49 -#define TK_SLASH 50 -#define TK_REM 51 -#define TK_CONCAT 52 -#define TK_COLLATE 53 -#define TK_BITNOT 54 -#define TK_ID 55 -#define TK_INDEXED 56 -#define TK_ABORT 57 -#define TK_ACTION 58 -#define TK_AFTER 59 -#define TK_ANALYZE 60 -#define TK_ASC 61 -#define TK_ATTACH 62 -#define TK_BEFORE 63 -#define TK_BY 64 -#define TK_CASCADE 65 -#define TK_CAST 66 -#define TK_COLUMNKW 67 -#define TK_CONFLICT 68 -#define TK_DATABASE 69 -#define TK_DESC 70 -#define TK_DETACH 71 -#define TK_EACH 72 -#define TK_FAIL 73 -#define TK_FOR 74 -#define TK_IGNORE 75 -#define TK_INITIALLY 76 -#define TK_INSTEAD 77 -#define TK_NO 78 -#define TK_KEY 79 -#define TK_OF 80 -#define TK_OFFSET 81 -#define TK_PRAGMA 82 -#define TK_RAISE 83 -#define TK_RECURSIVE 84 -#define TK_REPLACE 85 -#define TK_RESTRICT 86 -#define TK_ROW 87 -#define TK_TRIGGER 88 -#define TK_VACUUM 89 -#define TK_VIEW 90 -#define TK_VIRTUAL 91 -#define TK_WITH 92 -#define TK_REINDEX 93 -#define TK_RENAME 94 -#define TK_CTIME_KW 95 -#define TK_ANY 96 +#define TK_ID 27 +#define TK_ABORT 28 +#define TK_ACTION 29 +#define TK_AFTER 30 +#define TK_ANALYZE 31 +#define TK_ASC 32 +#define TK_ATTACH 33 +#define TK_BEFORE 34 +#define TK_BY 35 +#define TK_CASCADE 36 +#define TK_CAST 37 +#define TK_COLUMNKW 38 +#define TK_CONFLICT 39 +#define TK_DATABASE 40 +#define TK_DESC 41 +#define TK_DETACH 42 +#define TK_EACH 43 +#define TK_FAIL 44 +#define TK_FOR 45 +#define TK_IGNORE 46 +#define TK_INITIALLY 47 +#define TK_INSTEAD 48 +#define TK_LIKE_KW 49 +#define TK_MATCH 50 +#define TK_NO 51 +#define TK_KEY 52 +#define TK_OF 53 +#define TK_OFFSET 54 +#define TK_PRAGMA 55 +#define TK_RAISE 56 +#define TK_RECURSIVE 57 +#define TK_REPLACE 58 +#define TK_RESTRICT 59 +#define TK_ROW 60 +#define TK_TRIGGER 61 +#define TK_VACUUM 62 +#define TK_VIEW 63 +#define TK_VIRTUAL 64 +#define TK_WITH 65 +#define TK_REINDEX 66 +#define TK_RENAME 67 +#define TK_CTIME_KW 68 +#define TK_ANY 69 +#define TK_OR 70 +#define TK_AND 71 +#define TK_IS 72 +#define TK_BETWEEN 73 +#define TK_IN 74 +#define TK_ISNULL 75 +#define TK_NOTNULL 76 +#define TK_NE 77 +#define TK_EQ 78 +#define TK_GT 79 +#define TK_LE 80 +#define TK_LT 81 +#define TK_GE 82 +#define TK_ESCAPE 83 +#define TK_BITAND 84 +#define TK_BITOR 85 +#define TK_LSHIFT 86 +#define TK_RSHIFT 87 +#define TK_PLUS 88 +#define TK_MINUS 89 +#define TK_STAR 90 +#define TK_SLASH 91 +#define TK_REM 92 +#define TK_CONCAT 93 +#define TK_COLLATE 94 +#define TK_BITNOT 95 +#define TK_INDEXED 96 #define TK_STRING 97 #define TK_JOIN_KW 98 #define TK_CONSTRAINT 99 @@ -11515,10 +12547,11 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_REGISTER 157 #define TK_VECTOR 158 #define TK_SELECT_COLUMN 159 -#define TK_ASTERISK 160 -#define TK_SPAN 161 -#define TK_SPACE 162 -#define TK_ILLEGAL 163 +#define TK_IF_NULL_ROW 160 +#define TK_ASTERISK 161 +#define TK_SPAN 162 +#define TK_SPACE 163 +#define TK_ILLEGAL 164 /* The token codes above must all fit in 8 bits */ #define TKFLG_MASK 0xff @@ -11535,6 +12568,18 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #include #include +/* +** Use a macro to replace memcpy() if compiled with SQLITE_INLINE_MEMCPY. +** This allows better measurements of where memcpy() is used when running +** cachegrind. But this macro version of memcpy() is very slow so it +** should not be used in production. This is a performance measurement +** hack only. +*/ +#ifdef SQLITE_INLINE_MEMCPY +# define memcpy(D,S,N) {char*xxd=(char*)(D);const char*xxs=(const char*)(S);\ + int xxn=(N);while(xxn-->0)*(xxd++)=*(xxs++);} +#endif + /* ** If compiling for a processor that lacks floating point support, ** substitute integer for floating-point @@ -11591,7 +12636,6 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); */ #ifndef SQLITE_TEMP_STORE # define SQLITE_TEMP_STORE 1 -# define SQLITE_TEMP_STORE_xc 1 /* Exclude from ctime.c */ #endif /* @@ -11619,9 +12663,12 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); ** pagecaches for each database connection. A positive number is the ** number of pages. A negative number N translations means that a buffer ** of -1024*N bytes is allocated and used for as many pages as it will hold. +** +** The default value of "20" was choosen to minimize the run-time of the +** speedtest1 test program with options: --shrink-memory --reprepare */ #ifndef SQLITE_DEFAULT_PCACHE_INITSZ -# define SQLITE_DEFAULT_PCACHE_INITSZ 100 +# define SQLITE_DEFAULT_PCACHE_INITSZ 20 #endif /* @@ -11796,32 +12843,35 @@ typedef INT16_TYPE LogEst; ** ** For best performance, an attempt is made to guess at the byte-order ** using C-preprocessor macros. If that is unsuccessful, or if -** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined +** -DSQLITE_BYTEORDER=0 is set, then byte-order is determined ** at run-time. */ -#if (defined(i386) || defined(__i386__) || defined(_M_IX86) || \ +#ifndef SQLITE_BYTEORDER +# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ - defined(__arm__)) && !defined(SQLITE_RUNTIME_BYTEORDER) -# define SQLITE_BYTEORDER 1234 -# define SQLITE_BIGENDIAN 0 -# define SQLITE_LITTLEENDIAN 1 -# define SQLITE_UTF16NATIVE SQLITE_UTF16LE + defined(__arm__) +# define SQLITE_BYTEORDER 1234 +# elif defined(sparc) || defined(__ppc__) +# define SQLITE_BYTEORDER 4321 +# else +# define SQLITE_BYTEORDER 0 +# endif #endif -#if (defined(sparc) || defined(__ppc__)) \ - && !defined(SQLITE_RUNTIME_BYTEORDER) -# define SQLITE_BYTEORDER 4321 +#if SQLITE_BYTEORDER==4321 # define SQLITE_BIGENDIAN 1 # define SQLITE_LITTLEENDIAN 0 # define SQLITE_UTF16NATIVE SQLITE_UTF16BE -#endif -#if !defined(SQLITE_BYTEORDER) +#elif SQLITE_BYTEORDER==1234 +# define SQLITE_BIGENDIAN 0 +# define SQLITE_LITTLEENDIAN 1 +# define SQLITE_UTF16NATIVE SQLITE_UTF16LE +#else # ifdef SQLITE_AMALGAMATION const int sqlite3one = 1; # else extern const int sqlite3one; # endif -# define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0) # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1) # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE) @@ -11886,7 +12936,6 @@ typedef INT16_TYPE LogEst; # else # define SQLITE_MAX_MMAP_SIZE 0 # endif -# define SQLITE_MAX_MMAP_SIZE_xc 1 /* exclude from ctime.c */ #endif /* @@ -11896,7 +12945,6 @@ typedef INT16_TYPE LogEst; */ #ifndef SQLITE_DEFAULT_MMAP_SIZE # define SQLITE_DEFAULT_MMAP_SIZE 0 -# define SQLITE_DEFAULT_MMAP_SIZE_xc 1 /* Exclude from ctime.c */ #endif #if SQLITE_DEFAULT_MMAP_SIZE>SQLITE_MAX_MMAP_SIZE # undef SQLITE_DEFAULT_MMAP_SIZE @@ -12344,9 +13392,10 @@ SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*); SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor*, int*); SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*, u8 flags); -/* Allowed flags for the 2nd argument to sqlite3BtreeDelete() */ +/* Allowed flags for sqlite3BtreeDelete() and sqlite3BtreeInsert() */ #define BTREE_SAVEPOSITION 0x02 /* Leave cursor pointing at NEXT or PREV */ #define BTREE_AUXDELETE 0x04 /* not the primary delete operation */ +#define BTREE_APPEND 0x08 /* Insert is likely an append */ /* An instance of the BtreePayload object describes the content of a single ** entry in either an index or table btree. @@ -12370,19 +13419,19 @@ struct BtreePayload { const void *pKey; /* Key content for indexes. NULL for tables */ sqlite3_int64 nKey; /* Size of pKey for indexes. PRIMARY KEY for tabs */ const void *pData; /* Data for tables. NULL for indexes */ - struct Mem *aMem; /* First of nMem value in the unpacked pKey */ + sqlite3_value *aMem; /* First of nMem value in the unpacked pKey */ u16 nMem; /* Number of aMem[] value. Might be zero */ int nData; /* Size of pData. 0 if none. */ int nZero; /* Extra zero data appended after pData,nData */ }; SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload, - int bias, int seekResult); + int flags, int seekResult); SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes); SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes); -SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes); +SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); -SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes); +SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int flags); SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor*); SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor*, u32 *pAmt); @@ -12390,6 +13439,7 @@ SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor*); SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*); SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*); +SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor*); #ifndef SQLITE_OMIT_INCRBLOB SQLITE_PRIVATE int sqlite3BtreePayloadChecked(BtCursor*, u32 offset, u32 amt, void*); @@ -12499,7 +13549,7 @@ typedef struct Vdbe Vdbe; ** The names of the following types declared in vdbeInt.h are required ** for the VdbeOp definition. */ -typedef struct Mem Mem; +typedef struct sqlite3_value Mem; typedef struct SubProgram SubProgram; /* @@ -12510,8 +13560,7 @@ typedef struct SubProgram SubProgram; struct VdbeOp { u8 opcode; /* What operation to perform */ signed char p4type; /* One of the P4_xxx constants for p4 */ - u8 notUsed1; - u8 p5; /* Fifth parameter is an unsigned character */ + u16 p5; /* Fifth parameter is an unsigned 16-bit integer */ int p1; /* First operand */ int p2; /* Second parameter (often the jump destination) */ int p3; /* The third parameter */ @@ -12533,7 +13582,7 @@ struct VdbeOp { #ifdef SQLITE_ENABLE_CURSOR_HINTS Expr *pExpr; /* Used when p4type is P4_EXPR */ #endif - int (*xAdvance)(BtCursor *, int *); + int (*xAdvance)(BtCursor *, int); } p4; #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS char *zComment; /* Comment to improve readability */ @@ -12557,6 +13606,7 @@ struct SubProgram { int nOp; /* Elements in aOp[] */ int nMem; /* Number of memory cells required */ int nCsr; /* Number of cursors required */ + u8 *aOnce; /* Array of OP_Once flags */ void *token; /* id that may be used to recursive triggers */ SubProgram *pNext; /* Next sub-program already visited */ }; @@ -12576,24 +13626,26 @@ typedef struct VdbeOpList VdbeOpList; /* ** Allowed values of VdbeOp.p4type */ -#define P4_NOTUSED 0 /* The P4 parameter is not used */ -#define P4_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */ -#define P4_STATIC (-2) /* Pointer to a static string */ -#define P4_COLLSEQ (-3) /* P4 is a pointer to a CollSeq structure */ -#define P4_FUNCDEF (-4) /* P4 is a pointer to a FuncDef structure */ -#define P4_KEYINFO (-5) /* P4 is a pointer to a KeyInfo structure */ -#define P4_EXPR (-6) /* P4 is a pointer to an Expr tree */ -#define P4_MEM (-7) /* P4 is a pointer to a Mem* structure */ -#define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */ -#define P4_VTAB (-8) /* P4 is a pointer to an sqlite3_vtab structure */ -#define P4_REAL (-9) /* P4 is a 64-bit floating point value */ -#define P4_INT64 (-10) /* P4 is a 64-bit signed integer */ -#define P4_INT32 (-11) /* P4 is a 32-bit signed integer */ -#define P4_INTARRAY (-12) /* P4 is a vector of 32-bit integers */ -#define P4_SUBPROGRAM (-13) /* P4 is a pointer to a SubProgram structure */ -#define P4_ADVANCE (-14) /* P4 is a pointer to BtreeNext() or BtreePrev() */ -#define P4_TABLE (-15) /* P4 is a pointer to a Table structure */ -#define P4_FUNCCTX (-16) /* P4 is a pointer to an sqlite3_context object */ +#define P4_NOTUSED 0 /* The P4 parameter is not used */ +#define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */ +#define P4_STATIC (-1) /* Pointer to a static string */ +#define P4_COLLSEQ (-2) /* P4 is a pointer to a CollSeq structure */ +#define P4_INT32 (-3) /* P4 is a 32-bit signed integer */ +#define P4_SUBPROGRAM (-4) /* P4 is a pointer to a SubProgram structure */ +#define P4_ADVANCE (-5) /* P4 is a pointer to BtreeNext() or BtreePrev() */ +#define P4_TABLE (-6) /* P4 is a pointer to a Table structure */ +/* Above do not own any resources. Must free those below */ +#define P4_FREE_IF_LE (-7) +#define P4_DYNAMIC (-7) /* Pointer to memory from sqliteMalloc() */ +#define P4_FUNCDEF (-8) /* P4 is a pointer to a FuncDef structure */ +#define P4_KEYINFO (-9) /* P4 is a pointer to a KeyInfo structure */ +#define P4_EXPR (-10) /* P4 is a pointer to an Expr tree */ +#define P4_MEM (-11) /* P4 is a pointer to a Mem* structure */ +#define P4_VTAB (-12) /* P4 is a pointer to an sqlite3_vtab structure */ +#define P4_REAL (-13) /* P4 is a 64-bit floating point value */ +#define P4_INT64 (-14) /* P4 is a 64-bit signed integer */ +#define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */ +#define P4_FUNCCTX (-16) /* P4 is a pointer to an sqlite3_context object */ /* Error message codes for OP_Halt */ #define P5_ConstraintNotNull 1 @@ -12659,79 +13711,79 @@ typedef struct VdbeOpList VdbeOpList; #define OP_Once 20 #define OP_If 21 #define OP_IfNot 22 -#define OP_SeekLT 23 /* synopsis: key=r[P3@P4] */ -#define OP_SeekLE 24 /* synopsis: key=r[P3@P4] */ -#define OP_SeekGE 25 /* synopsis: key=r[P3@P4] */ -#define OP_SeekGT 26 /* synopsis: key=r[P3@P4] */ -#define OP_Or 27 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ -#define OP_And 28 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ -#define OP_NoConflict 29 /* synopsis: key=r[P3@P4] */ -#define OP_NotFound 30 /* synopsis: key=r[P3@P4] */ -#define OP_Found 31 /* synopsis: key=r[P3@P4] */ -#define OP_SeekRowid 32 /* synopsis: intkey=r[P3] */ -#define OP_NotExists 33 /* synopsis: intkey=r[P3] */ -#define OP_IsNull 34 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ -#define OP_NotNull 35 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ -#define OP_Ne 36 /* same as TK_NE, synopsis: IF r[P3]!=r[P1] */ -#define OP_Eq 37 /* same as TK_EQ, synopsis: IF r[P3]==r[P1] */ -#define OP_Gt 38 /* same as TK_GT, synopsis: IF r[P3]>r[P1] */ -#define OP_Le 39 /* same as TK_LE, synopsis: IF r[P3]<=r[P1] */ -#define OP_Lt 40 /* same as TK_LT, synopsis: IF r[P3]=r[P1] */ -#define OP_ElseNotEq 42 /* same as TK_ESCAPE */ -#define OP_BitAnd 43 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ -#define OP_BitOr 44 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ -#define OP_ShiftLeft 45 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<>r[P1] */ -#define OP_Add 47 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */ -#define OP_Subtract 48 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */ -#define OP_Multiply 49 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */ -#define OP_Divide 50 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */ -#define OP_Remainder 51 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */ -#define OP_Concat 52 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ -#define OP_Last 53 -#define OP_BitNot 54 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */ -#define OP_SorterSort 55 -#define OP_Sort 56 -#define OP_Rewind 57 -#define OP_IdxLE 58 /* synopsis: key=r[P3@P4] */ -#define OP_IdxGT 59 /* synopsis: key=r[P3@P4] */ -#define OP_IdxLT 60 /* synopsis: key=r[P3@P4] */ -#define OP_IdxGE 61 /* synopsis: key=r[P3@P4] */ -#define OP_RowSetRead 62 /* synopsis: r[P3]=rowset(P1) */ -#define OP_RowSetTest 63 /* synopsis: if r[P3] in rowset(P1) goto P2 */ -#define OP_Program 64 -#define OP_FkIfZero 65 /* synopsis: if fkctr[P1]==0 goto P2 */ -#define OP_IfPos 66 /* synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ -#define OP_IfNotZero 67 /* synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ -#define OP_DecrJumpZero 68 /* synopsis: if (--r[P1])==0 goto P2 */ -#define OP_IncrVacuum 69 -#define OP_VNext 70 -#define OP_Init 71 /* synopsis: Start at P2 */ -#define OP_Return 72 -#define OP_EndCoroutine 73 -#define OP_HaltIfNull 74 /* synopsis: if r[P3]=null halt */ -#define OP_Halt 75 -#define OP_Integer 76 /* synopsis: r[P2]=P1 */ -#define OP_Int64 77 /* synopsis: r[P2]=P4 */ -#define OP_String 78 /* synopsis: r[P2]='P4' (len=P1) */ -#define OP_Null 79 /* synopsis: r[P2..P3]=NULL */ -#define OP_SoftNull 80 /* synopsis: r[P1]=NULL */ -#define OP_Blob 81 /* synopsis: r[P2]=P4 (len=P1) */ -#define OP_Variable 82 /* synopsis: r[P2]=parameter(P1,P4) */ -#define OP_Move 83 /* synopsis: r[P2@P3]=r[P1@P3] */ -#define OP_Copy 84 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ -#define OP_SCopy 85 /* synopsis: r[P2]=r[P1] */ -#define OP_IntCopy 86 /* synopsis: r[P2]=r[P1] */ -#define OP_ResultRow 87 /* synopsis: output=r[P1@P2] */ -#define OP_CollSeq 88 -#define OP_Function0 89 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_Function 90 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_AddImm 91 /* synopsis: r[P1]=r[P1]+P2 */ -#define OP_RealAffinity 92 -#define OP_Cast 93 /* synopsis: affinity(r[P1]) */ -#define OP_Permutation 94 -#define OP_Compare 95 /* synopsis: r[P1@P3] <-> r[P2@P3] */ +#define OP_IfNullRow 23 /* synopsis: if P1.nullRow then r[P3]=NULL, goto P2 */ +#define OP_SeekLT 24 /* synopsis: key=r[P3@P4] */ +#define OP_SeekLE 25 /* synopsis: key=r[P3@P4] */ +#define OP_SeekGE 26 /* synopsis: key=r[P3@P4] */ +#define OP_SeekGT 27 /* synopsis: key=r[P3@P4] */ +#define OP_NoConflict 28 /* synopsis: key=r[P3@P4] */ +#define OP_NotFound 29 /* synopsis: key=r[P3@P4] */ +#define OP_Found 30 /* synopsis: key=r[P3@P4] */ +#define OP_SeekRowid 31 /* synopsis: intkey=r[P3] */ +#define OP_NotExists 32 /* synopsis: intkey=r[P3] */ +#define OP_Last 33 +#define OP_IfSmaller 34 +#define OP_SorterSort 35 +#define OP_Sort 36 +#define OP_Rewind 37 +#define OP_IdxLE 38 /* synopsis: key=r[P3@P4] */ +#define OP_IdxGT 39 /* synopsis: key=r[P3@P4] */ +#define OP_IdxLT 40 /* synopsis: key=r[P3@P4] */ +#define OP_IdxGE 41 /* synopsis: key=r[P3@P4] */ +#define OP_RowSetRead 42 /* synopsis: r[P3]=rowset(P1) */ +#define OP_RowSetTest 43 /* synopsis: if r[P3] in rowset(P1) goto P2 */ +#define OP_Program 44 +#define OP_FkIfZero 45 /* synopsis: if fkctr[P1]==0 goto P2 */ +#define OP_IfPos 46 /* synopsis: if r[P1]>0 then r[P1]-=P3, goto P2 */ +#define OP_IfNotZero 47 /* synopsis: if r[P1]!=0 then r[P1]--, goto P2 */ +#define OP_DecrJumpZero 48 /* synopsis: if (--r[P1])==0 goto P2 */ +#define OP_IncrVacuum 49 +#define OP_VNext 50 +#define OP_Init 51 /* synopsis: Start at P2 */ +#define OP_Return 52 +#define OP_EndCoroutine 53 +#define OP_HaltIfNull 54 /* synopsis: if r[P3]=null halt */ +#define OP_Halt 55 +#define OP_Integer 56 /* synopsis: r[P2]=P1 */ +#define OP_Int64 57 /* synopsis: r[P2]=P4 */ +#define OP_String 58 /* synopsis: r[P2]='P4' (len=P1) */ +#define OP_Null 59 /* synopsis: r[P2..P3]=NULL */ +#define OP_SoftNull 60 /* synopsis: r[P1]=NULL */ +#define OP_Blob 61 /* synopsis: r[P2]=P4 (len=P1) */ +#define OP_Variable 62 /* synopsis: r[P2]=parameter(P1,P4) */ +#define OP_Move 63 /* synopsis: r[P2@P3]=r[P1@P3] */ +#define OP_Copy 64 /* synopsis: r[P2@P3+1]=r[P1@P3+1] */ +#define OP_SCopy 65 /* synopsis: r[P2]=r[P1] */ +#define OP_IntCopy 66 /* synopsis: r[P2]=r[P1] */ +#define OP_ResultRow 67 /* synopsis: output=r[P1@P2] */ +#define OP_CollSeq 68 +#define OP_AddImm 69 /* synopsis: r[P1]=r[P1]+P2 */ +#define OP_Or 70 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */ +#define OP_And 71 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */ +#define OP_RealAffinity 72 +#define OP_Cast 73 /* synopsis: affinity(r[P1]) */ +#define OP_Permutation 74 +#define OP_IsNull 75 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */ +#define OP_NotNull 76 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */ +#define OP_Ne 77 /* same as TK_NE, synopsis: IF r[P3]!=r[P1] */ +#define OP_Eq 78 /* same as TK_EQ, synopsis: IF r[P3]==r[P1] */ +#define OP_Gt 79 /* same as TK_GT, synopsis: IF r[P3]>r[P1] */ +#define OP_Le 80 /* same as TK_LE, synopsis: IF r[P3]<=r[P1] */ +#define OP_Lt 81 /* same as TK_LT, synopsis: IF r[P3]=r[P1] */ +#define OP_ElseNotEq 83 /* same as TK_ESCAPE */ +#define OP_BitAnd 84 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */ +#define OP_BitOr 85 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */ +#define OP_ShiftLeft 86 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<>r[P1] */ +#define OP_Add 88 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */ +#define OP_Subtract 89 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */ +#define OP_Multiply 90 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */ +#define OP_Divide 91 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */ +#define OP_Remainder 92 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */ +#define OP_Concat 93 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ +#define OP_Compare 94 /* synopsis: r[P1@P3] <-> r[P2@P3] */ +#define OP_BitNot 95 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */ #define OP_Column 96 /* synopsis: r[P3]=PX */ #define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */ #define OP_Affinity 98 /* synopsis: affinity(r[P1@P2]) */ @@ -12742,62 +13794,68 @@ typedef struct VdbeOpList VdbeOpList; #define OP_ReopenIdx 103 /* synopsis: root=P2 iDb=P3 */ #define OP_OpenRead 104 /* synopsis: root=P2 iDb=P3 */ #define OP_OpenWrite 105 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenAutoindex 106 /* synopsis: nColumn=P2 */ -#define OP_OpenEphemeral 107 /* synopsis: nColumn=P2 */ -#define OP_SorterOpen 108 -#define OP_SequenceTest 109 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ -#define OP_OpenPseudo 110 /* synopsis: P3 columns in r[P2] */ -#define OP_Close 111 -#define OP_ColumnsUsed 112 -#define OP_Sequence 113 /* synopsis: r[P2]=cursor[P1].ctr++ */ -#define OP_NewRowid 114 /* synopsis: r[P2]=rowid */ -#define OP_Insert 115 /* synopsis: intkey=r[P3] data=r[P2] */ -#define OP_InsertInt 116 /* synopsis: intkey=P3 data=r[P2] */ -#define OP_Delete 117 -#define OP_ResetCount 118 -#define OP_SorterCompare 119 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ -#define OP_SorterData 120 /* synopsis: r[P2]=data */ -#define OP_RowData 121 /* synopsis: r[P2]=data */ -#define OP_Rowid 122 /* synopsis: r[P2]=rowid */ -#define OP_NullRow 123 -#define OP_SorterInsert 124 /* synopsis: key=r[P2] */ -#define OP_IdxInsert 125 /* synopsis: key=r[P2] */ -#define OP_IdxDelete 126 /* synopsis: key=r[P2@P3] */ -#define OP_Seek 127 /* synopsis: Move P3 to P1.rowid */ -#define OP_IdxRowid 128 /* synopsis: r[P2]=rowid */ -#define OP_Destroy 129 -#define OP_Clear 130 -#define OP_ResetSorter 131 +#define OP_OpenDup 106 +#define OP_OpenAutoindex 107 /* synopsis: nColumn=P2 */ +#define OP_OpenEphemeral 108 /* synopsis: nColumn=P2 */ +#define OP_SorterOpen 109 +#define OP_SequenceTest 110 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ +#define OP_OpenPseudo 111 /* synopsis: P3 columns in r[P2] */ +#define OP_Close 112 +#define OP_ColumnsUsed 113 +#define OP_Sequence 114 /* synopsis: r[P2]=cursor[P1].ctr++ */ +#define OP_NewRowid 115 /* synopsis: r[P2]=rowid */ +#define OP_Insert 116 /* synopsis: intkey=r[P3] data=r[P2] */ +#define OP_InsertInt 117 /* synopsis: intkey=P3 data=r[P2] */ +#define OP_Delete 118 +#define OP_ResetCount 119 +#define OP_SorterCompare 120 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ +#define OP_SorterData 121 /* synopsis: r[P2]=data */ +#define OP_RowData 122 /* synopsis: r[P2]=data */ +#define OP_Rowid 123 /* synopsis: r[P2]=rowid */ +#define OP_NullRow 124 +#define OP_SorterInsert 125 /* synopsis: key=r[P2] */ +#define OP_IdxInsert 126 /* synopsis: key=r[P2] */ +#define OP_IdxDelete 127 /* synopsis: key=r[P2@P3] */ +#define OP_DeferredSeek 128 /* synopsis: Move P3 to P1.rowid if needed */ +#define OP_IdxRowid 129 /* synopsis: r[P2]=rowid */ +#define OP_Destroy 130 +#define OP_Clear 131 #define OP_Real 132 /* same as TK_FLOAT, synopsis: r[P2]=P4 */ -#define OP_CreateIndex 133 /* synopsis: r[P2]=root iDb=P1 */ -#define OP_CreateTable 134 /* synopsis: r[P2]=root iDb=P1 */ -#define OP_ParseSchema 135 -#define OP_LoadAnalysis 136 -#define OP_DropTable 137 -#define OP_DropIndex 138 -#define OP_DropTrigger 139 -#define OP_IntegrityCk 140 -#define OP_RowSetAdd 141 /* synopsis: rowset(P1)=r[P2] */ -#define OP_Param 142 -#define OP_FkCounter 143 /* synopsis: fkctr[P1]+=P2 */ -#define OP_MemMax 144 /* synopsis: r[P1]=max(r[P1],r[P2]) */ -#define OP_OffsetLimit 145 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ -#define OP_AggStep0 146 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggStep 147 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggFinal 148 /* synopsis: accum=r[P1] N=P2 */ -#define OP_Expire 149 -#define OP_TableLock 150 /* synopsis: iDb=P1 root=P2 write=P3 */ -#define OP_VBegin 151 -#define OP_VCreate 152 -#define OP_VDestroy 153 -#define OP_VOpen 154 -#define OP_VColumn 155 /* synopsis: r[P3]=vcolumn(P2) */ -#define OP_VRename 156 -#define OP_Pagecount 157 -#define OP_MaxPgcnt 158 -#define OP_CursorHint 159 -#define OP_Noop 160 -#define OP_Explain 161 +#define OP_ResetSorter 133 +#define OP_CreateIndex 134 /* synopsis: r[P2]=root iDb=P1 */ +#define OP_CreateTable 135 /* synopsis: r[P2]=root iDb=P1 */ +#define OP_SqlExec 136 +#define OP_ParseSchema 137 +#define OP_LoadAnalysis 138 +#define OP_DropTable 139 +#define OP_DropIndex 140 +#define OP_DropTrigger 141 +#define OP_IntegrityCk 142 +#define OP_RowSetAdd 143 /* synopsis: rowset(P1)=r[P2] */ +#define OP_Param 144 +#define OP_FkCounter 145 /* synopsis: fkctr[P1]+=P2 */ +#define OP_MemMax 146 /* synopsis: r[P1]=max(r[P1],r[P2]) */ +#define OP_OffsetLimit 147 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ +#define OP_AggStep0 148 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggStep 149 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggFinal 150 /* synopsis: accum=r[P1] N=P2 */ +#define OP_Expire 151 +#define OP_TableLock 152 /* synopsis: iDb=P1 root=P2 write=P3 */ +#define OP_VBegin 153 +#define OP_VCreate 154 +#define OP_VDestroy 155 +#define OP_VOpen 156 +#define OP_VColumn 157 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VRename 158 +#define OP_Pagecount 159 +#define OP_MaxPgcnt 160 +#define OP_PureFunc0 161 +#define OP_Function0 162 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_PureFunc 163 +#define OP_Function 164 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_CursorHint 165 +#define OP_Noop 166 +#define OP_Explain 167 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c @@ -12812,25 +13870,26 @@ typedef struct VdbeOpList VdbeOpList; #define OPFLG_INITIALIZER {\ /* 0 */ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,\ /* 8 */ 0x00, 0x10, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01,\ -/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x03, 0x03, 0x09,\ -/* 24 */ 0x09, 0x09, 0x09, 0x26, 0x26, 0x09, 0x09, 0x09,\ -/* 32 */ 0x09, 0x09, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ -/* 40 */ 0x0b, 0x0b, 0x01, 0x26, 0x26, 0x26, 0x26, 0x26,\ -/* 48 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x01, 0x12, 0x01,\ -/* 56 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x23, 0x0b,\ -/* 64 */ 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01,\ -/* 72 */ 0x02, 0x02, 0x08, 0x00, 0x10, 0x10, 0x10, 0x10,\ -/* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,\ -/* 88 */ 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,\ +/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x03, 0x03, 0x01,\ +/* 24 */ 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\ +/* 32 */ 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ +/* 40 */ 0x01, 0x01, 0x23, 0x0b, 0x01, 0x01, 0x03, 0x03,\ +/* 48 */ 0x03, 0x01, 0x01, 0x01, 0x02, 0x02, 0x08, 0x00,\ +/* 56 */ 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00,\ +/* 64 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x02, 0x26, 0x26,\ +/* 72 */ 0x02, 0x02, 0x00, 0x03, 0x03, 0x0b, 0x0b, 0x0b,\ +/* 80 */ 0x0b, 0x0b, 0x0b, 0x01, 0x26, 0x26, 0x26, 0x26,\ +/* 88 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\ /* 96 */ 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ /* 104 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 112 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 120 */ 0x00, 0x00, 0x10, 0x00, 0x04, 0x04, 0x00, 0x00,\ -/* 128 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00,\ -/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x00,\ -/* 144 */ 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,\ -/* 160 */ 0x00, 0x00,} +/* 112 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,\ +/* 120 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x04, 0x04, 0x00,\ +/* 128 */ 0x00, 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10,\ +/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,\ +/* 144 */ 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00,\ +/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\ +/* 160 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +} /* The sqlite3P2Values() routine is able to run faster if it knows ** the value of the largest JUMP opcode. The smaller the maximum @@ -12838,11 +13897,17 @@ typedef struct VdbeOpList VdbeOpList; ** generated this include file strives to group all JUMP opcodes ** together near the beginning of the list. */ -#define SQLITE_MX_JUMP_OPCODE 71 /* Maximum JUMP opcode */ +#define SQLITE_MX_JUMP_OPCODE 83 /* Maximum JUMP opcode */ /************** End of opcodes.h *********************************************/ /************** Continuing where we left off in vdbe.h ***********************/ +/* +** Additional non-public SQLITE_PREPARE_* flags +*/ +#define SQLITE_PREPARE_SAVESQL 0x80 /* Preserve SQL text */ +#define SQLITE_PREPARE_MASK 0x0f /* Mask of public flags */ + /* ** Prototypes for the VDBE interface. See comments on the implementation ** for a description of what each of these routines does. @@ -12861,8 +13926,10 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int); SQLITE_PRIVATE void sqlite3VdbeEndCoroutine(Vdbe*,int); #if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS) SQLITE_PRIVATE void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N); +SQLITE_PRIVATE void sqlite3VdbeVerifyNoResultRow(Vdbe *p); #else # define sqlite3VdbeVerifyNoMallocRequired(A,B) +# define sqlite3VdbeVerifyNoResultRow(A) #endif SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp, int iLineno); SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*); @@ -12870,7 +13937,7 @@ SQLITE_PRIVATE void sqlite3VdbeChangeOpcode(Vdbe*, u32 addr, u8); SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1); SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2); SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3); -SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5); +SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u16 P5); SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr); SQLITE_PRIVATE int sqlite3VdbeChangeToNoop(Vdbe*, int addr); SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe*, u8 op); @@ -12898,7 +13965,8 @@ SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int); SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*)); SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*); SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*); -SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int); +SQLITE_PRIVATE u8 sqlite3VdbePrepareFlags(Vdbe*); +SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, u8); SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*); SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*); SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe*, int, u8); @@ -12920,6 +13988,8 @@ SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*); SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *); #endif +SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context*); + /* Use SQLITE_ENABLE_COMMENTS to enable generation of extra comments on ** each VDBE opcode. ** @@ -13172,14 +14242,16 @@ SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager); SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen); SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager, sqlite3*); -SQLITE_PRIVATE int sqlite3PagerUseWal(Pager *pPager); +# ifdef SQLITE_DIRECT_OVERFLOW_READ +SQLITE_PRIVATE int sqlite3PagerUseWal(Pager *pPager, Pgno); +# endif # ifdef SQLITE_ENABLE_SNAPSHOT SQLITE_PRIVATE int sqlite3PagerSnapshotGet(Pager *pPager, sqlite3_snapshot **ppSnapshot); SQLITE_PRIVATE int sqlite3PagerSnapshotOpen(Pager *pPager, sqlite3_snapshot *pSnapshot); SQLITE_PRIVATE int sqlite3PagerSnapshotRecover(Pager *pPager); # endif #else -# define sqlite3PagerUseWal(x) 0 +# define sqlite3PagerUseWal(x,y) 0 #endif #ifdef SQLITE_ENABLE_ZIPVFS @@ -13262,6 +14334,7 @@ struct PgHdr { sqlite3_pcache_page *pPage; /* Pcache object page handle */ void *pData; /* Page data */ void *pExtra; /* Extra content */ + PCache *pCache; /* PRIVATE: Cache that owns this page */ PgHdr *pDirty; /* Transient list of dirty sorted by pgno */ Pager *pPager; /* The pager this page is part of */ Pgno pgno; /* Page number for this page */ @@ -13271,12 +14344,11 @@ struct PgHdr { u16 flags; /* PGHDR flags defined below */ /********************************************************************** - ** Elements above are public. All that follows is private to pcache.c - ** and should not be accessed by other modules. + ** Elements above, except pCache, are public. All that follow are + ** private to pcache.c and should not be accessed by other modules. + ** pCache is grouped with the public elements for efficiency. */ i16 nRef; /* Number of users of this page */ - PCache *pCache; /* Cache that owns this page */ - PgHdr *pDirtyNext; /* Next element in list of dirty pages */ PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */ }; @@ -13798,7 +14870,7 @@ SQLITE_PRIVATE void sqlite3OsCloseFree(sqlite3_file *); ** and the one-based values are used internally. */ #ifndef SQLITE_DEFAULT_SYNCHRONOUS -# define SQLITE_DEFAULT_SYNCHRONOUS (PAGER_SYNCHRONOUS_FULL-1) +# define SQLITE_DEFAULT_SYNCHRONOUS 2 #endif #ifndef SQLITE_DEFAULT_WAL_SYNCHRONOUS # define SQLITE_DEFAULT_WAL_SYNCHRONOUS SQLITE_DEFAULT_SYNCHRONOUS @@ -14003,6 +15075,8 @@ struct sqlite3 { u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */ u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */ u8 mTrace; /* zero or more SQLITE_TRACE flags */ + u8 skipBtreeMutex; /* True if no shared-cache backends */ + u8 nSqlExec; /* Number of pending OP_SqlExec opcodes */ int nextPagesize; /* Pagesize after VACUUM if >0 */ u32 magic; /* Magic number for detect library misuse */ int nChange; /* Value returned by sqlite3_changes() */ @@ -14116,8 +15190,8 @@ struct sqlite3 { ** SQLITE_CkptFullFSync == PAGER_CKPT_FULLFSYNC ** SQLITE_CacheSpill == PAGER_CACHE_SPILL */ -#define SQLITE_VdbeTrace 0x00000001 /* True to trace VDBE execution */ -#define SQLITE_InternChanges 0x00000002 /* Uncommitted Hash table changes */ +#define SQLITE_WriteSchema 0x00000001 /* OK to update SQLITE_MASTER */ +#define SQLITE_LegacyFileFmt 0x00000002 /* Create new databases in format 1 */ #define SQLITE_FullColNames 0x00000004 /* Show full column names on SELECT */ #define SQLITE_FullFSync 0x00000008 /* Use full fsync on the backend */ #define SQLITE_CkptFullFSync 0x00000010 /* Use full fsync for checkpoint */ @@ -14128,29 +15202,34 @@ struct sqlite3 { /* the count using a callback. */ #define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */ /* result set is empty */ -#define SQLITE_SqlTrace 0x00000200 /* Debug print SQL as it executes */ -#define SQLITE_VdbeListing 0x00000400 /* Debug listings of VDBE programs */ -#define SQLITE_WriteSchema 0x00000800 /* OK to update SQLITE_MASTER */ -#define SQLITE_VdbeAddopTrace 0x00001000 /* Trace sqlite3VdbeAddOp() calls */ -#define SQLITE_IgnoreChecks 0x00002000 /* Do not enforce check constraints */ -#define SQLITE_ReadUncommitted 0x0004000 /* For shared-cache mode */ -#define SQLITE_LegacyFileFmt 0x00008000 /* Create new databases in format 1 */ -#define SQLITE_RecoveryMode 0x00010000 /* Ignore schema errors */ -#define SQLITE_ReverseOrder 0x00020000 /* Reverse unordered SELECTs */ -#define SQLITE_RecTriggers 0x00040000 /* Enable recursive triggers */ -#define SQLITE_ForeignKeys 0x00080000 /* Enforce foreign key constraints */ -#define SQLITE_AutoIndex 0x00100000 /* Enable automatic indexes */ -#define SQLITE_PreferBuiltin 0x00200000 /* Preference to built-in funcs */ -#define SQLITE_LoadExtension 0x00400000 /* Enable load_extension */ -#define SQLITE_LoadExtFunc 0x00800000 /* Enable load_extension() SQL func */ -#define SQLITE_EnableTrigger 0x01000000 /* True to enable triggers */ -#define SQLITE_DeferFKs 0x02000000 /* Defer all FK constraints */ -#define SQLITE_QueryOnly 0x04000000 /* Disable database changes */ -#define SQLITE_VdbeEQP 0x08000000 /* Debug EXPLAIN QUERY PLAN */ -#define SQLITE_Vacuum 0x10000000 /* Currently in a VACUUM */ -#define SQLITE_CellSizeCk 0x20000000 /* Check btree cell sizes on load */ -#define SQLITE_Fts3Tokenizer 0x40000000 /* Enable fts3_tokenizer(2) */ -#define SQLITE_NoCkptOnClose 0x80000000 /* No checkpoint on close()/DETACH */ +#define SQLITE_IgnoreChecks 0x00000200 /* Do not enforce check constraints */ +#define SQLITE_ReadUncommit 0x00000400 /* READ UNCOMMITTED in shared-cache */ +#define SQLITE_NoCkptOnClose 0x00000800 /* No checkpoint on close()/DETACH */ +#define SQLITE_ReverseOrder 0x00001000 /* Reverse unordered SELECTs */ +#define SQLITE_RecTriggers 0x00002000 /* Enable recursive triggers */ +#define SQLITE_ForeignKeys 0x00004000 /* Enforce foreign key constraints */ +#define SQLITE_AutoIndex 0x00008000 /* Enable automatic indexes */ +#define SQLITE_LoadExtension 0x00010000 /* Enable load_extension */ +#define SQLITE_EnableTrigger 0x00020000 /* True to enable triggers */ +#define SQLITE_DeferFKs 0x00040000 /* Defer all FK constraints */ +#define SQLITE_QueryOnly 0x00080000 /* Disable database changes */ +#define SQLITE_CellSizeCk 0x00100000 /* Check btree cell sizes on load */ +#define SQLITE_Fts3Tokenizer 0x00200000 /* Enable fts3_tokenizer(2) */ +#define SQLITE_EnableQPSG 0x00400000 /* Query Planner Stability Guarantee */ +/* The next four values are not used by PRAGMAs or by sqlite3_dbconfig() and +** could be factored out into a separate bit vector of the sqlite3 object. */ +#define SQLITE_InternChanges 0x00800000 /* Uncommitted Hash table changes */ +#define SQLITE_LoadExtFunc 0x01000000 /* Enable load_extension() SQL func */ +#define SQLITE_PreferBuiltin 0x02000000 /* Preference to built-in funcs */ +#define SQLITE_Vacuum 0x04000000 /* Currently in a VACUUM */ +/* Flags used only if debugging */ +#ifdef SQLITE_DEBUG +#define SQLITE_SqlTrace 0x08000000 /* Debug print SQL as it executes */ +#define SQLITE_VdbeListing 0x10000000 /* Debug listings of VDBE programs */ +#define SQLITE_VdbeTrace 0x20000000 /* True to trace VDBE execution */ +#define SQLITE_VdbeAddopTrace 0x40000000 /* Trace sqlite3VdbeAddOp() calls */ +#define SQLITE_VdbeEQP 0x80000000 /* Debug EXPLAIN QUERY PLAN */ +#endif /* @@ -14170,6 +15249,7 @@ struct sqlite3 { #define SQLITE_Transitive 0x0200 /* Transitive constraints */ #define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */ #define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */ +#define SQLITE_CountOfView 0x1000 /* The count-of-view optimization */ #define SQLITE_CursorHints 0x2000 /* Add OP_CursorHint opcodes */ #define SQLITE_AllOpts 0xffff /* All optimizations */ @@ -14268,6 +15348,7 @@ struct FuncDestructor { #define SQLITE_FUNC_MINMAX 0x1000 /* True for min() and max() aggregates */ #define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a ** single query - might change over time */ +#define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -14287,7 +15368,14 @@ struct FuncDestructor { ** Like FUNCTION except it omits the SQLITE_FUNC_CONSTANT flag and ** adds the SQLITE_FUNC_SLOCHNG flag. Used for date & time functions ** and functions like sqlite_version() that can change, but not during -** a single query. +** a single query. The iArg is ignored. The user-data is always set +** to a NULL pointer. The bNC parameter is not used. +** +** PURE_DATE(zName, nArg, iArg, bNC, xFunc) +** Used for "pure" date/time functions, this macro is like DFUNCTION +** except that it does set the SQLITE_FUNC_CONSTANT flags. iArg is +** ignored and the user-data for these functions is set to an +** arbitrary non-NULL pointer. The bNC parameter is not used. ** ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal) ** Used to create an aggregate function definition implemented by @@ -14310,8 +15398,11 @@ struct FuncDestructor { {nArg, SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } #define DFUNCTION(zName, nArg, iArg, bNC, xFunc) \ - {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL), \ - SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } + {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8, \ + 0, 0, xFunc, 0, #zName, {0} } +#define PURE_DATE(zName, nArg, iArg, bNC, xFunc) \ + {nArg, SQLITE_FUNC_SLOCHNG|SQLITE_UTF8|SQLITE_FUNC_CONSTANT, \ + (void*)&sqlite3Config, 0, xFunc, 0, #zName, {0} } #define FUNCTION2(zName, nArg, iArg, bNC, xFunc, extraFlags) \ {nArg,SQLITE_FUNC_CONSTANT|SQLITE_UTF8|(bNC*SQLITE_FUNC_NEEDCOLL)|extraFlags,\ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, #zName, {0} } @@ -14517,6 +15608,7 @@ struct Table { /* ... also used as column name list in a VIEW */ int tnum; /* Root BTree page for this table */ u32 nTabRef; /* Number of pointers to this Table */ + u32 tabFlags; /* Mask of TF_* values */ i16 iPKey; /* If not negative, use aCol[iPKey] as the rowid */ i16 nCol; /* Number of columns in this table */ LogEst nRowLogEst; /* Estimated rows in table - from sqlite_stat1 table */ @@ -14524,7 +15616,6 @@ struct Table { #ifdef SQLITE_ENABLE_COSTMULT LogEst costMult; /* Cost multiplier for using this table */ #endif - u8 tabFlags; /* Mask of TF_* values */ u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */ #ifndef SQLITE_OMIT_ALTERTABLE int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */ @@ -14548,15 +15639,17 @@ struct Table { ** the TF_OOOHidden attribute would apply in this case. Such tables require ** special handling during INSERT processing. */ -#define TF_Readonly 0x01 /* Read-only system table */ -#define TF_Ephemeral 0x02 /* An ephemeral table */ -#define TF_HasPrimaryKey 0x04 /* Table has a primary key */ -#define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */ -#define TF_Virtual 0x10 /* Is a virtual table */ -#define TF_WithoutRowid 0x20 /* No rowid. PRIMARY KEY is the key */ -#define TF_NoVisibleRowid 0x40 /* No user-visible "rowid" column */ -#define TF_OOOHidden 0x80 /* Out-of-Order hidden columns */ - +#define TF_Readonly 0x0001 /* Read-only system table */ +#define TF_Ephemeral 0x0002 /* An ephemeral table */ +#define TF_HasPrimaryKey 0x0004 /* Table has a primary key */ +#define TF_Autoincrement 0x0008 /* Integer primary key is autoincrement */ +#define TF_HasStat1 0x0010 /* nRowLogEst set from sqlite_stat1 */ +#define TF_WithoutRowid 0x0020 /* No rowid. PRIMARY KEY is the key */ +#define TF_NoVisibleRowid 0x0040 /* No user-visible "rowid" column */ +#define TF_OOOHidden 0x0080 /* Out-of-Order hidden columns */ +#define TF_StatsUsed 0x0100 /* Query planner decisions affected by + ** Index.aiRowLogEst[] values */ +#define TF_HasNotNull 0x0200 /* Contains NOT NULL constraints */ /* ** Test to see whether or not a table is a virtual table. This is @@ -14564,7 +15657,7 @@ struct Table { ** table support is omitted from the build. */ #ifndef SQLITE_OMIT_VIRTUALTABLE -# define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0) +# define IsVirtual(X) ((X)->nModuleArg) #else # define IsVirtual(X) 0 #endif @@ -14799,6 +15892,7 @@ struct Index { unsigned isResized:1; /* True if resizeIndexObject() has been called */ unsigned isCovering:1; /* True if this is a covering index */ unsigned noSkipScan:1; /* Do not try to use skip-scan if true */ + unsigned hasStat1:1; /* aiRowLogEst values come from sqlite_stat1 */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 int nSample; /* Number of elements in aSample[] */ int nSampleCol; /* Size of IndexSample.anEq[] and so on */ @@ -15028,8 +16122,8 @@ struct Expr { */ #define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */ #define EP_Agg 0x000002 /* Contains one or more aggregate functions */ -#define EP_Resolved 0x000004 /* IDs have been resolved to COLUMNs */ -#define EP_Error 0x000008 /* Expression contains one or more errors */ + /* 0x000004 // available for use */ + /* 0x000008 // available for use */ #define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */ #define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */ #define EP_DblQuoted 0x000040 /* token.z was originally in "..." */ @@ -15108,8 +16202,9 @@ struct Expr { */ struct ExprList { int nExpr; /* Number of expressions on the list */ + int nAlloc; /* Number of a[] slots allocated */ struct ExprList_item { /* For each expression in the list */ - Expr *pExpr; /* The list of expressions */ + Expr *pExpr; /* The parse tree for this expression */ char *zName; /* Token associated with this expression */ char *zSpan; /* Original text of the expression */ u8 sortOrder; /* 1 for DESC or 0 for ASC */ @@ -15123,7 +16218,7 @@ struct ExprList { } x; int iConstExprReg; /* Register in which Expr value is cached */ } u; - } *a; /* Alloc a power of two greater or equal to nExpr */ + } a[1]; /* One slot for each expression in the list */ }; /* @@ -15274,7 +16369,7 @@ struct SrcList { #define WHERE_SORTBYGROUP 0x0200 /* Support sqlite3WhereIsSorted() */ #define WHERE_SEEK_TABLE 0x0400 /* Do not defer seeks on main table */ #define WHERE_ORDERBY_LIMIT 0x0800 /* ORDERBY+LIMIT on the inner loop */ - /* 0x1000 not currently used */ +#define WHERE_SEEK_UNIQ_TABLE 0x1000 /* Do not defer seeks if unique */ /* 0x2000 not currently used */ #define WHERE_USE_LIMIT 0x4000 /* Use the LIMIT in cost estimates */ /* 0x8000 not currently used */ @@ -15495,10 +16590,10 @@ struct Select { */ struct SelectDest { u8 eDest; /* How to dispose of the results. On of SRT_* above. */ - char *zAffSdst; /* Affinity used when eDest==SRT_Set */ int iSDParm; /* A parameter used by the eDest disposal method */ int iSdst; /* Base register where results are written */ int nSdst; /* Number of registers allocated */ + char *zAffSdst; /* Affinity used when eDest==SRT_Set */ ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */ }; @@ -15608,8 +16703,8 @@ struct Parse { int nMem; /* Number of memory cells used so far */ int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */ int szOpAlloc; /* Bytes of memory space allocated for Vdbe.aOp[] */ - int ckBase; /* Base register of data during check constraints */ - int iSelfTab; /* Table of an index whose exprs are being coded */ + int iSelfTab; /* Table for associated with an index on expr, or negative + ** of the base register during check-constraint eval */ int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ int iCacheCnt; /* Counter used to generate aColCache[].lru values */ int nLabel; /* Number of labels used */ @@ -15735,13 +16830,11 @@ struct AuthContext { #define OPFLAG_NCHANGE 0x01 /* OP_Insert: Set to update db->nChange */ /* Also used in P2 (not P5) of OP_Delete */ #define OPFLAG_EPHEM 0x01 /* OP_Column: Ephemeral output is ok */ -#define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */ +#define OPFLAG_LASTROWID 0x20 /* Set to update db->lastRowid */ #define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */ #define OPFLAG_APPEND 0x08 /* This is likely to be an append */ #define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */ -#ifdef SQLITE_ENABLE_PREUPDATE_HOOK #define OPFLAG_ISNOOP 0x40 /* OP_Delete does pre-update-hook only */ -#endif #define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */ #define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */ #define OPFLAG_BULKCSR 0x01 /* OP_Open** used to open bulk cursor */ @@ -15749,7 +16842,7 @@ struct AuthContext { #define OPFLAG_FORDELETE 0x08 /* OP_Open should use BTREE_FORDELETE */ #define OPFLAG_P2ISREG 0x10 /* P2 to OP_Open** is a register number */ #define OPFLAG_PERMUTE 0x01 /* OP_Compare: use the permutation */ -#define OPFLAG_SAVEPOSITION 0x02 /* OP_Delete: keep cursor position */ +#define OPFLAG_SAVEPOSITION 0x02 /* OP_Delete/Insert: save cursor pos */ #define OPFLAG_AUXDELETE 0x04 /* OP_Delete: index in a DELETE op */ /* @@ -15982,14 +17075,17 @@ struct Walker { int walkerDepth; /* Number of subqueries */ u8 eCode; /* A small processing code */ union { /* Extra data for callback */ - NameContext *pNC; /* Naming context */ - int n; /* A counter */ - int iCur; /* A cursor number */ - SrcList *pSrcList; /* FROM clause */ - struct SrcCount *pSrcCount; /* Counting column references */ - struct CCurHint *pCCurHint; /* Used by codeCursorHint() */ - int *aiCol; /* array of column indexes */ - struct IdxCover *pIdxCover; /* Check for index coverage */ + NameContext *pNC; /* Naming context */ + int n; /* A counter */ + int iCur; /* A cursor number */ + SrcList *pSrcList; /* FROM clause */ + struct SrcCount *pSrcCount; /* Counting column references */ + struct CCurHint *pCCurHint; /* Used by codeCursorHint() */ + int *aiCol; /* array of column indexes */ + struct IdxCover *pIdxCover; /* Check for index coverage */ + struct IdxExprTrans *pIdxTrans; /* Convert indexed expr to column */ + ExprList *pGroupBy; /* GROUP BY clause */ + struct HavingToWhereCtx *pHavingCtx; /* HAVING to WHERE clause ctx */ } u; }; @@ -16000,6 +17096,10 @@ SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*); SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*); SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*); SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker*, Expr*); +SQLITE_PRIVATE int sqlite3SelectWalkNoop(Walker*, Select*); +#ifdef SQLITE_DEBUG +SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker*, Select*); +#endif /* ** Return code from the parse-tree walking primitives and their @@ -16061,11 +17161,14 @@ SQLITE_PRIVATE int sqlite3CantopenError(int); #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3NomemError(int); SQLITE_PRIVATE int sqlite3IoerrnomemError(int); +SQLITE_PRIVATE int sqlite3CorruptPgnoError(int,Pgno); # define SQLITE_NOMEM_BKPT sqlite3NomemError(__LINE__) # define SQLITE_IOERR_NOMEM_BKPT sqlite3IoerrnomemError(__LINE__) +# define SQLITE_CORRUPT_PGNO(P) sqlite3CorruptPgnoError(__LINE__,(P)) #else # define SQLITE_NOMEM_BKPT SQLITE_NOMEM # define SQLITE_IOERR_NOMEM_BKPT SQLITE_IOERR_NOMEM +# define SQLITE_CORRUPT_PGNO(P) sqlite3CorruptError(__LINE__) #endif /* @@ -16143,6 +17246,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void*, u64); SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64); SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*); +SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3*, void*); SQLITE_PRIVATE int sqlite3MallocSize(void*); SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*); SQLITE_PRIVATE void *sqlite3ScratchMalloc(int); @@ -16410,7 +17514,7 @@ SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int); SQLITE_PRIVATE void sqlite3ExprCode(Parse*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse*, Expr*, int); -SQLITE_PRIVATE void sqlite3ExprCodeAtInit(Parse*, Expr*, int, u8); +SQLITE_PRIVATE int sqlite3ExprCodeAtInit(Parse*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*); SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse*, Expr*, int); @@ -16433,9 +17537,10 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*); SQLITE_PRIVATE void sqlite3Vacuum(Parse*,Token*); SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*, int); SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*); -SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*, int); +SQLITE_PRIVATE int sqlite3ExprCompare(Parse*,Expr*, Expr*, int); +SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*, int); -SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Expr*, Expr*, int); +SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse*,Expr*, Expr*, int); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); SQLITE_PRIVATE int sqlite3ExprCoveredByIndex(Expr*, int iCur, Index *pIdx); @@ -16449,14 +17554,14 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*,int); SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int); SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb); SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int); -SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*); -SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*); +SQLITE_PRIVATE void sqlite3EndTransaction(Parse*,int); SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*); SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *); SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*); SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8); +SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*); SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int); #ifdef SQLITE_ENABLE_CURSOR_HINTS SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr*); @@ -16472,6 +17577,11 @@ SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int, int*,I SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse*,int); SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int*,int,int,int,int, u8,u8,int,int*,int*); +#ifdef SQLITE_ENABLE_NULL_TRIM +SQLITE_PRIVATE void sqlite3SetMakeRecordP5(Vdbe*,Table*); +#else +# define sqlite3SetMakeRecordP5(A,B) +#endif SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*,Table*,int,int,int,int*,int,int,int); SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, u8, int, u8*, int*, int*); SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int); @@ -16565,7 +17675,9 @@ SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); SQLITE_PRIVATE int sqlite3Atoi(const char*); +#ifndef SQLITE_OMIT_UTF16 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar); +#endif SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte); SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8**); SQLITE_PRIVATE LogEst sqlite3LogEst(u64); @@ -16654,7 +17766,9 @@ SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value*); SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*); SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *); +#ifndef SQLITE_OMIT_UTF16 SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8); +#endif SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **); SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8); #ifndef SQLITE_AMALGAMATION @@ -16750,8 +17864,10 @@ SQLITE_PRIVATE char sqlite3IndexColumnAffinity(sqlite3*, Index*, int); /* ** The interface to the LEMON-generated parser */ -SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(u64)); -SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*)); +#ifndef SQLITE_AMALGAMATION +SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(u64)); +SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*)); +#endif SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*); #ifdef YYTRACKMAXSTACKDEPTH SQLITE_PRIVATE int sqlite3ParserStackPeak(void*); @@ -16861,6 +17977,7 @@ SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *); #define sqlite3FkDropTable(a,b,c) #define sqlite3FkOldmask(a,b) 0 #define sqlite3FkRequired(a,b,c,d) 0 + #define sqlite3FkReferences(a) 0 #endif #ifndef SQLITE_OMIT_FOREIGN_KEY SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *, Table*); @@ -17015,6 +18132,10 @@ SQLITE_PRIVATE Expr *sqlite3VectorFieldSubexpr(Expr*, int); SQLITE_PRIVATE Expr *sqlite3ExprForVectorField(Parse*,Expr*,int); SQLITE_PRIVATE void sqlite3VectorErrorMsg(Parse*, Expr*); +#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS +SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt); +#endif + #endif /* SQLITEINT_H */ /************** End of sqliteInt.h *******************************************/ @@ -17158,9 +18279,16 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = { ** EVIDENCE-OF: R-43642-56306 By default, URI handling is globally ** disabled. The default value may be changed by compiling with the ** SQLITE_USE_URI symbol defined. +** +** URI filenames are enabled by default if SQLITE_HAS_CODEC is +** enabled. */ #ifndef SQLITE_USE_URI -# define SQLITE_USE_URI 0 +# ifdef SQLITE_HAS_CODEC +# define SQLITE_USE_URI 1 +# else +# define SQLITE_USE_URI 0 +# endif #endif /* EVIDENCE-OF: R-38720-18127 The default setting is determined by the @@ -17190,6 +18318,19 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = { # define SQLITE_STMTJRNL_SPILL (64*1024) #endif +/* +** The default lookaside-configuration, the format "SZ,N". SZ is the +** number of bytes in each lookaside slot (should be a multiple of 8) +** and N is the number of slots. The lookaside-configuration can be +** changed as start-time using sqlite3_config(SQLITE_CONFIG_LOOKASIDE) +** or at run-time for an individual database connection using +** sqlite3_db_config(db, SQLITE_DBCONFIG_LOOKASIDE); +*/ +#ifndef SQLITE_DEFAULT_LOOKASIDE +# define SQLITE_DEFAULT_LOOKASIDE 1200,100 +#endif + + /* ** The following singleton contains the global configuration for ** the SQLite library. @@ -17202,8 +18343,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { SQLITE_ALLOW_COVERING_INDEX_SCAN, /* bUseCis */ 0x7ffffffe, /* mxStrlen */ 0, /* neverCorrupt */ - 512, /* szLookaside */ - 125, /* nLookaside */ + SQLITE_DEFAULT_LOOKASIDE, /* szLookaside, nLookaside */ SQLITE_STMTJRNL_SPILL, /* nStmtSpill */ {0,0,0,0,0,0,0,0}, /* m */ {0,0,0,0,0,0,0,0,0}, /* mutex */ @@ -17300,466 +18440,6 @@ SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER; SQLITE_PRIVATE const char sqlite3StrBINARY[] = "BINARY"; /************** End of global.c **********************************************/ -/************** Begin file ctime.c *******************************************/ -/* -** 2010 February 23 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** This file implements routines used to report what compile-time options -** SQLite was built with. -*/ - -#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS - -/* #include "sqliteInt.h" */ - -/* -** An array of names of all compile-time options. This array should -** be sorted A-Z. -** -** This array looks large, but in a typical installation actually uses -** only a handful of compile-time options, so most times this array is usually -** rather short and uses little memory space. -*/ -static const char * const azCompileOpt[] = { - -/* These macros are provided to "stringify" the value of the define -** for those options in which the value is meaningful. */ -#define CTIMEOPT_VAL_(opt) #opt -#define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) - -#if SQLITE_32BIT_ROWID - "32BIT_ROWID", -#endif -#if SQLITE_4_BYTE_ALIGNED_MALLOC - "4_BYTE_ALIGNED_MALLOC", -#endif -#if SQLITE_CASE_SENSITIVE_LIKE - "CASE_SENSITIVE_LIKE", -#endif -#if SQLITE_CHECK_PAGES - "CHECK_PAGES", -#endif -#if defined(__clang__) && defined(__clang_major__) - "COMPILER=clang-" CTIMEOPT_VAL(__clang_major__) "." - CTIMEOPT_VAL(__clang_minor__) "." - CTIMEOPT_VAL(__clang_patchlevel__), -#elif defined(_MSC_VER) - "COMPILER=msvc-" CTIMEOPT_VAL(_MSC_VER), -#elif defined(__GNUC__) && defined(__VERSION__) - "COMPILER=gcc-" __VERSION__, -#endif -#if SQLITE_COVERAGE_TEST - "COVERAGE_TEST", -#endif -#if SQLITE_DEBUG - "DEBUG", -#endif -#if SQLITE_DEFAULT_LOCKING_MODE - "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE), -#endif -#if defined(SQLITE_DEFAULT_MMAP_SIZE) && !defined(SQLITE_DEFAULT_MMAP_SIZE_xc) - "DEFAULT_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_DEFAULT_MMAP_SIZE), -#endif -#if SQLITE_DIRECT_OVERFLOW_READ - "DIRECT_OVERFLOW_READ", -#endif -#if SQLITE_DISABLE_DIRSYNC - "DISABLE_DIRSYNC", -#endif -#if SQLITE_DISABLE_LFS - "DISABLE_LFS", -#endif -#if SQLITE_ENABLE_8_3_NAMES - "ENABLE_8_3_NAMES=" CTIMEOPT_VAL(SQLITE_ENABLE_8_3_NAMES), -#endif -#if SQLITE_ENABLE_API_ARMOR - "ENABLE_API_ARMOR", -#endif -#if SQLITE_ENABLE_ATOMIC_WRITE - "ENABLE_ATOMIC_WRITE", -#endif -#if SQLITE_ENABLE_CEROD - "ENABLE_CEROD", -#endif -#if SQLITE_ENABLE_COLUMN_METADATA - "ENABLE_COLUMN_METADATA", -#endif -#if SQLITE_ENABLE_DBSTAT_VTAB - "ENABLE_DBSTAT_VTAB", -#endif -#if SQLITE_ENABLE_EXPENSIVE_ASSERT - "ENABLE_EXPENSIVE_ASSERT", -#endif -#if SQLITE_ENABLE_FTS1 - "ENABLE_FTS1", -#endif -#if SQLITE_ENABLE_FTS2 - "ENABLE_FTS2", -#endif -#if SQLITE_ENABLE_FTS3 - "ENABLE_FTS3", -#endif -#if SQLITE_ENABLE_FTS3_PARENTHESIS - "ENABLE_FTS3_PARENTHESIS", -#endif -#if SQLITE_ENABLE_FTS4 - "ENABLE_FTS4", -#endif -#if SQLITE_ENABLE_FTS5 - "ENABLE_FTS5", -#endif -#if SQLITE_ENABLE_ICU - "ENABLE_ICU", -#endif -#if SQLITE_ENABLE_IOTRACE - "ENABLE_IOTRACE", -#endif -#if SQLITE_ENABLE_JSON1 - "ENABLE_JSON1", -#endif -#if SQLITE_ENABLE_LOAD_EXTENSION - "ENABLE_LOAD_EXTENSION", -#endif -#if SQLITE_ENABLE_LOCKING_STYLE - "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE), -#endif -#if SQLITE_ENABLE_MEMORY_MANAGEMENT - "ENABLE_MEMORY_MANAGEMENT", -#endif -#if SQLITE_ENABLE_MEMSYS3 - "ENABLE_MEMSYS3", -#endif -#if SQLITE_ENABLE_MEMSYS5 - "ENABLE_MEMSYS5", -#endif -#if SQLITE_ENABLE_OVERSIZE_CELL_CHECK - "ENABLE_OVERSIZE_CELL_CHECK", -#endif -#if SQLITE_ENABLE_RTREE - "ENABLE_RTREE", -#endif -#if defined(SQLITE_ENABLE_STAT4) - "ENABLE_STAT4", -#elif defined(SQLITE_ENABLE_STAT3) - "ENABLE_STAT3", -#endif -#if SQLITE_ENABLE_UNLOCK_NOTIFY - "ENABLE_UNLOCK_NOTIFY", -#endif -#if SQLITE_ENABLE_UPDATE_DELETE_LIMIT - "ENABLE_UPDATE_DELETE_LIMIT", -#endif -#if defined(SQLITE_ENABLE_URI_00_ERROR) - "ENABLE_URI_00_ERROR", -#endif -#if SQLITE_HAS_CODEC - "HAS_CODEC", -#endif -#if HAVE_ISNAN || SQLITE_HAVE_ISNAN - "HAVE_ISNAN", -#endif -#if SQLITE_HOMEGROWN_RECURSIVE_MUTEX - "HOMEGROWN_RECURSIVE_MUTEX", -#endif -#if SQLITE_IGNORE_AFP_LOCK_ERRORS - "IGNORE_AFP_LOCK_ERRORS", -#endif -#if SQLITE_IGNORE_FLOCK_LOCK_ERRORS - "IGNORE_FLOCK_LOCK_ERRORS", -#endif -#ifdef SQLITE_INT64_TYPE - "INT64_TYPE", -#endif -#ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS - "LIKE_DOESNT_MATCH_BLOBS", -#endif -#if SQLITE_LOCK_TRACE - "LOCK_TRACE", -#endif -#if defined(SQLITE_MAX_MMAP_SIZE) && !defined(SQLITE_MAX_MMAP_SIZE_xc) - "MAX_MMAP_SIZE=" CTIMEOPT_VAL(SQLITE_MAX_MMAP_SIZE), -#endif -#ifdef SQLITE_MAX_SCHEMA_RETRY - "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY), -#endif -#if SQLITE_MEMDEBUG - "MEMDEBUG", -#endif -#if SQLITE_MIXED_ENDIAN_64BIT_FLOAT - "MIXED_ENDIAN_64BIT_FLOAT", -#endif -#if SQLITE_NO_SYNC - "NO_SYNC", -#endif -#if SQLITE_OMIT_ALTERTABLE - "OMIT_ALTERTABLE", -#endif -#if SQLITE_OMIT_ANALYZE - "OMIT_ANALYZE", -#endif -#if SQLITE_OMIT_ATTACH - "OMIT_ATTACH", -#endif -#if SQLITE_OMIT_AUTHORIZATION - "OMIT_AUTHORIZATION", -#endif -#if SQLITE_OMIT_AUTOINCREMENT - "OMIT_AUTOINCREMENT", -#endif -#if SQLITE_OMIT_AUTOINIT - "OMIT_AUTOINIT", -#endif -#if SQLITE_OMIT_AUTOMATIC_INDEX - "OMIT_AUTOMATIC_INDEX", -#endif -#if SQLITE_OMIT_AUTORESET - "OMIT_AUTORESET", -#endif -#if SQLITE_OMIT_AUTOVACUUM - "OMIT_AUTOVACUUM", -#endif -#if SQLITE_OMIT_BETWEEN_OPTIMIZATION - "OMIT_BETWEEN_OPTIMIZATION", -#endif -#if SQLITE_OMIT_BLOB_LITERAL - "OMIT_BLOB_LITERAL", -#endif -#if SQLITE_OMIT_BTREECOUNT - "OMIT_BTREECOUNT", -#endif -#if SQLITE_OMIT_CAST - "OMIT_CAST", -#endif -#if SQLITE_OMIT_CHECK - "OMIT_CHECK", -#endif -#if SQLITE_OMIT_COMPLETE - "OMIT_COMPLETE", -#endif -#if SQLITE_OMIT_COMPOUND_SELECT - "OMIT_COMPOUND_SELECT", -#endif -#if SQLITE_OMIT_CTE - "OMIT_CTE", -#endif -#if SQLITE_OMIT_DATETIME_FUNCS - "OMIT_DATETIME_FUNCS", -#endif -#if SQLITE_OMIT_DECLTYPE - "OMIT_DECLTYPE", -#endif -#if SQLITE_OMIT_DEPRECATED - "OMIT_DEPRECATED", -#endif -#if SQLITE_OMIT_DISKIO - "OMIT_DISKIO", -#endif -#if SQLITE_OMIT_EXPLAIN - "OMIT_EXPLAIN", -#endif -#if SQLITE_OMIT_FLAG_PRAGMAS - "OMIT_FLAG_PRAGMAS", -#endif -#if SQLITE_OMIT_FLOATING_POINT - "OMIT_FLOATING_POINT", -#endif -#if SQLITE_OMIT_FOREIGN_KEY - "OMIT_FOREIGN_KEY", -#endif -#if SQLITE_OMIT_GET_TABLE - "OMIT_GET_TABLE", -#endif -#if SQLITE_OMIT_INCRBLOB - "OMIT_INCRBLOB", -#endif -#if SQLITE_OMIT_INTEGRITY_CHECK - "OMIT_INTEGRITY_CHECK", -#endif -#if SQLITE_OMIT_LIKE_OPTIMIZATION - "OMIT_LIKE_OPTIMIZATION", -#endif -#if SQLITE_OMIT_LOAD_EXTENSION - "OMIT_LOAD_EXTENSION", -#endif -#if SQLITE_OMIT_LOCALTIME - "OMIT_LOCALTIME", -#endif -#if SQLITE_OMIT_LOOKASIDE - "OMIT_LOOKASIDE", -#endif -#if SQLITE_OMIT_MEMORYDB - "OMIT_MEMORYDB", -#endif -#if SQLITE_OMIT_OR_OPTIMIZATION - "OMIT_OR_OPTIMIZATION", -#endif -#if SQLITE_OMIT_PAGER_PRAGMAS - "OMIT_PAGER_PRAGMAS", -#endif -#if SQLITE_OMIT_PRAGMA - "OMIT_PRAGMA", -#endif -#if SQLITE_OMIT_PROGRESS_CALLBACK - "OMIT_PROGRESS_CALLBACK", -#endif -#if SQLITE_OMIT_QUICKBALANCE - "OMIT_QUICKBALANCE", -#endif -#if SQLITE_OMIT_REINDEX - "OMIT_REINDEX", -#endif -#if SQLITE_OMIT_SCHEMA_PRAGMAS - "OMIT_SCHEMA_PRAGMAS", -#endif -#if SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS - "OMIT_SCHEMA_VERSION_PRAGMAS", -#endif -#if SQLITE_OMIT_SHARED_CACHE - "OMIT_SHARED_CACHE", -#endif -#if SQLITE_OMIT_SUBQUERY - "OMIT_SUBQUERY", -#endif -#if SQLITE_OMIT_TCL_VARIABLE - "OMIT_TCL_VARIABLE", -#endif -#if SQLITE_OMIT_TEMPDB - "OMIT_TEMPDB", -#endif -#if SQLITE_OMIT_TRACE - "OMIT_TRACE", -#endif -#if SQLITE_OMIT_TRIGGER - "OMIT_TRIGGER", -#endif -#if SQLITE_OMIT_TRUNCATE_OPTIMIZATION - "OMIT_TRUNCATE_OPTIMIZATION", -#endif -#if SQLITE_OMIT_UTF16 - "OMIT_UTF16", -#endif -#if SQLITE_OMIT_VACUUM - "OMIT_VACUUM", -#endif -#if SQLITE_OMIT_VIEW - "OMIT_VIEW", -#endif -#if SQLITE_OMIT_VIRTUALTABLE - "OMIT_VIRTUALTABLE", -#endif -#if SQLITE_OMIT_WAL - "OMIT_WAL", -#endif -#if SQLITE_OMIT_WSD - "OMIT_WSD", -#endif -#if SQLITE_OMIT_XFER_OPT - "OMIT_XFER_OPT", -#endif -#if SQLITE_PERFORMANCE_TRACE - "PERFORMANCE_TRACE", -#endif -#if SQLITE_PROXY_DEBUG - "PROXY_DEBUG", -#endif -#if SQLITE_RTREE_INT_ONLY - "RTREE_INT_ONLY", -#endif -#if SQLITE_SECURE_DELETE - "SECURE_DELETE", -#endif -#if SQLITE_SMALL_STACK - "SMALL_STACK", -#endif -#if SQLITE_SOUNDEX - "SOUNDEX", -#endif -#if SQLITE_SYSTEM_MALLOC - "SYSTEM_MALLOC", -#endif -#if SQLITE_TCL - "TCL", -#endif -#if defined(SQLITE_TEMP_STORE) && !defined(SQLITE_TEMP_STORE_xc) - "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE), -#endif -#if SQLITE_TEST - "TEST", -#endif -#if defined(SQLITE_THREADSAFE) - "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE), -#endif -#if SQLITE_UNTESTABLE - "UNTESTABLE" -#endif -#if SQLITE_USE_ALLOCA - "USE_ALLOCA", -#endif -#if SQLITE_USER_AUTHENTICATION - "USER_AUTHENTICATION", -#endif -#if SQLITE_WIN32_MALLOC - "WIN32_MALLOC", -#endif -#if SQLITE_ZERO_MALLOC - "ZERO_MALLOC" -#endif -}; - -/* -** Given the name of a compile-time option, return true if that option -** was used and false if not. -** -** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix -** is not required for a match. -*/ -SQLITE_API int sqlite3_compileoption_used(const char *zOptName){ - int i, n; - -#if SQLITE_ENABLE_API_ARMOR - if( zOptName==0 ){ - (void)SQLITE_MISUSE_BKPT; - return 0; - } -#endif - if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7; - n = sqlite3Strlen30(zOptName); - - /* Since ArraySize(azCompileOpt) is normally in single digits, a - ** linear search is adequate. No need for a binary search. */ - for(i=0; i=0 && NaDb[] entries referenced */ yDbMask lockMask; /* Subset of btreeMask that requires a lock */ - u32 aCounter[5]; /* Counters used by sqlite3_stmt_status() */ + u32 aCounter[7]; /* Counters used by sqlite3_stmt_status() */ char *zSql; /* Text of the SQL statement that generated this */ void *pFree; /* Free this when deleting the vdbe */ VdbeFrame *pFrame; /* Parent frame */ @@ -18215,6 +18898,7 @@ struct PreUpdate { i64 iKey2; /* Second key value passed to hook */ Mem *aNew; /* Array of new.* values */ Table *pTab; /* Schema object being upated */ + Index *pPk; /* PK index if pTab is WITHOUT ROWID */ }; /* @@ -18254,6 +18938,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64); #else SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem*, double); #endif +SQLITE_PRIVATE void sqlite3VdbeMemSetPointer(Mem*, void*, const char*, void(*)(void*)); SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem*,sqlite3*,u16); SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*); SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int); @@ -18285,7 +18970,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, int, VdbeCursor *); SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *, VdbeSorter *); SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *); SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *, Mem *); -SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, const VdbeCursor *, int *); +SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, const VdbeCursor *); SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *, int *); SQLITE_PRIVATE int sqlite3VdbeSorterWrite(const VdbeCursor *, Mem *); SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int, int *); @@ -18313,12 +18998,14 @@ SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int); # define sqlite3VdbeCheckFk(p,i) 0 #endif -SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8); #ifdef SQLITE_DEBUG SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe*); SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf); #endif -SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem); +#ifndef SQLITE_OMIT_UTF16 +SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8); +SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem); +#endif #ifndef SQLITE_OMIT_INCRBLOB SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *); @@ -19057,7 +19744,7 @@ static int parseDateOrTime( return 0; }else if( parseHhMmSs(zDate, p)==0 ){ return 0; - }else if( sqlite3StrICmp(zDate,"now")==0){ + }else if( sqlite3StrICmp(zDate,"now")==0 && sqlite3NotPureFunc(context) ){ return setDateTimeToCurrent(context, p); }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){ setRawDateNumber(p, r); @@ -19094,8 +19781,10 @@ static void computeYMD(DateTime *p){ p->Y = 2000; p->M = 1; p->D = 1; + }else if( !validJulianDay(p->iJD) ){ + datetimeError(p); + return; }else{ - assert( validJulianDay(p->iJD) ); Z = (int)((p->iJD + 43200000)/86400000); A = (int)((Z - 1867216.25)/36524.25); A = Z + 1 + A - (A/4); @@ -19338,7 +20027,7 @@ static int parseModifier( ** Assuming the current time value is UTC (a.k.a. GMT), shift it to ** show local time. */ - if( sqlite3_stricmp(z, "localtime")==0 ){ + if( sqlite3_stricmp(z, "localtime")==0 && sqlite3NotPureFunc(pCtx) ){ computeJD(p); p->iJD += localtimeOffset(p, pCtx, &rc); clearYMD_HMS_TZ(p); @@ -19364,7 +20053,7 @@ static int parseModifier( } } #ifndef SQLITE_OMIT_LOCALTIME - else if( sqlite3_stricmp(z, "utc")==0 ){ + else if( sqlite3_stricmp(z, "utc")==0 && sqlite3NotPureFunc(pCtx) ){ if( p->tzSet==0 ){ sqlite3_int64 c1; computeJD(p); @@ -19414,18 +20103,19 @@ static int parseModifier( ** or month or year. */ if( sqlite3_strnicmp(z, "start of ", 9)!=0 ) break; + if( !p->validJD && !p->validYMD && !p->validHMS ) break; z += 9; computeYMD(p); p->validHMS = 1; p->h = p->m = 0; p->s = 0.0; + p->rawS = 0; p->validTZ = 0; p->validJD = 0; if( sqlite3_stricmp(z,"month")==0 ){ p->D = 1; rc = 0; }else if( sqlite3_stricmp(z,"year")==0 ){ - computeYMD(p); p->M = 1; p->D = 1; rc = 0; @@ -19899,11 +20589,11 @@ static void currentTimeFunc( SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ static FuncDef aDateTimeFuncs[] = { #ifndef SQLITE_OMIT_DATETIME_FUNCS - DFUNCTION(julianday, -1, 0, 0, juliandayFunc ), - DFUNCTION(date, -1, 0, 0, dateFunc ), - DFUNCTION(time, -1, 0, 0, timeFunc ), - DFUNCTION(datetime, -1, 0, 0, datetimeFunc ), - DFUNCTION(strftime, -1, 0, 0, strftimeFunc ), + PURE_DATE(julianday, -1, 0, 0, juliandayFunc ), + PURE_DATE(date, -1, 0, 0, dateFunc ), + PURE_DATE(time, -1, 0, 0, timeFunc ), + PURE_DATE(datetime, -1, 0, 0, datetimeFunc ), + PURE_DATE(strftime, -1, 0, 0, strftimeFunc ), DFUNCTION(current_time, 0, 0, 0, ctimeFunc ), DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc), DFUNCTION(current_date, 0, 0, 0, cdateFunc ), @@ -20547,7 +21237,9 @@ SQLITE_PRIVATE void sqlite3MemSetDefault(void){ */ #include #include +#ifdef SQLITE_MIGHT_BE_SINGLE_CORE #include +#endif /* SQLITE_MIGHT_BE_SINGLE_CORE */ static malloc_zone_t* _sqliteZone_; #define SQLITE_MALLOC(x) malloc_zone_malloc(_sqliteZone_, (x)) #define SQLITE_FREE(x) malloc_zone_free(_sqliteZone_, (x)); @@ -20615,7 +21307,9 @@ static malloc_zone_t* _sqliteZone_; */ static void *sqlite3MemMalloc(int nByte){ #ifdef SQLITE_MALLOCSIZE - void *p = SQLITE_MALLOC( nByte ); + void *p; + testcase( ROUND8(nByte)==nByte ); + p = SQLITE_MALLOC( nByte ); if( p==0 ){ testcase( sqlite3GlobalConfig.xLog!=0 ); sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte); @@ -20624,7 +21318,7 @@ static void *sqlite3MemMalloc(int nByte){ #else sqlite3_int64 *p; assert( nByte>0 ); - nByte = ROUND8(nByte); + testcase( ROUND8(nByte)!=nByte ); p = SQLITE_MALLOC( nByte+8 ); if( p ){ p[0] = nByte; @@ -20738,19 +21432,10 @@ static int sqlite3MemInit(void *NotUsed){ }else{ /* only 1 core, use our own zone to contention over global locks, ** e.g. we have our own dedicated locks */ - bool success; - malloc_zone_t* newzone = malloc_create_zone(4096, 0); - malloc_set_zone_name(newzone, "Sqlite_Heap"); - do{ - success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone, - (void * volatile *)&_sqliteZone_); - }while(!_sqliteZone_); - if( !success ){ - /* somebody registered a zone first */ - malloc_destroy_zone(newzone); - } + _sqliteZone_ = malloc_create_zone(4096, 0); + malloc_set_zone_name(_sqliteZone_, "Sqlite_Heap"); } -#endif +#endif /* defined(__APPLE__) && !defined(SQLITE_WITHOUT_ZONEMALLOC) */ UNUSED_PARAMETER(NotUsed); return SQLITE_OK; } @@ -23746,8 +24431,7 @@ SQLITE_PRIVATE void sqlite3MemoryBarrier(void){ SQLITE_MEMORY_BARRIER; #elif defined(__GNUC__) __sync_synchronize(); -#elif !defined(SQLITE_DISABLE_INTRINSIC) && \ - defined(_MSC_VER) && _MSC_VER>=1300 +#elif MSVC_VERSION>=1300 _ReadWriteBarrier(); #elif defined(MemoryBarrier) MemoryBarrier(); @@ -23958,8 +24642,8 @@ static void winMutexEnter(sqlite3_mutex *p){ p->owner = tid; p->nRef++; if( p->trace ){ - OSTRACE(("ENTER-MUTEX tid=%lu, mutex=%p (%d), nRef=%d\n", - tid, p, p->trace, p->nRef)); + OSTRACE(("ENTER-MUTEX tid=%lu, mutex(%d)=%p (%d), nRef=%d\n", + tid, p->id, p, p->trace, p->nRef)); } #endif } @@ -24001,8 +24685,8 @@ static int winMutexTry(sqlite3_mutex *p){ #endif #ifdef SQLITE_DEBUG if( p->trace ){ - OSTRACE(("TRY-MUTEX tid=%lu, mutex=%p (%d), owner=%lu, nRef=%d, rc=%s\n", - tid, p, p->trace, p->owner, p->nRef, sqlite3ErrName(rc))); + OSTRACE(("TRY-MUTEX tid=%lu, mutex(%d)=%p (%d), owner=%lu, nRef=%d, rc=%s\n", + tid, p->id, p, p->trace, p->owner, p->nRef, sqlite3ErrName(rc))); } #endif return rc; @@ -24030,8 +24714,8 @@ static void winMutexLeave(sqlite3_mutex *p){ LeaveCriticalSection(&p->mutex); #ifdef SQLITE_DEBUG if( p->trace ){ - OSTRACE(("LEAVE-MUTEX tid=%lu, mutex=%p (%d), nRef=%d\n", - tid, p, p->trace, p->nRef)); + OSTRACE(("LEAVE-MUTEX tid=%lu, mutex(%d)=%p (%d), nRef=%d\n", + tid, p->id, p, p->trace, p->nRef)); } #endif } @@ -24279,11 +24963,26 @@ static void sqlite3MallocAlarm(int nByte){ ** Do a memory allocation with statistics and alarms. Assume the ** lock is already held. */ -static int mallocWithAlarm(int n, void **pp){ - int nFull; +static void mallocWithAlarm(int n, void **pp){ void *p; + int nFull; assert( sqlite3_mutex_held(mem0.mutex) ); + assert( n>0 ); + + /* In Firefox (circa 2017-02-08), xRoundup() is remapped to an internal + ** implementation of malloc_good_size(), which must be called in debug + ** mode and specifically when the DMD "Dark Matter Detector" is enabled + ** or else a crash results. Hence, do not attempt to optimize out the + ** following xRoundup() call. */ nFull = sqlite3GlobalConfig.m.xRoundup(n); + +#ifdef SQLITE_MAX_MEMORY + if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nFull>SQLITE_MAX_MEMORY ){ + *pp = 0; + return; + } +#endif + sqlite3StatusHighwater(SQLITE_STATUS_MALLOC_SIZE, n); if( mem0.alarmThreshold>0 ){ sqlite3_int64 nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED); @@ -24307,7 +25006,6 @@ static int mallocWithAlarm(int n, void **pp){ sqlite3StatusUp(SQLITE_STATUS_MALLOC_COUNT, 1); } *pp = p; - return nFull; } /* @@ -24473,7 +25171,7 @@ SQLITE_PRIVATE int sqlite3MallocSize(void *p){ SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){ assert( p!=0 ); if( db==0 || !isLookaside(db,p) ){ -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG if( db==0 ){ assert( sqlite3MemdebugNoType(p, (u8)~MEMTYPE_HEAP) ); assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) ); @@ -24522,11 +25220,12 @@ static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){ /* ** Free memory that might be associated with a particular database -** connection. +** connection. Calling sqlite3DbFree(D,X) for X==0 is a harmless no-op. +** The sqlite3DbFreeNN(D,X) version requires that X be non-NULL. */ -SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ +SQLITE_PRIVATE void sqlite3DbFreeNN(sqlite3 *db, void *p){ assert( db==0 || sqlite3_mutex_held(db->mutex) ); - if( p==0 ) return; + assert( p!=0 ); if( db ){ if( db->pnBytesFreed ){ measureAllocationSize(db, p); @@ -24534,7 +25233,7 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ } if( isLookaside(db, p) ){ LookasideSlot *pBuf = (LookasideSlot*)p; -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG /* Trash all content in the buffer being freed */ memset(p, 0xaa, db->lookaside.sz); #endif @@ -24550,6 +25249,10 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ sqlite3MemdebugSetType(p, MEMTYPE_HEAP); sqlite3_free(p); } +SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){ + assert( db==0 || sqlite3_mutex_held(db->mutex) ); + if( p ) sqlite3DbFreeNN(db, p); +} /* ** Change the size of an existing memory allocation @@ -24903,7 +25606,7 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ ** Conversion types fall into various categories as defined by the ** following enumeration. */ -#define etRADIX 0 /* Integer types. %d, %x, %o, and so forth */ +#define etRADIX 0 /* non-decimal integer types. %x %o */ #define etFLOAT 1 /* Floating point. %f */ #define etEXP 2 /* Exponentional notation. %e and %E */ #define etGENERIC 3 /* Floating or exponential, depending on exponent. %g */ @@ -24921,8 +25624,9 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){ #define etPOINTER 13 /* The %p conversion */ #define etSQLESCAPE3 14 /* %w -> Strings with '\"' doubled */ #define etORDINAL 15 /* %r -> 1st, 2nd, 3rd, 4th, etc. English only */ +#define etDECIMAL 16 /* %d or %u, but not %x, %o */ -#define etINVALID 16 /* Any unrecognized conversion type */ +#define etINVALID 17 /* Any unrecognized conversion type */ /* @@ -24946,9 +25650,8 @@ typedef struct et_info { /* Information about each format field */ /* ** Allowed values for et_info.flags */ -#define FLAG_SIGNED 1 /* True if the value to convert is signed */ -#define FLAG_INTERN 2 /* True if for internal use only */ -#define FLAG_STRING 4 /* Allow infinity precision */ +#define FLAG_SIGNED 1 /* True if the value to convert is signed */ +#define FLAG_STRING 4 /* Allow infinite precision */ /* @@ -24958,7 +25661,7 @@ typedef struct et_info { /* Information about each format field */ static const char aDigits[] = "0123456789ABCDEF0123456789abcdef"; static const char aPrefix[] = "-x0\000X0"; static const et_info fmtinfo[] = { - { 'd', 10, 1, etRADIX, 0, 0 }, + { 'd', 10, 1, etDECIMAL, 0, 0 }, { 's', 0, 4, etSTRING, 0, 0 }, { 'g', 0, 1, etGENERIC, 30, 0 }, { 'z', 0, 4, etDYNSTRING, 0, 0 }, @@ -24967,7 +25670,7 @@ static const et_info fmtinfo[] = { { 'w', 0, 4, etSQLESCAPE3, 0, 0 }, { 'c', 0, 0, etCHARX, 0, 0 }, { 'o', 8, 0, etRADIX, 0, 2 }, - { 'u', 10, 0, etRADIX, 0, 0 }, + { 'u', 10, 0, etDECIMAL, 0, 0 }, { 'x', 16, 0, etRADIX, 16, 1 }, { 'X', 16, 0, etRADIX, 0, 4 }, #ifndef SQLITE_OMIT_FLOATING_POINT @@ -24976,16 +25679,15 @@ static const et_info fmtinfo[] = { { 'E', 0, 1, etEXP, 14, 0 }, { 'G', 0, 1, etGENERIC, 14, 0 }, #endif - { 'i', 10, 1, etRADIX, 0, 0 }, + { 'i', 10, 1, etDECIMAL, 0, 0 }, { 'n', 0, 0, etSIZE, 0, 0 }, { '%', 0, 0, etPERCENT, 0, 0 }, { 'p', 16, 0, etPOINTER, 0, 1 }, -/* All the rest have the FLAG_INTERN bit set and are thus for internal -** use only */ - { 'T', 0, 2, etTOKEN, 0, 0 }, - { 'S', 0, 2, etSRCLIST, 0, 0 }, - { 'r', 10, 3, etORDINAL, 0, 0 }, + /* All the rest are undocumented and are for internal use only */ + { 'T', 0, 0, etTOKEN, 0, 0 }, + { 'S', 0, 0, etSRCLIST, 0, 0 }, + { 'r', 10, 1, etORDINAL, 0, 0 }, }; /* @@ -25069,17 +25771,15 @@ SQLITE_PRIVATE void sqlite3VXPrintf( int idx; /* A general purpose loop counter */ int width; /* Width of the current field */ etByte flag_leftjustify; /* True if "-" flag is present */ - etByte flag_plussign; /* True if "+" flag is present */ - etByte flag_blanksign; /* True if " " flag is present */ + etByte flag_prefix; /* '+' or ' ' or 0 for prefix */ etByte flag_alternateform; /* True if "#" flag is present */ etByte flag_altform2; /* True if "!" flag is present */ etByte flag_zeropad; /* True if field width constant starts with zero */ - etByte flag_long; /* True if "l" flag is present */ - etByte flag_longlong; /* True if the "ll" flag is present */ + etByte flag_long; /* 1 for the "l" flag, 2 for "ll", 0 by default */ etByte done; /* Loop termination flag */ + etByte cThousand; /* Thousands separator for %d and %u */ etByte xtype = etINVALID; /* Conversion paradigm */ u8 bArgList; /* True for SQLITE_PRINTF_SQLFUNC */ - u8 useIntern; /* Ok to use internal conversions (ex: %T) */ char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ sqlite_uint64 longvalue; /* Value for integer types */ LONGDOUBLE_TYPE realvalue; /* Value for real types */ @@ -25098,13 +25798,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( char buf[etBUFSIZE]; /* Conversion buffer */ bufpt = 0; - if( pAccum->printfFlags ){ - if( (bArgList = (pAccum->printfFlags & SQLITE_PRINTF_SQLFUNC))!=0 ){ - pArgList = va_arg(ap, PrintfArguments*); - } - useIntern = pAccum->printfFlags & SQLITE_PRINTF_INTERNAL; + if( (pAccum->printfFlags & SQLITE_PRINTF_SQLFUNC)!=0 ){ + pArgList = va_arg(ap, PrintfArguments*); + bArgList = 1; }else{ - bArgList = useIntern = 0; + bArgList = 0; } for(; (c=(*fmt))!=0; ++fmt){ if( c!='%' ){ @@ -25122,17 +25820,18 @@ SQLITE_PRIVATE void sqlite3VXPrintf( break; } /* Find out what flags are present */ - flag_leftjustify = flag_plussign = flag_blanksign = + flag_leftjustify = flag_prefix = cThousand = flag_alternateform = flag_altform2 = flag_zeropad = 0; done = 0; do{ switch( c ){ case '-': flag_leftjustify = 1; break; - case '+': flag_plussign = 1; break; - case ' ': flag_blanksign = 1; break; + case '+': flag_prefix = '+'; break; + case ' ': flag_prefix = ' '; break; case '#': flag_alternateform = 1; break; case '!': flag_altform2 = 1; break; case '0': flag_zeropad = 1; break; + case ',': cThousand = ','; break; default: done = 1; break; } }while( !done && (c=(*++fmt))!=0 ); @@ -25202,13 +25901,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( flag_long = 1; c = *++fmt; if( c=='l' ){ - flag_longlong = 1; + flag_long = 2; c = *++fmt; - }else{ - flag_longlong = 0; } }else{ - flag_long = flag_longlong = 0; + flag_long = 0; } /* Fetch the info entry for the field */ infop = &fmtinfo[0]; @@ -25216,11 +25913,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( for(idx=0; idxflags & FLAG_INTERN)==0 ){ - xtype = infop->type; - }else{ - return; - } + xtype = infop->type; break; } } @@ -25230,15 +25923,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( ** ** flag_alternateform TRUE if a '#' is present. ** flag_altform2 TRUE if a '!' is present. - ** flag_plussign TRUE if a '+' is present. + ** flag_prefix '+' or ' ' or zero ** flag_leftjustify TRUE if a '-' is present or if the ** field width was negative. ** flag_zeropad TRUE if the width began with 0. - ** flag_long TRUE if the letter 'l' (ell) prefixed - ** the conversion character. - ** flag_longlong TRUE if the letter 'll' (ell ell) prefixed - ** the conversion character. - ** flag_blanksign TRUE if a ' ' is present. + ** flag_long 1 for "l", 2 for "ll" ** width The specified field width. This is ** always non-negative. Zero is the default. ** precision The specified precision. The default @@ -25248,19 +25937,24 @@ SQLITE_PRIVATE void sqlite3VXPrintf( */ switch( xtype ){ case etPOINTER: - flag_longlong = sizeof(char*)==sizeof(i64); - flag_long = sizeof(char*)==sizeof(long int); + flag_long = sizeof(char*)==sizeof(i64) ? 2 : + sizeof(char*)==sizeof(long int) ? 1 : 0; /* Fall through into the next case */ case etORDINAL: - case etRADIX: + case etRADIX: + cThousand = 0; + /* Fall through into the next case */ + case etDECIMAL: if( infop->flags & FLAG_SIGNED ){ i64 v; if( bArgList ){ v = getIntArg(pArgList); - }else if( flag_longlong ){ - v = va_arg(ap,i64); }else if( flag_long ){ - v = va_arg(ap,long int); + if( flag_long==2 ){ + v = va_arg(ap,i64) ; + }else{ + v = va_arg(ap,long int); + } }else{ v = va_arg(ap,int); } @@ -25273,17 +25967,17 @@ SQLITE_PRIVATE void sqlite3VXPrintf( prefix = '-'; }else{ longvalue = v; - if( flag_plussign ) prefix = '+'; - else if( flag_blanksign ) prefix = ' '; - else prefix = 0; + prefix = flag_prefix; } }else{ if( bArgList ){ longvalue = (u64)getIntArg(pArgList); - }else if( flag_longlong ){ - longvalue = va_arg(ap,u64); }else if( flag_long ){ - longvalue = va_arg(ap,unsigned long int); + if( flag_long==2 ){ + longvalue = va_arg(ap,u64); + }else{ + longvalue = va_arg(ap,unsigned long int); + } }else{ longvalue = va_arg(ap,unsigned int); } @@ -25293,16 +25987,17 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( flag_zeropad && precision0 ); } length = (int)(&zOut[nOut-1]-bufpt); - for(idx=precision-length; idx>0; idx--){ + while( precision>length ){ *(--bufpt) = '0'; /* Zero pad */ + length++; + } + if( cThousand ){ + int nn = (length - 1)/3; /* Number of "," to insert */ + int ix = (length - 1)%3 + 1; + bufpt -= nn; + for(idx=0; nn>0; idx++){ + bufpt[idx] = bufpt[idx+nn]; + ix--; + if( ix==0 ){ + bufpt[++idx] = cThousand; + nn--; + ix = 3; + } + } } if( prefix ) *(--bufpt) = prefix; /* Add sign */ if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */ @@ -25351,9 +26061,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( realvalue = -realvalue; prefix = '-'; }else{ - if( flag_plussign ) prefix = '+'; - else if( flag_blanksign ) prefix = ' '; - else prefix = 0; + prefix = flag_prefix; } if( xtype==etGENERIC && precision>0 ) precision--; testcase( precision>0xfff ); @@ -25589,7 +26297,9 @@ SQLITE_PRIVATE void sqlite3VXPrintf( break; } case etTOKEN: { - Token *pToken = va_arg(ap, Token*); + Token *pToken; + if( (pAccum->printfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return; + pToken = va_arg(ap, Token*); assert( bArgList==0 ); if( pToken && pToken->n ){ sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n); @@ -25598,9 +26308,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( break; } case etSRCLIST: { - SrcList *pSrc = va_arg(ap, SrcList*); - int k = va_arg(ap, int); - struct SrcList_item *pItem = &pSrc->a[k]; + SrcList *pSrc; + int k; + struct SrcList_item *pItem; + if( (pAccum->printfFlags & SQLITE_PRINTF_INTERNAL)==0 ) return; + pSrc = va_arg(ap, SrcList*); + k = va_arg(ap, int); + pItem = &pSrc->a[k]; assert( bArgList==0 ); assert( k>=0 && knSrc ); if( pItem->zDatabase ){ @@ -25622,9 +26336,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( ** the output. */ width -= length; - if( width>0 && !flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' '); - sqlite3StrAccumAppend(pAccum, bufpt, length); - if( width>0 && flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' '); + if( width>0 ){ + if( !flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' '); + sqlite3StrAccumAppend(pAccum, bufpt, length); + if( flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' '); + }else{ + sqlite3StrAccumAppend(pAccum, bufpt, length); + } if( zExtra ){ sqlite3DbFree(pAccum->db, zExtra); @@ -26115,6 +26833,10 @@ SQLITE_PRIVATE void sqlite3TreeViewWith(TreeView *pView, const With *pWith, u8 m SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){ int n = 0; int cnt = 0; + if( p==0 ){ + sqlite3TreeViewLine(pView, "nil-SELECT"); + return; + } pView = sqlite3TreeViewPush(pView, moreToFollow); if( p->pWith ){ sqlite3TreeViewWith(pView, p->pWith, 1); @@ -26223,7 +26945,7 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){ const char *zBinOp = 0; /* Binary operator */ const char *zUniOp = 0; /* Unary operator */ - char zFlgs[30]; + char zFlgs[60]; pView = sqlite3TreeViewPush(pView, moreToFollow); if( pExpr==0 ){ sqlite3TreeViewLine(pView, "nil"); @@ -26231,7 +26953,12 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m return; } if( pExpr->flags ){ - sqlite3_snprintf(sizeof(zFlgs),zFlgs," flags=0x%x",pExpr->flags); + if( ExprHasProperty(pExpr, EP_FromJoin) ){ + sqlite3_snprintf(sizeof(zFlgs),zFlgs," flags=0x%x iRJT=%d", + pExpr->flags, pExpr->iRightJoinTable); + }else{ + sqlite3_snprintf(sizeof(zFlgs),zFlgs," flags=0x%x",pExpr->flags); + } }else{ zFlgs[0] = 0; } @@ -26362,17 +27089,17 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m } #ifndef SQLITE_OMIT_SUBQUERY case TK_EXISTS: { - sqlite3TreeViewLine(pView, "EXISTS-expr"); + sqlite3TreeViewLine(pView, "EXISTS-expr flags=0x%x", pExpr->flags); sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); break; } case TK_SELECT: { - sqlite3TreeViewLine(pView, "SELECT-expr"); + sqlite3TreeViewLine(pView, "SELECT-expr flags=0x%x", pExpr->flags); sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); break; } case TK_IN: { - sqlite3TreeViewLine(pView, "IN"); + sqlite3TreeViewLine(pView, "IN flags=0x%x", pExpr->flags); sqlite3TreeViewExpr(pView, pExpr->pLeft, 1); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0); @@ -26450,6 +27177,11 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m sqlite3TreeViewSelect(pView, pExpr->pLeft->x.pSelect, 0); break; } + case TK_IF_NULL_ROW: { + sqlite3TreeViewLine(pView, "IF-NULL-ROW %d", pExpr->iTable); + sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); + break; + } default: { sqlite3TreeViewLine(pView, "op=%d", pExpr->op); break; @@ -27255,7 +27987,9 @@ translate_out: #endif return SQLITE_OK; } +#endif /* SQLITE_OMIT_UTF16 */ +#ifndef SQLITE_OMIT_UTF16 /* ** This routine checks for a byte-order mark at the beginning of the ** UTF-16 string stored in *pMem. If one is present, it is removed and @@ -28169,6 +28903,7 @@ SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){ } } #endif + if( !sqlite3Isdigit(zNum[0]) ) return 0; while( zNum[0]=='0' ) zNum++; for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){ v = v*10 + c; @@ -28596,13 +29331,11 @@ SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){ u32 x; memcpy(&x,p,4); return x; -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && defined(__GNUC__) && GCC_VERSION>=4003000 +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 u32 x; memcpy(&x,p,4); return __builtin_bswap32(x); -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && defined(_MSC_VER) && _MSC_VER>=1300 +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 u32 x; memcpy(&x,p,4); return _byteswap_ulong(x); @@ -28614,12 +29347,10 @@ SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){ SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){ #if SQLITE_BYTEORDER==4321 memcpy(p,&v,4); -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && defined(__GNUC__) && GCC_VERSION>=4003000 +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 u32 x = __builtin_bswap32(v); memcpy(p,&x,4); -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && defined(_MSC_VER) && _MSC_VER>=1300 +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 u32 x = _byteswap_ulong(v); memcpy(p,&x,4); #else @@ -28735,6 +29466,9 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ ** overflow, leave *pA unchanged and return 1. */ SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 + return __builtin_add_overflow(*pA, iB, pA); +#else i64 iA = *pA; testcase( iA==0 ); testcase( iA==1 ); testcase( iB==-1 ); testcase( iB==0 ); @@ -28749,8 +29483,12 @@ SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){ } *pA += iB; return 0; +#endif } SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 + return __builtin_sub_overflow(*pA, iB, pA); +#else testcase( iB==SMALLEST_INT64+1 ); if( iB==SMALLEST_INT64 ){ testcase( (*pA)==(-1) ); testcase( (*pA)==0 ); @@ -28760,8 +29498,12 @@ SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){ }else{ return sqlite3AddInt64(pA, -iB); } +#endif } SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){ +#if GCC_VERSION>=5004000 + return __builtin_mul_overflow(*pA, iB, pA); +#else i64 iA = *pA; if( iB>0 ){ if( iA>LARGEST_INT64/iB ) return 1; @@ -28777,6 +29519,7 @@ SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){ } *pA = iA*iB; return 0; +#endif } /* @@ -29157,8 +29900,9 @@ static int rehash(Hash *pH, unsigned int new_size){ } /* This function (for internal use only) locates an element in an -** hash table that matches the given key. The hash for this key is -** also computed and returned in the *pH parameter. +** hash table that matches the given key. If no element is found, +** a pointer to a static null element with HashElem.data==0 is returned. +** If pH is not NULL, then the hash for this key is written to *pH. */ static HashElem *findElementWithHash( const Hash *pH, /* The pH to be searched */ @@ -29168,6 +29912,7 @@ static HashElem *findElementWithHash( HashElem *elem; /* Used to loop thru the element list */ int count; /* Number of elements left to test */ unsigned int h; /* The computed hash */ + static HashElem nullElement = { 0, 0, 0, 0 }; if( pH->ht ){ /*OPTIMIZATION-IF-TRUE*/ struct _ht *pEntry; @@ -29180,7 +29925,7 @@ static HashElem *findElementWithHash( elem = pH->first; count = pH->count; } - *pHash = h; + if( pHash ) *pHash = h; while( count-- ){ assert( elem!=0 ); if( sqlite3StrICmp(elem->pKey,pKey)==0 ){ @@ -29188,7 +29933,7 @@ static HashElem *findElementWithHash( } elem = elem->next; } - return 0; + return &nullElement; } /* Remove a single entry from the hash table given a pointer to that @@ -29230,13 +29975,9 @@ static void removeElementGivenHash( ** found, or NULL if there is no match. */ SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey){ - HashElem *elem; /* The element that matches key */ - unsigned int h; /* A hash on key */ - assert( pH!=0 ); assert( pKey!=0 ); - elem = findElementWithHash(pH, pKey, &h); - return elem ? elem->data : 0; + return findElementWithHash(pH, pKey, 0)->data; } /* Insert an element into the hash table pH. The key is pKey @@ -29261,7 +30002,7 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void *data){ assert( pH!=0 ); assert( pKey!=0 ); elem = findElementWithHash(pH,pKey,&h); - if( elem ){ + if( elem->data ){ void *old_data = elem->data; if( data==0 ){ removeElementGivenHash(pH,elem,h); @@ -29324,79 +30065,79 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 20 */ "Once" OpHelp(""), /* 21 */ "If" OpHelp(""), /* 22 */ "IfNot" OpHelp(""), - /* 23 */ "SeekLT" OpHelp("key=r[P3@P4]"), - /* 24 */ "SeekLE" OpHelp("key=r[P3@P4]"), - /* 25 */ "SeekGE" OpHelp("key=r[P3@P4]"), - /* 26 */ "SeekGT" OpHelp("key=r[P3@P4]"), - /* 27 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), - /* 28 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), - /* 29 */ "NoConflict" OpHelp("key=r[P3@P4]"), - /* 30 */ "NotFound" OpHelp("key=r[P3@P4]"), - /* 31 */ "Found" OpHelp("key=r[P3@P4]"), - /* 32 */ "SeekRowid" OpHelp("intkey=r[P3]"), - /* 33 */ "NotExists" OpHelp("intkey=r[P3]"), - /* 34 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), - /* 35 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), - /* 36 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), - /* 37 */ "Eq" OpHelp("IF r[P3]==r[P1]"), - /* 38 */ "Gt" OpHelp("IF r[P3]>r[P1]"), - /* 39 */ "Le" OpHelp("IF r[P3]<=r[P1]"), - /* 40 */ "Lt" OpHelp("IF r[P3]=r[P1]"), - /* 42 */ "ElseNotEq" OpHelp(""), - /* 43 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), - /* 44 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), - /* 45 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), - /* 47 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), - /* 48 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), - /* 49 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), - /* 50 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), - /* 51 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), - /* 52 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), - /* 53 */ "Last" OpHelp(""), - /* 54 */ "BitNot" OpHelp("r[P1]= ~r[P1]"), - /* 55 */ "SorterSort" OpHelp(""), - /* 56 */ "Sort" OpHelp(""), - /* 57 */ "Rewind" OpHelp(""), - /* 58 */ "IdxLE" OpHelp("key=r[P3@P4]"), - /* 59 */ "IdxGT" OpHelp("key=r[P3@P4]"), - /* 60 */ "IdxLT" OpHelp("key=r[P3@P4]"), - /* 61 */ "IdxGE" OpHelp("key=r[P3@P4]"), - /* 62 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), - /* 63 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), - /* 64 */ "Program" OpHelp(""), - /* 65 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), - /* 66 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), - /* 67 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), - /* 68 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), - /* 69 */ "IncrVacuum" OpHelp(""), - /* 70 */ "VNext" OpHelp(""), - /* 71 */ "Init" OpHelp("Start at P2"), - /* 72 */ "Return" OpHelp(""), - /* 73 */ "EndCoroutine" OpHelp(""), - /* 74 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), - /* 75 */ "Halt" OpHelp(""), - /* 76 */ "Integer" OpHelp("r[P2]=P1"), - /* 77 */ "Int64" OpHelp("r[P2]=P4"), - /* 78 */ "String" OpHelp("r[P2]='P4' (len=P1)"), - /* 79 */ "Null" OpHelp("r[P2..P3]=NULL"), - /* 80 */ "SoftNull" OpHelp("r[P1]=NULL"), - /* 81 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), - /* 82 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), - /* 83 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), - /* 84 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), - /* 85 */ "SCopy" OpHelp("r[P2]=r[P1]"), - /* 86 */ "IntCopy" OpHelp("r[P2]=r[P1]"), - /* 87 */ "ResultRow" OpHelp("output=r[P1@P2]"), - /* 88 */ "CollSeq" OpHelp(""), - /* 89 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), - /* 90 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), - /* 91 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), - /* 92 */ "RealAffinity" OpHelp(""), - /* 93 */ "Cast" OpHelp("affinity(r[P1])"), - /* 94 */ "Permutation" OpHelp(""), - /* 95 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), + /* 23 */ "IfNullRow" OpHelp("if P1.nullRow then r[P3]=NULL, goto P2"), + /* 24 */ "SeekLT" OpHelp("key=r[P3@P4]"), + /* 25 */ "SeekLE" OpHelp("key=r[P3@P4]"), + /* 26 */ "SeekGE" OpHelp("key=r[P3@P4]"), + /* 27 */ "SeekGT" OpHelp("key=r[P3@P4]"), + /* 28 */ "NoConflict" OpHelp("key=r[P3@P4]"), + /* 29 */ "NotFound" OpHelp("key=r[P3@P4]"), + /* 30 */ "Found" OpHelp("key=r[P3@P4]"), + /* 31 */ "SeekRowid" OpHelp("intkey=r[P3]"), + /* 32 */ "NotExists" OpHelp("intkey=r[P3]"), + /* 33 */ "Last" OpHelp(""), + /* 34 */ "IfSmaller" OpHelp(""), + /* 35 */ "SorterSort" OpHelp(""), + /* 36 */ "Sort" OpHelp(""), + /* 37 */ "Rewind" OpHelp(""), + /* 38 */ "IdxLE" OpHelp("key=r[P3@P4]"), + /* 39 */ "IdxGT" OpHelp("key=r[P3@P4]"), + /* 40 */ "IdxLT" OpHelp("key=r[P3@P4]"), + /* 41 */ "IdxGE" OpHelp("key=r[P3@P4]"), + /* 42 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"), + /* 43 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"), + /* 44 */ "Program" OpHelp(""), + /* 45 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"), + /* 46 */ "IfPos" OpHelp("if r[P1]>0 then r[P1]-=P3, goto P2"), + /* 47 */ "IfNotZero" OpHelp("if r[P1]!=0 then r[P1]--, goto P2"), + /* 48 */ "DecrJumpZero" OpHelp("if (--r[P1])==0 goto P2"), + /* 49 */ "IncrVacuum" OpHelp(""), + /* 50 */ "VNext" OpHelp(""), + /* 51 */ "Init" OpHelp("Start at P2"), + /* 52 */ "Return" OpHelp(""), + /* 53 */ "EndCoroutine" OpHelp(""), + /* 54 */ "HaltIfNull" OpHelp("if r[P3]=null halt"), + /* 55 */ "Halt" OpHelp(""), + /* 56 */ "Integer" OpHelp("r[P2]=P1"), + /* 57 */ "Int64" OpHelp("r[P2]=P4"), + /* 58 */ "String" OpHelp("r[P2]='P4' (len=P1)"), + /* 59 */ "Null" OpHelp("r[P2..P3]=NULL"), + /* 60 */ "SoftNull" OpHelp("r[P1]=NULL"), + /* 61 */ "Blob" OpHelp("r[P2]=P4 (len=P1)"), + /* 62 */ "Variable" OpHelp("r[P2]=parameter(P1,P4)"), + /* 63 */ "Move" OpHelp("r[P2@P3]=r[P1@P3]"), + /* 64 */ "Copy" OpHelp("r[P2@P3+1]=r[P1@P3+1]"), + /* 65 */ "SCopy" OpHelp("r[P2]=r[P1]"), + /* 66 */ "IntCopy" OpHelp("r[P2]=r[P1]"), + /* 67 */ "ResultRow" OpHelp("output=r[P1@P2]"), + /* 68 */ "CollSeq" OpHelp(""), + /* 69 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"), + /* 70 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"), + /* 71 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"), + /* 72 */ "RealAffinity" OpHelp(""), + /* 73 */ "Cast" OpHelp("affinity(r[P1])"), + /* 74 */ "Permutation" OpHelp(""), + /* 75 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"), + /* 76 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"), + /* 77 */ "Ne" OpHelp("IF r[P3]!=r[P1]"), + /* 78 */ "Eq" OpHelp("IF r[P3]==r[P1]"), + /* 79 */ "Gt" OpHelp("IF r[P3]>r[P1]"), + /* 80 */ "Le" OpHelp("IF r[P3]<=r[P1]"), + /* 81 */ "Lt" OpHelp("IF r[P3]=r[P1]"), + /* 83 */ "ElseNotEq" OpHelp(""), + /* 84 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"), + /* 85 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"), + /* 86 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<>r[P1]"), + /* 88 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"), + /* 89 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"), + /* 90 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"), + /* 91 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"), + /* 92 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"), + /* 93 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), + /* 94 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), + /* 95 */ "BitNot" OpHelp("r[P1]= ~r[P1]"), /* 96 */ "Column" OpHelp("r[P3]=PX"), /* 97 */ "String8" OpHelp("r[P2]='P4'"), /* 98 */ "Affinity" OpHelp("affinity(r[P1@P2])"), @@ -29407,62 +30148,68 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 103 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), /* 104 */ "OpenRead" OpHelp("root=P2 iDb=P3"), /* 105 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), - /* 106 */ "OpenAutoindex" OpHelp("nColumn=P2"), - /* 107 */ "OpenEphemeral" OpHelp("nColumn=P2"), - /* 108 */ "SorterOpen" OpHelp(""), - /* 109 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), - /* 110 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), - /* 111 */ "Close" OpHelp(""), - /* 112 */ "ColumnsUsed" OpHelp(""), - /* 113 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), - /* 114 */ "NewRowid" OpHelp("r[P2]=rowid"), - /* 115 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), - /* 116 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), - /* 117 */ "Delete" OpHelp(""), - /* 118 */ "ResetCount" OpHelp(""), - /* 119 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), - /* 120 */ "SorterData" OpHelp("r[P2]=data"), - /* 121 */ "RowData" OpHelp("r[P2]=data"), - /* 122 */ "Rowid" OpHelp("r[P2]=rowid"), - /* 123 */ "NullRow" OpHelp(""), - /* 124 */ "SorterInsert" OpHelp("key=r[P2]"), - /* 125 */ "IdxInsert" OpHelp("key=r[P2]"), - /* 126 */ "IdxDelete" OpHelp("key=r[P2@P3]"), - /* 127 */ "Seek" OpHelp("Move P3 to P1.rowid"), - /* 128 */ "IdxRowid" OpHelp("r[P2]=rowid"), - /* 129 */ "Destroy" OpHelp(""), - /* 130 */ "Clear" OpHelp(""), - /* 131 */ "ResetSorter" OpHelp(""), + /* 106 */ "OpenDup" OpHelp(""), + /* 107 */ "OpenAutoindex" OpHelp("nColumn=P2"), + /* 108 */ "OpenEphemeral" OpHelp("nColumn=P2"), + /* 109 */ "SorterOpen" OpHelp(""), + /* 110 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), + /* 111 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), + /* 112 */ "Close" OpHelp(""), + /* 113 */ "ColumnsUsed" OpHelp(""), + /* 114 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), + /* 115 */ "NewRowid" OpHelp("r[P2]=rowid"), + /* 116 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), + /* 117 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), + /* 118 */ "Delete" OpHelp(""), + /* 119 */ "ResetCount" OpHelp(""), + /* 120 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), + /* 121 */ "SorterData" OpHelp("r[P2]=data"), + /* 122 */ "RowData" OpHelp("r[P2]=data"), + /* 123 */ "Rowid" OpHelp("r[P2]=rowid"), + /* 124 */ "NullRow" OpHelp(""), + /* 125 */ "SorterInsert" OpHelp("key=r[P2]"), + /* 126 */ "IdxInsert" OpHelp("key=r[P2]"), + /* 127 */ "IdxDelete" OpHelp("key=r[P2@P3]"), + /* 128 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), + /* 129 */ "IdxRowid" OpHelp("r[P2]=rowid"), + /* 130 */ "Destroy" OpHelp(""), + /* 131 */ "Clear" OpHelp(""), /* 132 */ "Real" OpHelp("r[P2]=P4"), - /* 133 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"), - /* 134 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"), - /* 135 */ "ParseSchema" OpHelp(""), - /* 136 */ "LoadAnalysis" OpHelp(""), - /* 137 */ "DropTable" OpHelp(""), - /* 138 */ "DropIndex" OpHelp(""), - /* 139 */ "DropTrigger" OpHelp(""), - /* 140 */ "IntegrityCk" OpHelp(""), - /* 141 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), - /* 142 */ "Param" OpHelp(""), - /* 143 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), - /* 144 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), - /* 145 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), - /* 146 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 147 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 148 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), - /* 149 */ "Expire" OpHelp(""), - /* 150 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), - /* 151 */ "VBegin" OpHelp(""), - /* 152 */ "VCreate" OpHelp(""), - /* 153 */ "VDestroy" OpHelp(""), - /* 154 */ "VOpen" OpHelp(""), - /* 155 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), - /* 156 */ "VRename" OpHelp(""), - /* 157 */ "Pagecount" OpHelp(""), - /* 158 */ "MaxPgcnt" OpHelp(""), - /* 159 */ "CursorHint" OpHelp(""), - /* 160 */ "Noop" OpHelp(""), - /* 161 */ "Explain" OpHelp(""), + /* 133 */ "ResetSorter" OpHelp(""), + /* 134 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"), + /* 135 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"), + /* 136 */ "SqlExec" OpHelp(""), + /* 137 */ "ParseSchema" OpHelp(""), + /* 138 */ "LoadAnalysis" OpHelp(""), + /* 139 */ "DropTable" OpHelp(""), + /* 140 */ "DropIndex" OpHelp(""), + /* 141 */ "DropTrigger" OpHelp(""), + /* 142 */ "IntegrityCk" OpHelp(""), + /* 143 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 144 */ "Param" OpHelp(""), + /* 145 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 146 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 147 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), + /* 148 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 149 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 150 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 151 */ "Expire" OpHelp(""), + /* 152 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 153 */ "VBegin" OpHelp(""), + /* 154 */ "VCreate" OpHelp(""), + /* 155 */ "VDestroy" OpHelp(""), + /* 156 */ "VOpen" OpHelp(""), + /* 157 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 158 */ "VRename" OpHelp(""), + /* 159 */ "Pagecount" OpHelp(""), + /* 160 */ "MaxPgcnt" OpHelp(""), + /* 161 */ "PureFunc0" OpHelp(""), + /* 162 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), + /* 163 */ "PureFunc" OpHelp(""), + /* 164 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), + /* 165 */ "CursorHint" OpHelp(""), + /* 166 */ "Noop" OpHelp(""), + /* 167 */ "Explain" OpHelp(""), }; return azName[i]; } @@ -37844,7 +38591,34 @@ struct winVfsAppData { ****************************************************************************** */ #ifndef SQLITE_WIN32_HEAP_CREATE -# define SQLITE_WIN32_HEAP_CREATE (TRUE) +# define SQLITE_WIN32_HEAP_CREATE (TRUE) +#endif + +/* + * This is the maximum possible initial size of the Win32-specific heap, in + * bytes. + */ +#ifndef SQLITE_WIN32_HEAP_MAX_INIT_SIZE +# define SQLITE_WIN32_HEAP_MAX_INIT_SIZE (4294967295U) +#endif + +/* + * This is the extra space for the initial size of the Win32-specific heap, + * in bytes. This value may be zero. + */ +#ifndef SQLITE_WIN32_HEAP_INIT_EXTRA +# define SQLITE_WIN32_HEAP_INIT_EXTRA (4194304) +#endif + +/* + * Calculate the maximum legal cache size, in pages, based on the maximum + * possible initial heap size and the default page size, setting aside the + * needed extra space. + */ +#ifndef SQLITE_WIN32_MAX_CACHE_SIZE +# define SQLITE_WIN32_MAX_CACHE_SIZE (((SQLITE_WIN32_HEAP_MAX_INIT_SIZE) - \ + (SQLITE_WIN32_HEAP_INIT_EXTRA)) / \ + (SQLITE_DEFAULT_PAGE_SIZE)) #endif /* @@ -37853,25 +38627,36 @@ struct winVfsAppData { */ #ifndef SQLITE_WIN32_CACHE_SIZE # if SQLITE_DEFAULT_CACHE_SIZE>=0 -# define SQLITE_WIN32_CACHE_SIZE (SQLITE_DEFAULT_CACHE_SIZE) +# define SQLITE_WIN32_CACHE_SIZE (SQLITE_DEFAULT_CACHE_SIZE) # else -# define SQLITE_WIN32_CACHE_SIZE (-(SQLITE_DEFAULT_CACHE_SIZE)) +# define SQLITE_WIN32_CACHE_SIZE (-(SQLITE_DEFAULT_CACHE_SIZE)) # endif #endif +/* + * Make sure that the calculated cache size, in pages, cannot cause the + * initial size of the Win32-specific heap to exceed the maximum amount + * of memory that can be specified in the call to HeapCreate. + */ +#if SQLITE_WIN32_CACHE_SIZE>SQLITE_WIN32_MAX_CACHE_SIZE +# undef SQLITE_WIN32_CACHE_SIZE +# define SQLITE_WIN32_CACHE_SIZE (2000) +#endif + /* * The initial size of the Win32-specific heap. This value may be zero. */ #ifndef SQLITE_WIN32_HEAP_INIT_SIZE -# define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_WIN32_CACHE_SIZE) * \ - (SQLITE_DEFAULT_PAGE_SIZE) + 4194304) +# define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_WIN32_CACHE_SIZE) * \ + (SQLITE_DEFAULT_PAGE_SIZE) + \ + (SQLITE_WIN32_HEAP_INIT_EXTRA)) #endif /* * The maximum size of the Win32-specific heap. This value may be zero. */ #ifndef SQLITE_WIN32_HEAP_MAX_SIZE -# define SQLITE_WIN32_HEAP_MAX_SIZE (0) +# define SQLITE_WIN32_HEAP_MAX_SIZE (0) #endif /* @@ -37879,7 +38664,7 @@ struct winVfsAppData { * zero for the default behavior. */ #ifndef SQLITE_WIN32_HEAP_FLAGS -# define SQLITE_WIN32_HEAP_FLAGS (0) +# define SQLITE_WIN32_HEAP_FLAGS (0) #endif @@ -43976,7 +44761,7 @@ struct PCache { ** ** assert( sqlite3PcachePageSanity(pPg) ); */ -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3PcachePageSanity(PgHdr *pPg){ PCache *pCache; assert( pPg!=0 ); @@ -45039,8 +45824,7 @@ static int pcache1InitBulk(PCache1 *pCache){ sqlite3EndBenignMalloc(); if( zBulk ){ int nBulk = sqlite3MallocSize(zBulk)/pCache->szAlloc; - int i; - for(i=0; iszPage]; pX->page.pBuf = zBulk; pX->page.pExtra = &pX[1]; @@ -45049,7 +45833,7 @@ static int pcache1InitBulk(PCache1 *pCache){ pX->pNext = pCache->pFree; pCache->pFree = pX; zBulk += pCache->szAlloc; - } + }while( --nBulk ); } return pCache->pFree!=0; } @@ -45965,7 +46749,7 @@ SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){ int nFree = 0; assert( sqlite3_mutex_notheld(pcache1.grp.mutex) ); assert( sqlite3_mutex_notheld(pcache1.mutex) ); - if( sqlite3GlobalConfig.nPage==0 ){ + if( sqlite3GlobalConfig.pPage==0 ){ PgHdr1 *p; pcache1EnterMutex(&pcache1.grp); while( (nReq<0 || nFreepMethods!=0) /* -** Return true if this pager uses a write-ahead log instead of the usual -** rollback journal. Otherwise false. +** Return true if this pager uses a write-ahead log to read page pgno. +** Return false if the pager reads pgno directly from the database. */ -#ifndef SQLITE_OMIT_WAL -SQLITE_PRIVATE int sqlite3PagerUseWal(Pager *pPager){ - return (pPager->pWal!=0); +#if !defined(SQLITE_OMIT_WAL) && defined(SQLITE_DIRECT_OVERFLOW_READ) +SQLITE_PRIVATE int sqlite3PagerUseWal(Pager *pPager, Pgno pgno){ + u32 iRead = 0; + int rc; + if( pPager->pWal==0 ) return 0; + rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iRead); + return rc || iRead; } -# define pagerUseWal(x) sqlite3PagerUseWal(x) +#endif +#ifndef SQLITE_OMIT_WAL +# define pagerUseWal(x) ((x)->pWal!=0) #else # define pagerUseWal(x) 0 # define pagerRollbackWal(x) 0 @@ -48919,6 +49709,11 @@ static int pager_playback_one_page( char *aData; /* Temporary storage for the page */ sqlite3_file *jfd; /* The file descriptor for the journal file */ int isSynced; /* True if journal page is synced */ +#ifdef SQLITE_HAS_CODEC + /* The jrnlEnc flag is true if Journal pages should be passed through + ** the codec. It is false for pure in-memory journals. */ + const int jrnlEnc = (isMainJrnl || pPager->subjInMemory==0); +#endif assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */ assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */ @@ -49042,14 +49837,34 @@ static int pager_playback_one_page( i64 ofst = (pgno-1)*(i64)pPager->pageSize; testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 ); assert( !pagerUseWal(pPager) ); + + /* Write the data read from the journal back into the database file. + ** This is usually safe even for an encrypted database - as the data + ** was encrypted before it was written to the journal file. The exception + ** is if the data was just read from an in-memory sub-journal. In that + ** case it must be encrypted here before it is copied into the database + ** file. */ +#ifdef SQLITE_HAS_CODEC + if( !jrnlEnc ){ + CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM_BKPT, aData); + rc = sqlite3OsWrite(pPager->fd, (u8 *)aData, pPager->pageSize, ofst); + CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM_BKPT); + }else +#endif rc = sqlite3OsWrite(pPager->fd, (u8 *)aData, pPager->pageSize, ofst); + if( pgno>pPager->dbFileSize ){ pPager->dbFileSize = pgno; } if( pPager->pBackup ){ - CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM_BKPT); +#ifdef SQLITE_HAS_CODEC + if( jrnlEnc ){ + CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM_BKPT); + sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData); + CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM_BKPT,aData); + }else +#endif sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData); - CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM_BKPT, aData); } }else if( !isMainJrnl && pPg==0 ){ /* If this is a rollback of a savepoint and data was not written to @@ -49101,7 +49916,9 @@ static int pager_playback_one_page( } /* Decode the page just read from disk */ - CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM_BKPT); +#if SQLITE_HAS_CODEC + if( jrnlEnc ){ CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM_BKPT); } +#endif sqlite3PcacheRelease(pPg); } return rc; @@ -49887,7 +50704,7 @@ static int pagerPagecount(Pager *pPager, Pgno *pnPage){ nPage = sqlite3WalDbsize(pPager->pWal); /* If the number of pages in the database is not available from the - ** WAL sub-system, determine the page counte based on the size of + ** WAL sub-system, determine the page count based on the size of ** the database file. If the size of the database file is not an ** integer multiple of the page-size, round up the result. */ @@ -49938,23 +50755,21 @@ static int pagerOpenWalIfPresent(Pager *pPager){ if( !pPager->tempFile ){ int isWal; /* True if WAL file exists */ - Pgno nPage; /* Size of the database file */ - - rc = pagerPagecount(pPager, &nPage); - if( rc ) return rc; - if( nPage==0 ){ - rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); - if( rc==SQLITE_IOERR_DELETE_NOENT ) rc = SQLITE_OK; - isWal = 0; - }else{ - rc = sqlite3OsAccess( - pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal - ); - } + rc = sqlite3OsAccess( + pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal + ); if( rc==SQLITE_OK ){ if( isWal ){ - testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); - rc = sqlite3PagerOpenWal(pPager, 0); + Pgno nPage; /* Size of the database file */ + + rc = pagerPagecount(pPager, &nPage); + if( rc ) return rc; + if( nPage==0 ){ + rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0); + }else{ + testcase( sqlite3PcachePagecount(pPager->pPCache)==0 ); + rc = sqlite3PagerOpenWal(pPager, 0); + } }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){ pPager->journalMode = PAGER_JOURNALMODE_DELETE; } @@ -51113,8 +51928,13 @@ static int subjournalPage(PgHdr *pPg){ void *pData = pPg->pData; i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize); char *pData2; - - CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM_BKPT, pData2); + +#if SQLITE_HAS_CODEC + if( !pPager->subjInMemory ){ + CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM_BKPT, pData2); + }else +#endif + pData2 = pData; PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno)); rc = write32bits(pPager->sjfd, offset, pPg->pgno); if( rc==SQLITE_OK ){ @@ -51892,19 +52712,14 @@ SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){ ** detected. The chance of an undetected change is so small that ** it can be neglected. */ - Pgno nPage = 0; char dbFileVers[sizeof(pPager->dbFileVers)]; - rc = pagerPagecount(pPager, &nPage); - if( rc ) goto failed; - - if( nPage>0 ){ - IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); - rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); - if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){ + IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers))); + rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24); + if( rc!=SQLITE_OK ){ + if( rc!=SQLITE_IOERR_SHORT_READ ){ goto failed; } - }else{ memset(dbFileVers, 0, sizeof(dbFileVers)); } @@ -58197,10 +59012,12 @@ struct BtShared { #define BTS_READ_ONLY 0x0001 /* Underlying file is readonly */ #define BTS_PAGESIZE_FIXED 0x0002 /* Page size can no longer be changed */ #define BTS_SECURE_DELETE 0x0004 /* PRAGMA secure_delete is enabled */ -#define BTS_INITIALLY_EMPTY 0x0008 /* Database was empty at trans start */ -#define BTS_NO_WAL 0x0010 /* Do not open write-ahead-log files */ -#define BTS_EXCLUSIVE 0x0020 /* pWriter has an exclusive lock */ -#define BTS_PENDING 0x0040 /* Waiting for read-locks to clear */ +#define BTS_OVERWRITE 0x0008 /* Overwrite deleted content with zeros */ +#define BTS_FAST_SECURE 0x000c /* Combination of the previous two */ +#define BTS_INITIALLY_EMPTY 0x0010 /* Database was empty at trans start */ +#define BTS_NO_WAL 0x0020 /* Do not open write-ahead-log files */ +#define BTS_EXCLUSIVE 0x0040 /* pWriter has an exclusive lock */ +#define BTS_PENDING 0x0080 /* Waiting for read-locks to clear */ /* ** An instance of the following structure is used to hold information @@ -58266,10 +59083,10 @@ struct BtCursor { ** initialized. */ i8 iPage; /* Index of current page in apPage */ u8 curIntKey; /* Value of apPage[0]->intKey */ - struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */ - void *padding1; /* Make object size a multiple of 16 */ - u16 aiIdx[BTCURSOR_MAX_DEPTH]; /* Current index in apPage[i] */ - MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */ + u16 ix; /* Current index for apPage[iPage] */ + u16 aiIdx[BTCURSOR_MAX_DEPTH-1]; /* Current index in apPage[i] */ + struct KeyInfo *pKeyInfo; /* Arg passed to comparison function */ + MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */ }; /* @@ -58441,11 +59258,9 @@ struct IntegrityCk { */ #if SQLITE_BYTEORDER==4321 # define get2byteAligned(x) (*(u16*)(x)) -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && GCC_VERSION>=4008000 +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4008000 # define get2byteAligned(x) __builtin_bswap16(*(u16*)(x)) -#elif SQLITE_BYTEORDER==1234 && !defined(SQLITE_DISABLE_INTRINSIC) \ - && defined(_MSC_VER) && _MSC_VER>=1300 +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 # define get2byteAligned(x) _byteswap_ushort(*(u16*)(x)) #else # define get2byteAligned(x) ((x)[0]<<8 | (x)[1]) @@ -58620,16 +59435,24 @@ SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){ ** two or more btrees in common both try to lock all their btrees ** at the same instant. */ -SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ +static void SQLITE_NOINLINE btreeEnterAll(sqlite3 *db){ int i; + int skipOk = 1; Btree *p; assert( sqlite3_mutex_held(db->mutex) ); for(i=0; inDb; i++){ p = db->aDb[i].pBt; - if( p ) sqlite3BtreeEnter(p); + if( p && p->sharable ){ + sqlite3BtreeEnter(p); + skipOk = 0; + } } + db->skipBtreeMutex = skipOk; } -SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ +SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){ + if( db->skipBtreeMutex==0 ) btreeEnterAll(db); +} +static void SQLITE_NOINLINE btreeLeaveAll(sqlite3 *db){ int i; Btree *p; assert( sqlite3_mutex_held(db->mutex) ); @@ -58638,6 +59461,9 @@ SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ if( p ) sqlite3BtreeLeave(p); } } +SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){ + if( db->skipBtreeMutex==0 ) btreeLeaveAll(db); +} #ifndef NDEBUG /* @@ -58889,7 +59715,7 @@ static int hasSharedCacheTableLock( ** Return true immediately. */ if( (pBtree->sharable==0) - || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted)) + || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommit)) ){ return 1; } @@ -58966,7 +59792,7 @@ static int hasReadConflicts(Btree *pBtree, Pgno iRoot){ for(p=pBtree->pBt->pCursor; p; p=p->pNext){ if( p->pgnoRoot==iRoot && p->pBtree!=pBtree - && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted) + && 0==(p->pBtree->db->flags & SQLITE_ReadUncommit) ){ return 1; } @@ -58988,7 +59814,7 @@ static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){ assert( sqlite3BtreeHoldsMutex(p) ); assert( eLock==READ_LOCK || eLock==WRITE_LOCK ); assert( p->db!=0 ); - assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 ); + assert( !(p->db->flags&SQLITE_ReadUncommit)||eLock==WRITE_LOCK||iTab==1 ); /* If requesting a write-lock, then the Btree must have an open write ** transaction on this file. And, obviously, for this to be so there @@ -59066,7 +59892,7 @@ static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){ ** obtain a read-lock using this function. The only read-lock obtained ** by a connection in read-uncommitted mode is on the sqlite_master ** table, and that lock is obtained in BtreeBeginTrans(). */ - assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK ); + assert( 0==(p->db->flags&SQLITE_ReadUncommit) || eLock==WRITE_LOCK ); /* This function should only be called on a sharable b-tree after it ** has been determined that no other b-tree holds a conflicting lock. */ @@ -59236,6 +60062,7 @@ static void invalidateAllOverflowCache(BtShared *pBt){ */ static void invalidateIncrblobCursors( Btree *pBtree, /* The database file to check */ + Pgno pgnoRoot, /* The table that might be changing */ i64 iRow, /* The rowid that might be changing */ int isClearTable /* True if all rows are being deleted */ ){ @@ -59246,7 +60073,7 @@ static void invalidateIncrblobCursors( for(p=pBtree->pBt->pCursor; p; p=p->pNext){ if( (p->curFlags & BTCF_Incrblob)!=0 ){ pBtree->hasIncrblobCur = 1; - if( isClearTable || p->info.nKey==iRow ){ + if( p->pgnoRoot==pgnoRoot && (isClearTable || p->info.nKey==iRow) ){ p->eState = CURSOR_INVALID; } } @@ -59255,7 +60082,7 @@ static void invalidateIncrblobCursors( #else /* Stub function when INCRBLOB is omitted */ - #define invalidateIncrblobCursors(x,y,z) + #define invalidateIncrblobCursors(w,x,y,z) #endif /* SQLITE_OMIT_INCRBLOB */ /* @@ -59507,7 +60334,7 @@ static int btreeMoveto( if( pIdxKey==0 ) return SQLITE_NOMEM_BKPT; sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey); if( pIdxKey->nField==0 ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno); goto moveto_done; } }else{ @@ -59736,7 +60563,7 @@ static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){ if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]); sqlite3PagerUnref(pDbPage); - if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT; + if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_PGNO(iPtrmap); return SQLITE_OK; } @@ -60054,17 +60881,18 @@ static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){ /* -** Defragment the page given. All Cells are moved to the -** end of the page and all free space is collected into one -** big FreeBlk that occurs in between the header and cell -** pointer array and the cell content area. +** Defragment the page given. This routine reorganizes cells within the +** page so that there are no free-blocks on the free-block list. +** +** Parameter nMaxFrag is the maximum amount of fragmented space that may be +** present in the page after this routine returns. ** ** EVIDENCE-OF: R-44582-60138 SQLite may from time to time reorganize a ** b-tree page so that there are no freeblocks or fragment bytes, all ** unused bytes are contained in the unallocated space region, and all ** cells are packed tightly at the end of the page. */ -static int defragmentPage(MemPage *pPage){ +static int defragmentPage(MemPage *pPage, int nMaxFrag){ int i; /* Loop counter */ int pc; /* Address of the i-th cell */ int hdr; /* Offset to the page header */ @@ -60079,7 +60907,6 @@ static int defragmentPage(MemPage *pPage){ int iCellFirst; /* First allowable cell index */ int iCellLast; /* Last possible cell index */ - assert( sqlite3PagerIswriteable(pPage->pDbPage) ); assert( pPage->pBt!=0 ); assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE ); @@ -60091,9 +60918,56 @@ static int defragmentPage(MemPage *pPage){ cellOffset = pPage->cellOffset; nCell = pPage->nCell; assert( nCell==get2byte(&data[hdr+3]) ); - usableSize = pPage->pBt->usableSize; - cbrk = usableSize; iCellFirst = cellOffset + 2*nCell; + usableSize = pPage->pBt->usableSize; + + /* This block handles pages with two or fewer free blocks and nMaxFrag + ** or fewer fragmented bytes. In this case it is faster to move the + ** two (or one) blocks of cells using memmove() and add the required + ** offsets to each pointer in the cell-pointer array than it is to + ** reconstruct the entire page. */ + if( (int)data[hdr+7]<=nMaxFrag ){ + int iFree = get2byte(&data[hdr+1]); + if( iFree ){ + int iFree2 = get2byte(&data[iFree]); + + /* pageFindSlot() has already verified that free blocks are sorted + ** in order of offset within the page, and that no block extends + ** past the end of the page. Provided the two free slots do not + ** overlap, this guarantees that the memmove() calls below will not + ** overwrite the usableSize byte buffer, even if the database page + ** is corrupt. */ + assert( iFree2==0 || iFree2>iFree ); + assert( iFree+get2byte(&data[iFree+2]) <= usableSize ); + assert( iFree2==0 || iFree2+get2byte(&data[iFree2+2]) <= usableSize ); + + if( 0==iFree2 || (data[iFree2]==0 && data[iFree2+1]==0) ){ + u8 *pEnd = &data[cellOffset + nCell*2]; + u8 *pAddr; + int sz2 = 0; + int sz = get2byte(&data[iFree+2]); + int top = get2byte(&data[hdr+5]); + if( iFree2 ){ + if( iFree+sz>iFree2 ) return SQLITE_CORRUPT_PGNO(pPage->pgno); + sz2 = get2byte(&data[iFree2+2]); + assert( iFree+sz+sz2+iFree2-(iFree+sz) <= usableSize ); + memmove(&data[iFree+sz+sz2], &data[iFree+sz], iFree2-(iFree+sz)); + sz += sz2; + } + cbrk = top+sz; + assert( cbrk+(iFree-top) <= usableSize ); + memmove(&data[cbrk], &data[top], iFree-top); + for(pAddr=&data[cellOffset]; pAddriCellLast ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } assert( pc>=iCellFirst && pc<=iCellLast ); size = pPage->xCellSize(pPage, &src[pc]); cbrk -= size; if( cbrkusableSize ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } assert( cbrk+size<=usableSize && cbrk>=iCellFirst ); testcase( cbrk+size==usableSize ); @@ -60127,16 +61001,18 @@ static int defragmentPage(MemPage *pPage){ } memcpy(&data[cbrk], &src[pc], size); } + data[hdr+7] = 0; + + defragment_out: + if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } assert( cbrk>=iCellFirst ); put2byte(&data[hdr+5], cbrk); data[hdr+1] = 0; data[hdr+2] = 0; - data[hdr+7] = 0; memset(&data[iCellFirst], 0, cbrk-iCellFirst); assert( sqlite3PagerIswriteable(pPage->pDbPage) ); - if( cbrk-iCellFirst!=pPage->nFree ){ - return SQLITE_CORRUPT_BKPT; - } return SQLITE_OK; } @@ -60168,7 +61044,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ /* EVIDENCE-OF: R-06866-39125 Freeblocks are always connected in order of ** increasing offset. */ if( pc>usableSize-4 || pcpgno); return 0; } /* EVIDENCE-OF: R-22710-53328 The third and fourth bytes of each @@ -60179,7 +61055,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ testcase( x==4 ); testcase( x==3 ); if( pc < pPg->cellOffset+2*pPg->nCell || size+pc > usableSize ){ - *pRc = SQLITE_CORRUPT_BKPT; + *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno); return 0; }else if( x<4 ){ /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total @@ -60246,7 +61122,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ if( top==0 && pPage->pBt->usableSize==65536 ){ top = 65536; }else{ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } } @@ -60274,10 +61150,10 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ testcase( gap+2+nByte==top ); if( gap+2+nByte>top ){ assert( pPage->nCell>0 || CORRUPT_DB ); - rc = defragmentPage(pPage); + rc = defragmentPage(pPage, MIN(4, pPage->nFree - (2+nByte))); if( rc ) return rc; top = get2byteNotZero(&data[hdr+5]); - assert( gap+nByte<=top ); + assert( gap+2+nByte<=top ); } @@ -60327,7 +61203,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ /* Overwrite deleted information with zeros when the secure_delete ** option is enabled */ - if( pPage->pBt->btsFlags & BTS_SECURE_DELETE ){ + if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){ memset(&data[iStart], 0, iSize); } @@ -60342,11 +61218,11 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ while( (iFreeBlk = get2byte(&data[iPtr]))pgno); } iPtr = iFreeBlk; } - if( iFreeBlk>iLast ) return SQLITE_CORRUPT_BKPT; + if( iFreeBlk>iLast ) return SQLITE_CORRUPT_PGNO(pPage->pgno); assert( iFreeBlk>iPtr || iFreeBlk==0 ); /* At this point: @@ -60357,9 +61233,11 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ */ if( iFreeBlk && iEnd+3>=iFreeBlk ){ nFrag = iFreeBlk - iEnd; - if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_BKPT; + if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PGNO(pPage->pgno); iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]); - if( iEnd > pPage->pBt->usableSize ) return SQLITE_CORRUPT_BKPT; + if( iEnd > pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } iSize = iEnd - iStart; iFreeBlk = get2byte(&data[iFreeBlk]); } @@ -60371,20 +61249,20 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ if( iPtr>hdr+1 ){ int iPtrEnd = iPtr + get2byte(&data[iPtr+2]); if( iPtrEnd+3>=iStart ){ - if( iPtrEnd>iStart ) return SQLITE_CORRUPT_BKPT; + if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PGNO(pPage->pgno); nFrag += iStart - iPtrEnd; iSize = iEnd - iPtr; iStart = iPtr; } } - if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_BKPT; + if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PGNO(pPage->pgno); data[hdr+7] -= nFrag; } if( iStart==get2byte(&data[hdr+5]) ){ /* The new freeblock is at the beginning of the cell content area, ** so just extend the cell content area rather than create another ** freelist entry */ - if( iPtr!=hdr+1 ) return SQLITE_CORRUPT_BKPT; + if( iPtr!=hdr+1 ) return SQLITE_CORRUPT_PGNO(pPage->pgno); put2byte(&data[hdr+1], iFreeBlk); put2byte(&data[hdr+5], iEnd); }else{ @@ -60452,7 +61330,7 @@ static int decodeFlags(MemPage *pPage, int flagByte){ }else{ /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is ** an error. */ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } pPage->max1bytePayload = pBt->max1bytePayload; return SQLITE_OK; @@ -60468,6 +61346,16 @@ static int decodeFlags(MemPage *pPage, int flagByte){ ** we failed to detect any corruption. */ static int btreeInitPage(MemPage *pPage){ + int pc; /* Address of a freeblock within pPage->aData[] */ + u8 hdr; /* Offset to beginning of page header */ + u8 *data; /* Equal to pPage->aData */ + BtShared *pBt; /* The main btree structure */ + int usableSize; /* Amount of usable space on each page */ + u16 cellOffset; /* Offset from start of page to first cell pointer */ + int nFree; /* Number of unused bytes on the page */ + int top; /* First byte of the cell content area */ + int iCellFirst; /* First allowable cell or freeblock offset */ + int iCellLast; /* Last possible cell or freeblock offset */ assert( pPage->pBt!=0 ); assert( pPage->pBt->db!=0 ); @@ -60475,127 +61363,119 @@ static int btreeInitPage(MemPage *pPage){ assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) ); assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) ); assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) ); + assert( pPage->isInit==0 ); - if( !pPage->isInit ){ - int pc; /* Address of a freeblock within pPage->aData[] */ - u8 hdr; /* Offset to beginning of page header */ - u8 *data; /* Equal to pPage->aData */ - BtShared *pBt; /* The main btree structure */ - int usableSize; /* Amount of usable space on each page */ - u16 cellOffset; /* Offset from start of page to first cell pointer */ - int nFree; /* Number of unused bytes on the page */ - int top; /* First byte of the cell content area */ - int iCellFirst; /* First allowable cell or freeblock offset */ - int iCellLast; /* Last possible cell or freeblock offset */ - - pBt = pPage->pBt; - - hdr = pPage->hdrOffset; - data = pPage->aData; - /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating - ** the b-tree page type. */ - if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT; - assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); - pPage->maskPage = (u16)(pBt->pageSize - 1); - pPage->nOverflow = 0; - usableSize = pBt->usableSize; - pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize; - pPage->aDataEnd = &data[usableSize]; - pPage->aCellIdx = &data[cellOffset]; - pPage->aDataOfst = &data[pPage->childPtrSize]; - /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates - ** the start of the cell content area. A zero value for this integer is - ** interpreted as 65536. */ - top = get2byteNotZero(&data[hdr+5]); - /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the - ** number of cells on the page. */ - pPage->nCell = get2byte(&data[hdr+3]); - if( pPage->nCell>MX_CELL(pBt) ){ - /* To many cells for a single page. The page must be corrupt */ - return SQLITE_CORRUPT_BKPT; - } - testcase( pPage->nCell==MX_CELL(pBt) ); - /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only - ** possible for a root page of a table that contains no rows) then the - ** offset to the cell content area will equal the page size minus the - ** bytes of reserved space. */ - assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB ); - - /* A malformed database page might cause us to read past the end - ** of page when parsing a cell. - ** - ** The following block of code checks early to see if a cell extends - ** past the end of a page boundary and causes SQLITE_CORRUPT to be - ** returned if it does. - */ - iCellFirst = cellOffset + 2*pPage->nCell; - iCellLast = usableSize - 4; - if( pBt->db->flags & SQLITE_CellSizeCk ){ - int i; /* Index into the cell pointer array */ - int sz; /* Size of a cell */ - - if( !pPage->leaf ) iCellLast--; - for(i=0; inCell; i++){ - pc = get2byteAligned(&data[cellOffset+i*2]); - testcase( pc==iCellFirst ); - testcase( pc==iCellLast ); - if( pciCellLast ){ - return SQLITE_CORRUPT_BKPT; - } - sz = pPage->xCellSize(pPage, &data[pc]); - testcase( pc+sz==usableSize ); - if( pc+sz>usableSize ){ - return SQLITE_CORRUPT_BKPT; - } - } - if( !pPage->leaf ) iCellLast++; - } - - /* Compute the total free space on the page - ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the - ** start of the first freeblock on the page, or is zero if there are no - ** freeblocks. */ - pc = get2byte(&data[hdr+1]); - nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */ - if( pc>0 ){ - u32 next, size; - if( pciCellLast ){ - return SQLITE_CORRUPT_BKPT; /* Freeblock off the end of the page */ - } - next = get2byte(&data[pc]); - size = get2byte(&data[pc+2]); - nFree = nFree + size; - if( next<=pc+size+3 ) break; - pc = next; - } - if( next>0 ){ - return SQLITE_CORRUPT_BKPT; /* Freeblock not in ascending order */ - } - if( pc+size>(unsigned int)usableSize ){ - return SQLITE_CORRUPT_BKPT; /* Last freeblock extends past page end */ - } - } - - /* At this point, nFree contains the sum of the offset to the start - ** of the cell-content area plus the number of free bytes within - ** the cell-content area. If this is greater than the usable-size - ** of the page, then the page must be corrupted. This check also - ** serves to verify that the offset to the start of the cell-content - ** area, according to the page header, lies within the page. - */ - if( nFree>usableSize ){ - return SQLITE_CORRUPT_BKPT; - } - pPage->nFree = (u16)(nFree - iCellFirst); - pPage->isInit = 1; + pBt = pPage->pBt; + hdr = pPage->hdrOffset; + data = pPage->aData; + /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating + ** the b-tree page type. */ + if( decodeFlags(pPage, data[hdr]) ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); } + assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); + pPage->maskPage = (u16)(pBt->pageSize - 1); + pPage->nOverflow = 0; + usableSize = pBt->usableSize; + pPage->cellOffset = cellOffset = hdr + 8 + pPage->childPtrSize; + pPage->aDataEnd = &data[usableSize]; + pPage->aCellIdx = &data[cellOffset]; + pPage->aDataOfst = &data[pPage->childPtrSize]; + /* EVIDENCE-OF: R-58015-48175 The two-byte integer at offset 5 designates + ** the start of the cell content area. A zero value for this integer is + ** interpreted as 65536. */ + top = get2byteNotZero(&data[hdr+5]); + /* EVIDENCE-OF: R-37002-32774 The two-byte integer at offset 3 gives the + ** number of cells on the page. */ + pPage->nCell = get2byte(&data[hdr+3]); + if( pPage->nCell>MX_CELL(pBt) ){ + /* To many cells for a single page. The page must be corrupt */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + testcase( pPage->nCell==MX_CELL(pBt) ); + /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only + ** possible for a root page of a table that contains no rows) then the + ** offset to the cell content area will equal the page size minus the + ** bytes of reserved space. */ + assert( pPage->nCell>0 || top==usableSize || CORRUPT_DB ); + + /* A malformed database page might cause us to read past the end + ** of page when parsing a cell. + ** + ** The following block of code checks early to see if a cell extends + ** past the end of a page boundary and causes SQLITE_CORRUPT to be + ** returned if it does. + */ + iCellFirst = cellOffset + 2*pPage->nCell; + iCellLast = usableSize - 4; + if( pBt->db->flags & SQLITE_CellSizeCk ){ + int i; /* Index into the cell pointer array */ + int sz; /* Size of a cell */ + + if( !pPage->leaf ) iCellLast--; + for(i=0; inCell; i++){ + pc = get2byteAligned(&data[cellOffset+i*2]); + testcase( pc==iCellFirst ); + testcase( pc==iCellLast ); + if( pciCellLast ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + sz = pPage->xCellSize(pPage, &data[pc]); + testcase( pc+sz==usableSize ); + if( pc+sz>usableSize ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + } + if( !pPage->leaf ) iCellLast++; + } + + /* Compute the total free space on the page + ** EVIDENCE-OF: R-23588-34450 The two-byte integer at offset 1 gives the + ** start of the first freeblock on the page, or is zero if there are no + ** freeblocks. */ + pc = get2byte(&data[hdr+1]); + nFree = data[hdr+7] + top; /* Init nFree to non-freeblock free space */ + if( pc>0 ){ + u32 next, size; + if( pcpgno); + } + while( 1 ){ + if( pc>iCellLast ){ + /* Freeblock off the end of the page */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + next = get2byte(&data[pc]); + size = get2byte(&data[pc+2]); + nFree = nFree + size; + if( next<=pc+size+3 ) break; + pc = next; + } + if( next>0 ){ + /* Freeblock not in ascending order */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + if( pc+size>(unsigned int)usableSize ){ + /* Last freeblock extends past page end */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + } + + /* At this point, nFree contains the sum of the offset to the start + ** of the cell-content area plus the number of free bytes within + ** the cell-content area. If this is greater than the usable-size + ** of the page, then the page must be corrupted. This check also + ** serves to verify that the offset to the start of the cell-content + ** area, according to the page header, lies within the page. + */ + if( nFree>usableSize ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + pPage->nFree = (u16)(nFree - iCellFirst); + pPage->isInit = 1; return SQLITE_OK; } @@ -60614,7 +61494,7 @@ static void zeroPage(MemPage *pPage, int flags){ assert( sqlite3PagerGetData(pPage->pDbPage) == data ); assert( sqlite3PagerIswriteable(pPage->pDbPage) ); assert( sqlite3_mutex_held(pBt->mutex) ); - if( pBt->btsFlags & BTS_SECURE_DELETE ){ + if( pBt->btsFlags & BTS_FAST_SECURE ){ memset(&data[hdr], 0, pBt->usableSize - hdr); } data[hdr] = (char)flags; @@ -60759,7 +61639,7 @@ static int getAndInitPage( /* If obtaining a child page for a cursor, we must verify that the page is ** compatible with the root page. */ if( pCur && ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey) ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(pgno); releasePage(*ppPage); goto getAndInitPage_error; } @@ -61037,8 +61917,10 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( pBt->pCursor = 0; pBt->pPage1 = 0; if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY; -#ifdef SQLITE_SECURE_DELETE +#if defined(SQLITE_SECURE_DELETE) pBt->btsFlags |= BTS_SECURE_DELETE; +#elif defined(SQLITE_FAST_SECURE_DELETE) + pBt->btsFlags |= BTS_OVERWRITE; #endif /* EVIDENCE-OF: R-51873-39618 The page size for a database file is ** determined by the 2-byte integer located at an offset of 16 bytes from @@ -61486,19 +62368,34 @@ SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){ } /* -** Set the BTS_SECURE_DELETE flag if newFlag is 0 or 1. If newFlag is -1, -** then make no changes. Always return the value of the BTS_SECURE_DELETE -** setting after the change. +** Change the values for the BTS_SECURE_DELETE and BTS_OVERWRITE flags: +** +** newFlag==0 Both BTS_SECURE_DELETE and BTS_OVERWRITE are cleared +** newFlag==1 BTS_SECURE_DELETE set and BTS_OVERWRITE is cleared +** newFlag==2 BTS_SECURE_DELETE cleared and BTS_OVERWRITE is set +** newFlag==(-1) No changes +** +** This routine acts as a query if newFlag is less than zero +** +** With BTS_OVERWRITE set, deleted content is overwritten by zeros, but +** freelist leaf pages are not written back to the database. Thus in-page +** deleted content is cleared, but freelist deleted content is not. +** +** With BTS_SECURE_DELETE, operation is like BTS_OVERWRITE with the addition +** that freelist leaf pages are written back into the database, increasing +** the amount of disk I/O. */ SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){ int b; if( p==0 ) return 0; sqlite3BtreeEnter(p); + assert( BTS_OVERWRITE==BTS_SECURE_DELETE*2 ); + assert( BTS_FAST_SECURE==(BTS_OVERWRITE|BTS_SECURE_DELETE) ); if( newFlag>=0 ){ - p->pBt->btsFlags &= ~BTS_SECURE_DELETE; - if( newFlag ) p->pBt->btsFlags |= BTS_SECURE_DELETE; - } - b = (p->pBt->btsFlags & BTS_SECURE_DELETE)!=0; + p->pBt->btsFlags &= ~BTS_FAST_SECURE; + p->pBt->btsFlags |= BTS_SECURE_DELETE*newFlag; + } + b = (p->pBt->btsFlags & BTS_FAST_SECURE)/BTS_SECURE_DELETE; sqlite3BtreeLeave(p); return b; } @@ -61549,6 +62446,31 @@ SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){ #endif } +/* +** If the user has not set the safety-level for this database connection +** using "PRAGMA synchronous", and if the safety-level is not already +** set to the value passed to this function as the second parameter, +** set it so. +*/ +#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS +static void setDefaultSyncFlag(BtShared *pBt, u8 safety_level){ + sqlite3 *db; + Db *pDb; + if( (db=pBt->db)!=0 && (pDb=db->aDb)!=0 ){ + while( pDb->pBt==0 || pDb->pBt->pBt!=pBt ){ pDb++; } + if( pDb->bSyncSet==0 + && pDb->safety_level!=safety_level + && pDb!=&db->aDb[1] + ){ + pDb->safety_level = safety_level; + sqlite3PagerSetFlags(pBt->pPager, + pDb->safety_level | (db->flags & PAGER_FLAGS_MASK)); + } + } +} +#else +# define setDefaultSyncFlag(pBt,safety_level) +#endif /* ** Get a reference to pPage1 of the database file. This will @@ -61622,26 +62544,15 @@ static int lockBtree(BtShared *pBt){ if( rc!=SQLITE_OK ){ goto page1_init_failed; }else{ -#if SQLITE_DEFAULT_SYNCHRONOUS!=SQLITE_DEFAULT_WAL_SYNCHRONOUS - sqlite3 *db; - Db *pDb; - if( (db=pBt->db)!=0 && (pDb=db->aDb)!=0 ){ - while( pDb->pBt==0 || pDb->pBt->pBt!=pBt ){ pDb++; } - if( pDb->bSyncSet==0 - && pDb->safety_level==SQLITE_DEFAULT_SYNCHRONOUS+1 - ){ - pDb->safety_level = SQLITE_DEFAULT_WAL_SYNCHRONOUS+1; - sqlite3PagerSetFlags(pBt->pPager, - pDb->safety_level | (db->flags & PAGER_FLAGS_MASK)); - } - } -#endif + setDefaultSyncFlag(pBt, SQLITE_DEFAULT_WAL_SYNCHRONOUS+1); if( isOpen==0 ){ releasePage(pPage1); return SQLITE_OK; } } rc = SQLITE_NOTADB; + }else{ + setDefaultSyncFlag(pBt, SQLITE_DEFAULT_SYNCHRONOUS+1); } #endif @@ -61690,7 +62601,7 @@ static int lockBtree(BtShared *pBt){ pageSize-usableSize); return rc; } - if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){ + if( (pBt->db->flags & SQLITE_WriteSchema)==0 && nPage>nPageFile ){ rc = SQLITE_CORRUPT_BKPT; goto page1_init_failed; } @@ -62033,7 +62944,7 @@ static int setChildPtrmaps(MemPage *pPage){ Pgno pgno = pPage->pgno; assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - rc = btreeInitPage(pPage); + rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage); if( rc!=SQLITE_OK ) return rc; nCell = pPage->nCell; @@ -62076,7 +62987,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ if( eType==PTRMAP_OVERFLOW2 ){ /* The pointer is always the first 4 bytes of the page in this case. */ if( get4byte(pPage->aData)!=iFrom ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } put4byte(pPage->aData, iTo); }else{ @@ -62084,7 +62995,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ int nCell; int rc; - rc = btreeInitPage(pPage); + rc = pPage->isInit ? SQLITE_OK : btreeInitPage(pPage); if( rc ) return rc; nCell = pPage->nCell; @@ -62093,12 +63004,14 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ if( eType==PTRMAP_OVERFLOW1 ){ CellInfo info; pPage->xParseCell(pPage, pCell, &info); - if( info.nLocalaData+pPage->maskPage - && iFrom==get4byte(pCell+info.nSize-4) - ){ - put4byte(pCell+info.nSize-4, iTo); - break; + if( info.nLocal pPage->aData+pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } + if( iFrom==get4byte(pCell+info.nSize-4) ){ + put4byte(pCell+info.nSize-4, iTo); + break; + } } }else{ if( get4byte(pCell)==iFrom ){ @@ -62111,7 +63024,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ if( i==nCell ){ if( eType!=PTRMAP_BTREE || get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } put4byte(&pPage->aData[pPage->hdrOffset+8], iTo); } @@ -62773,7 +63686,12 @@ SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){ assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK ); assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) ); sqlite3BtreeEnter(p); - rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); + if( op==SAVEPOINT_ROLLBACK ){ + rc = saveAllCursors(pBt, 0, 0); + } + if( rc==SQLITE_OK ){ + rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint); + } if( rc==SQLITE_OK ){ if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){ pBt->nPage = 0; @@ -62983,7 +63901,7 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ CellInfo info; int iPage = pCur->iPage; memset(&info, 0, sizeof(info)); - btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info); + btreeParseCell(pCur->apPage[iPage], pCur->ix, &info); assert( CORRUPT_DB || memcmp(&info, &pCur->info, sizeof(info))==0 ); } #else @@ -62993,7 +63911,7 @@ static SQLITE_NOINLINE void getCellInfo(BtCursor *pCur){ if( pCur->info.nSize==0 ){ int iPage = pCur->iPage; pCur->curFlags |= BTCF_ValidNKey; - btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); + btreeParseCell(pCur->apPage[iPage],pCur->ix,&pCur->info); }else{ assertCellInfo(pCur); } @@ -63159,7 +64077,6 @@ static int copyPayload( ** ** 0: The operation is a read. Populate the overflow cache. ** 1: The operation is a write. Populate the overflow cache. -** 2: The operation is a read. Do not populate the overflow cache. ** ** A total of "amt" bytes are read or written beginning at "offset". ** Data is read to or from the buffer pBuf. @@ -63167,13 +64084,13 @@ static int copyPayload( ** The content being read or written might appear on the main page ** or be scattered out on multiple overflow pages. ** -** If the current cursor entry uses one or more overflow pages and the -** eOp argument is not 2, this function may allocate space for and lazily -** populates the overflow page-list cache array (BtCursor.aOverflow). +** If the current cursor entry uses one or more overflow pages +** this function may allocate space for and lazily populate +** the overflow page-list cache array (BtCursor.aOverflow). ** Subsequent calls use this cache to make seeking to the supplied offset ** more efficient. ** -** Once an overflow page-list cache has been allocated, it may be +** Once an overflow page-list cache has been allocated, it must be ** invalidated if some other cursor writes to the same table, or if ** the cursor is moved to a different row. Additionally, in auto-vacuum ** mode, the following events may invalidate an overflow page-list cache. @@ -63195,21 +64112,17 @@ static int accessPayload( MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */ BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */ #ifdef SQLITE_DIRECT_OVERFLOW_READ - unsigned char * const pBufStart = pBuf; - int bEnd; /* True if reading to end of data */ + unsigned char * const pBufStart = pBuf; /* Start of original out buffer */ #endif assert( pPage ); + assert( eOp==0 || eOp==1 ); assert( pCur->eState==CURSOR_VALID ); - assert( pCur->aiIdx[pCur->iPage]nCell ); + assert( pCur->ixnCell ); assert( cursorHoldsMutex(pCur) ); - assert( eOp!=2 || offset==0 ); /* Always start from beginning for eOp==2 */ getCellInfo(pCur); aPayload = pCur->info.pPayload; -#ifdef SQLITE_DIRECT_OVERFLOW_READ - bEnd = offset+amt==pCur->info.nPayload; -#endif assert( offset+amt <= pCur->info.nPayload ); assert( aPayload > pPage->aData ); @@ -63219,7 +64132,7 @@ static int accessPayload( ** &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] ** but is recast into its current form to avoid integer overflow problems */ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pPage->pgno); } /* Check if data must be read/written to/from the btree page itself. */ @@ -63228,7 +64141,7 @@ static int accessPayload( if( a+offset>pCur->info.nLocal ){ a = pCur->info.nLocal - offset; } - rc = copyPayload(&aPayload[offset], pBuf, a, (eOp & 0x01), pPage->pDbPage); + rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage); offset = 0; pBuf += a; amt -= a; @@ -63244,53 +64157,46 @@ static int accessPayload( nextPage = get4byte(&aPayload[pCur->info.nLocal]); /* If the BtCursor.aOverflow[] has not been allocated, allocate it now. - ** Except, do not allocate aOverflow[] for eOp==2. ** ** The aOverflow[] array is sized at one entry for each overflow page ** in the overflow chain. The page number of the first overflow page is ** stored in aOverflow[0], etc. A value of 0 in the aOverflow[] array ** means "not yet known" (the cache is lazily populated). */ - if( eOp!=2 && (pCur->curFlags & BTCF_ValidOvfl)==0 ){ + if( (pCur->curFlags & BTCF_ValidOvfl)==0 ){ int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; if( nOvfl>pCur->nOvflAlloc ){ Pgno *aNew = (Pgno*)sqlite3Realloc( pCur->aOverflow, nOvfl*2*sizeof(Pgno) ); if( aNew==0 ){ - rc = SQLITE_NOMEM_BKPT; + return SQLITE_NOMEM_BKPT; }else{ pCur->nOvflAlloc = nOvfl*2; pCur->aOverflow = aNew; } } - if( rc==SQLITE_OK ){ - memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno)); - pCur->curFlags |= BTCF_ValidOvfl; + memset(pCur->aOverflow, 0, nOvfl*sizeof(Pgno)); + pCur->curFlags |= BTCF_ValidOvfl; + }else{ + /* If the overflow page-list cache has been allocated and the + ** entry for the first required overflow page is valid, skip + ** directly to it. + */ + if( pCur->aOverflow[offset/ovflSize] ){ + iIdx = (offset/ovflSize); + nextPage = pCur->aOverflow[iIdx]; + offset = (offset%ovflSize); } } - /* If the overflow page-list cache has been allocated and the - ** entry for the first required overflow page is valid, skip - ** directly to it. - */ - if( (pCur->curFlags & BTCF_ValidOvfl)!=0 - && pCur->aOverflow[offset/ovflSize] - ){ - iIdx = (offset/ovflSize); - nextPage = pCur->aOverflow[iIdx]; - offset = (offset%ovflSize); - } - - for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){ - + assert( rc==SQLITE_OK && amt>0 ); + while( nextPage ){ /* If required, populate the overflow page-list cache. */ - if( (pCur->curFlags & BTCF_ValidOvfl)!=0 ){ - assert( pCur->aOverflow[iIdx]==0 - || pCur->aOverflow[iIdx]==nextPage - || CORRUPT_DB ); - pCur->aOverflow[iIdx] = nextPage; - } + assert( pCur->aOverflow[iIdx]==0 + || pCur->aOverflow[iIdx]==nextPage + || CORRUPT_DB ); + pCur->aOverflow[iIdx] = nextPage; if( offset>=ovflSize ){ /* The only reason to read this page is to obtain the page @@ -63298,11 +64204,7 @@ static int accessPayload( ** data is not required. So first try to lookup the overflow ** page-list cache, if any, then fall back to the getOverflowPage() ** function. - ** - ** Note that the aOverflow[] array must be allocated because eOp!=2 - ** here. If eOp==2, then offset==0 and this branch is never taken. */ - assert( eOp!=2 ); assert( pCur->curFlags & BTCF_ValidOvfl ); assert( pCur->pBtree->db==pBt->db ); if( pCur->aOverflow[iIdx+1] ){ @@ -63316,7 +64218,7 @@ static int accessPayload( ** range of data that is being read (eOp==0) or written (eOp!=0). */ #ifdef SQLITE_DIRECT_OVERFLOW_READ - sqlite3_file *fd; + sqlite3_file *fd; /* File from which to do direct overflow read */ #endif int a = amt; if( a + offset > ovflSize ){ @@ -63328,27 +64230,25 @@ static int accessPayload( ** ** 1) this is a read operation, and ** 2) data is required from the start of this overflow page, and - ** 3) the database is file-backed, and - ** 4) there is no open write-transaction, and - ** 5) the database is not a WAL database, - ** 6) all data from the page is being read. - ** 7) at least 4 bytes have already been read into the output buffer + ** 3) there is no open write-transaction, and + ** 4) the database is file-backed, and + ** 5) the page is not in the WAL file + ** 6) at least 4 bytes have already been read into the output buffer ** ** then data can be read directly from the database file into the ** output buffer, bypassing the page-cache altogether. This speeds ** up loading large records that span many overflow pages. */ - if( (eOp&0x01)==0 /* (1) */ + if( eOp==0 /* (1) */ && offset==0 /* (2) */ - && (bEnd || a==ovflSize) /* (6) */ - && pBt->inTransaction==TRANS_READ /* (4) */ - && (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (3) */ - && 0==sqlite3PagerUseWal(pBt->pPager) /* (5) */ - && &pBuf[-4]>=pBufStart /* (7) */ + && pBt->inTransaction==TRANS_READ /* (3) */ + && (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (4) */ + && 0==sqlite3PagerUseWal(pBt->pPager, nextPage) /* (5) */ + && &pBuf[-4]>=pBufStart /* (6) */ ){ u8 aSave[4]; u8 *aWrite = &pBuf[-4]; - assert( aWrite>=pBufStart ); /* hence (7) */ + assert( aWrite>=pBufStart ); /* due to (6) */ memcpy(aSave, aWrite, 4); rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1)); nextPage = get4byte(aWrite); @@ -63359,24 +64259,28 @@ static int accessPayload( { DbPage *pDbPage; rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage, - ((eOp&0x01)==0 ? PAGER_GET_READONLY : 0) + (eOp==0 ? PAGER_GET_READONLY : 0) ); if( rc==SQLITE_OK ){ aPayload = sqlite3PagerGetData(pDbPage); nextPage = get4byte(aPayload); - rc = copyPayload(&aPayload[offset+4], pBuf, a, (eOp&0x01), pDbPage); + rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage); sqlite3PagerUnref(pDbPage); offset = 0; } } amt -= a; + if( amt==0 ) return rc; pBuf += a; } + if( rc ) break; + iIdx++; } } if( rc==SQLITE_OK && amt>0 ){ - return SQLITE_CORRUPT_BKPT; + /* Overflow chain ends prematurely */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); } return rc; } @@ -63402,24 +64306,37 @@ SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void assert( cursorHoldsMutex(pCur) ); assert( pCur->eState==CURSOR_VALID ); assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + assert( pCur->ixapPage[pCur->iPage]->nCell ); return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0); } + +/* +** This variant of sqlite3BtreePayload() works even if the cursor has not +** in the CURSOR_VALID state. It is only used by the sqlite3_blob_read() +** interface. +*/ #ifndef SQLITE_OMIT_INCRBLOB -SQLITE_PRIVATE int sqlite3BtreePayloadChecked(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ +static SQLITE_NOINLINE int accessPayloadChecked( + BtCursor *pCur, + u32 offset, + u32 amt, + void *pBuf +){ int rc; if ( pCur->eState==CURSOR_INVALID ){ return SQLITE_ABORT; } assert( cursorOwnsBtShared(pCur) ); - rc = restoreCursorPosition(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_VALID ); - assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] ); - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); - rc = accessPayload(pCur, offset, amt, pBuf, 0); + rc = btreeRestoreCursorPosition(pCur); + return rc ? rc : accessPayload(pCur, offset, amt, pBuf, 0); +} +SQLITE_PRIVATE int sqlite3BtreePayloadChecked(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){ + if( pCur->eState==CURSOR_VALID ){ + assert( cursorOwnsBtShared(pCur) ); + return accessPayload(pCur, offset, amt, pBuf, 0); + }else{ + return accessPayloadChecked(pCur, offset, amt, pBuf); } - return rc; } #endif /* SQLITE_OMIT_INCRBLOB */ @@ -63451,7 +64368,7 @@ static const void *fetchPayload( assert( pCur->eState==CURSOR_VALID ); assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); assert( cursorOwnsBtShared(pCur) ); - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + assert( pCur->ixapPage[pCur->iPage]->nCell ); assert( pCur->info.nSize>0 ); assert( pCur->info.pPayload>pCur->apPage[pCur->iPage]->aData || CORRUPT_DB ); assert( pCur->info.pPayloadapPage[pCur->iPage]->aDataEnd ||CORRUPT_DB); @@ -63502,13 +64419,13 @@ static int moveToChild(BtCursor *pCur, u32 newPgno){ } pCur->info.nSize = 0; pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); - pCur->iPage++; - pCur->aiIdx[pCur->iPage] = 0; + pCur->aiIdx[pCur->iPage++] = pCur->ix; + pCur->ix = 0; return getAndInitPage(pBt, newPgno, &pCur->apPage[pCur->iPage], pCur, pCur->curPagerFlags); } -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG /* ** Page pParent is an internal (non-leaf) tree page. This function ** asserts that page number iChild is the left-child if the iIdx'th @@ -63551,6 +64468,7 @@ static void moveToParent(BtCursor *pCur){ testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell ); pCur->info.nSize = 0; pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + pCur->ix = pCur->aiIdx[pCur->iPage-1]; releasePageNotNull(pCur->apPage[pCur->iPage--]); } @@ -63628,11 +64546,11 @@ static int moveToRoot(BtCursor *pCur){ ** (or the freelist). */ assert( pRoot->intKey==1 || pRoot->intKey==0 ); if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){ - return SQLITE_CORRUPT_BKPT; + return SQLITE_CORRUPT_PGNO(pCur->apPage[pCur->iPage]->pgno); } skip_init: - pCur->aiIdx[0] = 0; + pCur->ix = 0; pCur->info.nSize = 0; pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidNKey|BTCF_ValidOvfl); @@ -63666,8 +64584,8 @@ static int moveToLeftmost(BtCursor *pCur){ assert( cursorOwnsBtShared(pCur) ); assert( pCur->eState==CURSOR_VALID ); while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){ - assert( pCur->aiIdx[pCur->iPage]nCell ); - pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage])); + assert( pCur->ixnCell ); + pgno = get4byte(findCell(pPage, pCur->ix)); rc = moveToChild(pCur, pgno); } return rc; @@ -63692,11 +64610,11 @@ static int moveToRightmost(BtCursor *pCur){ assert( pCur->eState==CURSOR_VALID ); while( !(pPage = pCur->apPage[pCur->iPage])->leaf ){ pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]); - pCur->aiIdx[pCur->iPage] = pPage->nCell; + pCur->ix = pPage->nCell; rc = moveToChild(pCur, pgno); if( rc ) return rc; } - pCur->aiIdx[pCur->iPage] = pPage->nCell-1; + pCur->ix = pPage->nCell-1; assert( pCur->info.nSize==0 ); assert( (pCur->curFlags & BTCF_ValidNKey)==0 ); return SQLITE_OK; @@ -63744,7 +64662,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ for(ii=0; iiiPage; ii++){ assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell ); } - assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 ); + assert( pCur->ix==pCur->apPage[pCur->iPage]->nCell-1 ); assert( pCur->apPage[pCur->iPage]->leaf ); #endif return SQLITE_OK; @@ -63825,9 +64743,29 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( *pRes = 0; return SQLITE_OK; } - if( (pCur->curFlags & BTCF_AtLast)!=0 && pCur->info.nKeyinfo.nKeycurFlags & BTCF_AtLast)!=0 ){ + *pRes = -1; + return SQLITE_OK; + } + /* If the requested key is one more than the previous key, then + ** try to get there using sqlite3BtreeNext() rather than a full + ** binary search. This is an optimization only. The correct answer + ** is still obtained without this case, only a little more slowely */ + if( pCur->info.nKey+1==intKey && !pCur->skipNext ){ + *pRes = 0; + rc = sqlite3BtreeNext(pCur, 0); + if( rc==SQLITE_OK ){ + getCellInfo(pCur); + if( pCur->info.nKey==intKey ){ + return SQLITE_OK; + } + }else if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + }else{ + return rc; + } + } } } @@ -63874,14 +64812,16 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( upr = pPage->nCell-1; assert( biasRight==0 || biasRight==1 ); idx = upr>>(1-biasRight); /* idx = biasRight ? upr : (lwr+upr)/2; */ - pCur->aiIdx[pCur->iPage] = (u16)idx; + pCur->ix = (u16)idx; if( xRecordCompare==0 ){ for(;;){ i64 nCellKey; pCell = findCellPastPtr(pPage, idx); if( pPage->intKeyLeaf ){ while( 0x80 <= *(pCell++) ){ - if( pCell>=pPage->aDataEnd ) return SQLITE_CORRUPT_BKPT; + if( pCell>=pPage->aDataEnd ){ + return SQLITE_CORRUPT_PGNO(pPage->pgno); + } } } getVarint(pCell, (u64*)&nCellKey); @@ -63893,7 +64833,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( if( lwr>upr ){ c = +1; break; } }else{ assert( nCellKey==intKey ); - pCur->aiIdx[pCur->iPage] = (u16)idx; + pCur->ix = (u16)idx; if( !pPage->leaf ){ lwr = idx; goto moveto_next_layer; @@ -63954,7 +64894,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( testcase( nCell==1 ); /* Invalid key size: 0x80 0x80 0x01 */ testcase( nCell==2 ); /* Minimum legal index key size */ if( nCell<2 ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(pPage->pgno); goto moveto_finish; } pCellKey = sqlite3Malloc( nCell+18 ); @@ -63962,8 +64902,9 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( rc = SQLITE_NOMEM_BKPT; goto moveto_finish; } - pCur->aiIdx[pCur->iPage] = (u16)idx; - rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 2); + pCur->ix = (u16)idx; + rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0); + pCur->curFlags &= ~BTCF_ValidOvfl; if( rc ){ sqlite3_free(pCellKey); goto moveto_finish; @@ -63983,7 +64924,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( assert( c==0 ); *pRes = 0; rc = SQLITE_OK; - pCur->aiIdx[pCur->iPage] = (u16)idx; + pCur->ix = (u16)idx; if( pIdxKey->errCode ) rc = SQLITE_CORRUPT; goto moveto_finish; } @@ -63995,8 +64936,8 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) ); assert( pPage->isInit ); if( pPage->leaf ){ - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); - pCur->aiIdx[pCur->iPage] = (u16)idx; + assert( pCur->ixapPage[pCur->iPage]->nCell ); + pCur->ix = (u16)idx; *pRes = c; rc = SQLITE_OK; goto moveto_finish; @@ -64007,7 +64948,7 @@ moveto_next_layer: }else{ chldPg = get4byte(findCell(pPage, lwr)); } - pCur->aiIdx[pCur->iPage] = (u16)lwr; + pCur->ix = (u16)lwr; rc = moveToChild(pCur, chldPg); if( rc ) break; } @@ -64034,10 +64975,36 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){ } /* -** Advance the cursor to the next entry in the database. If -** successful then set *pRes=0. If the cursor -** was already pointing to the last entry in the database before -** this routine was called, then set *pRes=1. +** Return an estimate for the number of rows in the table that pCur is +** pointing to. Return a negative number if no estimate is currently +** available. +*/ +SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor *pCur){ + i64 n; + u8 i; + + assert( cursorOwnsBtShared(pCur) ); + assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); + + /* Currently this interface is only called by the OP_IfSmaller + ** opcode, and it that case the cursor will always be valid and + ** will always point to a leaf node. */ + if( NEVER(pCur->eState!=CURSOR_VALID) ) return -1; + if( NEVER(pCur->apPage[pCur->iPage]->leaf==0) ) return -1; + + for(n=1, i=0; i<=pCur->iPage; i++){ + n *= pCur->apPage[i]->nCell; + } + return n; +} + +/* +** Advance the cursor to the next entry in the database. +** Return value: +** +** SQLITE_OK success +** SQLITE_DONE cursor is already pointing at the last element +** otherwise some kind of error occurred ** ** The main entry point is sqlite3BtreeNext(). That routine is optimized ** for the common case of merely incrementing the cell counter BtCursor.aiIdx @@ -64045,23 +65012,19 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){ ** routine is called when it is necessary to move to a different page or ** to restore the cursor. ** -** The calling function will set *pRes to 0 or 1. The initial *pRes value -** will be 1 if the cursor being stepped corresponds to an SQL index and -** if this routine could have been skipped if that SQL index had been -** a unique index. Otherwise the caller will have set *pRes to zero. -** Zero is the common case. The btree implementation is free to use the -** initial *pRes value as a hint to improve performance, but the current -** SQLite btree implementation does not. (Note that the comdb2 btree -** implementation does use this hint, however.) +** If bit 0x01 of the F argument in sqlite3BtreeNext(C,F) is 1, then the +** cursor corresponds to an SQL index and this routine could have been +** skipped if the SQL index had been a unique index. The F argument +** is a hint to the implement. SQLite btree implementation does not use +** this hint, but COMDB2 does. */ -static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){ +static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){ int rc; int idx; MemPage *pPage; assert( cursorOwnsBtShared(pCur) ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); - assert( *pRes==0 ); if( pCur->eState!=CURSOR_VALID ){ assert( (pCur->curFlags & BTCF_ValidOvfl)==0 ); rc = restoreCursorPosition(pCur); @@ -64069,8 +65032,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){ return rc; } if( CURSOR_INVALID==pCur->eState ){ - *pRes = 1; - return SQLITE_OK; + return SQLITE_DONE; } if( pCur->skipNext ){ assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_SKIPNEXT ); @@ -64084,7 +65046,7 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){ } pPage = pCur->apPage[pCur->iPage]; - idx = ++pCur->aiIdx[pCur->iPage]; + idx = ++pCur->ix; assert( pPage->isInit ); /* If the database file is corrupt, it is possible for the value of idx @@ -64102,15 +65064,14 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){ } do{ if( pCur->iPage==0 ){ - *pRes = 1; pCur->eState = CURSOR_INVALID; - return SQLITE_OK; + return SQLITE_DONE; } moveToParent(pCur); pPage = pCur->apPage[pCur->iPage]; - }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell ); + }while( pCur->ix>=pPage->nCell ); if( pPage->intKey ){ - return sqlite3BtreeNext(pCur, pRes); + return sqlite3BtreeNext(pCur, 0); }else{ return SQLITE_OK; } @@ -64121,20 +65082,19 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){ return moveToLeftmost(pCur); } } -SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){ +SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int flags){ MemPage *pPage; + UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */ assert( cursorOwnsBtShared(pCur) ); - assert( pRes!=0 ); - assert( *pRes==0 || *pRes==1 ); + assert( flags==0 || flags==1 ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); pCur->info.nSize = 0; pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); - *pRes = 0; - if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur, pRes); + if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur); pPage = pCur->apPage[pCur->iPage]; - if( (++pCur->aiIdx[pCur->iPage])>=pPage->nCell ){ - pCur->aiIdx[pCur->iPage]--; - return btreeNext(pCur, pRes); + if( (++pCur->ix)>=pPage->nCell ){ + pCur->ix--; + return btreeNext(pCur); } if( pPage->leaf ){ return SQLITE_OK; @@ -64144,10 +65104,12 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){ } /* -** Step the cursor to the back to the previous entry in the database. If -** successful then set *pRes=0. If the cursor -** was already pointing to the first entry in the database before -** this routine was called, then set *pRes=1. +** Step the cursor to the back to the previous entry in the database. +** Return values: +** +** SQLITE_OK success +** SQLITE_DONE the cursor is already on the first element of the table +** otherwise some kind of error occurred ** ** The main entry point is sqlite3BtreePrevious(). That routine is optimized ** for the common case of merely decrementing the cell counter BtCursor.aiIdx @@ -64155,22 +65117,17 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){ ** helper routine is called when it is necessary to move to a different page ** or to restore the cursor. ** -** The calling function will set *pRes to 0 or 1. The initial *pRes value -** will be 1 if the cursor being stepped corresponds to an SQL index and -** if this routine could have been skipped if that SQL index had been -** a unique index. Otherwise the caller will have set *pRes to zero. -** Zero is the common case. The btree implementation is free to use the -** initial *pRes value as a hint to improve performance, but the current -** SQLite btree implementation does not. (Note that the comdb2 btree -** implementation does use this hint, however.) +** If bit 0x01 of the F argument to sqlite3BtreePrevious(C,F) is 1, then +** the cursor corresponds to an SQL index and this routine could have been +** skipped if the SQL index had been a unique index. The F argument is a +** hint to the implement. The native SQLite btree implementation does not +** use this hint, but COMDB2 does. */ -static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){ +static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur){ int rc; MemPage *pPage; assert( cursorOwnsBtShared(pCur) ); - assert( pRes!=0 ); - assert( *pRes==0 ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 ); assert( pCur->info.nSize==0 ); @@ -64180,8 +65137,7 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){ return rc; } if( CURSOR_INVALID==pCur->eState ){ - *pRes = 1; - return SQLITE_OK; + return SQLITE_DONE; } if( pCur->skipNext ){ assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_SKIPNEXT ); @@ -64197,47 +65153,45 @@ static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){ pPage = pCur->apPage[pCur->iPage]; assert( pPage->isInit ); if( !pPage->leaf ){ - int idx = pCur->aiIdx[pCur->iPage]; + int idx = pCur->ix; rc = moveToChild(pCur, get4byte(findCell(pPage, idx))); if( rc ) return rc; rc = moveToRightmost(pCur); }else{ - while( pCur->aiIdx[pCur->iPage]==0 ){ + while( pCur->ix==0 ){ if( pCur->iPage==0 ){ pCur->eState = CURSOR_INVALID; - *pRes = 1; - return SQLITE_OK; + return SQLITE_DONE; } moveToParent(pCur); } assert( pCur->info.nSize==0 ); assert( (pCur->curFlags & (BTCF_ValidOvfl))==0 ); - pCur->aiIdx[pCur->iPage]--; + pCur->ix--; pPage = pCur->apPage[pCur->iPage]; if( pPage->intKey && !pPage->leaf ){ - rc = sqlite3BtreePrevious(pCur, pRes); + rc = sqlite3BtreePrevious(pCur, 0); }else{ rc = SQLITE_OK; } } return rc; } -SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){ +SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int flags){ assert( cursorOwnsBtShared(pCur) ); - assert( pRes!=0 ); - assert( *pRes==0 || *pRes==1 ); + assert( flags==0 || flags==1 ); assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID ); - *pRes = 0; + UNUSED_PARAMETER( flags ); /* Used in COMDB2 but not native SQLite */ pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey); pCur->info.nSize = 0; if( pCur->eState!=CURSOR_VALID - || pCur->aiIdx[pCur->iPage]==0 + || pCur->ix==0 || pCur->apPage[pCur->iPage]->leaf==0 ){ - return btreePrevious(pCur, pRes); + return btreePrevious(pCur); } - pCur->aiIdx[pCur->iPage]--; + pCur->ix--; return SQLITE_OK; } @@ -64343,7 +65297,7 @@ static int allocateBtreePage( } testcase( iTrunk==mxPage ); if( iTrunk>mxPage || nSearch++ > n ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(pPrevTrunk ? pPrevTrunk->pgno : 1); }else{ rc = btreeGetUnusedPage(pBt, iTrunk, &pTrunk, 0); } @@ -64372,7 +65326,7 @@ static int allocateBtreePage( TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); }else if( k>(u32)(pBt->usableSize/4 - 2) ){ /* Value of k is out of range. Database corruption */ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(iTrunk); goto end_allocate_page; #ifndef SQLITE_OMIT_AUTOVACUUM }else if( searchList @@ -64406,7 +65360,7 @@ static int allocateBtreePage( MemPage *pNewTrunk; Pgno iNewTrunk = get4byte(&pTrunk->aData[8]); if( iNewTrunk>mxPage ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(iTrunk); goto end_allocate_page; } testcase( iNewTrunk==mxPage ); @@ -64471,7 +65425,7 @@ static int allocateBtreePage( iPage = get4byte(&aData[8+closest*4]); testcase( iPage==mxPage ); if( iPage>mxPage ){ - rc = SQLITE_CORRUPT_BKPT; + rc = SQLITE_CORRUPT_PGNO(iTrunk); goto end_allocate_page; } testcase( iPage==mxPage ); @@ -64741,7 +65695,8 @@ static int clearCell( return SQLITE_OK; /* No overflow pages. Return without doing anything */ } if( pCell+pInfo->nSize-1 > pPage->aData+pPage->maskPage ){ - return SQLITE_CORRUPT_BKPT; /* Cell extends past end of page */ + /* Cell extends past end of page */ + return SQLITE_CORRUPT_PGNO(pPage->pgno); } ovflPgno = get4byte(pCell + pInfo->nSize - 4); assert( pBt->usableSize > 4 ); @@ -64877,7 +65832,7 @@ static int fillInCell( ** Use a call to btreeParseCellPtr() to verify that the values above ** were computed correctly. */ -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG { CellInfo info; pPage->xParseCell(pPage, pCell, &info); @@ -65836,7 +66791,7 @@ static int balance_nonroot( ** In this case, temporarily copy the cell into the aOvflSpace[] ** buffer. It will be copied out again as soon as the aSpace[] buffer ** is allocated. */ - if( pBt->btsFlags & BTS_SECURE_DELETE ){ + if( pBt->btsFlags & BTS_FAST_SECURE ){ int iOff; iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData); @@ -66006,7 +66961,6 @@ static int balance_nonroot( for(i=0; inFree; - if( szNew[i]<0 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; } for(j=0; jnOverflow; j++){ szNew[i] += 2 + p->xCellSize(p, p->apOvfl[j]); } @@ -66404,7 +67358,7 @@ static int balance_nonroot( ** free space needs to be up front. */ assert( nNew==1 || CORRUPT_DB ); - rc = defragmentPage(apNew[0]); + rc = defragmentPage(apNew[0], -1); testcase( rc!=SQLITE_OK ); assert( apNew[0]->nFree == (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2) @@ -66560,8 +67514,8 @@ static int balance(BtCursor *pCur){ rc = balance_deeper(pPage, &pCur->apPage[1]); if( rc==SQLITE_OK ){ pCur->iPage = 1; + pCur->ix = 0; pCur->aiIdx[0] = 0; - pCur->aiIdx[1] = 0; assert( pCur->apPage[1]->nOverflow ); } }else{ @@ -66685,7 +67639,7 @@ static int balance(BtCursor *pCur){ SQLITE_PRIVATE int sqlite3BtreeInsert( BtCursor *pCur, /* Insert data into the table of this cursor */ const BtreePayload *pX, /* Content of the row to be inserted */ - int appendBias, /* True if this is likely an append */ + int flags, /* True if this is likely an append */ int seekResult /* Result of prior MovetoUnpacked() call */ ){ int rc; @@ -66698,6 +67652,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( unsigned char *oldCell; unsigned char *newCell = 0; + assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND))==flags ); + if( pCur->eState==CURSOR_FAULT ){ assert( pCur->skipNext!=SQLITE_OK ); return pCur->skipNext; @@ -66736,21 +67692,23 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( assert( pX->pKey==0 ); /* If this is an insert into a table b-tree, invalidate any incrblob ** cursors open on the row being replaced */ - invalidateIncrblobCursors(p, pX->nKey, 0); + invalidateIncrblobCursors(p, pCur->pgnoRoot, pX->nKey, 0); + + /* If BTREE_SAVEPOSITION is set, the cursor must already be pointing + ** to a row with the same key as the new entry being inserted. */ + assert( (flags & BTREE_SAVEPOSITION)==0 || + ((pCur->curFlags&BTCF_ValidNKey)!=0 && pX->nKey==pCur->info.nKey) ); /* If the cursor is currently on the last row and we are appending a ** new row onto the end, set the "loc" to avoid an unnecessary ** btreeMoveto() call */ if( (pCur->curFlags&BTCF_ValidNKey)!=0 && pX->nKey==pCur->info.nKey ){ loc = 0; - }else if( (pCur->curFlags&BTCF_ValidNKey)!=0 && pX->nKey>0 - && pCur->info.nKey==pX->nKey-1 ){ - loc = -1; }else if( loc==0 ){ - rc = sqlite3BtreeMovetoUnpacked(pCur, 0, pX->nKey, appendBias, &loc); + rc = sqlite3BtreeMovetoUnpacked(pCur, 0, pX->nKey, flags!=0, &loc); if( rc ) return rc; } - }else if( loc==0 ){ + }else if( loc==0 && (flags & BTREE_SAVEPOSITION)==0 ){ if( pX->nMem ){ UnpackedRecord r; r.pKeyInfo = pCur->pKeyInfo; @@ -66761,9 +67719,9 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( r.r1 = 0; r.r2 = 0; r.eqSeen = 0; - rc = sqlite3BtreeMovetoUnpacked(pCur, &r, 0, appendBias, &loc); + rc = sqlite3BtreeMovetoUnpacked(pCur, &r, 0, flags!=0, &loc); }else{ - rc = btreeMoveto(pCur, pX->pKey, pX->nKey, appendBias, &loc); + rc = btreeMoveto(pCur, pX->pKey, pX->nKey, flags!=0, &loc); } if( rc ) return rc; } @@ -66783,7 +67741,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( if( rc ) goto end_insert; assert( szNew==pPage->xCellSize(pPage, newCell) ); assert( szNew <= MX_CELL_SIZE(pBt) ); - idx = pCur->aiIdx[pCur->iPage]; + idx = pCur->ix; if( loc==0 ){ CellInfo info; assert( idxnCell ); @@ -66796,12 +67754,18 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( memcpy(newCell, oldCell, 4); } rc = clearCell(pPage, oldCell, &info); - if( info.nSize==szNew && info.nLocal==info.nPayload ){ + if( info.nSize==szNew && info.nLocal==info.nPayload + && (!ISAUTOVACUUM || szNewminLocal) + ){ /* Overwrite the old cell with the new if they are the same size. ** We could also try to do this if the old cell is smaller, then add ** the leftover space to the free list. But experiments show that ** doing that is no faster then skipping this optimization and just - ** calling dropCell() and insertCell(). */ + ** calling dropCell() and insertCell(). + ** + ** This optimization cannot be used on an autovacuum database if the + ** new entry uses overflow pages, as the insertCell() call below is + ** necessary to add the PTRMAP_OVERFLOW1 pointer-map entry. */ assert( rc==SQLITE_OK ); /* clearCell never fails when nLocal==nPayload */ if( oldCell+szNew > pPage->aDataEnd ) return SQLITE_CORRUPT_BKPT; memcpy(oldCell, newCell, szNew); @@ -66811,7 +67775,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( if( rc ) goto end_insert; }else if( loc<0 && pPage->nCell>0 ){ assert( pPage->leaf ); - idx = ++pCur->aiIdx[pCur->iPage]; + idx = ++pCur->ix; + pCur->curFlags &= ~BTCF_ValidNKey; }else{ assert( pPage->leaf ); } @@ -66851,6 +67816,20 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** from trying to save the current position of the cursor. */ pCur->apPage[pCur->iPage]->nOverflow = 0; pCur->eState = CURSOR_INVALID; + if( (flags & BTREE_SAVEPOSITION) && rc==SQLITE_OK ){ + rc = moveToRoot(pCur); + if( pCur->pKeyInfo ){ + assert( pCur->pKey==0 ); + pCur->pKey = sqlite3Malloc( pX->nKey ); + if( pCur->pKey==0 ){ + rc = SQLITE_NOMEM; + }else{ + memcpy(pCur->pKey, pX->pKey, pX->nKey); + } + } + pCur->eState = CURSOR_REQUIRESEEK; + pCur->nKey = pX->nKey; + } } assert( pCur->apPage[pCur->iPage]->nOverflow==0 ); @@ -66893,12 +67872,12 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ assert( pCur->curFlags & BTCF_WriteFlag ); assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); assert( !hasReadConflicts(p, pCur->pgnoRoot) ); - assert( pCur->aiIdx[pCur->iPage]apPage[pCur->iPage]->nCell ); + assert( pCur->ixapPage[pCur->iPage]->nCell ); assert( pCur->eState==CURSOR_VALID ); assert( (flags & ~(BTREE_SAVEPOSITION | BTREE_AUXDELETE))==0 ); iCellDepth = pCur->iPage; - iCellIdx = pCur->aiIdx[iCellDepth]; + iCellIdx = pCur->ix; pPage = pCur->apPage[iCellDepth]; pCell = findCell(pPage, iCellIdx); @@ -66932,8 +67911,8 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ ** sub-tree headed by the child page of the cell being deleted. This makes ** balancing the tree following the delete operation easier. */ if( !pPage->leaf ){ - int notUsed = 0; - rc = sqlite3BtreePrevious(pCur, ¬Used); + rc = sqlite3BtreePrevious(pCur, 0); + assert( rc!=SQLITE_DONE ); if( rc ) return rc; } @@ -66947,7 +67926,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ /* If this is a delete operation to remove a row from a table b-tree, ** invalidate any incrblob cursors open on the row being deleted. */ if( pCur->pKeyInfo==0 ){ - invalidateIncrblobCursors(p, pCur->info.nKey, 0); + invalidateIncrblobCursors(p, pCur->pgnoRoot, pCur->info.nKey, 0); } /* Make the page containing the entry to be deleted writable. Then free any @@ -67015,7 +67994,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ pCur->eState = CURSOR_SKIPNEXT; if( iCellIdx>=pPage->nCell ){ pCur->skipNext = -1; - pCur->aiIdx[iCellDepth] = pPage->nCell-1; + pCur->ix = pPage->nCell-1; }else{ pCur->skipNext = 1; } @@ -67274,7 +68253,7 @@ SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){ /* Invalidate all incrblob cursors open on table iTable (assuming iTable ** is the root of a table b-tree - if it is not, the following call is ** a no-op). */ - invalidateIncrblobCursors(p, 0, 1); + invalidateIncrblobCursors(p, (Pgno)iTable, 0, 1); rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange); } sqlite3BtreeLeave(p); @@ -67528,16 +68507,16 @@ SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){ return moveToRoot(pCur); } moveToParent(pCur); - }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell ); + }while ( pCur->ix>=pCur->apPage[pCur->iPage]->nCell ); - pCur->aiIdx[pCur->iPage]++; + pCur->ix++; pPage = pCur->apPage[pCur->iPage]; } /* Descend to the child node of the cell that the cursor currently ** points at. This is the right-child if (iIdx==pPage->nCell). */ - iIdx = pCur->aiIdx[pCur->iPage]; + iIdx = pCur->ix; if( iIdx==pPage->nCell ){ rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8])); }else{ @@ -67922,6 +68901,7 @@ static int checkTreePage( checkAppendMsg(pCheck, "Rowid %lld out of order", info.nKey); } maxKey = info.nKey; + keyCanBeEqual = 0; /* Only the first key on the page may ==maxKey */ } /* Check the content overflow list */ @@ -69294,7 +70274,7 @@ copy_finished: */ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){ /* If MEM_Dyn is set then Mem.xDel!=0. - ** Mem.xDel is might not be initialized if MEM_Dyn is clear. + ** Mem.xDel might not be initialized if MEM_Dyn is clear. */ assert( (p->flags & MEM_Dyn)==0 || p->xDel!=0 ); @@ -69307,6 +70287,35 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){ /* Cannot be both MEM_Int and MEM_Real at the same time */ assert( (p->flags & (MEM_Int|MEM_Real))!=(MEM_Int|MEM_Real) ); + if( p->flags & MEM_Null ){ + /* Cannot be both MEM_Null and some other type */ + assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob + |MEM_RowSet|MEM_Frame|MEM_Agg|MEM_Zero))==0 ); + + /* If MEM_Null is set, then either the value is a pure NULL (the usual + ** case) or it is a pointer set using sqlite3_bind_pointer() or + ** sqlite3_result_pointer(). If a pointer, then MEM_Term must also be + ** set. + */ + if( (p->flags & (MEM_Term|MEM_Subtype))==(MEM_Term|MEM_Subtype) ){ + /* This is a pointer type. There may be a flag to indicate what to + ** do with the pointer. */ + assert( ((p->flags&MEM_Dyn)!=0 ? 1 : 0) + + ((p->flags&MEM_Ephem)!=0 ? 1 : 0) + + ((p->flags&MEM_Static)!=0 ? 1 : 0) <= 1 ); + + /* No other bits set */ + assert( (p->flags & ~(MEM_Null|MEM_Term|MEM_Subtype + |MEM_Dyn|MEM_Ephem|MEM_Static))==0 ); + }else{ + /* A pure NULL might have other flags, such as MEM_Static, MEM_Dyn, + ** MEM_Ephem, MEM_Cleared, or MEM_Subtype */ + } + }else{ + /* The MEM_Cleared bit is only allowed on NULLs */ + assert( (p->flags & MEM_Cleared)==0 ); + } + /* The szMalloc field holds the correct memory allocation size */ assert( p->szMalloc==0 || p->szMalloc==sqlite3DbMallocSize(p->db,p->zMalloc) ); @@ -69392,26 +70401,24 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPre assert( pMem->szMalloc==0 || pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) ); - if( pMem->szMallocszMalloc>0 && pMem->z==pMem->zMalloc ){ - pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); - bPreserve = 0; - }else{ - if( pMem->szMalloc>0 ) sqlite3DbFree(pMem->db, pMem->zMalloc); - pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); - } - if( pMem->zMalloc==0 ){ - sqlite3VdbeMemSetNull(pMem); - pMem->z = 0; - pMem->szMalloc = 0; - return SQLITE_NOMEM_BKPT; - }else{ - pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc); - } + if( n<32 ) n = 32; + if( bPreserve && pMem->szMalloc>0 && pMem->z==pMem->zMalloc ){ + pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n); + bPreserve = 0; + }else{ + if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); + pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n); + } + if( pMem->zMalloc==0 ){ + sqlite3VdbeMemSetNull(pMem); + pMem->z = 0; + pMem->szMalloc = 0; + return SQLITE_NOMEM_BKPT; + }else{ + pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc); } - if( bPreserve && pMem->z && pMem->z!=pMem->zMalloc ){ + if( bPreserve && pMem->z && ALWAYS(pMem->z!=pMem->zMalloc) ){ memcpy(pMem->zMalloc, pMem->z, pMem->n); } if( (pMem->flags&MEM_Dyn)!=0 ){ @@ -69608,7 +70615,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ ctx.pFunc = pFunc; pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */ assert( (pMem->flags & MEM_Dyn)==0 ); - if( pMem->szMalloc>0 ) sqlite3DbFree(pMem->db, pMem->zMalloc); + if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); memcpy(pMem, &t, sizeof(t)); rc = ctx.isError; } @@ -69659,7 +70666,7 @@ static SQLITE_NOINLINE void vdbeMemClear(Mem *p){ vdbeMemClearExternAndSetNull(p); } if( p->szMalloc ){ - sqlite3DbFree(p->db, p->zMalloc); + sqlite3DbFreeNN(p->db, p->zMalloc); p->szMalloc = 0; } p->z = 0; @@ -69687,7 +70694,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){ ** If the double is out of range of a 64-bit signed integer then ** return the closest available 64-bit signed integer. */ -static i64 doubleToInt64(double r){ +static SQLITE_NOINLINE i64 doubleToInt64(double r){ #ifdef SQLITE_OMIT_FLOATING_POINT /* When floating-point is omitted, double and int64 are the same thing */ return r; @@ -69723,6 +70730,11 @@ static i64 doubleToInt64(double r){ ** ** If pMem represents a string value, its encoding might be changed. */ +static SQLITE_NOINLINE i64 memIntValue(Mem *pMem){ + i64 value = 0; + sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc); + return value; +} SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){ int flags; assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); @@ -69733,10 +70745,8 @@ SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){ }else if( flags & MEM_Real ){ return doubleToInt64(pMem->u.r); }else if( flags & (MEM_Str|MEM_Blob) ){ - i64 value = 0; assert( pMem->z || pMem->n==0 ); - sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc); - return value; + return memIntValue(pMem); }else{ return 0; } @@ -69748,6 +70758,12 @@ SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){ ** value. If it is a string or blob, try to convert it to a double. ** If it is a NULL, return 0.0. */ +static SQLITE_NOINLINE double memRealValue(Mem *pMem){ + /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ + double val = (double)0; + sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc); + return val; +} SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); @@ -69756,10 +70772,7 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ }else if( pMem->flags & MEM_Int ){ return (double)pMem->u.i; }else if( pMem->flags & (MEM_Str|MEM_Blob) ){ - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - double val = (double)0; - sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc); - return val; + return memRealValue(pMem); }else{ /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ return (double)0; @@ -69964,6 +70977,27 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ } } +/* A no-op destructor */ +static void sqlite3NoopDestructor(void *p){ UNUSED_PARAMETER(p); } + +/* +** Set the value stored in *pMem should already be a NULL. +** Also store a pointer to go with it. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemSetPointer( + Mem *pMem, + void *pPtr, + const char *zPType, + void (*xDestructor)(void*) +){ + assert( pMem->flags==MEM_Null ); + pMem->u.zPType = zPType ? zPType : ""; + pMem->z = pPtr; + pMem->flags = MEM_Null|MEM_Dyn|MEM_Subtype|MEM_Term; + pMem->eSubtype = 'p'; + pMem->xDel = xDestructor ? xDestructor : sqlite3NoopDestructor; +} + #ifndef SQLITE_OMIT_FLOATING_POINT /* ** Delete any previous value and set the value stored in *pMem to val, @@ -70277,6 +71311,7 @@ static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){ assert( (pVal->flags & MEM_RowSet)==0 ); assert( (pVal->flags & (MEM_Null))==0 ); if( pVal->flags & (MEM_Blob|MEM_Str) ){ + if( ExpandBlob(pVal) ) return 0; pVal->flags |= MEM_Str; if( pVal->enc != (enc & ~SQLITE_UTF16_ALIGNED) ){ sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED); @@ -70383,7 +71418,7 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){ pRec->aMem[i].db = db; } }else{ - sqlite3DbFree(db, pRec); + sqlite3DbFreeNN(db, pRec); pRec = 0; } } @@ -70495,7 +71530,7 @@ static int valueFromFunction( for(i=0; ipLeft,enc,affinity,&pVal) + if( SQLITE_OK==valueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal,pCtx) && pVal!=0 ){ sqlite3VdbeMemNumerify(pVal); @@ -70694,7 +71729,7 @@ static void recordFunc( putVarint32(&aRet[1], iSerial); sqlite3VdbeSerialPut(&aRet[1+nSerial], argv[0], iSerial); sqlite3_result_blob(context, aRet, nRet, SQLITE_TRANSIENT); - sqlite3DbFree(db, aRet); + sqlite3DbFreeNN(db, aRet); } } @@ -70740,14 +71775,13 @@ static int stat4ValueFromExpr( /* Skip over any TK_COLLATE nodes */ pExpr = sqlite3ExprSkipCollate(pExpr); + assert( pExpr==0 || pExpr->op!=TK_REGISTER || pExpr->op2!=TK_VARIABLE ); if( !pExpr ){ pVal = valueNew(db, pAlloc); if( pVal ){ sqlite3VdbeMemSetNull((Mem*)pVal); } - }else if( pExpr->op==TK_VARIABLE - || NEVER(pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE) - ){ + }else if( pExpr->op==TK_VARIABLE && (db->flags & SQLITE_EnableQPSG)==0 ){ Vdbe *v; int iBindVar = pExpr->iColumn; sqlite3VdbeSetVarmask(pParse->pVdbe, iBindVar); @@ -70755,9 +71789,7 @@ static int stat4ValueFromExpr( pVal = valueNew(db, pAlloc); if( pVal ){ rc = sqlite3VdbeMemCopy((Mem*)pVal, &v->aVar[iBindVar-1]); - if( rc==SQLITE_OK ){ - sqlite3ValueApplyAffinity(pVal, affinity, ENC(db)); - } + sqlite3ValueApplyAffinity(pVal, affinity, ENC(db)); pVal->db = pParse->db; } } @@ -70921,7 +71953,7 @@ SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){ sqlite3VdbeMemRelease(&aMem[i]); } sqlite3KeyInfoUnref(pRec->pKeyInfo); - sqlite3DbFree(db, pRec); + sqlite3DbFreeNN(db, pRec); } } #endif /* ifdef SQLITE_ENABLE_STAT4 */ @@ -70945,7 +71977,7 @@ SQLITE_PRIVATE void sqlite3ValueSetStr( SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){ if( !v ) return; sqlite3VdbeMemRelease((Mem *)v); - sqlite3DbFree(((Mem*)v)->db, v); + sqlite3DbFreeNN(((Mem*)v)->db, v); } /* @@ -71031,15 +72063,14 @@ SQLITE_PRIVATE void sqlite3VdbeError(Vdbe *p, const char *zFormat, ...){ /* ** Remember the SQL string for a prepared statement. */ -SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){ - assert( isPrepareV2==1 || isPrepareV2==0 ); +SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, u8 prepFlags){ if( p==0 ) return; -#if defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_ENABLE_SQLLOG) - if( !isPrepareV2 ) return; -#endif + p->prepFlags = prepFlags; + if( (prepFlags & SQLITE_PREPARE_SAVESQL)==0 ){ + p->expmask = 0; + } assert( p->zSql==0 ); p->zSql = sqlite3DbStrNDup(p->db, z, n); - p->isPrepareV2 = (u8)isPrepareV2; } /* @@ -71061,7 +72092,10 @@ SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){ zTmp = pA->zSql; pA->zSql = pB->zSql; pB->zSql = zTmp; - pB->isPrepareV2 = pA->isPrepareV2; + pB->expmask = pA->expmask; + pB->prepFlags = pA->prepFlags; + memcpy(pB->aCounter, pA->aCounter, sizeof(pB->aCounter)); + pB->aCounter[SQLITE_STMTSTATUS_REPREPARE]++; } /* @@ -71092,6 +72126,12 @@ static int growOpArray(Vdbe *v, int nOp){ UNUSED_PARAMETER(nOp); #endif + /* Ensure that the size of a VDBE does not grow too large */ + if( nNew > p->db->aLimit[SQLITE_LIMIT_VDBE_OP] ){ + sqlite3OomFault(p->db); + return SQLITE_NOMEM; + } + assert( nOp<=(1024/sizeof(Op)) ); assert( nNew>=(p->nOpAlloc+nOp) ); pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op)); @@ -71211,6 +72251,9 @@ SQLITE_PRIVATE int sqlite3VdbeLoadString(Vdbe *p, int iDest, const char *zStr){ ** "s" character in zTypes[], the register is a string if the argument is ** not NULL, or OP_Null if the value is a null pointer. For each "i" character ** in zTypes[], the register is initialized to an integer. +** +** If the input string does not end with "X" then an OP_ResultRow instruction +** is generated for the values inserted. */ SQLITE_PRIVATE void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, ...){ va_list ap; @@ -71220,12 +72263,15 @@ SQLITE_PRIVATE void sqlite3VdbeMultiLoad(Vdbe *p, int iDest, const char *zTypes, for(i=0; (c = zTypes[i])!=0; i++){ if( c=='s' ){ const char *z = va_arg(ap, const char*); - sqlite3VdbeAddOp4(p, z==0 ? OP_Null : OP_String8, 0, iDest++, 0, z, 0); + sqlite3VdbeAddOp4(p, z==0 ? OP_Null : OP_String8, 0, iDest+i, 0, z, 0); + }else if( c=='i' ){ + sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest+i); }else{ - assert( c=='i' ); - sqlite3VdbeAddOp2(p, OP_Integer, va_arg(ap, int), iDest++); + goto skip_op_resultrow; } } + sqlite3VdbeAddOp2(p, OP_ResultRow, iDest, i); +skip_op_resultrow: va_end(ap); } @@ -71625,6 +72671,22 @@ SQLITE_PRIVATE void sqlite3VdbeVerifyNoMallocRequired(Vdbe *p, int N){ } #endif +/* +** Verify that the VM passed as the only argument does not contain +** an OP_ResultRow opcode. Fail an assert() if it does. This is used +** by code in pragma.c to ensure that the implementation of certain +** pragmas comports with the flags specified in the mkpragmatab.tcl +** script. +*/ +#if defined(SQLITE_DEBUG) && !defined(SQLITE_TEST_REALLOC_STRESS) +SQLITE_PRIVATE void sqlite3VdbeVerifyNoResultRow(Vdbe *p){ + int i; + for(i=0; inOp; i++){ + assert( p->aOp[i].opcode!=OP_ResultRow ); + } +} +#endif + /* ** This function returns a pointer to the array of opcodes associated with ** the Vdbe passed as the first argument. It is the callers responsibility @@ -71744,7 +72806,7 @@ SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){ SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){ sqlite3VdbeGetOp(p,addr)->p3 = val; } -SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 p5){ +SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u16 p5){ assert( p->nOp>0 || p->db->mallocFailed ); if( p->nOp>0 ) p->aOp[p->nOp-1].p5 = p5; } @@ -71764,7 +72826,7 @@ SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){ */ static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ if( (pDef->funcFlags & SQLITE_FUNC_EPHEM)!=0 ){ - sqlite3DbFree(db, pDef); + sqlite3DbFreeNN(db, pDef); } } @@ -71775,11 +72837,11 @@ static void vdbeFreeOpArray(sqlite3 *, Op *, int); */ static SQLITE_NOINLINE void freeP4Mem(sqlite3 *db, Mem *p){ if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc); - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } static SQLITE_NOINLINE void freeP4FuncCtx(sqlite3 *db, sqlite3_context *p){ freeEphemeralFunction(db, p->pFunc); - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } static void freeP4(sqlite3 *db, int p4type, void *p4){ assert( db ); @@ -71832,14 +72894,14 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){ static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){ if( aOp ){ Op *pOp; - for(pOp=aOp; pOp<&aOp[nOp]; pOp++){ - if( pOp->p4type ) freeP4(db, pOp->p4type, pOp->p4.p); + for(pOp=&aOp[nOp-1]; pOp>=aOp; pOp--){ + if( pOp->p4type <= P4_FREE_IF_LE ) freeP4(db, pOp->p4type, pOp->p4.p); #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS sqlite3DbFree(db, pOp->zComment); #endif } + sqlite3DbFreeNN(db, aOp); } - sqlite3DbFree(db, aOp); } /* @@ -72512,7 +73574,7 @@ static void releaseMemArray(Mem *p, int N){ if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){ sqlite3VdbeMemRelease(p); }else if( p->szMalloc ){ - sqlite3DbFree(db, p->zMalloc); + sqlite3DbFreeNN(db, p->zMalloc); p->szMalloc = 0; } @@ -72988,8 +74050,8 @@ SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ break; } case CURTYPE_BTREE: { - if( pCx->pBtx ){ - sqlite3BtreeClose(pCx->pBtx); + if( pCx->isEphemeral ){ + if( pCx->pBtx ) sqlite3BtreeClose(pCx->pBtx); /* The pCx->pCursor will be close automatically, if it exists, by ** the call above. */ }else{ @@ -73113,17 +74175,18 @@ static void Cleanup(Vdbe *p){ ** be called on an SQL statement before sqlite3_step(). */ SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ - Mem *pColName; int n; sqlite3 *db = p->db; - releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); - sqlite3DbFree(db, p->aColName); + if( p->nResColumn ){ + releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); + sqlite3DbFree(db, p->aColName); + } n = nResColumn*COLNAME_N; p->nResColumn = (u16)nResColumn; - p->aColName = pColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n ); + p->aColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n ); if( p->aColName==0 ) return; - initMemArray(p->aColName, n, p->db, MEM_Null); + initMemArray(p->aColName, n, db, MEM_Null); } /* @@ -73458,60 +74521,59 @@ static void checkActiveVdbeCnt(sqlite3 *db){ ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned. ** Otherwise SQLITE_OK. */ -SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ +static SQLITE_NOINLINE int vdbeCloseStatement(Vdbe *p, int eOp){ sqlite3 *const db = p->db; int rc = SQLITE_OK; + int i; + const int iSavepoint = p->iStatement-1; - /* If p->iStatement is greater than zero, then this Vdbe opened a - ** statement transaction that should be closed here. The only exception - ** is that an IO error may have occurred, causing an emergency rollback. - ** In this case (db->nStatement==0), and there is nothing to do. - */ - if( db->nStatement && p->iStatement ){ - int i; - const int iSavepoint = p->iStatement-1; + assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE); + assert( db->nStatement>0 ); + assert( p->iStatement==(db->nStatement+db->nSavepoint) ); - assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE); - assert( db->nStatement>0 ); - assert( p->iStatement==(db->nStatement+db->nSavepoint) ); - - for(i=0; inDb; i++){ - int rc2 = SQLITE_OK; - Btree *pBt = db->aDb[i].pBt; - if( pBt ){ - if( eOp==SAVEPOINT_ROLLBACK ){ - rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint); - } - if( rc2==SQLITE_OK ){ - rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint); - } - if( rc==SQLITE_OK ){ - rc = rc2; - } - } - } - db->nStatement--; - p->iStatement = 0; - - if( rc==SQLITE_OK ){ + for(i=0; inDb; i++){ + int rc2 = SQLITE_OK; + Btree *pBt = db->aDb[i].pBt; + if( pBt ){ if( eOp==SAVEPOINT_ROLLBACK ){ - rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint); + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint); + } + if( rc2==SQLITE_OK ){ + rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint); } if( rc==SQLITE_OK ){ - rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint); + rc = rc2; } } + } + db->nStatement--; + p->iStatement = 0; - /* If the statement transaction is being rolled back, also restore the - ** database handles deferred constraint counter to the value it had when - ** the statement transaction was opened. */ + if( rc==SQLITE_OK ){ if( eOp==SAVEPOINT_ROLLBACK ){ - db->nDeferredCons = p->nStmtDefCons; - db->nDeferredImmCons = p->nStmtDefImmCons; + rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint); } + if( rc==SQLITE_OK ){ + rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint); + } + } + + /* If the statement transaction is being rolled back, also restore the + ** database handles deferred constraint counter to the value it had when + ** the statement transaction was opened. */ + if( eOp==SAVEPOINT_ROLLBACK ){ + db->nDeferredCons = p->nStmtDefCons; + db->nDeferredImmCons = p->nStmtDefImmCons; } return rc; } +SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){ + if( p->db->nStatement && p->iStatement ){ + return vdbeCloseStatement(p, eOp); + } + return SQLITE_OK; +} + /* ** This function is called when a transaction opened by the database @@ -73571,13 +74633,13 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ ** one, or the complete transaction if there is no statement transaction. */ + if( p->magic!=VDBE_MAGIC_RUN ){ + return SQLITE_OK; + } if( db->mallocFailed ){ p->rc = SQLITE_NOMEM_BKPT; } closeAllCursors(p); - if( p->magic!=VDBE_MAGIC_RUN ){ - return SQLITE_OK; - } checkActiveVdbeCnt(db); /* No commit or rollback needed if the program never started or if the @@ -73774,10 +74836,10 @@ SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){ sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT); sqlite3EndBenignMalloc(); db->bBenignMalloc--; - db->errCode = rc; - }else{ - sqlite3Error(db, rc); + }else if( db->pErr ){ + sqlite3ValueSetNull(db->pErr); } + db->errCode = rc; return rc; } @@ -73884,7 +74946,6 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ } } #endif - p->iCurrentTime = 0; p->magic = VDBE_MAGIC_RESET; return p->rc & db->errMask; } @@ -73923,16 +74984,18 @@ SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(sqlite3 *db, AuxData **pp, int iOp, while( *pp ){ AuxData *pAux = *pp; if( (iOp<0) - || (pAux->iOp==iOp && (pAux->iArg>31 || !(mask & MASKBIT32(pAux->iArg)))) + || (pAux->iAuxOp==iOp + && pAux->iAuxArg>=0 + && (pAux->iAuxArg>31 || !(mask & MASKBIT32(pAux->iAuxArg)))) ){ - testcase( pAux->iArg==31 ); - if( pAux->xDelete ){ - pAux->xDelete(pAux->pAux); + testcase( pAux->iAuxArg==31 ); + if( pAux->xDeleteAux ){ + pAux->xDeleteAux(pAux->pAux); } - *pp = pAux->pNext; + *pp = pAux->pNextAux; sqlite3DbFree(db, pAux); }else{ - pp= &pAux->pNext; + pp= &pAux->pNextAux; } } } @@ -73994,7 +75057,7 @@ SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ } p->magic = VDBE_MAGIC_DEAD; p->db = 0; - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } /* @@ -74524,7 +75587,7 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack( p->nField = u; } -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG /* ** This function compares two index or table record keys in the same way ** as the sqlite3VdbeRecordCompare() routine. Unlike VdbeRecordCompare(), @@ -74629,7 +75692,7 @@ debugCompareEnd: } #endif -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG /* ** Count the number of fields (a.k.a. columns) in the record given by ** pKey,nKey. The verify that this count is less than or equal to the @@ -74684,7 +75747,6 @@ static int vdbeCompareMemString( }else{ int rc; const void *v1, *v2; - int n1, n2; Mem c1; Mem c2; sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null); @@ -74692,11 +75754,13 @@ static int vdbeCompareMemString( sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem); sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem); v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc); - n1 = v1==0 ? 0 : c1.n; v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc); - n2 = v2==0 ? 0 : c2.n; - rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2); - if( (v1==0 || v2==0) && prcErr ) *prcErr = SQLITE_NOMEM_BKPT; + if( (v1==0 || v2==0) ){ + if( prcErr ) *prcErr = SQLITE_NOMEM_BKPT; + rc = 0; + }else{ + rc = pColl->xCmp(pColl->pUser, c1.n, v1, c2.n, v2); + } sqlite3VdbeMemRelease(&c1); sqlite3VdbeMemRelease(&c2); return rc; @@ -75481,6 +76545,13 @@ SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){ return v->db; } +/* +** Return the SQLITE_PREPARE flags for a Vdbe. +*/ +SQLITE_PRIVATE u8 sqlite3VdbePrepareFlags(Vdbe *v){ + return v->prepFlags; +} + /* ** Return a pointer to an sqlite3_value structure containing the value bound ** parameter iVar of VM v. Except, if the value is an SQL NULL, return @@ -75493,6 +76564,7 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff assert( iVar>0 ); if( v ){ Mem *pMem = &v->aVar[iVar-1]; + assert( (v->db->flags & SQLITE_EnableQPSG)==0 ); if( 0==(pMem->flags & MEM_Null) ){ sqlite3_value *pRet = sqlite3ValueNew(v->db); if( pRet ){ @@ -75512,13 +76584,36 @@ SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetBoundValue(Vdbe *v, int iVar, u8 aff */ SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){ assert( iVar>0 ); - if( iVar>32 ){ - v->expmask = 0xffffffff; + assert( (v->db->flags & SQLITE_EnableQPSG)==0 ); + if( iVar>=32 ){ + v->expmask |= 0x80000000; }else{ v->expmask |= ((u32)1 << (iVar-1)); } } +/* +** Cause a function to throw an error if it was call from OP_PureFunc +** rather than OP_Function. +** +** OP_PureFunc means that the function must be deterministic, and should +** throw an error if it is given inputs that would make it non-deterministic. +** This routine is invoked by date/time functions that use non-deterministic +** features such as 'now'. +*/ +SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context *pCtx){ +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 + if( pCtx->pVdbe==0 ) return 1; +#endif + if( pCtx->pVdbe->aOp[pCtx->iOp].opcode==OP_PureFunc ){ + sqlite3_result_error(pCtx, + "non-deterministic function in index expression or CHECK constraint", + -1); + return 0; + } + return 1; +} + #ifndef SQLITE_OMIT_VIRTUALTABLE /* ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored @@ -75546,14 +76641,14 @@ SQLITE_PRIVATE void sqlite3VtabImportErrmsg(Vdbe *p, sqlite3_vtab *pVtab){ ** This function is used to free UnpackedRecord structures allocated by ** the vdbeUnpackRecord() function found in vdbeapi.c. */ -static void vdbeFreeUnpacked(sqlite3 *db, UnpackedRecord *p){ +static void vdbeFreeUnpacked(sqlite3 *db, int nField, UnpackedRecord *p){ if( p ){ int i; - for(i=0; inField; i++){ + for(i=0; iaMem[i]; if( pMem->zMalloc ) sqlite3VdbeMemRelease(pMem); } - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } } #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ @@ -75582,10 +76677,15 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( assert( db->pPreUpdate==0 ); memset(&preupdate, 0, sizeof(PreUpdate)); - if( op==SQLITE_UPDATE ){ - iKey2 = v->aMem[iReg].u.i; + if( HasRowid(pTab)==0 ){ + iKey1 = iKey2 = 0; + preupdate.pPk = sqlite3PrimaryKeyIndex(pTab); }else{ - iKey2 = iKey1; + if( op==SQLITE_UPDATE ){ + iKey2 = v->aMem[iReg].u.i; + }else{ + iKey2 = iKey1; + } } assert( pCsr->nField==pTab->nCol @@ -75608,14 +76708,14 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( db->xPreUpdateCallback(db->pPreUpdateArg, db, op, zDb, zTbl, iKey1, iKey2); db->pPreUpdate = 0; sqlite3DbFree(db, preupdate.aRecord); - vdbeFreeUnpacked(db, preupdate.pUnpacked); - vdbeFreeUnpacked(db, preupdate.pNewUnpacked); + vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pUnpacked); + vdbeFreeUnpacked(db, preupdate.keyinfo.nField+1, preupdate.pNewUnpacked); if( preupdate.aNew ){ int i; for(i=0; inField; i++){ sqlite3VdbeMemRelease(&preupdate.aNew[i]); } - sqlite3DbFree(db, preupdate.aNew); + sqlite3DbFreeNN(db, preupdate.aNew); } } #endif /* SQLITE_ENABLE_PREUPDATE_HOOK */ @@ -75778,7 +76878,8 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){ sqlite3VdbeMemRelease(&p->aVar[i]); p->aVar[i].flags = MEM_Null; } - if( p->isPrepareV2 && p->expmask ){ + assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 ); + if( p->expmask ){ p->expired = 1; } sqlite3_mutex_leave(mutex); @@ -75822,6 +76923,19 @@ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value *pVal){ Mem *pMem = (Mem*)pVal; return ((pMem->flags & MEM_Subtype) ? pMem->eSubtype : 0); } +SQLITE_API void *sqlite3_value_pointer(sqlite3_value *pVal, const char *zPType){ + Mem *p = (Mem*)pVal; + if( (p->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) == + (MEM_Null|MEM_Term|MEM_Subtype) + && zPType!=0 + && p->eSubtype=='p' + && strcmp(p->u.zPType, zPType)==0 + ){ + return (void*)p->z; + }else{ + return 0; + } +} SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){ return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8); } @@ -76000,6 +77114,18 @@ SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetNull(pCtx->pOut); } +SQLITE_API void sqlite3_result_pointer( + sqlite3_context *pCtx, + void *pPtr, + const char *zPType, + void (*xDestructor)(void*) +){ + Mem *pOut = pCtx->pOut; + assert( sqlite3_mutex_held(pOut->db->mutex) ); + sqlite3VdbeMemRelease(pOut); + pOut->flags = MEM_Null; + sqlite3VdbeMemSetPointer(pOut, pPtr, zPType, xDestructor); +} SQLITE_API void sqlite3_result_subtype(sqlite3_context *pCtx, unsigned int eSubtype){ Mem *pOut = pCtx->pOut; assert( sqlite3_mutex_held(pOut->db->mutex) ); @@ -76256,8 +77382,11 @@ end_of_step: || (rc&0xff)==SQLITE_BUSY || rc==SQLITE_MISUSE ); assert( (p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE) || p->rc==p->rcApp ); - if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){ - /* If this statement was prepared using sqlite3_prepare_v2(), and an + if( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 + && rc!=SQLITE_ROW + && rc!=SQLITE_DONE + ){ + /* If this statement was prepared using saved SQL and an ** error has occurred, then return the error code in p->rc to the ** caller. Set the error code in the database handle to the same value. */ @@ -76427,6 +77556,12 @@ SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){ /* ** Return the auxiliary data pointer, if any, for the iArg'th argument to ** the user-function defined by pCtx. +** +** The left-most argument is 0. +** +** Undocumented behavior: If iArg is negative then access a cache of +** auxiliary data pointers that is available to all functions within a +** single prepared statement. The iArg values must match. */ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ AuxData *pAuxData; @@ -76437,17 +77572,24 @@ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){ #else assert( pCtx->pVdbe!=0 ); #endif - for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ - if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; + for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){ + if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){ + return pAuxData->pAux; + } } - - return (pAuxData ? pAuxData->pAux : 0); + return 0; } /* ** Set the auxiliary data pointer and delete function, for the iArg'th ** argument to the user-function defined by pCtx. Any previous value is ** deleted by calling the delete function specified when it was set. +** +** The left-most argument is 0. +** +** Undocumented behavior: If iArg is negative then make the data available +** to all functions within the current prepared statement using iArg as an +** access code. */ SQLITE_API void sqlite3_set_auxdata( sqlite3_context *pCtx, @@ -76459,33 +77601,34 @@ SQLITE_API void sqlite3_set_auxdata( Vdbe *pVdbe = pCtx->pVdbe; assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); - if( iArg<0 ) goto failed; #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 if( pVdbe==0 ) goto failed; #else assert( pVdbe!=0 ); #endif - for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){ - if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break; + for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNextAux){ + if( pAuxData->iAuxArg==iArg && (pAuxData->iAuxOp==pCtx->iOp || iArg<0) ){ + break; + } } if( pAuxData==0 ){ pAuxData = sqlite3DbMallocZero(pVdbe->db, sizeof(AuxData)); if( !pAuxData ) goto failed; - pAuxData->iOp = pCtx->iOp; - pAuxData->iArg = iArg; - pAuxData->pNext = pVdbe->pAuxData; + pAuxData->iAuxOp = pCtx->iOp; + pAuxData->iAuxArg = iArg; + pAuxData->pNextAux = pVdbe->pAuxData; pVdbe->pAuxData = pAuxData; if( pCtx->fErrorOrAux==0 ){ pCtx->isError = 0; pCtx->fErrorOrAux = 1; } - }else if( pAuxData->xDelete ){ - pAuxData->xDelete(pAuxData->pAux); + }else if( pAuxData->xDeleteAux ){ + pAuxData->xDeleteAux(pAuxData->pAux); } pAuxData->pAux = pAux; - pAuxData->xDelete = xDelete; + pAuxData->xDeleteAux = xDelete; return; failed: @@ -76882,9 +78025,8 @@ static int vdbeUnbind(Vdbe *p, int i){ ** as if there had been a schema change, on the first sqlite3_step() call ** following any change to the bindings of that parameter. */ - if( p->isPrepareV2 && - ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff) - ){ + assert( (p->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || p->expmask==0 ); + if( p->expmask!=0 && (p->expmask & (i>=31 ? 0x80000000 : (u32)1<expired = 1; } return SQLITE_OK; @@ -76913,8 +78055,10 @@ static int bindText( if( rc==SQLITE_OK && encoding!=0 ){ rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db)); } - sqlite3Error(p->db, rc); - rc = sqlite3ApiExit(p->db, rc); + if( rc ){ + sqlite3Error(p->db, rc); + rc = sqlite3ApiExit(p->db, rc); + } } sqlite3_mutex_leave(p->db->mutex); }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){ @@ -76985,6 +78129,24 @@ SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){ } return rc; } +SQLITE_API int sqlite3_bind_pointer( + sqlite3_stmt *pStmt, + int i, + void *pPtr, + const char *zPTtype, + void (*xDestructor)(void*) +){ + int rc; + Vdbe *p = (Vdbe*)pStmt; + rc = vdbeUnbind(p, i); + if( rc==SQLITE_OK ){ + sqlite3VdbeMemSetPointer(&p->aVar[i-1], pPtr, zPTtype, xDestructor); + sqlite3_mutex_leave(p->db->mutex); + }else if( xDestructor ){ + xDestructor(pPtr); + } + return rc; +} SQLITE_API int sqlite3_bind_text( sqlite3_stmt *pStmt, int i, @@ -77147,10 +78309,12 @@ SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt * if( pFrom->nVar!=pTo->nVar ){ return SQLITE_ERROR; } - if( pTo->isPrepareV2 && pTo->expmask ){ + assert( (pTo->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pTo->expmask==0 ); + if( pTo->expmask ){ pTo->expired = 1; } - if( pFrom->isPrepareV2 && pFrom->expmask ){ + assert( (pFrom->prepFlags & SQLITE_PREPARE_SAVESQL)!=0 || pFrom->expmask==0 ); + if( pFrom->expmask ){ pFrom->expired = 1; } return sqlite3TransferBindings(pFromStmt, pToStmt); @@ -77219,8 +78383,19 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ return 0; } #endif - v = pVdbe->aCounter[op]; - if( resetFlag ) pVdbe->aCounter[op] = 0; + if( op==SQLITE_STMTSTATUS_MEMUSED ){ + sqlite3 *db = pVdbe->db; + sqlite3_mutex_enter(db->mutex); + v = 0; + db->pnBytesFreed = (int*)&v; + sqlite3VdbeClearObject(db, pVdbe); + sqlite3DbFree(db, pVdbe); + db->pnBytesFreed = 0; + sqlite3_mutex_leave(db->mutex); + }else{ + v = pVdbe->aCounter[op]; + if( resetFlag ) pVdbe->aCounter[op] = 0; + } return (int)v; } @@ -77284,6 +78459,7 @@ static UnpackedRecord *vdbeUnpackRecord( */ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ PreUpdate *p = db->pPreUpdate; + Mem *pMem; int rc = SQLITE_OK; /* Test that this call is being made from within an SQLITE_DELETE or @@ -77292,6 +78468,9 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa rc = SQLITE_MISUSE_BKPT; goto preupdate_old_out; } + if( p->pPk ){ + iIdx = sqlite3ColumnOfIndex(p->pPk, iIdx); + } if( iIdx>=p->pCsr->nField || iIdx<0 ){ rc = SQLITE_RANGE; goto preupdate_old_out; @@ -77317,17 +78496,14 @@ SQLITE_API int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppVa p->aRecord = aRec; } - if( iIdx>=p->pUnpacked->nField ){ + pMem = *ppValue = &p->pUnpacked->aMem[iIdx]; + if( iIdx==p->pTab->iPKey ){ + sqlite3VdbeMemSetInt64(pMem, p->iKey1); + }else if( iIdx>=p->pUnpacked->nField ){ *ppValue = (sqlite3_value *)columnNullValue(); - }else{ - Mem *pMem = *ppValue = &p->pUnpacked->aMem[iIdx]; - *ppValue = &p->pUnpacked->aMem[iIdx]; - if( iIdx==p->pTab->iPKey ){ - sqlite3VdbeMemSetInt64(pMem, p->iKey1); - }else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){ - if( pMem->flags & MEM_Int ){ - sqlite3VdbeMemRealify(pMem); - } + }else if( p->pTab->aCol[iIdx].affinity==SQLITE_AFF_REAL ){ + if( pMem->flags & MEM_Int ){ + sqlite3VdbeMemRealify(pMem); } } @@ -77380,6 +78556,9 @@ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppVa rc = SQLITE_MISUSE_BKPT; goto preupdate_new_out; } + if( p->pPk && p->op!=SQLITE_UPDATE ){ + iIdx = sqlite3ColumnOfIndex(p->pPk, iIdx); + } if( iIdx>=p->pCsr->nField || iIdx<0 ){ rc = SQLITE_RANGE; goto preupdate_new_out; @@ -77400,13 +78579,11 @@ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppVa } p->pNewUnpacked = pUnpack; } - if( iIdx>=pUnpack->nField ){ + pMem = &pUnpack->aMem[iIdx]; + if( iIdx==p->pTab->iPKey ){ + sqlite3VdbeMemSetInt64(pMem, p->iKey2); + }else if( iIdx>=pUnpack->nField ){ pMem = (sqlite3_value *)columnNullValue(); - }else{ - pMem = &pUnpack->aMem[iIdx]; - if( iIdx==p->pTab->iPKey ){ - sqlite3VdbeMemSetInt64(pMem, p->iKey2); - } } }else{ /* For an UPDATE, memory cell (p->iNewReg+1+iIdx) contains the required @@ -78114,9 +79291,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){ }else{ c = 's'; } - - sqlite3_snprintf(100, zCsr, "%c", c); - zCsr += sqlite3Strlen30(zCsr); + *(zCsr++) = c; sqlite3_snprintf(100, zCsr, "%d[", pMem->n); zCsr += sqlite3Strlen30(zCsr); for(i=0; i<16 && in; i++){ @@ -78128,9 +79303,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){ if( z<32 || z>126 ) *zCsr++ = '.'; else *zCsr++ = z; } - - sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]); - zCsr += sqlite3Strlen30(zCsr); + *(zCsr++) = ']'; if( f & MEM_Zero ){ sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero); zCsr += sqlite3Strlen30(zCsr); @@ -78201,6 +79374,7 @@ static void registerTrace(int iReg, Mem *p){ printf("REG[%d] = ", iReg); memTracePrint(p); printf("\n"); + sqlite3VdbeCheckMemInvariants(p); } #endif @@ -78376,15 +79550,13 @@ SQLITE_PRIVATE int sqlite3VdbeExec( int iCompare = 0; /* Result of last comparison */ unsigned nVmStep = 0; /* Number of virtual machine steps */ #ifndef SQLITE_OMIT_PROGRESS_CALLBACK - unsigned nProgressLimit = 0;/* Invoke xProgress() when nVmStep reaches this */ + unsigned nProgressLimit; /* Invoke xProgress() when nVmStep reaches this */ #endif Mem *aMem = p->aMem; /* Copy of p->aMem */ Mem *pIn1 = 0; /* 1st input operand */ Mem *pIn2 = 0; /* 2nd input operand */ Mem *pIn3 = 0; /* 3rd input operand */ Mem *pOut = 0; /* Output operand */ - int *aPermute = 0; /* Permutation of columns for OP_Compare */ - i64 lastRowid = db->lastRowid; /* Saved value of the last insert ROWID */ #ifdef VDBE_PROFILE u64 start; /* CPU clock count at start of opcode */ #endif @@ -78399,7 +79571,6 @@ SQLITE_PRIVATE int sqlite3VdbeExec( } assert( p->rc==SQLITE_OK || (p->rc&0xff)==SQLITE_BUSY ); assert( p->bIsReader || p->readOnly!=0 ); - p->rc = SQLITE_OK; p->iCurrentTime = 0; assert( p->explain==0 ); p->pResultSet = 0; @@ -78411,6 +79582,8 @@ SQLITE_PRIVATE int sqlite3VdbeExec( u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP]; assert( 0 < db->nProgressOps ); nProgressLimit = db->nProgressOps - (iPrior % db->nProgressOps); + }else{ + nProgressLimit = 0xffffffff; } #endif #ifdef SQLITE_DEBUG @@ -78570,7 +79743,7 @@ jump_to_p2_and_check_for_interrupt: pOp = &aOp[pOp->p2 - 1]; /* Opcodes that are used as the bottom of a loop (OP_Next, OP_Prev, - ** OP_VNext, OP_RowSetNext, or OP_SorterNext) all jump here upon + ** OP_VNext, or OP_SorterNext) all jump here upon ** completion. Check to see if sqlite3_interrupt() has been called ** or if the progress callback needs to be invoked. ** @@ -78588,7 +79761,7 @@ check_for_interrupt: ** If the progress callback returns non-zero, exit the virtual machine with ** a return code SQLITE_ABORT. */ - if( db->xProgress!=0 && nVmStep>=nProgressLimit ){ + if( nVmStep>=nProgressLimit && db->xProgress!=0 ){ assert( db->nProgressOps!=0 ); nProgressLimit = nVmStep + db->nProgressOps - (nVmStep%db->nProgressOps); if( db->xProgress(db->pProgressArg) ){ @@ -78760,7 +79933,6 @@ case OP_Halt: { p->nFrame--; sqlite3VdbeSetChanges(db, p->nChange); pcx = sqlite3VdbeFrameRestore(pFrame); - lastRowid = db->lastRowid; if( pOp->p2==OE_Ignore ){ /* Instruction pcx is the OP_Program that invoked the sub-program ** currently being halted. If the p2 instruction of this OP_Halt @@ -78959,7 +80131,7 @@ case OP_Null: { /* out2 */ case OP_SoftNull: { assert( pOp->p1>0 && pOp->p1<=(p->nMem+1 - p->nCursor) ); pOut = &aMem[pOp->p1]; - pOut->flags = (pOut->flags|MEM_Null)&~MEM_Undefined; + pOut->flags = (pOut->flags&~(MEM_Undefined|MEM_AffMask))|MEM_Null; break; } @@ -78995,7 +80167,7 @@ case OP_Variable: { /* out2 */ if( sqlite3VdbeMemTooBig(pVar) ){ goto too_big; } - pOut = out2Prerelease(p, pOp); + pOut = &aMem[pOp->p2]; sqlite3VdbeMemShallowCopy(pOut, pVar, MEM_Static); UPDATE_MAX_BLOBSIZE(pOut); break; @@ -79131,7 +80303,7 @@ case OP_ResultRow: { /* Run the progress counter just before returning. */ if( db->xProgress!=0 - && nVmStep>=nProgressLimit + && nVmStep>=nProgressLimit && db->xProgress(db->pProgressArg)!=0 ){ rc = SQLITE_INTERRUPT; @@ -79302,7 +80474,6 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ type2 = numericType(pIn2); pOut = &aMem[pOp->p3]; flags = pIn1->flags | pIn2->flags; - if( (flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; if( (type1 & type2 & MEM_Int)!=0 ){ iA = pIn1->u.i; iB = pIn2->u.i; @@ -79326,6 +80497,8 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ } pOut->u.i = iB; MemSetTypeFlag(pOut, MEM_Int); + }else if( (flags & MEM_Null)!=0 ){ + goto arithmetic_result_is_null; }else{ bIntint = 0; fp_math: @@ -79373,7 +80546,7 @@ arithmetic_result_is_null: /* Opcode: CollSeq P1 * * P4 ** -** P4 is a pointer to a CollSeq struct. If the next call to a user function +** P4 is a pointer to a CollSeq object. If the next call to a user function ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will ** be returned. This is used by the built-in min(), max() and nullif() ** functions. @@ -79394,119 +80567,6 @@ case OP_CollSeq: { break; } -/* Opcode: Function0 P1 P2 P3 P4 P5 -** Synopsis: r[P3]=func(r[P2@P5]) -** -** Invoke a user function (P4 is a pointer to a FuncDef object that -** defines the function) with P5 arguments taken from register P2 and -** successors. The result of the function is stored in register P3. -** Register P3 must not be one of the function inputs. -** -** P1 is a 32-bit bitmask indicating whether or not each argument to the -** function was determined to be constant at compile time. If the first -** argument was constant then bit 0 of P1 is set. This is used to determine -** whether meta data associated with a user function argument using the -** sqlite3_set_auxdata() API may be safely retained until the next -** invocation of this opcode. -** -** See also: Function, AggStep, AggFinal -*/ -/* Opcode: Function P1 P2 P3 P4 P5 -** Synopsis: r[P3]=func(r[P2@P5]) -** -** Invoke a user function (P4 is a pointer to an sqlite3_context object that -** contains a pointer to the function to be run) with P5 arguments taken -** from register P2 and successors. The result of the function is stored -** in register P3. Register P3 must not be one of the function inputs. -** -** P1 is a 32-bit bitmask indicating whether or not each argument to the -** function was determined to be constant at compile time. If the first -** argument was constant then bit 0 of P1 is set. This is used to determine -** whether meta data associated with a user function argument using the -** sqlite3_set_auxdata() API may be safely retained until the next -** invocation of this opcode. -** -** SQL functions are initially coded as OP_Function0 with P4 pointing -** to a FuncDef object. But on first evaluation, the P4 operand is -** automatically converted into an sqlite3_context object and the operation -** changed to this OP_Function opcode. In this way, the initialization of -** the sqlite3_context object occurs only once, rather than once for each -** evaluation of the function. -** -** See also: Function0, AggStep, AggFinal -*/ -case OP_Function0: { - int n; - sqlite3_context *pCtx; - - assert( pOp->p4type==P4_FUNCDEF ); - n = pOp->p5; - assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); - assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem+1 - p->nCursor)+1) ); - assert( pOp->p3p2 || pOp->p3>=pOp->p2+n ); - pCtx = sqlite3DbMallocRawNN(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*)); - if( pCtx==0 ) goto no_mem; - pCtx->pOut = 0; - pCtx->pFunc = pOp->p4.pFunc; - pCtx->iOp = (int)(pOp - aOp); - pCtx->pVdbe = p; - pCtx->argc = n; - pOp->p4type = P4_FUNCCTX; - pOp->p4.pCtx = pCtx; - pOp->opcode = OP_Function; - /* Fall through into OP_Function */ -} -case OP_Function: { - int i; - sqlite3_context *pCtx; - - assert( pOp->p4type==P4_FUNCCTX ); - pCtx = pOp->p4.pCtx; - - /* If this function is inside of a trigger, the register array in aMem[] - ** might change from one evaluation to the next. The next block of code - ** checks to see if the register array has changed, and if so it - ** reinitializes the relavant parts of the sqlite3_context object */ - pOut = &aMem[pOp->p3]; - if( pCtx->pOut != pOut ){ - pCtx->pOut = pOut; - for(i=pCtx->argc-1; i>=0; i--) pCtx->argv[i] = &aMem[pOp->p2+i]; - } - - memAboutToChange(p, pCtx->pOut); -#ifdef SQLITE_DEBUG - for(i=0; iargc; i++){ - assert( memIsValid(pCtx->argv[i]) ); - REGISTER_TRACE(pOp->p2+i, pCtx->argv[i]); - } -#endif - MemSetTypeFlag(pCtx->pOut, MEM_Null); - pCtx->fErrorOrAux = 0; - db->lastRowid = lastRowid; - (*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */ - lastRowid = db->lastRowid; /* Remember rowid changes made by xSFunc */ - - /* If the function returned an error, throw an exception */ - if( pCtx->fErrorOrAux ){ - if( pCtx->isError ){ - sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); - rc = pCtx->isError; - } - sqlite3VdbeDeleteAuxData(db, &p->pAuxData, pCtx->iOp, pOp->p1); - if( rc ) goto abort_due_to_error; - } - - /* Copy the result of the function into register P3 */ - if( pOut->flags & (MEM_Str|MEM_Blob) ){ - sqlite3VdbeChangeEncoding(pCtx->pOut, encoding); - if( sqlite3VdbeMemTooBig(pCtx->pOut) ) goto too_big; - } - - REGISTER_TRACE(pOp->p3, pCtx->pOut); - UPDATE_MAX_BLOBSIZE(pCtx->pOut); - break; -} - /* Opcode: BitAnd P1 P2 P3 * * ** Synopsis: r[P3]=r[P1]&r[P2] ** @@ -79656,11 +80716,11 @@ case OP_RealAffinity: { /* in1 */ ** Force the value in register P1 to be the type defined by P2. ** **
        -**
      • TEXT -**
      • BLOB -**
      • NUMERIC -**
      • INTEGER -**
      • REAL +**
      • P2=='A' → BLOB +**
      • P2=='B' → TEXT +**
      • P2=='C' → NUMERIC +**
      • P2=='D' → INTEGER +**
      • P2=='E' → REAL **
      ** ** A NULL value is not changed by this routine. It remains NULL. @@ -79940,8 +81000,8 @@ case OP_ElseNotEq: { /* same as TK_ESCAPE, jump */ /* Opcode: Permutation * * * P4 * ** -** Set the permutation used by the OP_Compare operator to be the array -** of integers in P4. +** Set the permutation used by the OP_Compare operator in the next +** instruction. The permutation is stored in the P4 operand. ** ** The permutation is only valid until the next OP_Compare that has ** the OPFLAG_PERMUTE bit set in P5. Typically the OP_Permutation should @@ -79953,7 +81013,8 @@ case OP_ElseNotEq: { /* same as TK_ESCAPE, jump */ case OP_Permutation: { assert( pOp->p4type==P4_INTARRAY ); assert( pOp->p4.ai ); - aPermute = pOp->p4.ai + 1; + assert( pOp[1].opcode==OP_Compare ); + assert( pOp[1].p5 & OPFLAG_PERMUTE ); break; } @@ -79986,15 +81047,24 @@ case OP_Compare: { int idx; CollSeq *pColl; /* Collating sequence to use on this term */ int bRev; /* True for DESCENDING sort order */ + int *aPermute; /* The permutation */ - if( (pOp->p5 & OPFLAG_PERMUTE)==0 ) aPermute = 0; + if( (pOp->p5 & OPFLAG_PERMUTE)==0 ){ + aPermute = 0; + }else{ + assert( pOp>aOp ); + assert( pOp[-1].opcode==OP_Permutation ); + assert( pOp[-1].p4type==P4_INTARRAY ); + aPermute = pOp[-1].p4.ai + 1; + assert( aPermute!=0 ); + } n = pOp->p3; pKeyInfo = pOp->p4.pKeyInfo; assert( n>0 ); assert( pKeyInfo!=0 ); p1 = pOp->p1; p2 = pOp->p2; -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG if( aPermute ){ int k, mx = 0; for(k=0; kmx ) mx = aPermute[k]; @@ -80020,7 +81090,6 @@ case OP_Compare: { break; } } - aPermute = 0; break; } @@ -80133,19 +81202,39 @@ case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */ /* Opcode: Once P1 P2 * * * ** -** If the P1 value is equal to the P1 value on the OP_Init opcode at -** instruction 0, then jump to P2. If the two P1 values differ, then -** set the P1 value on this opcode to equal the P1 value on the OP_Init -** and fall through. +** Fall through to the next instruction the first time this opcode is +** encountered on each invocation of the byte-code program. Jump to P2 +** on the second and all subsequent encounters during the same invocation. +** +** Top-level programs determine first invocation by comparing the P1 +** operand against the P1 operand on the OP_Init opcode at the beginning +** of the program. If the P1 values differ, then fall through and make +** the P1 of this opcode equal to the P1 of OP_Init. If P1 values are +** the same then take the jump. +** +** For subprograms, there is a bitmask in the VdbeFrame that determines +** whether or not the jump should be taken. The bitmask is necessary +** because the self-altering code trick does not work for recursive +** triggers. */ case OP_Once: { /* jump */ + u32 iAddr; /* Address of this instruction */ assert( p->aOp[0].opcode==OP_Init ); - VdbeBranchTaken(p->aOp[0].p1==pOp->p1, 2); - if( p->aOp[0].p1==pOp->p1 ){ - goto jump_to_p2; + if( p->pFrame ){ + iAddr = (int)(pOp - p->aOp); + if( (p->pFrame->aOnce[iAddr/8] & (1<<(iAddr & 7)))!=0 ){ + VdbeBranchTaken(1, 2); + goto jump_to_p2; + } + p->pFrame->aOnce[iAddr/8] |= 1<<(iAddr & 7); }else{ - pOp->p1 = p->aOp[0].p1; + if( p->aOp[0].p1==pOp->p1 ){ + VdbeBranchTaken(1, 2); + goto jump_to_p2; + } } + VdbeBranchTaken(0, 2); + pOp->p1 = p->aOp[0].p1; break; } @@ -80210,6 +81299,24 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ break; } +/* Opcode: IfNullRow P1 P2 P3 * * +** Synopsis: if P1.nullRow then r[P3]=NULL, goto P2 +** +** Check the cursor P1 to see if it is currently pointing at a NULL row. +** If it is, then set register P3 to NULL and jump immediately to P2. +** If P1 is not on a NULL row, then fall through without making any +** changes. +*/ +case OP_IfNullRow: { /* jump */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + assert( p->apCsr[pOp->p1]!=0 ); + if( p->apCsr[pOp->p1]->nullRow ){ + sqlite3VdbeMemSetNull(aMem + pOp->p3); + goto jump_to_p2; + } + break; +} + /* Opcode: Column P1 P2 P3 P4 P5 ** Synopsis: r[P3]=PX ** @@ -80221,7 +81328,7 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ ** ** The value extracted is stored in register P3. ** -** If the column contains fewer than P2 fields, then extract a NULL. Or, +** If the record contains fewer than P2 fields, then extract a NULL. Or, ** if the P4 argument is a P4_MEM use the value of the P4 argument as ** the result. ** @@ -80230,7 +81337,7 @@ case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */ ** The first OP_Column against a pseudo-table after the value of the content ** register has changed should have this bit set. ** -** If the OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG bits are set on P5 when +** If the OPFLAG_LENGTHARG and OPFLAG_TYPEOFARG bits are set on P5 then ** the result is guaranteed to only be used as the argument of a length() ** or typeof() function, respectively. The loading of large blobs can be ** skipped for length() and all content loading can be skipped for typeof(). @@ -80256,7 +81363,9 @@ case OP_Column: { pC = p->apCsr[pOp->p1]; p2 = pOp->p2; - /* If the cursor cache is stale, bring it up-to-date */ + /* If the cursor cache is stale (meaning it is not currently point at + ** the correct row) then bring it up-to-date by doing the necessary + ** B-Tree seek. */ rc = sqlite3VdbeCursorMoveto(&pC, &p2); if( rc ) goto abort_due_to_error; @@ -80458,8 +81567,13 @@ case OP_Column: { ** 2. the length(X) function if X is a blob, and ** 3. if the content length is zero. ** So we might as well use bogus content rather than reading - ** content from disk. */ - static u8 aZero[8]; /* This is the bogus content */ + ** content from disk. + ** + ** Although sqlite3VdbeSerialGet() may read at most 8 bytes from the + ** buffer passed to it, debugging function VdbeMemPrettyPrint() may + ** read up to 16. So 16 bytes of bogus content is supplied. + */ + static u8 aZero[16]; /* This is the bogus content */ sqlite3VdbeSerialGet(aZero, t, pDest); }else{ rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, aOffset[p2], len, pDest); @@ -80480,24 +81594,24 @@ op_column_out: ** ** Apply affinities to a range of P2 registers starting with P1. ** -** P4 is a string that is P2 characters long. The nth character of the -** string indicates the column affinity that should be used for the nth +** P4 is a string that is P2 characters long. The N-th character of the +** string indicates the column affinity that should be used for the N-th ** memory cell in the range. */ case OP_Affinity: { const char *zAffinity; /* The affinity to be applied */ - char cAff; /* A single character of affinity */ zAffinity = pOp->p4.z; assert( zAffinity!=0 ); + assert( pOp->p2>0 ); assert( zAffinity[pOp->p2]==0 ); pIn1 = &aMem[pOp->p1]; - while( (cAff = *(zAffinity++))!=0 ){ + do{ assert( pIn1 <= &p->aMem[(p->nMem+1 - p->nCursor)] ); assert( memIsValid(pIn1) ); - applyAffinity(pIn1, cAff, encoding); + applyAffinity(pIn1, *(zAffinity++), encoding); pIn1++; - } + }while( zAffinity[0] ); break; } @@ -80508,8 +81622,8 @@ case OP_Affinity: { ** use as a data record in a database table or as a key ** in an index. The OP_Column opcode can decode the record later. ** -** P4 may be a string that is P2 characters long. The nth character of the -** string indicates the column affinity that should be used for the nth +** P4 may be a string that is P2 characters long. The N-th character of the +** string indicates the column affinity that should be used for the N-th ** field of the index key. ** ** The mapping from character to affinity is given by the SQLITE_AFF_ @@ -80577,6 +81691,20 @@ case OP_MakeRecord: { }while( zAffinity[0] ); } +#ifdef SQLITE_ENABLE_NULL_TRIM + /* NULLs can be safely trimmed from the end of the record, as long as + ** as the schema format is 2 or more and none of the omitted columns + ** have a non-NULL default value. Also, the record must be left with + ** at least one field. If P5>0 then it will be one more than the + ** index of the right-most column with a non-NULL default value */ + if( pOp->p5 ){ + while( (pLast->flags & MEM_Null)!=0 && nField>pOp->p5 ){ + pLast--; + nField--; + } + } +#endif + /* Loop through the elements that will make up the record to figure ** out how much space is required for the new record. */ @@ -80654,7 +81782,6 @@ case OP_MakeRecord: { pOut->u.nZero = nZero; pOut->flags |= MEM_Zero; } - pOut->enc = SQLITE_UTF8; /* In case the blob is ever converted to text */ REGISTER_TRACE(pOp->p3, pOut); UPDATE_MAX_BLOBSIZE(pOut); break; @@ -81284,6 +82411,37 @@ open_cursor_set_hints: break; } +/* Opcode: OpenDup P1 P2 * * * +** +** Open a new cursor P1 that points to the same ephemeral table as +** cursor P2. The P2 cursor must have been opened by a prior OP_OpenEphemeral +** opcode. Only ephemeral cursors may be duplicated. +** +** Duplicate ephemeral cursors are used for self-joins of materialized views. +*/ +case OP_OpenDup: { + VdbeCursor *pOrig; /* The original cursor to be duplicated */ + VdbeCursor *pCx; /* The new cursor */ + + pOrig = p->apCsr[pOp->p2]; + assert( pOrig->pBtx!=0 ); /* Only ephemeral cursors can be duplicated */ + + pCx = allocateCursor(p, pOp->p1, pOrig->nField, -1, CURTYPE_BTREE); + if( pCx==0 ) goto no_mem; + pCx->nullRow = 1; + pCx->isEphemeral = 1; + pCx->pKeyInfo = pOrig->pKeyInfo; + pCx->isTable = pOrig->isTable; + rc = sqlite3BtreeCursor(pOrig->pBtx, MASTER_ROOT, BTREE_WRCSR, + pCx->pKeyInfo, pCx->uc.pCursor); + /* The sqlite3BtreeCursor() routine can only fail for the first cursor + ** opened for a database. Since there is already an open cursor when this + ** opcode is run, the sqlite3BtreeCursor() cannot fail */ + assert( rc==SQLITE_OK ); + break; +} + + /* Opcode: OpenEphemeral P1 P2 * P4 P5 ** Synopsis: nColumn=P2 ** @@ -81689,8 +82847,15 @@ case OP_SeekGT: { /* jump, in3 */ if( oc>=OP_SeekGE ){ assert( oc==OP_SeekGE || oc==OP_SeekGT ); if( res<0 || (res==0 && oc==OP_SeekGT) ){ res = 0; - rc = sqlite3BtreeNext(pC->uc.pCursor, &res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; + rc = sqlite3BtreeNext(pC->uc.pCursor, 0); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + res = 1; + }else{ + goto abort_due_to_error; + } + } }else{ res = 0; } @@ -81698,8 +82863,15 @@ case OP_SeekGT: { /* jump, in3 */ assert( oc==OP_SeekLT || oc==OP_SeekLE ); if( res>0 || (res==0 && oc==OP_SeekLT) ){ res = 0; - rc = sqlite3BtreePrevious(pC->uc.pCursor, &res); - if( rc!=SQLITE_OK ) goto abort_due_to_error; + rc = sqlite3BtreePrevious(pC->uc.pCursor, 0); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; + res = 1; + }else{ + goto abort_due_to_error; + } + } }else{ /* res might be negative because the table is empty. Check to ** see if this is the case. @@ -81819,10 +82991,12 @@ case OP_Found: { /* jump, in3 */ pIdxKey = &r; pFree = 0; }else{ + assert( pIn3->flags & MEM_Blob ); + rc = ExpandBlob(pIn3); + assert( rc==SQLITE_OK || rc==SQLITE_NOMEM ); + if( rc ) goto no_mem; pFree = pIdxKey = sqlite3VdbeAllocUnpackedRecord(pC->pKeyInfo); if( pIdxKey==0 ) goto no_mem; - assert( pIn3->flags & MEM_Blob ); - (void)ExpandBlob(pIn3); sqlite3VdbeRecordUnpack(pC->pKeyInfo, pIn3->n, pIn3->z, pIdxKey); } pIdxKey->default_rc = 0; @@ -81839,7 +83013,7 @@ case OP_Found: { /* jump, in3 */ } } rc = sqlite3BtreeMovetoUnpacked(pC->uc.pCursor, pIdxKey, 0, 0, &res); - if( pFree ) sqlite3DbFree(db, pFree); + if( pFree ) sqlite3DbFreeNN(db, pFree); if( rc!=SQLITE_OK ){ goto abort_due_to_error; } @@ -82166,7 +83340,7 @@ case OP_InsertInt: { assert( pC!=0 ); assert( pC->eCurType==CURTYPE_BTREE ); assert( pC->uc.pCursor!=0 ); - assert( pC->isTable ); + assert( (pOp->p5 & OPFLAG_ISNOOP) || pC->isTable ); assert( pOp->p4type==P4_TABLE || pOp->p4type>=P4_STATIC ); REGISTER_TRACE(pOp->p2, pData); @@ -82182,14 +83356,13 @@ case OP_InsertInt: { } if( pOp->p4type==P4_TABLE && HAS_UPDATE_HOOK(db) ){ - assert( pC->isTable ); assert( pC->iDb>=0 ); zDb = db->aDb[pC->iDb].zDbSName; pTab = pOp->p4.pTab; - assert( HasRowid(pTab) ); + assert( (pOp->p5 & OPFLAG_ISNOOP) || HasRowid(pTab) ); op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); }else{ - pTab = 0; /* Not needed. Silence a comiler warning. */ + pTab = 0; /* Not needed. Silence a compiler warning. */ zDb = 0; /* Not needed. Silence a compiler warning. */ } @@ -82201,10 +83374,11 @@ case OP_InsertInt: { ){ sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey, pOp->p2); } + if( pOp->p5 & OPFLAG_ISNOOP ) break; #endif if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; - if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = x.nKey; + if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey; if( pData->flags & MEM_Null ){ x.pData = 0; x.nData = 0; @@ -82221,7 +83395,7 @@ case OP_InsertInt: { } x.pKey = 0; rc = sqlite3BtreeInsert(pC->uc.pCursor, &x, - (pOp->p5 & OPFLAG_APPEND)!=0, seekResult + (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION)), seekResult ); pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; @@ -82313,8 +83487,11 @@ case OP_Delete: { #ifdef SQLITE_ENABLE_PREUPDATE_HOOK /* Invoke the pre-update-hook if required. */ - if( db->xPreUpdateCallback && pOp->p4.pTab && HasRowid(pTab) ){ - assert( !(opflags & OPFLAG_ISUPDATE) || (aMem[pOp->p3].flags & MEM_Int) ); + if( db->xPreUpdateCallback && pOp->p4.pTab ){ + assert( !(opflags & OPFLAG_ISUPDATE) + || HasRowid(pTab)==0 + || (aMem[pOp->p3].flags & MEM_Int) + ); sqlite3VdbePreUpdateHook(p, pC, (opflags & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_DELETE, zDb, pTab, pC->movetoTarget, @@ -82432,7 +83609,7 @@ case OP_SorterData: { break; } -/* Opcode: RowData P1 P2 * * * +/* Opcode: RowData P1 P2 P3 * * ** Synopsis: r[P2]=data ** ** Write into register P2 the complete row content for the row at @@ -82446,14 +83623,26 @@ case OP_SorterData: { ** ** If the P1 cursor must be pointing to a valid row (not a NULL row) ** of a real table, not a pseudo-table. +** +** If P3!=0 then this opcode is allowed to make an ephermeral pointer +** into the database page. That means that the content of the output +** register will be invalidated as soon as the cursor moves - including +** moves caused by other cursors that "save" the the current cursors +** position in order that they can write to the same table. If P3==0 +** then a copy of the data is made into memory. P3!=0 is faster, but +** P3==0 is safer. +** +** If P3!=0 then the content of the P2 register is unsuitable for use +** in OP_Result and any OP_Result will invalidate the P2 register content. +** The P2 register content is invalidated by opcodes like OP_Function or +** by any use of another cursor pointing to the same table. */ case OP_RowData: { VdbeCursor *pC; BtCursor *pCrsr; u32 n; - pOut = &aMem[pOp->p2]; - memAboutToChange(p, pOut); + pOut = out2Prerelease(p, pOp); assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; @@ -82484,14 +83673,9 @@ case OP_RowData: { goto too_big; } testcase( n==0 ); - if( sqlite3VdbeMemClearAndResize(pOut, MAX(n,32)) ){ - goto no_mem; - } - pOut->n = n; - MemSetTypeFlag(pOut, MEM_Blob); - rc = sqlite3BtreePayload(pCrsr, 0, n, pOut->z); + rc = sqlite3VdbeMemFromBtree(pCrsr, 0, n, pOut); if( rc ) goto abort_due_to_error; - pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */ + if( !pOp->p3 ) Deephemeralize(pOut); UPDATE_MAX_BLOBSIZE(pOut); REGISTER_TRACE(pOp->p2, pOut); break; @@ -82620,6 +83804,33 @@ case OP_Last: { /* jump */ break; } +/* Opcode: IfSmaller P1 P2 P3 * * +** +** Estimate the number of rows in the table P1. Jump to P2 if that +** estimate is less than approximately 2**(0.1*P3). +*/ +case OP_IfSmaller: { /* jump */ + VdbeCursor *pC; + BtCursor *pCrsr; + int res; + i64 sz; + + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + assert( pC!=0 ); + pCrsr = pC->uc.pCursor; + assert( pCrsr ); + rc = sqlite3BtreeFirst(pCrsr, &res); + if( rc ) goto abort_due_to_error; + if( res==0 ){ + sz = sqlite3BtreeRowCountEst(pCrsr); + if( ALWAYS(sz>=0) && sqlite3LogEst((u64)sz)p3 ) res = 1; + } + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + break; +} + /* Opcode: SorterSort P1 P2 * * * ** @@ -82766,12 +83977,10 @@ case OP_Rewind: { /* jump */ */ case OP_SorterNext: { /* jump */ VdbeCursor *pC; - int res; pC = p->apCsr[pOp->p1]; assert( isSorter(pC) ); - res = 0; - rc = sqlite3VdbeSorterNext(db, pC, &res); + rc = sqlite3VdbeSorterNext(db, pC); goto next_tail; case OP_PrevIfOpen: /* jump */ case OP_NextIfOpen: /* jump */ @@ -82782,12 +83991,9 @@ case OP_Next: /* jump */ assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p5aCounter) ); pC = p->apCsr[pOp->p1]; - res = pOp->p3; assert( pC!=0 ); assert( pC->deferredMoveto==0 ); assert( pC->eCurType==CURTYPE_BTREE ); - assert( res==0 || (res==1 && pC->isTable==0) ); - testcase( res==1 ); assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext ); assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious ); assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext ); @@ -82802,21 +84008,21 @@ case OP_Next: /* jump */ || pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE || pC->seekOp==OP_Last ); - rc = pOp->p4.xAdvance(pC->uc.pCursor, &res); + rc = pOp->p4.xAdvance(pC->uc.pCursor, pOp->p3); next_tail: pC->cacheStatus = CACHE_STALE; - VdbeBranchTaken(res==0,2); - if( rc ) goto abort_due_to_error; - if( res==0 ){ + VdbeBranchTaken(rc==SQLITE_OK,2); + if( rc==SQLITE_OK ){ pC->nullRow = 0; p->aCounter[pOp->p5]++; #ifdef SQLITE_TEST sqlite3_search_count++; #endif goto jump_to_p2_and_check_for_interrupt; - }else{ - pC->nullRow = 1; } + if( rc!=SQLITE_DONE ) goto abort_due_to_error; + rc = SQLITE_OK; + pC->nullRow = 1; goto check_for_interrupt; } @@ -82879,7 +84085,7 @@ case OP_IdxInsert: { /* in2 */ x.aMem = aMem + pOp->p3; x.nMem = (u16)pOp->p4.i; rc = sqlite3BtreeInsert(pC->uc.pCursor, &x, - (pOp->p5 & OPFLAG_APPEND)!=0, + (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION)), ((pOp->p5 & OPFLAG_USESEEKRESULT) ? pC->seekResult : 0) ); assert( pC->deferredMoveto==0 ); @@ -82927,8 +84133,8 @@ case OP_IdxDelete: { break; } -/* Opcode: Seek P1 * P3 P4 * -** Synopsis: Move P3 to P1.rowid +/* Opcode: DeferredSeek P1 * P3 P4 * +** Synopsis: Move P3 to P1.rowid if needed ** ** P1 is an open index cursor and P3 is a cursor on the corresponding ** table. This opcode does a deferred seek of the P3 table cursor @@ -82955,11 +84161,11 @@ case OP_IdxDelete: { ** ** See also: Rowid, MakeRecord. */ -case OP_Seek: -case OP_IdxRowid: { /* out2 */ - VdbeCursor *pC; /* The P1 index cursor */ - VdbeCursor *pTabCur; /* The P2 table cursor (OP_Seek only) */ - i64 rowid; /* Rowid that P1 current points to */ +case OP_DeferredSeek: +case OP_IdxRowid: { /* out2 */ + VdbeCursor *pC; /* The P1 index cursor */ + VdbeCursor *pTabCur; /* The P2 table cursor (OP_DeferredSeek only) */ + i64 rowid; /* Rowid that P1 current points to */ assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; @@ -82985,7 +84191,7 @@ case OP_IdxRowid: { /* out2 */ if( rc!=SQLITE_OK ){ goto abort_due_to_error; } - if( pOp->opcode==OP_Seek ){ + if( pOp->opcode==OP_DeferredSeek ){ assert( pOp->p3>=0 && pOp->p3nCursor ); pTabCur = p->apCsr[pOp->p3]; assert( pTabCur!=0 ); @@ -83001,7 +84207,6 @@ case OP_IdxRowid: { /* out2 */ }else{ pOut = out2Prerelease(p, pOp); pOut->u.i = rowid; - pOut->flags = MEM_Int; } }else{ assert( pOp->opcode==OP_IdxRowid ); @@ -83113,10 +84318,17 @@ case OP_IdxGE: { /* jump */ ** might be moved into the newly deleted root page in order to keep all ** root pages contiguous at the beginning of the database. The former ** value of the root page that moved - its value before the move occurred - -** is stored in register P2. If no page -** movement was required (because the table being dropped was already -** the last one in the database) then a zero is stored in register P2. -** If AUTOVACUUM is disabled then a zero is stored in register P2. +** is stored in register P2. If no page movement was required (because the +** table being dropped was already the last one in the database) then a +** zero is stored in register P2. If AUTOVACUUM is disabled then a zero +** is stored in register P2. +** +** This opcode throws an error if there are any active reader VMs when +** it is invoked. This is done to avoid the difficulty associated with +** updating existing cursors when a root page is moved in an AUTOVACUUM +** database. This error is thrown even if the database is not an AUTOVACUUM +** db in order to avoid introducing an incompatibility between autovacuum +** and non-autovacuum modes. ** ** See also: Clear */ @@ -83265,6 +84477,18 @@ case OP_CreateTable: { /* out2 */ break; } +/* Opcode: SqlExec * * * P4 * +** +** Run the SQL statement or statements specified in the P4 string. +*/ +case OP_SqlExec: { + db->nSqlExec++; + rc = sqlite3_exec(db, pOp->p4.z, 0, 0, 0); + db->nSqlExec--; + if( rc ) goto abort_due_to_error; + break; +} + /* Opcode: ParseSchema P1 * * P4 * ** ** Read and parse all entries from the SQLITE_MASTER table of database P1 @@ -83309,7 +84533,7 @@ case OP_ParseSchema: { assert( !db->mallocFailed ); rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0); if( rc==SQLITE_OK ) rc = initData.rc; - sqlite3DbFree(db, zSql); + sqlite3DbFreeNN(db, zSql); db->init.busy = 0; } } @@ -83385,7 +84609,7 @@ case OP_DropTrigger: { ** register P1 the text of an error message describing any problems. ** If no problems are found, store a NULL in register P1. ** -** The register P3 contains the maximum number of allowed errors. +** The register P3 contains one less than the maximum number of allowed errors. ** At most reg(P3) errors will be reported. ** In other words, the analysis stops as soon as reg(P1) errors are ** seen. Reg(P1) is updated with the number of errors remaining. @@ -83418,14 +84642,14 @@ case OP_IntegrityCk: { assert( pOp->p5nDb ); assert( DbMaskTest(p->btreeMask, pOp->p5) ); z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot, - (int)pnErr->u.i, &nErr); - pnErr->u.i -= nErr; + (int)pnErr->u.i+1, &nErr); sqlite3VdbeMemSetNull(pIn1); if( nErr==0 ){ assert( z==0 ); }else if( z==0 ){ goto no_mem; }else{ + pnErr->u.i -= nErr-1; sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free); } UPDATE_MAX_BLOBSIZE(pIn1); @@ -83437,7 +84661,7 @@ case OP_IntegrityCk: { /* Opcode: RowSetAdd P1 P2 * * * ** Synopsis: rowset(P1)=r[P2] ** -** Insert the integer value held by register P2 into a boolean index +** Insert the integer value held by register P2 into a RowSet object ** held in register P1. ** ** An assertion fails if P2 is not an integer. @@ -83457,8 +84681,9 @@ case OP_RowSetAdd: { /* in1, in2 */ /* Opcode: RowSetRead P1 P2 P3 * * ** Synopsis: r[P3]=rowset(P1) ** -** Extract the smallest value from boolean index P1 and put that value into -** register P3. Or, if boolean index P1 is initially empty, leave P3 +** Extract the smallest value from the RowSet object in P1 +** and put that value into register P3. +** Or, if RowSet object P1 is initially empty, leave P3 ** unchanged and jump to instruction P2. */ case OP_RowSetRead: { /* jump, in1, out3 */ @@ -83489,15 +84714,14 @@ case OP_RowSetRead: { /* jump, in1, out3 */ ** integer in P3 into the RowSet and continue on to the ** next opcode. ** -** The RowSet object is optimized for the case where successive sets -** of integers, where each set contains no duplicates. Each set -** of values is identified by a unique P4 value. The first set -** must have P4==0, the final set P4=-1. P4 must be either -1 or -** non-negative. For non-negative values of P4 only the lower 4 -** bits are significant. +** The RowSet object is optimized for the case where sets of integers +** are inserted in distinct phases, which each set contains no duplicates. +** Each set is identified by a unique P4 value. The first set +** must have P4==0, the final set must have P4==-1, and for all other sets +** must have P4>0. ** ** This allows optimizations: (a) when P4==0 there is no need to test -** the rowset object for P3, as it is guaranteed not to contain it, +** the RowSet object for P3, as it is guaranteed not to contain it, ** (b) when P4==-1 there is no need to insert the value, as it will ** never be tested for, and (c) when a value that is part of set X is ** inserted, there is no need to search to see if the same value was @@ -83604,7 +84828,8 @@ case OP_Program: { /* jump */ if( pProgram->nCsr==0 ) nMem++; nByte = ROUND8(sizeof(VdbeFrame)) + nMem * sizeof(Mem) - + pProgram->nCsr * sizeof(VdbeCursor *); + + pProgram->nCsr * sizeof(VdbeCursor*) + + (pProgram->nOp + 7)/8; pFrame = sqlite3DbMallocZero(db, nByte); if( !pFrame ){ goto no_mem; @@ -83643,7 +84868,7 @@ case OP_Program: { /* jump */ p->nFrame++; pFrame->pParent = p->pFrame; - pFrame->lastRowid = lastRowid; + pFrame->lastRowid = db->lastRowid; pFrame->nChange = p->nChange; pFrame->nDbChange = p->db->nChange; assert( pFrame->pAuxData==0 ); @@ -83655,6 +84880,8 @@ case OP_Program: { /* jump */ p->nMem = pFrame->nChildMem; p->nCursor = (u16)pFrame->nChildCsr; p->apCsr = (VdbeCursor **)&aMem[p->nMem]; + pFrame->aOnce = (u8*)&p->apCsr[pProgram->nCsr]; + memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8); p->aOp = aOp = pProgram->aOp; p->nOp = pProgram->nOp; #ifdef SQLITE_ENABLE_STMT_SCANSTATUS @@ -84210,7 +85437,7 @@ case OP_Expire: { */ case OP_TableLock: { u8 isWriteLock = (u8)pOp->p3; - if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){ + if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommit) ){ int p1 = pOp->p1; assert( p1>=0 && p1nDb ); assert( DbMaskTest(p->btreeMask, p1) ); @@ -84584,7 +85811,7 @@ case OP_VUpdate: { sqlite3VtabImportErrmsg(p, pVtab); if( rc==SQLITE_OK && pOp->p1 ){ assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) ); - db->lastRowid = lastRowid = rowid; + db->lastRowid = rowid; } if( (rc&0xff)==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){ if( pOp->p5==OE_Ignore ){ @@ -84639,6 +85866,121 @@ case OP_MaxPgcnt: { /* out2 */ } #endif +/* Opcode: Function0 P1 P2 P3 P4 P5 +** Synopsis: r[P3]=func(r[P2@P5]) +** +** Invoke a user function (P4 is a pointer to a FuncDef object that +** defines the function) with P5 arguments taken from register P2 and +** successors. The result of the function is stored in register P3. +** Register P3 must not be one of the function inputs. +** +** P1 is a 32-bit bitmask indicating whether or not each argument to the +** function was determined to be constant at compile time. If the first +** argument was constant then bit 0 of P1 is set. This is used to determine +** whether meta data associated with a user function argument using the +** sqlite3_set_auxdata() API may be safely retained until the next +** invocation of this opcode. +** +** See also: Function, AggStep, AggFinal +*/ +/* Opcode: Function P1 P2 P3 P4 P5 +** Synopsis: r[P3]=func(r[P2@P5]) +** +** Invoke a user function (P4 is a pointer to an sqlite3_context object that +** contains a pointer to the function to be run) with P5 arguments taken +** from register P2 and successors. The result of the function is stored +** in register P3. Register P3 must not be one of the function inputs. +** +** P1 is a 32-bit bitmask indicating whether or not each argument to the +** function was determined to be constant at compile time. If the first +** argument was constant then bit 0 of P1 is set. This is used to determine +** whether meta data associated with a user function argument using the +** sqlite3_set_auxdata() API may be safely retained until the next +** invocation of this opcode. +** +** SQL functions are initially coded as OP_Function0 with P4 pointing +** to a FuncDef object. But on first evaluation, the P4 operand is +** automatically converted into an sqlite3_context object and the operation +** changed to this OP_Function opcode. In this way, the initialization of +** the sqlite3_context object occurs only once, rather than once for each +** evaluation of the function. +** +** See also: Function0, AggStep, AggFinal +*/ +case OP_PureFunc0: +case OP_Function0: { + int n; + sqlite3_context *pCtx; + + assert( pOp->p4type==P4_FUNCDEF ); + n = pOp->p5; + assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); + assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem+1 - p->nCursor)+1) ); + assert( pOp->p3p2 || pOp->p3>=pOp->p2+n ); + pCtx = sqlite3DbMallocRawNN(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*)); + if( pCtx==0 ) goto no_mem; + pCtx->pOut = 0; + pCtx->pFunc = pOp->p4.pFunc; + pCtx->iOp = (int)(pOp - aOp); + pCtx->pVdbe = p; + pCtx->argc = n; + pOp->p4type = P4_FUNCCTX; + pOp->p4.pCtx = pCtx; + assert( OP_PureFunc == OP_PureFunc0+2 ); + assert( OP_Function == OP_Function0+2 ); + pOp->opcode += 2; + /* Fall through into OP_Function */ +} +case OP_PureFunc: +case OP_Function: { + int i; + sqlite3_context *pCtx; + + assert( pOp->p4type==P4_FUNCCTX ); + pCtx = pOp->p4.pCtx; + + /* If this function is inside of a trigger, the register array in aMem[] + ** might change from one evaluation to the next. The next block of code + ** checks to see if the register array has changed, and if so it + ** reinitializes the relavant parts of the sqlite3_context object */ + pOut = &aMem[pOp->p3]; + if( pCtx->pOut != pOut ){ + pCtx->pOut = pOut; + for(i=pCtx->argc-1; i>=0; i--) pCtx->argv[i] = &aMem[pOp->p2+i]; + } + + memAboutToChange(p, pOut); +#ifdef SQLITE_DEBUG + for(i=0; iargc; i++){ + assert( memIsValid(pCtx->argv[i]) ); + REGISTER_TRACE(pOp->p2+i, pCtx->argv[i]); + } +#endif + MemSetTypeFlag(pOut, MEM_Null); + pCtx->fErrorOrAux = 0; + (*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */ + + /* If the function returned an error, throw an exception */ + if( pCtx->fErrorOrAux ){ + if( pCtx->isError ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pOut)); + rc = pCtx->isError; + } + sqlite3VdbeDeleteAuxData(db, &p->pAuxData, pCtx->iOp, pOp->p1); + if( rc ) goto abort_due_to_error; + } + + /* Copy the result of the function into register P3 */ + if( pOut->flags & (MEM_Str|MEM_Blob) ){ + sqlite3VdbeChangeEncoding(pOut, encoding); + if( sqlite3VdbeMemTooBig(pOut) ) goto too_big; + } + + REGISTER_TRACE(pOp->p3, pOut); + UPDATE_MAX_BLOBSIZE(pOut); + break; +} + /* Opcode: Init P1 P2 * P4 * ** Synopsis: Start at P2 @@ -84684,7 +86026,11 @@ case OP_Init: { /* jump */ sqlite3_free(z); }else #endif - { + if( db->nVdbeExec>1 ){ + char *z = sqlite3MPrintf(db, "-- %s", zTrace); + (void)db->xTrace(SQLITE_TRACE_STMT, db->pTraceArg, p, z); + sqlite3DbFree(db, z); + }else{ (void)db->xTrace(SQLITE_TRACE_STMT, db->pTraceArg, p, zTrace); } } @@ -84714,6 +86060,7 @@ case OP_Init: { /* jump */ pOp->p1 = 0; } pOp->p1++; + p->aCounter[SQLITE_STMTSTATUS_RUN]++; goto jump_to_p2; } @@ -84820,7 +86167,6 @@ abort_due_to_error: ** release the mutexes on btrees that were acquired at the ** top. */ vdbe_return: - db->lastRowid = lastRowid; testcase( nVmStep>0 ); p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep; sqlite3VdbeLeave(p); @@ -84884,10 +86230,9 @@ abort_due_to_interrupt: */ typedef struct Incrblob Incrblob; struct Incrblob { - int flags; /* Copy of "flags" passed to sqlite3_blob_open() */ int nByte; /* Size of open blob, in bytes */ int iOffset; /* Byte offset of blob in cursor data */ - int iCol; /* Table column this handle is open on */ + u16 iCol; /* Table column this handle is open on */ BtCursor *pCsr; /* Cursor pointing at blob row */ sqlite3_stmt *pStmt; /* Statement holding cursor open */ sqlite3 *db; /* The associated database */ @@ -84918,17 +86263,27 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ char *zErr = 0; /* Error message */ Vdbe *v = (Vdbe *)p->pStmt; - /* Set the value of the SQL statements only variable to integer iRow. - ** This is done directly instead of using sqlite3_bind_int64() to avoid - ** triggering asserts related to mutexes. + /* Set the value of register r[1] in the SQL statement to integer iRow. + ** This is done directly as a performance optimization */ - assert( v->aVar[0].flags&MEM_Int ); - v->aVar[0].u.i = iRow; + v->aMem[1].flags = MEM_Int; + v->aMem[1].u.i = iRow; - rc = sqlite3_step(p->pStmt); + /* If the statement has been run before (and is paused at the OP_ResultRow) + ** then back it up to the point where it does the OP_SeekRowid. This could + ** have been down with an extra OP_Goto, but simply setting the program + ** counter is faster. */ + if( v->pc>3 ){ + v->pc = 3; + rc = sqlite3VdbeExec(v); + }else{ + rc = sqlite3_step(p->pStmt); + } if( rc==SQLITE_ROW ){ VdbeCursor *pC = v->apCsr[0]; - u32 type = pC->aType[p->iCol]; + u32 type = pC->nHdrParsed>p->iCol ? pC->aType[p->iCol] : 0; + testcase( pC->nHdrParsed==p->iCol ); + testcase( pC->nHdrParsed==p->iCol+1 ); if( type<12 ){ zErr = sqlite3MPrintf(p->db, "cannot open value of type %s", type==0?"null": type==7?"real": "integer" @@ -84973,7 +86328,7 @@ SQLITE_API int sqlite3_blob_open( const char *zTable, /* The table containing the blob */ const char *zColumn, /* The column containing the blob */ sqlite_int64 iRow, /* The row containing the glob */ - int flags, /* True -> read/write access, false -> read-only */ + int wrFlag, /* True -> read/write access, false -> read-only */ sqlite3_blob **ppBlob /* Handle for accessing the blob returned here */ ){ int nAttempt = 0; @@ -84995,7 +86350,7 @@ SQLITE_API int sqlite3_blob_open( return SQLITE_MISUSE_BKPT; } #endif - flags = !!flags; /* flags = (flags ? 1 : 0); */ + wrFlag = !!wrFlag; /* wrFlag = (wrFlag ? 1 : 0); */ sqlite3_mutex_enter(db->mutex); @@ -85055,9 +86410,8 @@ SQLITE_API int sqlite3_blob_open( /* If the value is being opened for writing, check that the ** column is not indexed, and that it is not part of a foreign key. - ** It is against the rules to open a column to which either of these - ** descriptions applies for writing. */ - if( flags ){ + */ + if( wrFlag ){ const char *zFault = 0; Index *pIdx; #ifndef SQLITE_OMIT_FOREIGN_KEY @@ -85118,18 +86472,17 @@ SQLITE_API int sqlite3_blob_open( static const VdbeOpList openBlob[] = { {OP_TableLock, 0, 0, 0}, /* 0: Acquire a read or write lock */ {OP_OpenRead, 0, 0, 0}, /* 1: Open a cursor */ - {OP_Variable, 1, 1, 0}, /* 2: Move ?1 into reg[1] */ - {OP_NotExists, 0, 7, 1}, /* 3: Seek the cursor */ - {OP_Column, 0, 0, 1}, /* 4 */ - {OP_ResultRow, 1, 0, 0}, /* 5 */ - {OP_Goto, 0, 2, 0}, /* 6 */ - {OP_Halt, 0, 0, 0}, /* 7 */ + /* blobSeekToRow() will initialize r[1] to the desired rowid */ + {OP_NotExists, 0, 5, 1}, /* 2: Seek the cursor to rowid=r[1] */ + {OP_Column, 0, 0, 1}, /* 3 */ + {OP_ResultRow, 1, 0, 0}, /* 4 */ + {OP_Halt, 0, 0, 0}, /* 5 */ }; Vdbe *v = (Vdbe *)pBlob->pStmt; int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); VdbeOp *aOp; - sqlite3VdbeAddOp4Int(v, OP_Transaction, iDb, flags, + sqlite3VdbeAddOp4Int(v, OP_Transaction, iDb, wrFlag, pTab->pSchema->schema_cookie, pTab->pSchema->iGeneration); sqlite3VdbeChangeP5(v, 1); @@ -85146,7 +86499,7 @@ SQLITE_API int sqlite3_blob_open( #else aOp[0].p1 = iDb; aOp[0].p2 = pTab->tnum; - aOp[0].p3 = flags; + aOp[0].p3 = wrFlag; sqlite3VdbeChangeP4(v, 1, pTab->zName, P4_TRANSIENT); } if( db->mallocFailed==0 ){ @@ -85154,7 +86507,7 @@ SQLITE_API int sqlite3_blob_open( /* Remove either the OP_OpenWrite or OpenRead. Set the P2 ** parameter of the other to pTab->tnum. */ - if( flags ) aOp[1].opcode = OP_OpenWrite; + if( wrFlag ) aOp[1].opcode = OP_OpenWrite; aOp[1].p2 = pTab->tnum; aOp[1].p3 = iDb; @@ -85167,23 +86520,21 @@ SQLITE_API int sqlite3_blob_open( */ aOp[1].p4type = P4_INT32; aOp[1].p4.i = pTab->nCol+1; - aOp[4].p2 = pTab->nCol; + aOp[3].p2 = pTab->nCol; - pParse->nVar = 1; + pParse->nVar = 0; pParse->nMem = 1; pParse->nTab = 1; sqlite3VdbeMakeReady(v, pParse); } } - pBlob->flags = flags; pBlob->iCol = iCol; pBlob->db = db; sqlite3BtreeLeaveAll(db); if( db->mallocFailed ){ goto blob_open_out; } - sqlite3_bind_int64(pBlob->pStmt, 1, iRow); rc = blobSeekToRow(pBlob, iRow, &zErr); } while( (++nAttempt)0 && s1<7) || s1==8 || s1==9 ); assert( (s2>0 && s2<7) || s2==8 || s2==9 ); - if( s1>7 && s2>7 ){ + if( s1==s2 ){ + /* The two values have the same sign. Compare using memcmp(). */ + static const u8 aLen[] = {0, 1, 2, 3, 4, 6, 8, 0, 0, 0 }; + const u8 n = aLen[s1]; + int i; + res = 0; + for(i=0; i7 && s2>7 ){ res = s1 - s2; }else{ - if( s1==s2 ){ - if( (*v1 ^ *v2) & 0x80 ){ - /* The two values have different signs */ - res = (*v1 & 0x80) ? -1 : +1; - }else{ - /* The two values have the same sign. Compare using memcmp(). */ - static const u8 aLen[] = {0, 1, 2, 3, 4, 6, 8 }; - int i; - res = 0; - for(i=0; i7 ){ + res = +1; + }else if( s1>7 ){ + res = -1; }else{ - if( s2>7 ){ - res = +1; - }else if( s1>7 ){ - res = -1; - }else{ - res = s1 - s2; - } - assert( res!=0 ); + res = s1 - s2; + } + assert( res!=0 ); - if( res>0 ){ - if( *v1 & 0x80 ) res = -1; - }else{ - if( *v2 & 0x80 ) res = +1; - } + if( res>0 ){ + if( *v1 & 0x80 ) res = -1; + }else{ + if( *v2 & 0x80 ) res = +1; } } @@ -87981,9 +89331,13 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *pCsr, int *pbEof){ } /* -** Advance to the next element in the sorter. +** Advance to the next element in the sorter. Return value: +** +** SQLITE_OK success +** SQLITE_DONE end of data +** otherwise some kind of error. */ -SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr, int *pbEof){ +SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr){ VdbeSorter *pSorter; int rc; /* Return code */ @@ -87997,21 +89351,22 @@ SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr, in #if SQLITE_MAX_WORKER_THREADS>0 if( pSorter->bUseThreads ){ rc = vdbePmaReaderNext(pSorter->pReader); - *pbEof = (pSorter->pReader->pFd==0); + if( rc==SQLITE_OK && pSorter->pReader->pFd==0 ) rc = SQLITE_DONE; }else #endif /*if( !pSorter->bUseThreads )*/ { + int res = 0; assert( pSorter->pMerger!=0 ); assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) ); - rc = vdbeMergeEngineStep(pSorter->pMerger, pbEof); + rc = vdbeMergeEngineStep(pSorter->pMerger, &res); + if( rc==SQLITE_OK && res ) rc = SQLITE_DONE; } }else{ SorterRecord *pFree = pSorter->list.pList; pSorter->list.pList = pFree->u.pNext; pFree->u.pNext = 0; if( pSorter->list.aMemory==0 ) vdbeSorterRecordFree(db, pFree); - *pbEof = !pSorter->list.pList; - rc = SQLITE_OK; + rc = pSorter->list.pList ? SQLITE_OK : SQLITE_DONE; } return rc; } @@ -88568,11 +89923,11 @@ SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){ ** ** WRC_Continue Continue descending down the tree. ** -** WRC_Prune Do not descend into child nodes. But allow +** WRC_Prune Do not descend into child nodes, but allow ** the walk to continue with sibling nodes. ** ** WRC_Abort Do no more callbacks. Unwind the stack and -** return the top-level walk call. +** return from the top-level walk call. ** ** The return value from this routine is WRC_Abort to abandon the tree walk ** and WRC_Continue to continue. @@ -88582,15 +89937,17 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){ testcase( ExprHasProperty(pExpr, EP_TokenOnly) ); testcase( ExprHasProperty(pExpr, EP_Reduced) ); rc = pWalker->xExprCallback(pWalker, pExpr); - if( rc || ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){ - return rc & WRC_Abort; - } - if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; - if( pExpr->pRight && walkExpr(pWalker, pExpr->pRight) ) return WRC_Abort; - if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; - }else if( pExpr->x.pList ){ - if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; + if( rc ) return rc & WRC_Abort; + if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){ + if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; + assert( pExpr->x.pList==0 || pExpr->pRight==0 ); + if( pExpr->pRight ){ + if( walkExpr(pWalker, pExpr->pRight) ) return WRC_Abort; + }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; + }else if( pExpr->x.pList ){ + if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; + } } return WRC_Continue; } @@ -88645,7 +90002,7 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ pSrc = p->pSrc; if( ALWAYS(pSrc) ){ for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ - if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){ + if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){ return WRC_Abort; } if( pItem->fg.isTabFunc @@ -88665,8 +90022,9 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ ** ** If it is not NULL, the xSelectCallback() callback is invoked before ** the walk of the expressions and FROM clause. The xSelectCallback2() -** method, if it is not NULL, is invoked following the walk of the -** expressions and FROM clause. +** method is invoked following the walk of the expressions and FROM clause, +** but only if both xSelectCallback and xSelectCallback2 are both non-NULL +** and if the expressions and FROM clause both return WRC_Continue; ** ** Return WRC_Continue under normal conditions. Return WRC_Abort if ** there is an abort request. @@ -88676,29 +90034,22 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ */ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ int rc; - if( p==0 || (pWalker->xSelectCallback==0 && pWalker->xSelectCallback2==0) ){ - return WRC_Continue; - } - rc = WRC_Continue; - pWalker->walkerDepth++; - while( p ){ - if( pWalker->xSelectCallback ){ - rc = pWalker->xSelectCallback(pWalker, p); - if( rc ) break; - } + if( p==0 ) return WRC_Continue; + if( pWalker->xSelectCallback==0 ) return WRC_Continue; + do{ + rc = pWalker->xSelectCallback(pWalker, p); + if( rc ) return rc & WRC_Abort; if( sqlite3WalkSelectExpr(pWalker, p) || sqlite3WalkSelectFrom(pWalker, p) ){ - pWalker->walkerDepth--; return WRC_Abort; } if( pWalker->xSelectCallback2 ){ pWalker->xSelectCallback2(pWalker, p); } p = p->pPrior; - } - pWalker->walkerDepth--; - return rc & WRC_Abort; + }while( p!=0 ); + return WRC_Continue; } /************** End of walker.c **********************************************/ @@ -88720,8 +90071,6 @@ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ ** table and column. */ /* #include "sqliteInt.h" */ -/* #include */ -/* #include */ /* ** Walk the expression tree pExpr and increase the aggregate function @@ -88936,7 +90285,8 @@ static int lookupName( } /* Start at the inner-most context and move outward until a match is found */ - while( pNC && cnt==0 ){ + assert( pNC && cnt==0 ); + do{ ExprList *pEList; SrcList *pSrcList = pNC->pSrcList; @@ -89121,11 +90471,11 @@ static int lookupName( /* Advance to the next name context. The loop will exit when either ** we have a match (cnt>0) or when we run out of name contexts. */ - if( cnt==0 ){ - pNC = pNC->pNext; - nSubquery++; - } - } + if( cnt ) break; + pNC = pNC->pNext; + nSubquery++; + }while( pNC ); + /* ** If X and Y are NULL (in other words if only the column name Z is @@ -89184,6 +90534,7 @@ static int lookupName( sqlite3ExprDelete(db, pExpr->pRight); pExpr->pRight = 0; pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN); + ExprSetProperty(pExpr, EP_Leaf); lookupname_end: if( cnt==1 ){ assert( pNC!=0 ); @@ -89222,7 +90573,6 @@ SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSr testcase( iCol==BMS-1 ); pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); } - ExprSetProperty(p, EP_Resolved); } return p; } @@ -89282,8 +90632,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ pParse = pNC->pParse; assert( pParse==pWalker->pParse ); - if( ExprHasProperty(pExpr, EP_Resolved) ) return WRC_Prune; - ExprSetProperty(pExpr, EP_Resolved); #ifndef NDEBUG if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){ SrcList *pSrcList = pNC->pSrcList; @@ -89315,33 +90663,38 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */ - /* A lone identifier is the name of a column. - */ - case TK_ID: { - return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr); - } - - /* A table name and column name: ID.ID + /* A column name: ID + ** Or table name and column name: ID.ID ** Or a database, table and column: ID.ID.ID + ** + ** The TK_ID and TK_OUT cases are combined so that there will only + ** be one call to lookupName(). Then the compiler will in-line + ** lookupName() for a size reduction and performance increase. */ + case TK_ID: case TK_DOT: { const char *zColumn; const char *zTable; const char *zDb; Expr *pRight; - /* if( pSrcList==0 ) break; */ - notValid(pParse, pNC, "the \".\" operator", NC_IdxExpr); - pRight = pExpr->pRight; - if( pRight->op==TK_ID ){ + if( pExpr->op==TK_ID ){ zDb = 0; - zTable = pExpr->pLeft->u.zToken; - zColumn = pRight->u.zToken; + zTable = 0; + zColumn = pExpr->u.zToken; }else{ - assert( pRight->op==TK_DOT ); - zDb = pExpr->pLeft->u.zToken; - zTable = pRight->pLeft->u.zToken; - zColumn = pRight->pRight->u.zToken; + notValid(pParse, pNC, "the \".\" operator", NC_IdxExpr); + pRight = pExpr->pRight; + if( pRight->op==TK_ID ){ + zDb = 0; + zTable = pExpr->pLeft->u.zToken; + zColumn = pRight->u.zToken; + }else{ + assert( pRight->op==TK_DOT ); + zDb = pExpr->pLeft->u.zToken; + zTable = pRight->pLeft->u.zToken; + zColumn = pRight->pRight->u.zToken; + } } return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr); } @@ -89611,7 +90964,7 @@ static int resolveOrderByTermToExprList( ** result-set entry. */ for(i=0; inExpr; i++){ - if( sqlite3ExprCompare(pEList->a[i].pExpr, pE, -1)<2 ){ + if( sqlite3ExprCompare(0, pEList->a[i].pExpr, pE, -1)<2 ){ return i+1; } } @@ -89845,7 +91198,7 @@ static int resolveOrderGroupBy( return 1; } for(j=0; jpEList->nExpr; j++){ - if( sqlite3ExprCompare(pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ + if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ pItem->u.x.iOrderByCol = j+1; } } @@ -90131,37 +91484,29 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames( u16 savedHasAgg; Walker w; - if( pExpr==0 ) return 0; -#if SQLITE_MAX_EXPR_DEPTH>0 - { - Parse *pParse = pNC->pParse; - if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){ - return 1; - } - pParse->nHeight += pExpr->nHeight; - } -#endif + if( pExpr==0 ) return SQLITE_OK; savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg); pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg); w.pParse = pNC->pParse; w.xExprCallback = resolveExprStep; w.xSelectCallback = resolveSelectStep; w.xSelectCallback2 = 0; - w.walkerDepth = 0; - w.eCode = 0; w.u.pNC = pNC; +#if SQLITE_MAX_EXPR_DEPTH>0 + w.pParse->nHeight += pExpr->nHeight; + if( sqlite3ExprCheckHeight(w.pParse, w.pParse->nHeight) ){ + return SQLITE_ERROR; + } +#endif sqlite3WalkExpr(&w, pExpr); #if SQLITE_MAX_EXPR_DEPTH>0 - pNC->pParse->nHeight -= pExpr->nHeight; + w.pParse->nHeight -= pExpr->nHeight; #endif - if( pNC->nErr>0 || w.pParse->nErr>0 ){ - ExprSetProperty(pExpr, EP_Error); - } if( pNC->ncFlags & NC_HasAgg ){ ExprSetProperty(pExpr, EP_Agg); } pNC->ncFlags |= savedHasAgg; - return ExprHasProperty(pExpr, EP_Error); + return pNC->nErr>0 || w.pParse->nErr>0; } /* @@ -90202,9 +91547,9 @@ SQLITE_PRIVATE void sqlite3ResolveSelectNames( Walker w; assert( p!=0 ); - memset(&w, 0, sizeof(w)); w.xExprCallback = resolveExprStep; w.xSelectCallback = resolveSelectStep; + w.xSelectCallback2 = 0; w.pParse = pParse; w.u.pNC = pOuterNC; sqlite3WalkSelect(&w, p); @@ -90307,7 +91652,7 @@ SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){ return sqlite3AffinityType(pExpr->u.zToken, 0); } #endif - if( op==TK_AGG_COLUMN || op==TK_COLUMN ){ + if( (op==TK_AGG_COLUMN || op==TK_COLUMN) && pExpr->pTab ){ return sqlite3TableColumnAffinity(pExpr->pTab, pExpr->iColumn); } if( op==TK_SELECT_COLUMN ){ @@ -90480,7 +91825,7 @@ static char comparisonAffinity(Expr *pExpr){ aff = sqlite3CompareAffinity(pExpr->pRight, aff); }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){ aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff); - }else if( NEVER(aff==0) ){ + }else if( aff==0 ){ aff = SQLITE_AFF_BLOB; } return aff; @@ -90601,7 +91946,6 @@ SQLITE_PRIVATE int sqlite3ExprVectorSize(Expr *pExpr){ } } -#ifndef SQLITE_OMIT_SUBQUERY /* ** Return a pointer to a subexpression of pVector that is the i-th ** column of the vector (numbered starting with 0). The caller must @@ -90629,9 +91973,7 @@ SQLITE_PRIVATE Expr *sqlite3VectorFieldSubexpr(Expr *pVector, int i){ } return pVector; } -#endif /* !defined(SQLITE_OMIT_SUBQUERY) */ -#ifndef SQLITE_OMIT_SUBQUERY /* ** Compute and return a new Expr object which when passed to ** sqlite3ExprCode() will generate all necessary code to compute @@ -90689,7 +92031,6 @@ SQLITE_PRIVATE Expr *sqlite3ExprForVectorField( } return pRet; } -#endif /* !define(SQLITE_OMIT_SUBQUERY) */ /* ** If expression pExpr is of type TK_SELECT, generate code to evaluate @@ -90997,7 +92338,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprAlloc( pNew->iAgg = -1; if( pToken ){ if( nExtra==0 ){ - pNew->flags |= EP_IntValue; + pNew->flags |= EP_IntValue|EP_Leaf; pNew->u.iValue = iValue; }else{ pNew->u.zToken = (char*)&pNew[1]; @@ -91205,7 +92546,7 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n z = pExpr->u.zToken; assert( z!=0 ); assert( z[0]!=0 ); - assert( n==sqlite3Strlen30(z) ); + assert( n==(u32)sqlite3Strlen30(z) ); if( z[1]==0 ){ /* Wildcard of the form "?". Assign the next variable number */ assert( z[0]=='?' ); @@ -91216,8 +92557,13 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n /* Wildcard of the form "?nnn". Convert "nnn" to an integer and ** use it as the variable number */ i64 i; - int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8); - x = (ynVar)i; + int bOk; + if( n==2 ){ /*OPTIMIZATION-IF-TRUE*/ + i = z[1]-'0'; /* The common case of ?N for a single digit N */ + bOk = 1; + }else{ + bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8); + } testcase( i==0 ); testcase( i==1 ); testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 ); @@ -91227,6 +92573,7 @@ SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr, u32 n db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]); return; } + x = (ynVar)i; if( x>pParse->nVar ){ pParse->nVar = (int)x; doAdd = 1; @@ -91272,8 +92619,9 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ /* The Expr.x union is never used at the same time as Expr.pRight */ assert( p->x.pList==0 || p->pRight==0 ); if( p->pLeft && p->op!=TK_SELECT_COLUMN ) sqlite3ExprDeleteNN(db, p->pLeft); - sqlite3ExprDelete(db, p->pRight); - if( ExprHasProperty(p, EP_xIsSelect) ){ + if( p->pRight ){ + sqlite3ExprDeleteNN(db, p->pRight); + }else if( ExprHasProperty(p, EP_xIsSelect) ){ sqlite3SelectDelete(db, p->x.pSelect); }else{ sqlite3ExprListDelete(db, p->x.pList); @@ -91281,7 +92629,7 @@ static SQLITE_NOINLINE void sqlite3ExprDeleteNN(sqlite3 *db, Expr *p){ } if( ExprHasProperty(p, EP_MemToken) ) sqlite3DbFree(db, p->u.zToken); if( !ExprHasProperty(p, EP_Static) ){ - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } } SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){ @@ -91548,15 +92896,11 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags) Expr *pPriorSelectCol = 0; assert( db!=0 ); if( p==0 ) return 0; - pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) ); + pNew = sqlite3DbMallocRawNN(db, + sizeof(*pNew)+sizeof(pNew->a[0])*(p->nExpr-1) ); if( pNew==0 ) return 0; - pNew->nExpr = i = p->nExpr; - if( (flags & EXPRDUP_REDUCE)==0 ) for(i=1; inExpr; i+=i){} - pNew->a = pItem = sqlite3DbMallocRawNN(db, i*sizeof(p->a[0]) ); - if( pItem==0 ){ - sqlite3DbFree(db, pNew); - return 0; - } + pNew->nAlloc = pNew->nExpr = p->nExpr; + pItem = pNew->a; pOldItem = p->a; for(i=0; inExpr; i++, pItem++, pOldItem++){ Expr *pOldExpr = pOldItem->pExpr; @@ -91647,7 +92991,7 @@ SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){ pNew->nId = p->nId; pNew->a = sqlite3DbMallocRawNN(db, p->nId*sizeof(p->a[0]) ); if( pNew->a==0 ){ - sqlite3DbFree(db, pNew); + sqlite3DbFreeNN(db, pNew); return 0; } /* Note that because the size of the allocation for p->a[] is not @@ -91661,33 +93005,41 @@ SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){ } return pNew; } -SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ - Select *pNew, *pPrior; +SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *pDup, int flags){ + Select *pRet = 0; + Select *pNext = 0; + Select **pp = &pRet; + Select *p; + assert( db!=0 ); - if( p==0 ) return 0; - pNew = sqlite3DbMallocRawNN(db, sizeof(*p) ); - if( pNew==0 ) return 0; - pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags); - pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags); - pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags); - pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags); - pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags); - pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags); - pNew->op = p->op; - pNew->pPrior = pPrior = sqlite3SelectDup(db, p->pPrior, flags); - if( pPrior ) pPrior->pNext = pNew; - pNew->pNext = 0; - pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); - pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags); - pNew->iLimit = 0; - pNew->iOffset = 0; - pNew->selFlags = p->selFlags & ~SF_UsesEphemeral; - pNew->addrOpenEphm[0] = -1; - pNew->addrOpenEphm[1] = -1; - pNew->nSelectRow = p->nSelectRow; - pNew->pWith = withDup(db, p->pWith); - sqlite3SelectSetName(pNew, p->zSelName); - return pNew; + for(p=pDup; p; p=p->pPrior){ + Select *pNew = sqlite3DbMallocRawNN(db, sizeof(*p) ); + if( pNew==0 ) break; + pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags); + pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags); + pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags); + pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags); + pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags); + pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags); + pNew->op = p->op; + pNew->pNext = pNext; + pNew->pPrior = 0; + pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); + pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags); + pNew->iLimit = 0; + pNew->iOffset = 0; + pNew->selFlags = p->selFlags & ~SF_UsesEphemeral; + pNew->addrOpenEphm[0] = -1; + pNew->addrOpenEphm[1] = -1; + pNew->nSelectRow = p->nSelectRow; + pNew->pWith = withDup(db, p->pWith); + sqlite3SelectSetName(pNew, p->zSelName); + *pp = pNew; + pp = &pNew->pPrior; + pNext = pNew; + } + + return pRet; } #else SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){ @@ -91710,6 +93062,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend( ExprList *pList, /* List to which to append. Might be NULL */ Expr *pExpr /* Expression to be appended. Might be NULL */ ){ + struct ExprList_item *pItem; sqlite3 *db = pParse->db; assert( db!=0 ); if( pList==0 ){ @@ -91718,23 +93071,22 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend( goto no_mem; } pList->nExpr = 0; - pList->a = sqlite3DbMallocRawNN(db, sizeof(pList->a[0])); - if( pList->a==0 ) goto no_mem; - }else if( (pList->nExpr & (pList->nExpr-1))==0 ){ - struct ExprList_item *a; - assert( pList->nExpr>0 ); - a = sqlite3DbRealloc(db, pList->a, pList->nExpr*2*sizeof(pList->a[0])); - if( a==0 ){ + pList->nAlloc = 1; + }else if( pList->nExpr==pList->nAlloc ){ + ExprList *pNew; + pNew = sqlite3DbRealloc(db, pList, + sizeof(*pList)+(2*pList->nAlloc - 1)*sizeof(pList->a[0])); + if( pNew==0 ){ goto no_mem; } - pList->a = a; - } - assert( pList->a!=0 ); - if( 1 ){ - struct ExprList_item *pItem = &pList->a[pList->nExpr++]; - memset(pItem, 0, sizeof(*pItem)); - pItem->pExpr = pExpr; + pList = pNew; + pList->nAlloc *= 2; } + pItem = &pList->a[pList->nExpr++]; + assert( offsetof(struct ExprList_item,zName)==sizeof(pItem->pExpr) ); + assert( offsetof(struct ExprList_item,pExpr)==0 ); + memset(&pItem->zName,0,sizeof(*pItem)-offsetof(struct ExprList_item,zName)); + pItem->pExpr = pExpr; return pList; no_mem: @@ -91752,7 +93104,7 @@ no_mem: ** Or: (a,b,c) = (SELECT x,y,z FROM ....) ** ** For each term of the vector assignment, append new entries to the -** expression list pList. In the case of a subquery on the LHS, append +** expression list pList. In the case of a subquery on the RHS, append ** TK_SELECT_COLUMN expressions. */ SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector( @@ -91791,20 +93143,19 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector( } } - if( pExpr->op==TK_SELECT ){ - if( pList && pList->a[iFirst].pExpr ){ - Expr *pFirst = pList->a[iFirst].pExpr; - assert( pFirst->op==TK_SELECT_COLUMN ); + if( !db->mallocFailed && pExpr->op==TK_SELECT && ALWAYS(pList!=0) ){ + Expr *pFirst = pList->a[iFirst].pExpr; + assert( pFirst!=0 ); + assert( pFirst->op==TK_SELECT_COLUMN ); - /* Store the SELECT statement in pRight so it will be deleted when - ** sqlite3ExprListDelete() is called */ - pFirst->pRight = pExpr; - pExpr = 0; + /* Store the SELECT statement in pRight so it will be deleted when + ** sqlite3ExprListDelete() is called */ + pFirst->pRight = pExpr; + pExpr = 0; - /* Remember the size of the LHS in iTable so that we can check that - ** the RHS and LHS sizes match during code generation. */ - pFirst->iTable = pColumns->nId; - } + /* Remember the size of the LHS in iTable so that we can check that + ** the RHS and LHS sizes match during code generation. */ + pFirst->iTable = pColumns->nId; } vector_append_error: @@ -91898,16 +93249,16 @@ SQLITE_PRIVATE void sqlite3ExprListCheckLength( ** Delete an entire expression list. */ static SQLITE_NOINLINE void exprListDeleteNN(sqlite3 *db, ExprList *pList){ - int i; - struct ExprList_item *pItem; - assert( pList->a!=0 || pList->nExpr==0 ); - for(pItem=pList->a, i=0; inExpr; i++, pItem++){ + int i = pList->nExpr; + struct ExprList_item *pItem = pList->a; + assert( pList->nExpr>0 ); + do{ sqlite3ExprDelete(db, pItem->pExpr); sqlite3DbFree(db, pItem->zName); sqlite3DbFree(db, pItem->zSpan); - } - sqlite3DbFree(db, pList->a); - sqlite3DbFree(db, pList); + pItem++; + }while( --i>0 ); + sqlite3DbFreeNN(db, pList); } SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ if( pList ) exprListDeleteNN(db, pList); @@ -91986,10 +93337,12 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ testcase( pExpr->op==TK_AGG_COLUMN ); if( pWalker->eCode==3 && pExpr->iTable==pWalker->u.iCur ){ return WRC_Continue; - }else{ - pWalker->eCode = 0; - return WRC_Abort; } + /* Fall through */ + case TK_IF_NULL_ROW: + testcase( pExpr->op==TK_IF_NULL_ROW ); + pWalker->eCode = 0; + return WRC_Abort; case TK_VARIABLE: if( pWalker->eCode==5 ){ /* Silently convert bound parameters that appear inside of CREATE @@ -92016,10 +93369,12 @@ static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){ } static int exprIsConst(Expr *p, int initFlag, int iCur){ Walker w; - memset(&w, 0, sizeof(w)); w.eCode = initFlag; w.xExprCallback = exprNodeIsConstant; w.xSelectCallback = selectNodeIsConstant; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif w.u.iCur = iCur; sqlite3WalkExpr(&w, p); return w.eCode; @@ -92057,6 +93412,65 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ return exprIsConst(p, 3, iCur); } + +/* +** sqlite3WalkExpr() callback used by sqlite3ExprIsConstantOrGroupBy(). +*/ +static int exprNodeIsConstantOrGroupBy(Walker *pWalker, Expr *pExpr){ + ExprList *pGroupBy = pWalker->u.pGroupBy; + int i; + + /* Check if pExpr is identical to any GROUP BY term. If so, consider + ** it constant. */ + for(i=0; inExpr; i++){ + Expr *p = pGroupBy->a[i].pExpr; + if( sqlite3ExprCompare(0, pExpr, p, -1)<2 ){ + CollSeq *pColl = sqlite3ExprCollSeq(pWalker->pParse, p); + if( pColl==0 || sqlite3_stricmp("BINARY", pColl->zName)==0 ){ + return WRC_Prune; + } + } + } + + /* Check if pExpr is a sub-select. If so, consider it variable. */ + if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + pWalker->eCode = 0; + return WRC_Abort; + } + + return exprNodeIsConstant(pWalker, pExpr); +} + +/* +** Walk the expression tree passed as the first argument. Return non-zero +** if the expression consists entirely of constants or copies of terms +** in pGroupBy that sort with the BINARY collation sequence. +** +** This routine is used to determine if a term of the HAVING clause can +** be promoted into the WHERE clause. In order for such a promotion to work, +** the value of the HAVING clause term must be the same for all members of +** a "group". The requirement that the GROUP BY term must be BINARY +** assumes that no other collating sequence will have a finer-grained +** grouping than binary. In other words (A=B COLLATE binary) implies +** A=B in every other collating sequence. The requirement that the +** GROUP BY be BINARY is stricter than necessary. It would also work +** to promote HAVING clauses that use the same alternative collating +** sequence as the GROUP BY term, but that is much harder to check, +** alternative collating sequences are uncommon, and this is only an +** optimization, so we take the easy way out and simply require the +** GROUP BY to use the BINARY collating sequence. +*/ +SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse *pParse, Expr *p, ExprList *pGroupBy){ + Walker w; + w.eCode = 1; + w.xExprCallback = exprNodeIsConstantOrGroupBy; + w.xSelectCallback = 0; + w.u.pGroupBy = pGroupBy; + w.pParse = pParse; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + /* ** Walk an expression tree. Return non-zero if the expression is constant ** or a function call with constant arguments. Return and 0 if there @@ -92078,10 +93492,12 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){ */ SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){ Walker w; - memset(&w, 0, sizeof(w)); w.eCode = 1; w.xExprCallback = sqlite3ExprWalkNoop; w.xSelectCallback = selectNodeIsConstant; +#ifdef SQLITE_DEBUG + w.xSelectCallback2 = sqlite3SelectWalkAssert2; +#endif sqlite3WalkExpr(&w, p); return w.eCode==0; } @@ -92095,6 +93511,7 @@ SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr *p){ */ SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){ int rc = 0; + if( p==0 ) return 0; /* Can only happen following on OOM */ /* If an expression is an integer literal that fits in a signed 32-bit ** integer, then the EP_IntValue flag will have already been set */ @@ -92602,7 +94019,7 @@ static char *exprINAffinity(Parse *pParse, Expr *pExpr){ char *zRet; assert( pExpr->op==TK_IN ); - zRet = sqlite3DbMallocZero(pParse->db, nVal+1); + zRet = sqlite3DbMallocRaw(pParse->db, nVal+1); if( zRet ){ int i; for(i=0; iiTable); dest.zAffSdst = exprINAffinity(pParse, pExpr); - assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable ); pSelect->iLimit = 0; testcase( pSelect->selFlags & SF_Distinct ); testcase( pKeyInfo==0 ); /* Caused by OOM in sqlite3KeyInfoAlloc() */ @@ -93416,8 +94832,9 @@ SQLITE_PRIVATE void sqlite3ExprCodeLoadIndexColumn( if( iTabCol==XN_EXPR ){ assert( pIdx->aColExpr ); assert( pIdx->aColExpr->nExpr>iIdxCol ); - pParse->iSelfTab = iTabCur; + pParse->iSelfTab = iTabCur + 1; sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[iIdxCol].pExpr, regOut); + pParse->iSelfTab = 0; }else{ sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pIdx->pTable, iTabCur, iTabCol, regOut); @@ -93434,6 +94851,10 @@ SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable( int iCol, /* Index of the column to extract */ int regOut /* Extract the value into this register */ ){ + if( pTab==0 ){ + sqlite3VdbeAddOp3(v, OP_Column, iTabCur, iCol, regOut); + return; + } if( iCol<0 || iCol==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); }else{ @@ -93507,7 +94928,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGetColumnToReg( SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){ int i; -#if SQLITE_DEBUG +#ifdef SQLITE_DEBUG if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ printf("CLEAR\n"); } @@ -93590,7 +95011,11 @@ static int exprCodeVector(Parse *pParse, Expr *p, int *piFreeable){ }else{ *piFreeable = 0; if( p->op==TK_SELECT ){ +#if SQLITE_OMIT_SUBQUERY + iResult = 0; +#else iResult = sqlite3CodeSubselect(pParse, p, 0, 0); +#endif }else{ int i; iResult = pParse->nMem+1; @@ -93653,13 +95078,13 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) case TK_COLUMN: { int iTab = pExpr->iTable; if( iTab<0 ){ - if( pParse->ckBase>0 ){ + if( pParse->iSelfTab<0 ){ /* Generating CHECK constraints or inserting into partial index */ - return pExpr->iColumn + pParse->ckBase; + return pExpr->iColumn - pParse->iSelfTab; }else{ /* Coding an expression that is part of an index where column names ** in the index refer to the table to which the index belongs */ - iTab = pParse->iSelfTab; + iTab = pParse->iSelfTab - 1; } } return sqlite3ExprCodeGetColumn(pParse, pExpr->pTab, @@ -93861,6 +95286,11 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) u8 enc = ENC(db); /* The text encoding used by this database */ CollSeq *pColl = 0; /* A collating sequence */ + if( ConstFactorOk(pParse) && sqlite3ExprIsConstantNotJoin(pExpr) ){ + /* SQL functions can be expensive. So try to move constant functions + ** out of the inner loop, even if that means an extra OP_Copy. */ + return sqlite3ExprCodeAtInit(pParse, pExpr, -1); + } assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); if( ExprHasProperty(pExpr, EP_TokenOnly) ){ pFarg = 0; @@ -93909,6 +95339,22 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) return sqlite3ExprCodeTarget(pParse, pFarg->a[0].pExpr, target); } +#ifdef SQLITE_DEBUG + /* The AFFINITY() function evaluates to a string that describes + ** the type affinity of the argument. This is used for testing of + ** the SQLite type logic. + */ + if( pDef->funcFlags & SQLITE_FUNC_AFFINITY ){ + const char *azAff[] = { "blob", "text", "numeric", "integer", "real" }; + char aff; + assert( nFarg==1 ); + aff = sqlite3ExprAffinity(pFarg->a[0].pExpr); + sqlite3VdbeLoadString(v, target, + aff ? azAff[aff-SQLITE_AFF_BLOB] : "none"); + return target; + } +#endif + for(i=0; ia[i].pExpr) ){ testcase( i==31 ); @@ -93975,8 +95421,8 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( !pColl ) pColl = db->pDfltColl; sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); } - sqlite3VdbeAddOp4(v, OP_Function0, constMask, r1, target, - (char*)pDef, P4_FUNCDEF); + sqlite3VdbeAddOp4(v, pParse->iSelfTab ? OP_PureFunc0 : OP_Function0, + constMask, r1, target, (char*)pDef, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nFarg); if( nFarg && constMask==0 ){ sqlite3ReleaseTempRange(pParse, r1, nFarg); @@ -94106,6 +95552,17 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) break; } + case TK_IF_NULL_ROW: { + int addrINR; + addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); + sqlite3ExprCachePush(pParse); + inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + sqlite3ExprCachePop(pParse); + sqlite3VdbeJumpHere(v, addrINR); + sqlite3VdbeChangeP3(v, addrINR, inReg); + break; + } + /* ** Form A: ** CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END @@ -94225,24 +95682,40 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) /* ** Factor out the code of the given expression to initialization time. +** +** If regDest>=0 then the result is always stored in that register and the +** result is not reusable. If regDest<0 then this routine is free to +** store the value whereever it wants. The register where the expression +** is stored is returned. When regDest<0, two identical expressions will +** code to the same register. */ -SQLITE_PRIVATE void sqlite3ExprCodeAtInit( +SQLITE_PRIVATE int sqlite3ExprCodeAtInit( Parse *pParse, /* Parsing context */ Expr *pExpr, /* The expression to code when the VDBE initializes */ - int regDest, /* Store the value in this register */ - u8 reusable /* True if this expression is reusable */ + int regDest /* Store the value in this register */ ){ ExprList *p; assert( ConstFactorOk(pParse) ); p = pParse->pConstExpr; + if( regDest<0 && p ){ + struct ExprList_item *pItem; + int i; + for(pItem=p->a, i=p->nExpr; i>0; pItem++, i--){ + if( pItem->reusable && sqlite3ExprCompare(0,pItem->pExpr,pExpr,-1)==0 ){ + return pItem->u.iConstExprReg; + } + } + } pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); p = sqlite3ExprListAppend(pParse, p, pExpr); if( p ){ struct ExprList_item *pItem = &p->a[p->nExpr-1]; + pItem->reusable = regDest<0; + if( regDest<0 ) regDest = ++pParse->nMem; pItem->u.iConstExprReg = regDest; - pItem->reusable = reusable; } pParse->pConstExpr = p; + return regDest; } /* @@ -94265,19 +95738,8 @@ SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){ && pExpr->op!=TK_REGISTER && sqlite3ExprIsConstantNotJoin(pExpr) ){ - ExprList *p = pParse->pConstExpr; - int i; *pReg = 0; - if( p ){ - struct ExprList_item *pItem; - for(pItem=p->a, i=p->nExpr; i>0; pItem++, i--){ - if( pItem->reusable && sqlite3ExprCompare(pItem->pExpr,pExpr,-1)==0 ){ - return pItem->u.iConstExprReg; - } - } - } - r2 = ++pParse->nMem; - sqlite3ExprCodeAtInit(pParse, pExpr, r2, 1); + r2 = sqlite3ExprCodeAtInit(pParse, pExpr, -1); }else{ int r1 = sqlite3GetTempReg(pParse); r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1); @@ -94331,7 +95793,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, Expr *pExpr, int target){ */ SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int target){ if( pParse->okConstFactor && sqlite3ExprIsConstant(pExpr) ){ - sqlite3ExprCodeAtInit(pParse, pExpr, target, 0); + sqlite3ExprCodeAtInit(pParse, pExpr, target); }else{ sqlite3ExprCode(pParse, pExpr, target); } @@ -94403,7 +95865,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeExprList( sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i); } }else if( (flags & SQLITE_ECEL_FACTOR)!=0 && sqlite3ExprIsConstant(pExpr) ){ - sqlite3ExprCodeAtInit(pParse, pExpr, target+i, 0); + sqlite3ExprCodeAtInit(pParse, pExpr, target+i); }else{ int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i); if( inReg!=target+i ){ @@ -94794,6 +96256,41 @@ SQLITE_PRIVATE void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,i sqlite3ExprDelete(db, pCopy); } +/* +** Expression pVar is guaranteed to be an SQL variable. pExpr may be any +** type of expression. +** +** If pExpr is a simple SQL value - an integer, real, string, blob +** or NULL value - then the VDBE currently being prepared is configured +** to re-prepare each time a new value is bound to variable pVar. +** +** Additionally, if pExpr is a simple SQL value and the value is the +** same as that currently bound to variable pVar, non-zero is returned. +** Otherwise, if the values are not the same or if pExpr is not a simple +** SQL value, zero is returned. +*/ +static int exprCompareVariable(Parse *pParse, Expr *pVar, Expr *pExpr){ + int res = 0; + int iVar; + sqlite3_value *pL, *pR = 0; + + sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, SQLITE_AFF_BLOB, &pR); + if( pR ){ + iVar = pVar->iColumn; + sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); + pL = sqlite3VdbeGetBoundValue(pParse->pReprepare, iVar, SQLITE_AFF_BLOB); + if( pL ){ + if( sqlite3_value_type(pL)==SQLITE_TEXT ){ + sqlite3_value_text(pL); /* Make sure the encoding is UTF-8 */ + } + res = 0==sqlite3MemCompare(pL, pR, 0); + } + sqlite3ValueFree(pR); + sqlite3ValueFree(pL); + } + + return res; +} /* ** Do a deep comparison of two expression trees. Return 0 if the two @@ -94816,12 +96313,22 @@ SQLITE_PRIVATE void sqlite3ExprIfFalseDup(Parse *pParse, Expr *pExpr, int dest,i ** this routine is used, it does not hurt to get an extra 2 - that ** just might result in some slightly slower code. But returning ** an incorrect 0 or 1 could lead to a malfunction. +** +** If pParse is not NULL then TK_VARIABLE terms in pA with bindings in +** pParse->pReprepare can be matched against literals in pB. The +** pParse->pVdbe->expmask bitmask is updated for each variable referenced. +** If pParse is NULL (the normal case) then any TK_VARIABLE term in +** Argument pParse should normally be NULL. If it is not NULL and pA or +** pB causes a return value of 2. */ -SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){ +SQLITE_PRIVATE int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTab){ u32 combinedFlags; if( pA==0 || pB==0 ){ return pB==pA ? 0 : 2; } + if( pParse && pA->op==TK_VARIABLE && exprCompareVariable(pParse, pA, pB) ){ + return 0; + } combinedFlags = pA->flags | pB->flags; if( combinedFlags & EP_IntValue ){ if( (pA->flags&pB->flags&EP_IntValue)!=0 && pA->u.iValue==pB->u.iValue ){ @@ -94830,10 +96337,10 @@ SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){ return 2; } if( pA->op!=pB->op ){ - if( pA->op==TK_COLLATE && sqlite3ExprCompare(pA->pLeft, pB, iTab)<2 ){ + if( pA->op==TK_COLLATE && sqlite3ExprCompare(pParse, pA->pLeft,pB,iTab)<2 ){ return 1; } - if( pB->op==TK_COLLATE && sqlite3ExprCompare(pA, pB->pLeft, iTab)<2 ){ + if( pB->op==TK_COLLATE && sqlite3ExprCompare(pParse, pA,pB->pLeft,iTab)<2 ){ return 1; } return 2; @@ -94848,8 +96355,8 @@ SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB, int iTab){ if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2; if( ALWAYS((combinedFlags & EP_TokenOnly)==0) ){ if( combinedFlags & EP_xIsSelect ) return 2; - if( sqlite3ExprCompare(pA->pLeft, pB->pLeft, iTab) ) return 2; - if( sqlite3ExprCompare(pA->pRight, pB->pRight, iTab) ) return 2; + if( sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2; + if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2; if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2; if( ALWAYS((combinedFlags & EP_Reduced)==0) && pA->op!=TK_STRING ){ if( pA->iColumn!=pB->iColumn ) return 2; @@ -94884,11 +96391,22 @@ SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB, int iTab){ Expr *pExprA = pA->a[i].pExpr; Expr *pExprB = pB->a[i].pExpr; if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1; - if( sqlite3ExprCompare(pExprA, pExprB, iTab) ) return 1; + if( sqlite3ExprCompare(0, pExprA, pExprB, iTab) ) return 1; } return 0; } +/* +** Like sqlite3ExprCompare() except COLLATE operators at the top-level +** are ignored. +*/ +SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr *pA, Expr *pB, int iTab){ + return sqlite3ExprCompare(0, + sqlite3ExprSkipCollate(pA), + sqlite3ExprSkipCollate(pB), + iTab); +} + /* ** Return true if we can prove the pE2 will always be true if pE1 is ** true. Return false if we cannot complete the proof or if pE2 might @@ -94905,24 +96423,29 @@ SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB, int iTab){ ** When comparing TK_COLUMN nodes between pE1 and pE2, if pE2 has ** Expr.iTable<0 then assume a table number given by iTab. ** +** If pParse is not NULL, then the values of bound variables in pE1 are +** compared against literal values in pE2 and pParse->pVdbe->expmask is +** modified to record which bound variables are referenced. If pParse +** is NULL, then false will be returned if pE1 contains any bound variables. +** ** When in doubt, return false. Returning true might give a performance ** improvement. Returning false might cause a performance reduction, but ** it will always give the correct answer and is hence always safe. */ -SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Expr *pE1, Expr *pE2, int iTab){ - if( sqlite3ExprCompare(pE1, pE2, iTab)==0 ){ +SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse *pParse, Expr *pE1, Expr *pE2, int iTab){ + if( sqlite3ExprCompare(pParse, pE1, pE2, iTab)==0 ){ return 1; } if( pE2->op==TK_OR - && (sqlite3ExprImpliesExpr(pE1, pE2->pLeft, iTab) - || sqlite3ExprImpliesExpr(pE1, pE2->pRight, iTab) ) + && (sqlite3ExprImpliesExpr(pParse, pE1, pE2->pLeft, iTab) + || sqlite3ExprImpliesExpr(pParse, pE1, pE2->pRight, iTab) ) ){ return 1; } if( pE2->op==TK_NOTNULL && pE1->op!=TK_ISNULL && pE1->op!=TK_IS ){ Expr *pX = sqlite3ExprSkipCollate(pE1->pLeft); testcase( pX!=pE1->pLeft ); - if( sqlite3ExprCompare(pX, pE2->pLeft, iTab)==0 ) return 1; + if( sqlite3ExprCompare(pParse, pX, pE2->pLeft, iTab)==0 ) return 1; } return 0; } @@ -95030,8 +96553,8 @@ SQLITE_PRIVATE int sqlite3FunctionUsesThisSrc(Expr *pExpr, SrcList *pSrcList){ Walker w; struct SrcCount cnt; assert( pExpr->op==TK_AGG_FUNCTION ); - memset(&w, 0, sizeof(w)); w.xExprCallback = exprSrcCount; + w.xSelectCallback = 0; w.u.pSrcCount = &cnt; cnt.pSrc = pSrcList; cnt.nThis = 0; @@ -95163,7 +96686,7 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ */ struct AggInfo_func *pItem = pAggInfo->aFunc; for(i=0; inFunc; i++, pItem++){ - if( sqlite3ExprCompare(pItem->pExpr, pExpr, -1)==0 ){ + if( sqlite3ExprCompare(0, pItem->pExpr, pExpr, -1)==0 ){ break; } } @@ -95203,10 +96726,14 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ return WRC_Continue; } static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ - UNUSED_PARAMETER(pWalker); UNUSED_PARAMETER(pSelect); + pWalker->walkerDepth++; return WRC_Continue; } +static void analyzeAggregatesInSelectEnd(Walker *pWalker, Select *pSelect){ + UNUSED_PARAMETER(pSelect); + pWalker->walkerDepth--; +} /* ** Analyze the pExpr expression looking for aggregate functions and @@ -95219,9 +96746,10 @@ static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){ */ SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){ Walker w; - memset(&w, 0, sizeof(w)); w.xExprCallback = analyzeAggregate; w.xSelectCallback = analyzeAggregatesInSelect; + w.xSelectCallback2 = analyzeAggregatesInSelectEnd; + w.walkerDepth = 0; w.u.pNC = pNC; assert( pNC->pSrcList!=0 ); sqlite3WalkExpr(&w, pExpr); @@ -95322,8 +96850,8 @@ SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){ SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse *pParse, int iFirst, int iLast){ int i; if( pParse->nRangeReg>0 - && pParse->iRangeReg+pParse->nRangeRegiRangeReg>=iFirst + && pParse->iRangeReg+pParse->nRangeReg > iFirst + && pParse->iRangeReg <= iLast ){ return 0; } @@ -95715,7 +97243,7 @@ static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){ ** Or, if zName is not a system table, zero is returned. */ static int isSystemTable(Parse *pParse, const char *zName){ - if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ + if( 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){ sqlite3ErrorMsg(pParse, "table %s may not be altered", zName); return 1; } @@ -96441,6 +97969,7 @@ struct Stat4Accum { Stat4Sample *aBest; /* Array of nCol best samples */ int iMin; /* Index in a[] of entry with minimum score */ int nSample; /* Current number of samples */ + int nMaxEqZero; /* Max leading 0 in anEq[] for any a[] entry */ int iGet; /* Index of current sample accessed by stat_get() */ Stat4Sample *a; /* Array of mxSample Stat4Sample objects */ sqlite3 *db; /* Database connection, for malloc() */ @@ -96705,6 +98234,13 @@ static void sampleInsert(Stat4Accum *p, Stat4Sample *pNew, int nEqZero){ assert( IsStat4 || nEqZero==0 ); #ifdef SQLITE_ENABLE_STAT4 + /* Stat4Accum.nMaxEqZero is set to the maximum number of leading 0 + ** values in the anEq[] array of any sample in Stat4Accum.a[]. In + ** other words, if nMaxEqZero is n, then it is guaranteed that there + ** are no samples with Stat4Sample.anEq[m]==0 for (m>=n). */ + if( nEqZero>p->nMaxEqZero ){ + p->nMaxEqZero = nEqZero; + } if( pNew->isPSample==0 ){ Stat4Sample *pUpgrade = 0; assert( pNew->anEq[pNew->iCol]>0 ); @@ -96802,12 +98338,22 @@ static void samplePushPrevious(Stat4Accum *p, int iChng){ } } - /* Update the anEq[] fields of any samples already collected. */ + /* Check that no sample contains an anEq[] entry with an index of + ** p->nMaxEqZero or greater set to zero. */ for(i=p->nSample-1; i>=0; i--){ int j; - for(j=iChng; jnCol; j++){ - if( p->a[i].anEq[j]==0 ) p->a[i].anEq[j] = p->current.anEq[j]; + for(j=p->nMaxEqZero; jnCol; j++) assert( p->a[i].anEq[j]>0 ); + } + + /* Update the anEq[] fields of any samples already collected. */ + if( iChngnMaxEqZero ){ + for(i=p->nSample-1; i>=0; i--){ + int j; + for(j=iChng; jnCol; j++){ + if( p->a[i].anEq[j]==0 ) p->a[i].anEq[j] = p->current.anEq[j]; + } } + p->nMaxEqZero = iChng; } #endif @@ -96948,6 +98494,12 @@ static const FuncDef statPushFuncdef = { ** The content to returned is determined by the parameter J ** which is one of the STAT_GET_xxxx values defined above. ** +** The stat_get(P,J) function is not available to generic SQL. It is +** inserted as part of a manually constructed bytecode program. (See +** the callStatGet() routine below.) It is guaranteed that the P +** parameter will always be a poiner to a Stat4Accum object, never a +** NULL. +** ** If neither STAT3 nor STAT4 are enabled, then J is always ** STAT_GET_STAT1 and is hence omitted and this routine becomes ** a one-parameter function, stat_get(P), that always returns the @@ -97331,7 +98883,7 @@ static void analyzeOneTable( regKey = sqlite3GetTempRange(pParse, pPk->nKeyCol); for(j=0; jnKeyCol; j++){ k = sqlite3ColumnOfIndex(pIdx, pPk->aiColumn[j]); - assert( k>=0 && knCol ); + assert( k>=0 && knColumn ); sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, k, regKey+j); VdbeComment((v, "%s", pTab->aCol[pPk->aiColumn[j]].zName)); } @@ -97515,27 +99067,14 @@ SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ if( i==1 ) continue; /* Do not analyze the TEMP database */ analyzeDatabase(pParse, i); } - }else if( pName2->n==0 ){ - /* Form 2: Analyze the database or table named */ - iDb = sqlite3FindDb(db, pName1); - if( iDb>=0 ){ - analyzeDatabase(pParse, iDb); - }else{ - z = sqlite3NameFromToken(db, pName1); - if( z ){ - if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){ - analyzeTable(pParse, pIdx->pTable, pIdx); - }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){ - analyzeTable(pParse, pTab, 0); - } - sqlite3DbFree(db, z); - } - } + }else if( pName2->n==0 && (iDb = sqlite3FindDb(db, pName1))>=0 ){ + /* Analyze the schema named as the argument */ + analyzeDatabase(pParse, iDb); }else{ - /* Form 3: Analyze the fully qualified table name */ + /* Form 3: Analyze the table or index named as an argument */ iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName); if( iDb>=0 ){ - zDb = db->aDb[iDb].zDbSName; + zDb = pName2->n ? db->aDb[iDb].zDbSName : 0; z = sqlite3NameFromToken(db, pTableName); if( z ){ if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){ @@ -97545,10 +99084,11 @@ SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ } sqlite3DbFree(db, z); } - } + } + } + if( db->nSqlExec==0 && (v = sqlite3GetVdbe(pParse))!=0 ){ + sqlite3VdbeAddOp0(v, OP_Expire); } - v = sqlite3GetVdbe(pParse); - if( v ) sqlite3VdbeAddOp0(v, OP_Expire); } /* @@ -97677,7 +99217,11 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ #endif pIndex->bUnordered = 0; decodeIntArray((char*)z, nCol, aiRowEst, pIndex->aiRowLogEst, pIndex); - if( pIndex->pPartIdxWhere==0 ) pTable->nRowLogEst = pIndex->aiRowLogEst[0]; + pIndex->hasStat1 = 1; + if( pIndex->pPartIdxWhere==0 ){ + pTable->nRowLogEst = pIndex->aiRowLogEst[0]; + pTable->tabFlags |= TF_HasStat1; + } }else{ Index fakeIdx; fakeIdx.szIdxRow = pTable->szTabRow; @@ -97686,6 +99230,7 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ #endif decodeIntArray((char*)z, 1, 0, &pTable->nRowLogEst, &fakeIdx); pTable->szTabRow = fakeIdx.szIdxRow; + pTable->tabFlags |= TF_HasStat1; } return 0; @@ -97766,7 +99311,7 @@ static void initAvgEq(Index *pIdx){ } } - if( nDist100>nSum100 ){ + if( nDist100>nSum100 && sumEqaDb[iDb].pSchema; assert( iDb>=0 && iDbnDb ); assert( db->aDb[iDb].pBt!=0 ); /* Clear any prior statistics */ assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); - for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){ + for(i=sqliteHashFirst(&pSchema->tblHash); i; i=sqliteHashNext(i)){ + Table *pTab = sqliteHashData(i); + pTab->tabFlags &= ~TF_HasStat1; + } + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ Index *pIdx = sqliteHashData(i); - pIdx->aiRowLogEst[0] = 0; + pIdx->hasStat1 = 0; #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 sqlite3DeleteIndexSamples(db, pIdx); pIdx->aSample = 0; @@ -98011,9 +99561,9 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ /* Set appropriate defaults on all indexes not in the sqlite_stat1 table */ assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); - for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){ + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ Index *pIdx = sqliteHashData(i); - if( pIdx->aiRowLogEst[0]==0 ) sqlite3DefaultRowEst(pIdx); + if( !pIdx->hasStat1 ) sqlite3DefaultRowEst(pIdx); } /* Load the statistics from the sqlite_stat4 table. */ @@ -98023,7 +99573,7 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){ rc = loadStat4(db, sInfo.zDatabase); db->lookaside.bDisable--; } - for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){ + for(i=sqliteHashFirst(&pSchema->idxHash); i; i=sqliteHashNext(i)){ Index *pIdx = sqliteHashData(i); sqlite3_free(pIdx->aiRowEst); pIdx->aiRowEst = 0; @@ -98112,7 +99662,8 @@ static void attachFunc( char *zPath = 0; char *zErr = 0; unsigned int flags; - Db *aNew; + Db *aNew; /* New array of Db pointers */ + Db *pNew; /* Db object for the newly attached database */ char *zErrDyn = 0; sqlite3_vfs *pVfs; @@ -98160,8 +99711,8 @@ static void attachFunc( if( aNew==0 ) return; } db->aDb = aNew; - aNew = &db->aDb[db->nDb]; - memset(aNew, 0, sizeof(*aNew)); + pNew = &db->aDb[db->nDb]; + memset(pNew, 0, sizeof(*pNew)); /* Open the database file. If the btree is successfully opened, use ** it to obtain the database schema. At this point the schema may @@ -98177,36 +99728,37 @@ static void attachFunc( } assert( pVfs ); flags |= SQLITE_OPEN_MAIN_DB; - rc = sqlite3BtreeOpen(pVfs, zPath, db, &aNew->pBt, 0, flags); + rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); sqlite3_free( zPath ); db->nDb++; + db->skipBtreeMutex = 0; if( rc==SQLITE_CONSTRAINT ){ rc = SQLITE_ERROR; zErrDyn = sqlite3MPrintf(db, "database is already attached"); }else if( rc==SQLITE_OK ){ Pager *pPager; - aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt); - if( !aNew->pSchema ){ + pNew->pSchema = sqlite3SchemaGet(db, pNew->pBt); + if( !pNew->pSchema ){ rc = SQLITE_NOMEM_BKPT; - }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){ + }else if( pNew->pSchema->file_format && pNew->pSchema->enc!=ENC(db) ){ zErrDyn = sqlite3MPrintf(db, "attached databases must use the same text encoding as main database"); rc = SQLITE_ERROR; } - sqlite3BtreeEnter(aNew->pBt); - pPager = sqlite3BtreePager(aNew->pBt); + sqlite3BtreeEnter(pNew->pBt); + pPager = sqlite3BtreePager(pNew->pBt); sqlite3PagerLockingMode(pPager, db->dfltLockMode); - sqlite3BtreeSecureDelete(aNew->pBt, + sqlite3BtreeSecureDelete(pNew->pBt, sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) ); #ifndef SQLITE_OMIT_PAGER_PRAGMAS - sqlite3BtreeSetPagerFlags(aNew->pBt, + sqlite3BtreeSetPagerFlags(pNew->pBt, PAGER_SYNCHRONOUS_FULL | (db->flags & PAGER_FLAGS_MASK)); #endif - sqlite3BtreeLeave(aNew->pBt); + sqlite3BtreeLeave(pNew->pBt); } - aNew->safety_level = SQLITE_DEFAULT_SYNCHRONOUS+1; - aNew->zDbSName = sqlite3DbStrDup(db, zName); - if( rc==SQLITE_OK && aNew->zDbSName==0 ){ + pNew->safety_level = SQLITE_DEFAULT_SYNCHRONOUS+1; + pNew->zDbSName = sqlite3DbStrDup(db, zName); + if( rc==SQLITE_OK && pNew->zDbSName==0 ){ rc = SQLITE_NOMEM_BKPT; } @@ -98844,6 +100396,18 @@ SQLITE_PRIVATE int sqlite3AuthCheck( if( db->xAuth==0 ){ return SQLITE_OK; } + + /* EVIDENCE-OF: R-43249-19882 The third through sixth parameters to the + ** callback are either NULL pointers or zero-terminated strings that + ** contain additional details about the action to be authorized. + ** + ** The following testcase() macros show that any of the 3rd through 6th + ** parameters can be either NULL or a string. */ + testcase( zArg1==0 ); + testcase( zArg2==0 ); + testcase( zArg3==0 ); + testcase( pParse->zAuthContext==0 ); + rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext #ifdef SQLITE_USER_AUTHENTICATION ,db->auth.zAuthUser @@ -99831,7 +101395,11 @@ SQLITE_PRIVATE void sqlite3StartTable( pTable->iPKey = -1; pTable->pSchema = db->aDb[iDb].pSchema; pTable->nTabRef = 1; +#ifdef SQLITE_DEFAULT_ROWEST + pTable->nRowLogEst = sqlite3LogEst(SQLITE_DEFAULT_ROWEST); +#else pTable->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); +#endif assert( pParse->pNewTable==0 ); pParse->pNewTable = pTable; @@ -100007,6 +101575,7 @@ SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){ p = pParse->pNewTable; if( p==0 || NEVER(p->nCol<1) ) return; p->aCol[p->nCol-1].notNull = (u8)onError; + p->tabFlags |= TF_HasNotNull; } /* @@ -100625,15 +102194,6 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ }else{ pPk = sqlite3PrimaryKeyIndex(pTab); - /* Bypass the creation of the PRIMARY KEY btree and the sqlite_master - ** table entry. This is only required if currently generating VDBE - ** code for a CREATE TABLE (not when parsing one as part of reading - ** a database schema). */ - if( v ){ - assert( db->init.busy==0 ); - sqlite3VdbeChangeOpcode(v, pPk->tnum, OP_Goto); - } - /* ** Remove all redundant columns from the PRIMARY KEY. For example, change ** "PRIMARY KEY(a,b,a,b,c,b,c,d)" into just "PRIMARY KEY(a,b,c,d)". Later @@ -100653,6 +102213,15 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){ if( !db->init.imposterTable ) pPk->uniqNotNull = 1; nPk = pPk->nKeyCol; + /* Bypass the creation of the PRIMARY KEY btree and the sqlite_master + ** table entry. This is only required if currently generating VDBE + ** code for a CREATE TABLE (not when parsing one as part of reading + ** a database schema). */ + if( v && pPk->tnum>0 ){ + assert( db->init.busy==0 ); + sqlite3VdbeChangeOpcode(v, pPk->tnum, OP_Goto); + } + /* The root page of the PRIMARY KEY is the table root page */ pPk->tnum = pTab->tnum; @@ -102346,6 +103915,9 @@ SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){ int nCopy = MIN(ArraySize(aVal), pIdx->nKeyCol); int i; + /* Indexes with default row estimates should not have stat1 data */ + assert( !pIdx->hasStat1 ); + /* Set the first entry (number of rows in the index) to the estimated ** number of rows in the table, or half the number of rows in the table ** for a partial index. But do not let the estimate drop below 10. */ @@ -102511,7 +104083,7 @@ SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){ sqlite3DbFree(db, pList->a[i].zName); } sqlite3DbFree(db, pList->a); - sqlite3DbFree(db, pList); + sqlite3DbFreeNN(db, pList); } /* @@ -102656,12 +104228,12 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppend( pDatabase = 0; } if( pDatabase ){ - Token *pTemp = pDatabase; - pDatabase = pTable; - pTable = pTemp; + pItem->zName = sqlite3NameFromToken(db, pDatabase); + pItem->zDatabase = sqlite3NameFromToken(db, pTable); + }else{ + pItem->zName = sqlite3NameFromToken(db, pTable); + pItem->zDatabase = 0; } - pItem->zName = sqlite3NameFromToken(db, pTable); - pItem->zDatabase = sqlite3NameFromToken(db, pDatabase); return pList; } @@ -102701,7 +104273,7 @@ SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){ sqlite3ExprDelete(db, pItem->pOn); sqlite3IdListDelete(db, pItem->pUsing); } - sqlite3DbFree(db, pList); + sqlite3DbFreeNN(db, pList); } /* @@ -102850,36 +104422,25 @@ SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){ } /* -** Generate VDBE code for a COMMIT statement. +** Generate VDBE code for a COMMIT or ROLLBACK statement. +** Code for ROLLBACK is generated if eType==TK_ROLLBACK. Otherwise +** code is generated for a COMMIT. */ -SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){ +SQLITE_PRIVATE void sqlite3EndTransaction(Parse *pParse, int eType){ Vdbe *v; + int isRollback; assert( pParse!=0 ); assert( pParse->db!=0 ); - if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){ + assert( eType==TK_COMMIT || eType==TK_END || eType==TK_ROLLBACK ); + isRollback = eType==TK_ROLLBACK; + if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, + isRollback ? "ROLLBACK" : "COMMIT", 0, 0) ){ return; } v = sqlite3GetVdbe(pParse); if( v ){ - sqlite3VdbeAddOp1(v, OP_AutoCommit, 1); - } -} - -/* -** Generate VDBE code for a ROLLBACK statement. -*/ -SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){ - Vdbe *v; - - assert( pParse!=0 ); - assert( pParse->db!=0 ); - if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){ - return; - } - v = sqlite3GetVdbe(pParse); - if( v ){ - sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1); + sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, isRollback); } } @@ -103069,7 +104630,9 @@ SQLITE_PRIVATE void sqlite3UniqueConstraint( assert( pIdx->aiColumn[j]>=0 ); zCol = pTab->aCol[pIdx->aiColumn[j]].zName; if( j ) sqlite3StrAccumAppend(&errMsg, ", ", 2); - sqlite3XPrintf(&errMsg, "%s.%s", pTab->zName, zCol); + sqlite3StrAccumAppendAll(&errMsg, pTab->zName); + sqlite3StrAccumAppend(&errMsg, ".", 1); + sqlite3StrAccumAppendAll(&errMsg, zCol); } } zErr = sqlite3StrAccumFinish(&errMsg); @@ -103458,7 +105021,7 @@ SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq( ** from the main database is substituted, if one is available. */ SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){ - if( pColl ){ + if( pColl && pColl->xCmp==0 ){ const char *zName = pColl->zName; sqlite3 *db = pParse->db; CollSeq *p = sqlite3GetCollSeq(pParse, ENC(db), pColl, zName); @@ -103494,8 +105057,8 @@ static CollSeq *findCollSeqEntry( pColl = sqlite3HashFind(&db->aCollSeq, zName); if( 0==pColl && create ){ - int nName = sqlite3Strlen30(zName); - pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1); + int nName = sqlite3Strlen30(zName) + 1; + pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName); if( pColl ){ CollSeq *pDel = 0; pColl[0].zName = (char*)&pColl[3]; @@ -103505,7 +105068,6 @@ static CollSeq *findCollSeqEntry( pColl[2].zName = (char*)&pColl[3]; pColl[2].enc = SQLITE_UTF16BE; memcpy(pColl[0].zName, zName, nName); - pColl[0].zName[nName] = 0; pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, pColl); /* If a malloc() failure occurred in sqlite3HashInsert(), it will @@ -103645,7 +105207,8 @@ SQLITE_PRIVATE void sqlite3InsertBuiltinFuncs( FuncDef *pOther; const char *zName = aDef[i].zName; int nName = sqlite3Strlen30(zName); - int h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % SQLITE_FUNC_HASH_SZ; + int h = (zName[0] + nName) % SQLITE_FUNC_HASH_SZ; + assert( zName[0]>='a' && zName[0]<='z' ); pOther = functionSearch(h, zName); if( pOther ){ assert( pOther!=&aDef[i] && pOther->pNext!=&aDef[i] ); @@ -104175,7 +105738,14 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( /* Special case: A DELETE without a WHERE clause deletes everything. ** It is easier just to erase the whole table. Prior to version 3.6.5, ** this optimization caused the row change count (the value returned by - ** API function sqlite3_count_changes) to be set incorrectly. */ + ** API function sqlite3_count_changes) to be set incorrectly. + ** + ** The "rcauth==SQLITE_OK" terms is the + ** IMPLEMENTATION-OF: R-17228-37124 If the action code is SQLITE_DELETE and + ** the callback returns SQLITE_IGNORE then the DELETE operation proceeds but + ** the truncate optimization is disabled and all rows are deleted + ** individually. + */ if( rcauth==SQLITE_OK && pWhere==0 && !bComplex @@ -104277,7 +105847,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iEphCur, iKey, iPk, nPk); }else{ /* Add the rowid of the row to be deleted to the RowSet */ - nKey = 1; /* OP_Seek always uses a single rowid */ + nKey = 1; /* OP_DeferredSeek always uses a single rowid */ sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, iKey); } } @@ -104344,12 +105914,8 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( #endif { int count = (pParse->nested==0); /* True to count changes */ - int iIdxNoSeek = -1; - if( bComplex==0 && aiCurOnePass[1]!=iDataCur ){ - iIdxNoSeek = aiCurOnePass[1]; - } sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, - iKey, nKey, count, OE_Default, eOnePass, iIdxNoSeek); + iKey, nKey, count, OE_Default, eOnePass, aiCurOnePass[1]); } /* End of the loop over all rowids/primary-keys. */ @@ -104429,15 +105995,17 @@ delete_from_cleanup: ** ** If eMode is ONEPASS_MULTI, then this call is being made as part ** of a ONEPASS delete that affects multiple rows. In this case, if -** iIdxNoSeek is a valid cursor number (>=0), then its position should -** be preserved following the delete operation. Or, if iIdxNoSeek is not -** a valid cursor number, the position of iDataCur should be preserved -** instead. +** iIdxNoSeek is a valid cursor number (>=0) and is not the same as +** iDataCur, then its position should be preserved following the delete +** operation. Or, if iIdxNoSeek is not a valid cursor number, the +** position of iDataCur should be preserved instead. ** ** iIdxNoSeek: -** If iIdxNoSeek is a valid cursor number (>=0), then it identifies an -** index cursor (from within array of cursors starting at iIdxCur) that -** already points to the index entry to be deleted. +** If iIdxNoSeek is a valid cursor number (>=0) not equal to iDataCur, +** then it identifies an index cursor (from within array of cursors +** starting at iIdxCur) that already points to the index entry to be deleted. +** Except, this optimization is disabled if there are BEFORE triggers since +** the trigger body might have moved the cursor. */ SQLITE_PRIVATE void sqlite3GenerateRowDelete( Parse *pParse, /* Parsing context */ @@ -104508,13 +106076,18 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( /* If any BEFORE triggers were coded, then seek the cursor to the ** row to be deleted again. It may be that the BEFORE triggers moved - ** the cursor or of already deleted the row that the cursor was + ** the cursor or already deleted the row that the cursor was ** pointing to. + ** + ** Also disable the iIdxNoSeek optimization since the BEFORE trigger + ** may have moved that cursor. */ if( addrStart=0 ); + iIdxNoSeek = -1; } /* Do FK processing. This call checks that any FK constraints that @@ -104537,11 +106110,13 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( u8 p5 = 0; sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek); sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0)); - sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE); + if( pParse->nested==0 ){ + sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE); + } if( eMode!=ONEPASS_OFF ){ sqlite3VdbeChangeP5(v, OPFLAG_AUXDELETE); } - if( iIdxNoSeek>=0 ){ + if( iIdxNoSeek>=0 && iIdxNoSeek!=iDataCur ){ sqlite3VdbeAddOp1(v, OP_Delete, iIdxNoSeek); } if( eMode==ONEPASS_MULTI ) p5 |= OPFLAG_SAVEPOSITION; @@ -104665,10 +106240,11 @@ SQLITE_PRIVATE int sqlite3GenerateIndexKey( if( piPartIdxLabel ){ if( pIdx->pPartIdxWhere ){ *piPartIdxLabel = sqlite3VdbeMakeLabel(v); - pParse->iSelfTab = iDataCur; + pParse->iSelfTab = iDataCur + 1; sqlite3ExprCachePush(pParse); sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, *piPartIdxLabel, SQLITE_JUMPIFNULL); + pParse->iSelfTab = 0; }else{ *piPartIdxLabel = 0; } @@ -104695,6 +106271,10 @@ SQLITE_PRIVATE int sqlite3GenerateIndexKey( } if( regOut ){ sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regOut); + if( pIdx->pTable->pSelect ){ + const char *zAff = sqlite3IndexAffinityStr(pParse->db, pIdx); + sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT); + } } sqlite3ReleaseTempRange(pParse, regBase, nCol); return regBase; @@ -104792,16 +106372,20 @@ static void typeofFunc( int NotUsed, sqlite3_value **argv ){ - const char *z = 0; + static const char *azType[] = { "integer", "real", "text", "blob", "null" }; + int i = sqlite3_value_type(argv[0]) - 1; UNUSED_PARAMETER(NotUsed); - switch( sqlite3_value_type(argv[0]) ){ - case SQLITE_INTEGER: z = "integer"; break; - case SQLITE_TEXT: z = "text"; break; - case SQLITE_FLOAT: z = "real"; break; - case SQLITE_BLOB: z = "blob"; break; - default: z = "null"; break; - } - sqlite3_result_text(context, z, -1, SQLITE_STATIC); + assert( i>=0 && iisDeferred, nIncr); - if( pWInfo ){ - sqlite3WhereEnd(pWInfo); + if( pParse->nErr==0 ){ + pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0, 0); + sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr); + if( pWInfo ){ + sqlite3WhereEnd(pWInfo); + } } /* Clean up the WHERE clause constructed above. */ @@ -107675,8 +109262,16 @@ SQLITE_PRIVATE u32 sqlite3FkOldmask( ** UPDATE statement modifies the rowid fields of the table. ** ** If any foreign key processing will be required, this function returns -** true. If there is no foreign key related processing, this function -** returns false. +** non-zero. If there is no foreign key related processing, this function +** returns zero. +** +** For an UPDATE, this function returns 2 if: +** +** * There are any FKs for which pTab is the child and the parent table, or +** * the UPDATE modifies one or more parent keys for which the action is +** not "NO ACTION" (i.e. is CASCADE, SET DEFAULT or SET NULL). +** +** Or, assuming some other foreign key processing is required, 1. */ SQLITE_PRIVATE int sqlite3FkRequired( Parse *pParse, /* Parse context */ @@ -107684,12 +109279,13 @@ SQLITE_PRIVATE int sqlite3FkRequired( int *aChange, /* Non-NULL for UPDATE operations */ int chngRowid /* True for UPDATE that affects rowid */ ){ + int eRet = 0; if( pParse->db->flags&SQLITE_ForeignKeys ){ if( !aChange ){ /* A DELETE operation. Foreign key processing is required if the ** table in question is either the child or parent table for any ** foreign key constraint. */ - return (sqlite3FkReferences(pTab) || pTab->pFKey); + eRet = (sqlite3FkReferences(pTab) || pTab->pFKey); }else{ /* This is an UPDATE. Foreign key processing is only required if the ** operation modifies one or more child or parent key columns. */ @@ -107697,16 +109293,22 @@ SQLITE_PRIVATE int sqlite3FkRequired( /* Check if any child key columns are being modified. */ for(p=pTab->pFKey; p; p=p->pNextFrom){ - if( fkChildIsModified(pTab, p, aChange, chngRowid) ) return 1; + if( 0==sqlite3_stricmp(pTab->zName, p->zTo) ) return 2; + if( fkChildIsModified(pTab, p, aChange, chngRowid) ){ + eRet = 1; + } } /* Check if any parent key columns are being modified. */ for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){ - if( fkParentIsModified(pTab, p, aChange, chngRowid) ) return 1; + if( fkParentIsModified(pTab, p, aChange, chngRowid) ){ + if( p->aAction[1]!=OE_None ) return 2; + eRet = 1; + } } } } - return 0; + return eRet; } /* @@ -108516,10 +110118,10 @@ SQLITE_PRIVATE void sqlite3Insert( #endif db = pParse->db; - memset(&dest, 0, sizeof(dest)); if( pParse->nErr || db->mallocFailed ){ goto insert_cleanup; } + dest.iSDParm = 0; /* Suppress a harmless compiler warning */ /* If the Select object is really just a simple VALUES() list with a ** single row (the common case) then keep that one row of values @@ -109328,7 +110930,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( #ifndef SQLITE_OMIT_CHECK if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ ExprList *pCheck = pTab->pCheck; - pParse->ckBase = regNewData+1; + pParse->iSelfTab = -(regNewData+1); onError = overrideError!=OE_Default ? overrideError : OE_Abort; for(i=0; inExpr; i++){ int allOk; @@ -109348,6 +110950,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } sqlite3VdbeResolveLabel(v, allOk); } + pParse->iSelfTab = 0; } #endif /* !defined(SQLITE_OMIT_CHECK) */ @@ -109492,10 +111095,10 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( /* Skip partial indices for which the WHERE clause is not true */ if( pIdx->pPartIdxWhere ){ sqlite3VdbeAddOp2(v, OP_Null, 0, aRegIdx[ix]); - pParse->ckBase = regNewData+1; + pParse->iSelfTab = -(regNewData+1); sqlite3ExprIfFalseDup(pParse, pIdx->pPartIdxWhere, addrUniqueOk, SQLITE_JUMPIFNULL); - pParse->ckBase = 0; + pParse->iSelfTab = 0; } /* Create a record for this index entry as it should appear after @@ -109506,9 +111109,9 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( int iField = pIdx->aiColumn[i]; int x; if( iField==XN_EXPR ){ - pParse->ckBase = regNewData+1; + pParse->iSelfTab = -(regNewData+1); sqlite3ExprCodeCopy(pParse, pIdx->aColExpr->a[i].pExpr, regIdx+i); - pParse->ckBase = 0; + pParse->iSelfTab = 0; VdbeComment((v, "%s column %d", pIdx->zName, i)); }else{ if( iField==XN_ROWID || iField==pTab->iPKey ){ @@ -109522,6 +111125,9 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn, aRegIdx[ix]); VdbeComment((v, "for %s", pIdx->zName)); +#ifdef SQLITE_ENABLE_NULL_TRIM + if( pIdx->idxType==2 ) sqlite3SetMakeRecordP5(v, pIdx->pTable); +#endif /* In an UPDATE operation, if this index is the PRIMARY KEY index ** of a WITHOUT ROWID table and there has been no change the @@ -109544,12 +111150,25 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( onError = OE_Abort; } - if( ix==0 && pPk==pIdx && onError==OE_Replace && pPk->pNext==0 ){ + /* Collision detection may be omitted if all of the following are true: + ** (1) The conflict resolution algorithm is REPLACE + ** (2) The table is a WITHOUT ROWID table + ** (3) There are no secondary indexes on the table + ** (4) No delete triggers need to be fired if there is a conflict + ** (5) No FK constraint counters need to be updated if a conflict occurs. + */ + if( (ix==0 && pIdx->pNext==0) /* Condition 3 */ + && pPk==pIdx /* Condition 2 */ + && onError==OE_Replace /* Condition 1 */ + && ( 0==(db->flags&SQLITE_RecTriggers) || /* Condition 4 */ + 0==sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0)) + && ( 0==(db->flags&SQLITE_ForeignKeys) || /* Condition 5 */ + (0==pTab->pFKey && 0==sqlite3FkReferences(pTab))) + ){ sqlite3VdbeResolveLabel(v, addrUniqueOk); continue; } - /* Check to see if the new index entry will be unique */ sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, regIdx, pIdx->nKeyCol); VdbeCoverage(v); @@ -109633,7 +111252,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } sqlite3GenerateRowDelete(pParse, pTab, pTrigger, iDataCur, iIdxCur, regR, nPkField, 0, OE_Replace, - (pIdx==pPk ? ONEPASS_SINGLE : ONEPASS_OFF), -1); + (pIdx==pPk ? ONEPASS_SINGLE : ONEPASS_OFF), iThisCur); seenReplace = 1; break; } @@ -109650,6 +111269,28 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( VdbeModuleComment((v, "END: GenCnstCks(%d)", seenReplace)); } +#ifdef SQLITE_ENABLE_NULL_TRIM +/* +** Change the P5 operand on the last opcode (which should be an OP_MakeRecord) +** to be the number of columns in table pTab that must not be NULL-trimmed. +** +** Or if no columns of pTab may be NULL-trimmed, leave P5 at zero. +*/ +SQLITE_PRIVATE void sqlite3SetMakeRecordP5(Vdbe *v, Table *pTab){ + u16 i; + + /* Records with omitted columns are only allowed for schema format + ** version 2 and later (SQLite version 3.1.4, 2005-02-20). */ + if( pTab->pSchema->file_format<2 ) return; + + for(i=pTab->nCol-1; i>0; i--){ + if( pTab->aCol[i].pDflt!=0 ) break; + if( pTab->aCol[i].colFlags & COLFLAG_PRIMKEY ) break; + } + sqlite3VdbeChangeP5(v, i+1); +} +#endif + /* ** This routine generates code to finish the INSERT or UPDATE operation ** that was started by a prior call to sqlite3GenerateConstraintChecks. @@ -109666,7 +111307,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( int iIdxCur, /* First index cursor */ int regNewData, /* Range of content */ int *aRegIdx, /* Register used by each index. 0 for unused indices */ - int isUpdate, /* True for UPDATE, False for INSERT */ + int update_flags, /* True for UPDATE, False for INSERT */ int appendBias, /* True if this is likely to be an append */ int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */ ){ @@ -109678,6 +111319,11 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( int i; /* Loop counter */ u8 bAffinityDone = 0; /* True if OP_Affinity has been run already */ + assert( update_flags==0 + || update_flags==OPFLAG_ISUPDATE + || update_flags==(OPFLAG_ISUPDATE|OPFLAG_SAVEPOSITION) + ); + v = sqlite3GetVdbe(pParse); assert( v!=0 ); assert( pTab->pSelect==0 ); /* This table is not a VIEW */ @@ -109688,21 +111334,30 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( sqlite3VdbeAddOp2(v, OP_IsNull, aRegIdx[i], sqlite3VdbeCurrentAddr(v)+2); VdbeCoverage(v); } - sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i], - aRegIdx[i]+1, - pIdx->uniqNotNull ? pIdx->nKeyCol: pIdx->nColumn); - pik_flags = 0; - if( useSeekResult ) pik_flags = OPFLAG_USESEEKRESULT; + pik_flags = (useSeekResult ? OPFLAG_USESEEKRESULT : 0); if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ assert( pParse->nested==0 ); pik_flags |= OPFLAG_NCHANGE; + pik_flags |= (update_flags & OPFLAG_SAVEPOSITION); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + if( update_flags==0 ){ + sqlite3VdbeAddOp4(v, OP_InsertInt, + iIdxCur+i, aRegIdx[i], 0, (char*)pTab, P4_TABLE + ); + sqlite3VdbeChangeP5(v, OPFLAG_ISNOOP); + } +#endif } + sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iIdxCur+i, aRegIdx[i], + aRegIdx[i]+1, + pIdx->uniqNotNull ? pIdx->nKeyCol: pIdx->nColumn); sqlite3VdbeChangeP5(v, pik_flags); } if( !HasRowid(pTab) ) return; regData = regNewData + 1; regRec = sqlite3GetTempReg(pParse); sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec); + sqlite3SetMakeRecordP5(v, pTab); if( !bAffinityDone ){ sqlite3TableAffinity(v, pTab, 0); sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol); @@ -109711,7 +111366,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion( pik_flags = 0; }else{ pik_flags = OPFLAG_NCHANGE; - pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID); + pik_flags |= (update_flags?update_flags:OPFLAG_LASTROWID); } if( appendBias ){ pik_flags |= OPFLAG_APPEND; @@ -109841,7 +111496,7 @@ static int xferCompatibleIndex(Index *pDest, Index *pSrc){ } if( pSrc->aiColumn[i]==XN_EXPR ){ assert( pSrc->aColExpr!=0 && pDest->aColExpr!=0 ); - if( sqlite3ExprCompare(pSrc->aColExpr->a[i].pExpr, + if( sqlite3ExprCompare(0, pSrc->aColExpr->a[i].pExpr, pDest->aColExpr->a[i].pExpr, -1)!=0 ){ return 0; /* Different expressions in the index */ } @@ -109853,7 +111508,7 @@ static int xferCompatibleIndex(Index *pDest, Index *pSrc){ return 0; /* Different collating sequences */ } } - if( sqlite3ExprCompare(pSrc->pPartIdxWhere, pDest->pPartIdxWhere, -1) ){ + if( sqlite3ExprCompare(0, pSrc->pPartIdxWhere, pDest->pPartIdxWhere, -1) ){ return 0; /* Different WHERE clauses */ } @@ -109922,7 +111577,7 @@ static int xferOptimization( return 0; /* tab1 must not have triggers */ } #ifndef SQLITE_OMIT_VIRTUALTABLE - if( pDest->tabFlags & TF_Virtual ){ + if( IsVirtual(pDest) ){ return 0; /* tab1 must not be a virtual table */ } #endif @@ -109984,7 +111639,7 @@ static int xferOptimization( return 0; /* source and destination must both be WITHOUT ROWID or not */ } #ifndef SQLITE_OMIT_VIRTUALTABLE - if( pSrc->tabFlags & TF_Virtual ){ + if( IsVirtual(pSrc) ){ return 0; /* tab2 must not be a virtual table */ } #endif @@ -110120,7 +111775,7 @@ static int xferOptimization( addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid); assert( (pDest->tabFlags & TF_Autoincrement)==0 ); } - sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); + sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1); if( db->flags & SQLITE_Vacuum ){ sqlite3VdbeAddOp3(v, OP_Last, iDest, 0, -1); insFlags = OPFLAG_NCHANGE|OPFLAG_LASTROWID| @@ -110152,7 +111807,7 @@ static int xferOptimization( sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR); VdbeComment((v, "%s", pDestIdx->zName)); addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0); VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData); + sqlite3VdbeAddOp3(v, OP_RowData, iSrc, regData, 1); if( db->flags & SQLITE_Vacuum ){ /* This INSERT command is part of a VACUUM operation, which guarantees ** that the destination table is empty. If all indexed columns use @@ -110170,8 +111825,6 @@ static int xferOptimization( ** sorted order. */ for(i=0; inColumn; i++){ const char *zColl = pSrcIdx->azColl[i]; - assert( sqlite3_stricmp(sqlite3StrBINARY, zColl)!=0 - || sqlite3StrBINARY==zColl ); if( sqlite3_stricmp(sqlite3StrBINARY, zColl) ) break; } if( i==pSrcIdx->nColumn ){ @@ -110281,7 +111934,7 @@ SQLITE_API int sqlite3_exec( (SQLITE_DONE==rc && !callbackIsInit && db->flags&SQLITE_NullCallback)) ){ if( !callbackIsInit ){ - azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1); + azCols = sqlite3DbMallocRaw(db, (2*nCol+1)*sizeof(const char*)); if( azCols==0 ){ goto exec_out; } @@ -110302,6 +111955,7 @@ SQLITE_API int sqlite3_exec( goto exec_out; } } + azVals[i] = 0; } if( xCallback(pArg, nCol, azVals, azCols) ){ /* EVIDENCE-OF: R-38229-40159 If the callback function to @@ -110334,11 +111988,8 @@ exec_out: rc = sqlite3ApiExit(db, rc); if( rc!=SQLITE_OK && pzErrMsg ){ - int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db)); - *pzErrMsg = sqlite3Malloc(nErrMsg); - if( *pzErrMsg ){ - memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg); - }else{ + *pzErrMsg = sqlite3DbStrDup(0, sqlite3_errmsg(db)); + if( *pzErrMsg==0 ){ rc = SQLITE_NOMEM_BKPT; sqlite3Error(db, SQLITE_NOMEM); } @@ -110657,6 +112308,16 @@ struct sqlite3_api_routines { /* Version 3.14.0 and later */ int (*trace_v2)(sqlite3*,unsigned,int(*)(unsigned,void*,void*,void*),void*); char *(*expanded_sql)(sqlite3_stmt*); + /* Version 3.18.0 and later */ + void (*set_last_insert_rowid)(sqlite3*,sqlite3_int64); + /* Version 3.20.0 and later */ + int (*prepare_v3)(sqlite3*,const char*,int,unsigned int, + sqlite3_stmt**,const char**); + int (*prepare16_v3)(sqlite3*,const void*,int,unsigned int, + sqlite3_stmt**,const void**); + int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*)); + void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*)); + void *(*value_pointer)(sqlite3_value*,const char*); }; /* @@ -110915,6 +112576,14 @@ typedef int (*sqlite3_loadext_entry)( /* Version 3.14.0 and later */ #define sqlite3_trace_v2 sqlite3_api->trace_v2 #define sqlite3_expanded_sql sqlite3_api->expanded_sql +/* Version 3.18.0 and later */ +#define sqlite3_set_last_insert_rowid sqlite3_api->set_last_insert_rowid +/* Version 3.20.0 and later */ +#define sqlite3_prepare_v3 sqlite3_api->prepare_v3 +#define sqlite3_prepare16_v3 sqlite3_api->prepare16_v3 +#define sqlite3_bind_pointer sqlite3_api->bind_pointer +#define sqlite3_result_pointer sqlite3_api->result_pointer +#define sqlite3_value_pointer sqlite3_api->value_pointer #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -110937,7 +112606,6 @@ typedef int (*sqlite3_loadext_entry)( /************** End of sqlite3ext.h ******************************************/ /************** Continuing where we left off in loadext.c ********************/ /* #include "sqliteInt.h" */ -/* #include */ #ifndef SQLITE_OMIT_LOAD_EXTENSION /* @@ -110971,6 +112639,7 @@ typedef int (*sqlite3_loadext_entry)( # define sqlite3_open16 0 # define sqlite3_prepare16 0 # define sqlite3_prepare16_v2 0 +# define sqlite3_prepare16_v3 0 # define sqlite3_result_error16 0 # define sqlite3_result_text16 0 # define sqlite3_result_text16be 0 @@ -111341,7 +113010,15 @@ static const sqlite3_api_routines sqlite3Apis = { sqlite3_system_errno, /* Version 3.14.0 and later */ sqlite3_trace_v2, - sqlite3_expanded_sql + sqlite3_expanded_sql, + /* Version 3.18.0 and later */ + sqlite3_set_last_insert_rowid, + /* Version 3.20.0 and later */ + sqlite3_prepare_v3, + sqlite3_prepare16_v3, + sqlite3_bind_pointer, + sqlite3_result_pointer, + sqlite3_value_pointer }; /* @@ -111763,43 +113440,48 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){ #define PragTyp_ENCODING 12 #define PragTyp_FOREIGN_KEY_CHECK 13 #define PragTyp_FOREIGN_KEY_LIST 14 -#define PragTyp_INCREMENTAL_VACUUM 15 -#define PragTyp_INDEX_INFO 16 -#define PragTyp_INDEX_LIST 17 -#define PragTyp_INTEGRITY_CHECK 18 -#define PragTyp_JOURNAL_MODE 19 -#define PragTyp_JOURNAL_SIZE_LIMIT 20 -#define PragTyp_LOCK_PROXY_FILE 21 -#define PragTyp_LOCKING_MODE 22 -#define PragTyp_PAGE_COUNT 23 -#define PragTyp_MMAP_SIZE 24 -#define PragTyp_PAGE_SIZE 25 -#define PragTyp_SECURE_DELETE 26 -#define PragTyp_SHRINK_MEMORY 27 -#define PragTyp_SOFT_HEAP_LIMIT 28 -#define PragTyp_STATS 29 -#define PragTyp_SYNCHRONOUS 30 -#define PragTyp_TABLE_INFO 31 -#define PragTyp_TEMP_STORE 32 -#define PragTyp_TEMP_STORE_DIRECTORY 33 -#define PragTyp_THREADS 34 -#define PragTyp_WAL_AUTOCHECKPOINT 35 -#define PragTyp_WAL_CHECKPOINT 36 -#define PragTyp_ACTIVATE_EXTENSIONS 37 -#define PragTyp_HEXKEY 38 -#define PragTyp_KEY 39 -#define PragTyp_REKEY 40 -#define PragTyp_LOCK_STATUS 41 -#define PragTyp_PARSER_TRACE 42 +#define PragTyp_FUNCTION_LIST 15 +#define PragTyp_INCREMENTAL_VACUUM 16 +#define PragTyp_INDEX_INFO 17 +#define PragTyp_INDEX_LIST 18 +#define PragTyp_INTEGRITY_CHECK 19 +#define PragTyp_JOURNAL_MODE 20 +#define PragTyp_JOURNAL_SIZE_LIMIT 21 +#define PragTyp_LOCK_PROXY_FILE 22 +#define PragTyp_LOCKING_MODE 23 +#define PragTyp_PAGE_COUNT 24 +#define PragTyp_MMAP_SIZE 25 +#define PragTyp_MODULE_LIST 26 +#define PragTyp_OPTIMIZE 27 +#define PragTyp_PAGE_SIZE 28 +#define PragTyp_PRAGMA_LIST 29 +#define PragTyp_SECURE_DELETE 30 +#define PragTyp_SHRINK_MEMORY 31 +#define PragTyp_SOFT_HEAP_LIMIT 32 +#define PragTyp_SYNCHRONOUS 33 +#define PragTyp_TABLE_INFO 34 +#define PragTyp_TEMP_STORE 35 +#define PragTyp_TEMP_STORE_DIRECTORY 36 +#define PragTyp_THREADS 37 +#define PragTyp_WAL_AUTOCHECKPOINT 38 +#define PragTyp_WAL_CHECKPOINT 39 +#define PragTyp_ACTIVATE_EXTENSIONS 40 +#define PragTyp_HEXKEY 41 +#define PragTyp_KEY 42 +#define PragTyp_REKEY 43 +#define PragTyp_LOCK_STATUS 44 +#define PragTyp_PARSER_TRACE 45 +#define PragTyp_STATS 46 /* Property flags associated with various pragma. */ #define PragFlg_NeedSchema 0x01 /* Force schema load before running */ #define PragFlg_NoColumns 0x02 /* OP_ResultRow called with zero columns */ -#define PragFlg_ReadOnly 0x04 /* Read-only HEADER_VALUE */ -#define PragFlg_Result0 0x08 /* Acts as query when no argument */ -#define PragFlg_Result1 0x10 /* Acts as query when has one argument */ -#define PragFlg_SchemaOpt 0x20 /* Schema restricts name search if present */ -#define PragFlg_SchemaReq 0x40 /* Schema required - "main" is default */ +#define PragFlg_NoColumns1 0x04 /* zero columns if RHS argument is present */ +#define PragFlg_ReadOnly 0x08 /* Read-only HEADER_VALUE */ +#define PragFlg_Result0 0x10 /* Acts as query when no argument */ +#define PragFlg_Result1 0x20 /* Acts as query when has one argument */ +#define PragFlg_SchemaOpt 0x40 /* Schema restricts name search if present */ +#define PragFlg_SchemaReq 0x80 /* Schema required - "main" is default */ /* Names of columns for pragmas that return multi-column result ** or that return single-column results where the name of the @@ -111813,47 +113495,51 @@ static const char *const pragCName[] = { /* 4 */ "notnull", /* 5 */ "dflt_value", /* 6 */ "pk", - /* 7 */ "table", /* Used by: stats */ - /* 8 */ "index", - /* 9 */ "width", - /* 10 */ "height", - /* 11 */ "seqno", /* Used by: index_info */ - /* 12 */ "cid", - /* 13 */ "name", - /* 14 */ "seqno", /* Used by: index_xinfo */ - /* 15 */ "cid", - /* 16 */ "name", - /* 17 */ "desc", - /* 18 */ "coll", - /* 19 */ "key", - /* 20 */ "seq", /* Used by: index_list */ - /* 21 */ "name", - /* 22 */ "unique", - /* 23 */ "origin", - /* 24 */ "partial", - /* 25 */ "seq", /* Used by: database_list */ - /* 26 */ "name", - /* 27 */ "file", - /* 28 */ "seq", /* Used by: collation_list */ - /* 29 */ "name", - /* 30 */ "id", /* Used by: foreign_key_list */ - /* 31 */ "seq", - /* 32 */ "table", - /* 33 */ "from", - /* 34 */ "to", - /* 35 */ "on_update", - /* 36 */ "on_delete", - /* 37 */ "match", - /* 38 */ "table", /* Used by: foreign_key_check */ - /* 39 */ "rowid", - /* 40 */ "parent", - /* 41 */ "fkid", - /* 42 */ "busy", /* Used by: wal_checkpoint */ - /* 43 */ "log", - /* 44 */ "checkpointed", - /* 45 */ "timeout", /* Used by: busy_timeout */ - /* 46 */ "database", /* Used by: lock_status */ - /* 47 */ "status", + /* 7 */ "tbl", /* Used by: stats */ + /* 8 */ "idx", + /* 9 */ "wdth", + /* 10 */ "hght", + /* 11 */ "flgs", + /* 12 */ "seqno", /* Used by: index_info */ + /* 13 */ "cid", + /* 14 */ "name", + /* 15 */ "seqno", /* Used by: index_xinfo */ + /* 16 */ "cid", + /* 17 */ "name", + /* 18 */ "desc", + /* 19 */ "coll", + /* 20 */ "key", + /* 21 */ "seq", /* Used by: index_list */ + /* 22 */ "name", + /* 23 */ "unique", + /* 24 */ "origin", + /* 25 */ "partial", + /* 26 */ "seq", /* Used by: database_list */ + /* 27 */ "name", + /* 28 */ "file", + /* 29 */ "name", /* Used by: function_list */ + /* 30 */ "builtin", + /* 31 */ "name", /* Used by: module_list pragma_list */ + /* 32 */ "seq", /* Used by: collation_list */ + /* 33 */ "name", + /* 34 */ "id", /* Used by: foreign_key_list */ + /* 35 */ "seq", + /* 36 */ "table", + /* 37 */ "from", + /* 38 */ "to", + /* 39 */ "on_update", + /* 40 */ "on_delete", + /* 41 */ "match", + /* 42 */ "table", /* Used by: foreign_key_check */ + /* 43 */ "rowid", + /* 44 */ "parent", + /* 45 */ "fkid", + /* 46 */ "busy", /* Used by: wal_checkpoint */ + /* 47 */ "log", + /* 48 */ "checkpointed", + /* 49 */ "timeout", /* Used by: busy_timeout */ + /* 50 */ "database", /* Used by: lock_status */ + /* 51 */ "status", }; /* Definitions of all built-in pragmas */ @@ -111876,14 +113562,14 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) {/* zName: */ "application_id", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlg: */ PragFlg_Result0, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, /* ColNames: */ 0, 0, /* iArg: */ BTREE_APPLICATION_ID }, #endif #if !defined(SQLITE_OMIT_AUTOVACUUM) {/* zName: */ "auto_vacuum", /* ePragTyp: */ PragTyp_AUTO_VACUUM, - /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -111891,7 +113577,7 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_AUTOMATIC_INDEX) {/* zName: */ "automatic_index", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_AutoIndex }, #endif @@ -111899,36 +113585,36 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "busy_timeout", /* ePragTyp: */ PragTyp_BUSY_TIMEOUT, /* ePragFlg: */ PragFlg_Result0, - /* ColNames: */ 45, 1, + /* ColNames: */ 49, 1, /* iArg: */ 0 }, #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) {/* zName: */ "cache_size", /* ePragTyp: */ PragTyp_CACHE_SIZE, - /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "cache_spill", /* ePragTyp: */ PragTyp_CACHE_SPILL, - /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif {/* zName: */ "case_sensitive_like", /* ePragTyp: */ PragTyp_CASE_SENSITIVE_LIKE, - /* ePragFlg: */ 0, + /* ePragFlg: */ PragFlg_NoColumns, /* ColNames: */ 0, 0, /* iArg: */ 0 }, {/* zName: */ "cell_size_check", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_CellSizeCk }, #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "checkpoint_fullfsync", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_CkptFullFSync }, #endif @@ -111936,7 +113622,7 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "collation_list", /* ePragTyp: */ PragTyp_COLLATION_LIST, /* ePragFlg: */ PragFlg_Result0, - /* ColNames: */ 28, 2, + /* ColNames: */ 32, 2, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS) @@ -111949,21 +113635,21 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "count_changes", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_CountRows }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN {/* zName: */ "data_store_directory", /* ePragTyp: */ PragTyp_DATA_STORE_DIRECTORY, - /* ePragFlg: */ 0, + /* ePragFlg: */ PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) {/* zName: */ "data_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlg: */ PragFlg_Result0|PragFlg_ReadOnly, + /* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0, /* ColNames: */ 0, 0, /* iArg: */ BTREE_DATA_VERSION }, #endif @@ -111971,13 +113657,13 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "database_list", /* ePragTyp: */ PragTyp_DATABASE_LIST, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0, - /* ColNames: */ 25, 3, + /* ColNames: */ 26, 3, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED) {/* zName: */ "default_cache_size", /* ePragTyp: */ PragTyp_DEFAULT_CACHE_SIZE, - /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 1, /* iArg: */ 0 }, #endif @@ -111985,7 +113671,7 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) {/* zName: */ "defer_foreign_keys", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_DeferFKs }, #endif @@ -111993,36 +113679,36 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "empty_result_callbacks", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_NullCallback }, #endif #if !defined(SQLITE_OMIT_UTF16) {/* zName: */ "encoding", /* ePragTyp: */ PragTyp_ENCODING, - /* ePragFlg: */ PragFlg_Result0, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) {/* zName: */ "foreign_key_check", /* ePragTyp: */ PragTyp_FOREIGN_KEY_CHECK, - /* ePragFlg: */ PragFlg_NeedSchema, - /* ColNames: */ 38, 4, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0, + /* ColNames: */ 42, 4, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FOREIGN_KEY) {/* zName: */ "foreign_key_list", /* ePragTyp: */ PragTyp_FOREIGN_KEY_LIST, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, - /* ColNames: */ 30, 8, + /* ColNames: */ 34, 8, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER) {/* zName: */ "foreign_keys", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_ForeignKeys }, #endif @@ -112030,22 +113716,31 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) {/* zName: */ "freelist_count", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlg: */ PragFlg_Result0|PragFlg_ReadOnly, + /* ePragFlg: */ PragFlg_ReadOnly|PragFlg_Result0, /* ColNames: */ 0, 0, /* iArg: */ BTREE_FREE_PAGE_COUNT }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "full_column_names", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_FullColNames }, {/* zName: */ "fullfsync", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_FullFSync }, #endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) +#if defined(SQLITE_INTROSPECTION_PRAGMAS) + {/* zName: */ "function_list", + /* ePragTyp: */ PragTyp_FUNCTION_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 29, 2, + /* iArg: */ 0 }, +#endif +#endif #if defined(SQLITE_HAS_CODEC) {/* zName: */ "hexkey", /* ePragTyp: */ PragTyp_HEXKEY, @@ -112062,7 +113757,7 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_CHECK) {/* zName: */ "ignore_check_constraints", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_IgnoreChecks }, #endif @@ -112078,23 +113773,23 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "index_info", /* ePragTyp: */ PragTyp_INDEX_INFO, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, - /* ColNames: */ 11, 3, + /* ColNames: */ 12, 3, /* iArg: */ 0 }, {/* zName: */ "index_list", /* ePragTyp: */ PragTyp_INDEX_LIST, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, - /* ColNames: */ 20, 5, + /* ColNames: */ 21, 5, /* iArg: */ 0 }, {/* zName: */ "index_xinfo", /* ePragTyp: */ PragTyp_INDEX_INFO, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result1|PragFlg_SchemaOpt, - /* ColNames: */ 14, 6, + /* ColNames: */ 15, 6, /* iArg: */ 1 }, #endif #if !defined(SQLITE_OMIT_INTEGRITY_CHECK) {/* zName: */ "integrity_check", /* ePragTyp: */ PragTyp_INTEGRITY_CHECK, - /* ePragFlg: */ PragFlg_NeedSchema, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -112120,14 +113815,14 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "legacy_file_format", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_LegacyFileFmt }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE {/* zName: */ "lock_proxy_file", /* ePragTyp: */ PragTyp_LOCK_PROXY_FILE, - /* ePragFlg: */ 0, + /* ePragFlg: */ PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -112135,7 +113830,7 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "lock_status", /* ePragTyp: */ PragTyp_LOCK_STATUS, /* ePragFlg: */ PragFlg_Result0, - /* ColNames: */ 46, 2, + /* ColNames: */ 50, 2, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) @@ -112154,6 +113849,24 @@ static const PragmaName aPragmaName[] = { /* ePragFlg: */ 0, /* ColNames: */ 0, 0, /* iArg: */ 0 }, +#endif +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) +#if !defined(SQLITE_OMIT_VIRTUALTABLE) +#if defined(SQLITE_INTROSPECTION_PRAGMAS) + {/* zName: */ "module_list", + /* ePragTyp: */ PragTyp_MODULE_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 31, 1, + /* iArg: */ 0 }, +#endif +#endif +#endif + {/* zName: */ "optimize", + /* ePragTyp: */ PragTyp_OPTIMIZE, + /* ePragFlg: */ PragFlg_Result1|PragFlg_NeedSchema, + /* ColNames: */ 0, 0, + /* iArg: */ 0 }, +#if !defined(SQLITE_OMIT_PAGER_PRAGMAS) {/* zName: */ "page_count", /* ePragTyp: */ PragTyp_PAGE_COUNT, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, @@ -112161,7 +113874,7 @@ static const PragmaName aPragmaName[] = { /* iArg: */ 0 }, {/* zName: */ "page_size", /* ePragTyp: */ PragTyp_PAGE_SIZE, - /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -112172,29 +113885,36 @@ static const PragmaName aPragmaName[] = { /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif +#if defined(SQLITE_INTROSPECTION_PRAGMAS) + {/* zName: */ "pragma_list", + /* ePragTyp: */ PragTyp_PRAGMA_LIST, + /* ePragFlg: */ PragFlg_Result0, + /* ColNames: */ 31, 1, + /* iArg: */ 0 }, +#endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "query_only", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_QueryOnly }, #endif #if !defined(SQLITE_OMIT_INTEGRITY_CHECK) {/* zName: */ "quick_check", /* ePragTyp: */ PragTyp_INTEGRITY_CHECK, - /* ePragFlg: */ PragFlg_NeedSchema, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_Result1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "read_uncommitted", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, - /* iArg: */ SQLITE_ReadUncommitted }, + /* iArg: */ SQLITE_ReadUncommit }, {/* zName: */ "recursive_triggers", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_RecTriggers }, #endif @@ -112208,14 +113928,14 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "reverse_unordered_selects", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_ReverseOrder }, #endif #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) {/* zName: */ "schema_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlg: */ PragFlg_Result0, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, /* ColNames: */ 0, 0, /* iArg: */ BTREE_SCHEMA_VERSION }, #endif @@ -112229,13 +113949,13 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "short_column_names", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_ShortColNames }, #endif {/* zName: */ "shrink_memory", /* ePragTyp: */ PragTyp_SHRINK_MEMORY, - /* ePragFlg: */ 0, + /* ePragFlg: */ PragFlg_NoColumns, /* ColNames: */ 0, 0, /* iArg: */ 0 }, {/* zName: */ "soft_heap_limit", @@ -112247,22 +113967,22 @@ static const PragmaName aPragmaName[] = { #if defined(SQLITE_DEBUG) {/* zName: */ "sql_trace", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_SqlTrace }, #endif #endif -#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) && defined(SQLITE_DEBUG) {/* zName: */ "stats", /* ePragTyp: */ PragTyp_STATS, /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, - /* ColNames: */ 7, 4, + /* ColNames: */ 7, 5, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) {/* zName: */ "synchronous", /* ePragTyp: */ PragTyp_SYNCHRONOUS, - /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq, + /* ePragFlg: */ PragFlg_NeedSchema|PragFlg_Result0|PragFlg_SchemaReq|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -112276,12 +113996,12 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) {/* zName: */ "temp_store", /* ePragTyp: */ PragTyp_TEMP_STORE, - /* ePragFlg: */ PragFlg_Result0, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, {/* zName: */ "temp_store_directory", /* ePragTyp: */ PragTyp_TEMP_STORE_DIRECTORY, - /* ePragFlg: */ 0, + /* ePragFlg: */ PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ 0 }, #endif @@ -112293,7 +114013,7 @@ static const PragmaName aPragmaName[] = { #if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS) {/* zName: */ "user_version", /* ePragTyp: */ PragTyp_HEADER_VALUE, - /* ePragFlg: */ PragFlg_Result0, + /* ePragFlg: */ PragFlg_NoColumns1|PragFlg_Result0, /* ColNames: */ 0, 0, /* iArg: */ BTREE_USER_VERSION }, #endif @@ -112301,27 +114021,27 @@ static const PragmaName aPragmaName[] = { #if defined(SQLITE_DEBUG) {/* zName: */ "vdbe_addoptrace", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_VdbeAddopTrace }, {/* zName: */ "vdbe_debug", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace }, {/* zName: */ "vdbe_eqp", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_VdbeEQP }, {/* zName: */ "vdbe_listing", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_VdbeListing }, {/* zName: */ "vdbe_trace", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, /* iArg: */ SQLITE_VdbeTrace }, #endif @@ -112335,18 +114055,18 @@ static const PragmaName aPragmaName[] = { {/* zName: */ "wal_checkpoint", /* ePragTyp: */ PragTyp_WAL_CHECKPOINT, /* ePragFlg: */ PragFlg_NeedSchema, - /* ColNames: */ 42, 3, + /* ColNames: */ 46, 3, /* iArg: */ 0 }, #endif #if !defined(SQLITE_OMIT_FLAG_PRAGMAS) {/* zName: */ "writable_schema", /* ePragTyp: */ PragTyp_FLAG, - /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns, + /* ePragFlg: */ PragFlg_Result0|PragFlg_NoColumns1, /* ColNames: */ 0, 0, - /* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode }, + /* iArg: */ SQLITE_WriteSchema }, #endif }; -/* Number of pragmas: 60 on by default, 73 total. */ +/* Number of pragmas: 60 on by default, 77 total. */ /************** End of pragma.h **********************************************/ /************** Continuing where we left off in pragma.c *********************/ @@ -112600,7 +114320,7 @@ SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){ ** Locate a pragma in the aPragmaName[] array. */ static const PragmaName *pragmaLocate(const char *zName){ - int upr, lwr, mid, rc; + int upr, lwr, mid = 0, rc; lwr = 0; upr = ArraySize(aPragmaName)-1; while( lwr<=upr ){ @@ -112616,6 +114336,22 @@ static const PragmaName *pragmaLocate(const char *zName){ return lwr>upr ? 0 : &aPragmaName[mid]; } +/* +** Helper subroutine for PRAGMA integrity_check: +** +** Generate code to output a single-column result row with the result +** held in register regResult. Decrement the result count and halt if +** the maximum number of result rows have been issued. +*/ +static int integrityCheckResultRow(Vdbe *v, int regResult){ + int addr; + sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 1); + addr = sqlite3VdbeAddOp3(v, OP_IfPos, 1, sqlite3VdbeCurrentAddr(v)+2, 1); + VdbeCoverage(v); + sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); + return addr; +} + /* ** Process a pragma statement. ** @@ -112729,7 +114465,9 @@ SQLITE_PRIVATE void sqlite3Pragma( } /* Register the result column names for pragmas that return results */ - if( (pPragma->mPragFlg & PragFlg_NoColumns)==0 ){ + if( (pPragma->mPragFlg & PragFlg_NoColumns)==0 + && ((pPragma->mPragFlg & PragFlg_NoColumns1)==0 || zRight==0) + ){ setPragmaResultColumnNames(v, pPragma); } @@ -112818,18 +114556,22 @@ SQLITE_PRIVATE void sqlite3Pragma( /* ** PRAGMA [schema.]secure_delete - ** PRAGMA [schema.]secure_delete=ON/OFF + ** PRAGMA [schema.]secure_delete=ON/OFF/FAST ** ** The first form reports the current setting for the ** secure_delete flag. The second form changes the secure_delete - ** flag setting and reports thenew value. + ** flag setting and reports the new value. */ case PragTyp_SECURE_DELETE: { Btree *pBt = pDb->pBt; int b = -1; assert( pBt!=0 ); if( zRight ){ - b = sqlite3GetBoolean(zRight, 0); + if( sqlite3_stricmp(zRight, "fast")==0 ){ + b = 2; + }else{ + b = sqlite3GetBoolean(zRight, 0); + } } if( pId2->n==0 && b>=0 ){ int ii; @@ -113318,7 +115060,7 @@ SQLITE_PRIVATE void sqlite3Pragma( if( !db->autoCommit ){ sqlite3ErrorMsg(pParse, "Safety level may not be changed inside a transaction"); - }else{ + }else if( iDb!=1 ){ int iLevel = (getSafetyLevel(zRight,0,1)+1) & PAGER_SYNCHRONOUS_MASK; if( iLevel==0 ) iLevel = 1; pDb->safety_level = iLevel; @@ -113411,35 +115153,37 @@ SQLITE_PRIVATE void sqlite3Pragma( pCol->notNull ? 1 : 0, pCol->pDflt ? pCol->pDflt->u.zToken : 0, k); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6); } } } break; +#ifdef SQLITE_DEBUG case PragTyp_STATS: { Index *pIdx; HashElem *i; - pParse->nMem = 4; + pParse->nMem = 5; sqlite3CodeVerifySchema(pParse, iDb); for(i=sqliteHashFirst(&pDb->pSchema->tblHash); i; i=sqliteHashNext(i)){ Table *pTab = sqliteHashData(i); - sqlite3VdbeMultiLoad(v, 1, "ssii", + sqlite3VdbeMultiLoad(v, 1, "ssiii", pTab->zName, 0, pTab->szTabRow, - pTab->nRowLogEst); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4); + pTab->nRowLogEst, + pTab->tabFlags); for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - sqlite3VdbeMultiLoad(v, 2, "sii", + sqlite3VdbeMultiLoad(v, 2, "siiiX", pIdx->zName, pIdx->szIdxRow, - pIdx->aiRowLogEst[0]); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 4); + pIdx->aiRowLogEst[0], + pIdx->hasStat1); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 5); } } } break; +#endif case PragTyp_INDEX_INFO: if( zRight ){ Index *pIdx; @@ -113462,10 +115206,10 @@ SQLITE_PRIVATE void sqlite3Pragma( assert( pParse->nMem<=pPragma->nPragCName ); for(i=0; iaiColumn[i]; - sqlite3VdbeMultiLoad(v, 1, "iis", i, cnum, + sqlite3VdbeMultiLoad(v, 1, "iisX", i, cnum, cnum<0 ? 0 : pTab->aCol[cnum].zName); if( pPragma->iArg ){ - sqlite3VdbeMultiLoad(v, 4, "isi", + sqlite3VdbeMultiLoad(v, 4, "isiX", pIdx->aSortOrder[i], pIdx->azColl[i], inKeyCol); @@ -113492,7 +115236,6 @@ SQLITE_PRIVATE void sqlite3Pragma( IsUniqueIndex(pIdx), azOrigin[pIdx->idxType], pIdx->pPartIdxWhere!=0); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 5); } } } @@ -113508,7 +115251,6 @@ SQLITE_PRIVATE void sqlite3Pragma( i, db->aDb[i].zDbSName, sqlite3BtreeGetFilename(db->aDb[i].pBt)); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3); } } break; @@ -113520,10 +115262,53 @@ SQLITE_PRIVATE void sqlite3Pragma( for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){ CollSeq *pColl = (CollSeq *)sqliteHashData(p); sqlite3VdbeMultiLoad(v, 1, "is", i++, pColl->zName); + } + } + break; + +#ifdef SQLITE_INTROSPECTION_PRAGMAS + case PragTyp_FUNCTION_LIST: { + int i; + HashElem *j; + FuncDef *p; + pParse->nMem = 2; + for(i=0; iu.pHash ){ + sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 1); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); + } + } + for(j=sqliteHashFirst(&db->aFunc); j; j=sqliteHashNext(j)){ + p = (FuncDef*)sqliteHashData(j); + sqlite3VdbeMultiLoad(v, 1, "si", p->zName, 0); sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); } } break; + +#ifndef SQLITE_OMIT_VIRTUALTABLE + case PragTyp_MODULE_LIST: { + HashElem *j; + pParse->nMem = 1; + for(j=sqliteHashFirst(&db->aModule); j; j=sqliteHashNext(j)){ + Module *pMod = (Module*)sqliteHashData(j); + sqlite3VdbeMultiLoad(v, 1, "s", pMod->zName); + sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1); + } + } + break; +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + + case PragTyp_PRAGMA_LIST: { + int i; + for(i=0; iaAction[1]), /* ON UPDATE */ actionName(pFK->aAction[0]), /* ON DELETE */ "NONE"); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8); } ++i; pFK = pFK->pNextFrom; @@ -113628,34 +115412,38 @@ SQLITE_PRIVATE void sqlite3Pragma( assert( x==0 ); } addrOk = sqlite3VdbeMakeLabel(v); - if( pParent && pIdx==0 ){ - int iKey = pFK->aCol[0].iFrom; - assert( iKey>=0 && iKeynCol ); - if( iKey!=pTab->iPKey ){ - sqlite3VdbeAddOp3(v, OP_Column, 0, iKey, regRow); - sqlite3ColumnDefault(v, pTab, iKey, regRow); - sqlite3VdbeAddOp2(v, OP_IsNull, regRow, addrOk); VdbeCoverage(v); - }else{ - sqlite3VdbeAddOp2(v, OP_Rowid, 0, regRow); - } - sqlite3VdbeAddOp3(v, OP_SeekRowid, i, 0, regRow); VdbeCoverage(v); - sqlite3VdbeGoto(v, addrOk); - sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2); - }else{ - for(j=0; jnCol; j++){ - sqlite3ExprCodeGetColumnOfTable(v, pTab, 0, - aiCols ? aiCols[j] : pFK->aCol[j].iFrom, regRow+j); - sqlite3VdbeAddOp2(v, OP_IsNull, regRow+j, addrOk); VdbeCoverage(v); - } - if( pParent ){ - sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, pFK->nCol, regKey, - sqlite3IndexAffinityStr(db,pIdx), pFK->nCol); - sqlite3VdbeAddOp4Int(v, OP_Found, i, addrOk, regKey, 0); - VdbeCoverage(v); - } + + /* Generate code to read the child key values into registers + ** regRow..regRow+n. If any of the child key values are NULL, this + ** row cannot cause an FK violation. Jump directly to addrOk in + ** this case. */ + for(j=0; jnCol; j++){ + int iCol = aiCols ? aiCols[j] : pFK->aCol[j].iFrom; + sqlite3ExprCodeGetColumnOfTable(v, pTab, 0, iCol, regRow+j); + sqlite3VdbeAddOp2(v, OP_IsNull, regRow+j, addrOk); VdbeCoverage(v); } - sqlite3VdbeAddOp2(v, OP_Rowid, 0, regResult+1); - sqlite3VdbeMultiLoad(v, regResult+2, "si", pFK->zTo, i-1); + + /* Generate code to query the parent index for a matching parent + ** key. If a match is found, jump to addrOk. */ + if( pIdx ){ + sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, pFK->nCol, regKey, + sqlite3IndexAffinityStr(db,pIdx), pFK->nCol); + sqlite3VdbeAddOp4Int(v, OP_Found, i, addrOk, regKey, 0); + VdbeCoverage(v); + }else if( pParent ){ + int jmp = sqlite3VdbeCurrentAddr(v)+2; + sqlite3VdbeAddOp3(v, OP_SeekRowid, i, jmp, regRow); VdbeCoverage(v); + sqlite3VdbeGoto(v, addrOk); + assert( pFK->nCol==1 ); + } + + /* Generate code to report an FK violation to the caller. */ + if( HasRowid(pTab) ){ + sqlite3VdbeAddOp2(v, OP_Rowid, 0, regResult+1); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, regResult+1); + } + sqlite3VdbeMultiLoad(v, regResult+2, "siX", pFK->zTo, i-1); sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, 4); sqlite3VdbeResolveLabel(v, addrOk); sqlite3DbFree(db, aiCols); @@ -113696,9 +115484,17 @@ SQLITE_PRIVATE void sqlite3Pragma( #endif #ifndef SQLITE_OMIT_INTEGRITY_CHECK - /* Pragma "quick_check" is reduced version of + /* PRAGMA integrity_check + ** PRAGMA integrity_check(N) + ** PRAGMA quick_check + ** PRAGMA quick_check(N) + ** + ** Verify the integrity of the database. + ** + ** The "quick_check" is reduced version of ** integrity_check designed to detect most database corruption - ** without most of the overhead of a full integrity-check. + ** without the overhead of cross-checking indexes. Quick_check + ** is linear time wherease integrity_check is O(NlogN). */ case PragTyp_INTEGRITY_CHECK: { int i, j, addr, mxErr; @@ -113729,7 +115525,7 @@ SQLITE_PRIVATE void sqlite3Pragma( mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX; } } - sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1); /* reg[1] holds errors left */ + sqlite3VdbeAddOp2(v, OP_Integer, mxErr-1, 1); /* reg[1] holds errors left */ /* Do an integrity check on each database file */ for(i=0; inDb; i++){ @@ -113744,10 +115540,6 @@ SQLITE_PRIVATE void sqlite3Pragma( if( iDb>=0 && i!=iDb ) continue; sqlite3CodeVerifySchema(pParse, i); - addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */ - VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeJumpHere(v, addr); /* Do an integrity check of the B-Tree ** @@ -113777,6 +115569,7 @@ SQLITE_PRIVATE void sqlite3Pragma( /* Make sure sufficient number of registers have been allocated */ pParse->nMem = MAX( pParse->nMem, 8+mxIdx ); + sqlite3ClearTempRegCache(pParse); /* Do the b-tree integrity checks */ sqlite3VdbeAddOp4(v, OP_IntegrityCk, 2, cnt, 1, (char*)aRoot,P4_INTARRAY); @@ -113787,12 +115580,12 @@ SQLITE_PRIVATE void sqlite3Pragma( P4_DYNAMIC); sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1); sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2); - sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1); + integrityCheckResultRow(v, 2); sqlite3VdbeJumpHere(v, addr); /* Make sure all the indices are constructed correctly. */ - for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){ + for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){ Table *pTab = sqliteHashData(x); Index *pIdx, *pPk; Index *pPrior = 0; @@ -113800,12 +115593,14 @@ SQLITE_PRIVATE void sqlite3Pragma( int iDataCur, iIdxCur; int r1 = -1; - if( pTab->pIndex==0 ) continue; + if( pTab->tnum<1 ) continue; /* Skip VIEWs or VIRTUAL TABLEs */ + if( pTab->pCheck==0 + && (pTab->tabFlags & TF_HasNotNull)==0 + && (pTab->pIndex==0 || isQuick) + ){ + continue; /* No additional checks needed for this table */ + } pPk = HasRowid(pTab) ? 0 : sqlite3PrimaryKeyIndex(pTab); - addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */ - VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeJumpHere(v, addr); sqlite3ExprCacheClear(pParse); sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenRead, 0, 1, 0, &iDataCur, &iIdxCur); @@ -113820,24 +115615,46 @@ SQLITE_PRIVATE void sqlite3Pragma( /* Verify that all NOT NULL columns really are NOT NULL */ for(j=0; jnCol; j++){ char *zErr; - int jmp2, jmp3; + int jmp2; if( j==pTab->iPKey ) continue; if( pTab->aCol[j].notNull==0 ) continue; sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3); sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG); jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */ zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, pTab->aCol[j].zName); sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); - sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1); - jmp3 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v); - sqlite3VdbeAddOp0(v, OP_Halt); + integrityCheckResultRow(v, 3); sqlite3VdbeJumpHere(v, jmp2); - sqlite3VdbeJumpHere(v, jmp3); + } + /* Verify CHECK constraints */ + if( pTab->pCheck && (db->flags & SQLITE_IgnoreChecks)==0 ){ + ExprList *pCheck = sqlite3ExprListDup(db, pTab->pCheck, 0); + if( db->mallocFailed==0 ){ + int addrCkFault = sqlite3VdbeMakeLabel(v); + int addrCkOk = sqlite3VdbeMakeLabel(v); + char *zErr; + int k; + pParse->iSelfTab = iDataCur + 1; + sqlite3ExprCachePush(pParse); + for(k=pCheck->nExpr-1; k>0; k--){ + sqlite3ExprIfFalse(pParse, pCheck->a[k].pExpr, addrCkFault, 0); + } + sqlite3ExprIfTrue(pParse, pCheck->a[0].pExpr, addrCkOk, + SQLITE_JUMPIFNULL); + sqlite3VdbeResolveLabel(v, addrCkFault); + pParse->iSelfTab = 0; + zErr = sqlite3MPrintf(db, "CHECK constraint failed in %s", + pTab->zName); + sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); + integrityCheckResultRow(v, 3); + sqlite3VdbeResolveLabel(v, addrCkOk); + sqlite3ExprCachePop(pParse); + } + sqlite3ExprListDelete(db, pCheck); } /* Validate index entries for the current row */ - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + for(j=0, pIdx=pTab->pIndex; pIdx && !isQuick; pIdx=pIdx->pNext, j++){ int jmp2, jmp3, jmp4, jmp5; int ckUniq = sqlite3VdbeMakeLabel(v); if( pPk==pIdx ) continue; @@ -113848,16 +115665,13 @@ SQLITE_PRIVATE void sqlite3Pragma( /* Verify that an index entry exists for the current table row */ jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1, pIdx->nColumn); VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */ sqlite3VdbeLoadString(v, 3, "row "); sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); sqlite3VdbeLoadString(v, 4, " missing from index "); sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); jmp5 = sqlite3VdbeLoadString(v, 4, pIdx->zName); sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); - sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1); - jmp4 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v); - sqlite3VdbeAddOp0(v, OP_Halt); + jmp4 = integrityCheckResultRow(v, 3); sqlite3VdbeJumpHere(v, jmp2); /* For UNIQUE indexes, verify that only one entry exists with the ** current key. The entry is unique if (1) any column is NULL @@ -113878,7 +115692,6 @@ SQLITE_PRIVATE void sqlite3Pragma( sqlite3VdbeJumpHere(v, jmp6); sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1, pIdx->nKeyCol); VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */ sqlite3VdbeLoadString(v, 3, "non-unique entry in index "); sqlite3VdbeGoto(v, jmp5); sqlite3VdbeResolveLabel(v, uniqOk); @@ -113889,19 +115702,18 @@ SQLITE_PRIVATE void sqlite3Pragma( sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v); sqlite3VdbeJumpHere(v, loopTop-1); #ifndef SQLITE_OMIT_BTREECOUNT - sqlite3VdbeLoadString(v, 2, "wrong # of entries in index "); - for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - if( pPk==pIdx ) continue; - addr = sqlite3VdbeCurrentAddr(v); - sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr+2); VdbeCoverage(v); - sqlite3VdbeAddOp2(v, OP_Halt, 0, 0); - sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3); - sqlite3VdbeAddOp3(v, OP_Eq, 8+j, addr+8, 3); VdbeCoverage(v); - sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); - sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); - sqlite3VdbeLoadString(v, 3, pIdx->zName); - sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7); - sqlite3VdbeAddOp2(v, OP_ResultRow, 7, 1); + if( !isQuick ){ + sqlite3VdbeLoadString(v, 2, "wrong # of entries in index "); + for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ + if( pPk==pIdx ) continue; + sqlite3VdbeAddOp2(v, OP_Count, iIdxCur+j, 3); + addr = sqlite3VdbeAddOp3(v, OP_Eq, 8+j, 0, 3); VdbeCoverage(v); + sqlite3VdbeChangeP5(v, SQLITE_NOTNULL); + sqlite3VdbeLoadString(v, 3, pIdx->zName); + sqlite3VdbeAddOp3(v, OP_Concat, 3, 2, 7); + integrityCheckResultRow(v, 7); + sqlite3VdbeJumpHere(v, addr); + } } #endif /* SQLITE_OMIT_BTREECOUNT */ } @@ -113910,7 +115722,7 @@ SQLITE_PRIVATE void sqlite3Pragma( static const int iLn = VDBE_OFFSET_LINENO(2); static const VdbeOpList endCode[] = { { OP_AddImm, 1, 0, 0}, /* 0 */ - { OP_If, 1, 4, 0}, /* 1 */ + { OP_IfNotZero, 1, 4, 0}, /* 1 */ { OP_String8, 0, 3, 0}, /* 2 */ { OP_ResultRow, 3, 1, 0}, /* 3 */ }; @@ -113918,7 +115730,7 @@ SQLITE_PRIVATE void sqlite3Pragma( aOp = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode, iLn); if( aOp ){ - aOp[0].p2 = -mxErr; + aOp[0].p2 = 1-mxErr; aOp[2].p4type = P4_STATIC; aOp[2].p4.z = "ok"; } @@ -114143,6 +115955,119 @@ SQLITE_PRIVATE void sqlite3Pragma( break; } + /* + ** PRAGMA optimize + ** PRAGMA optimize(MASK) + ** PRAGMA schema.optimize + ** PRAGMA schema.optimize(MASK) + ** + ** Attempt to optimize the database. All schemas are optimized in the first + ** two forms, and only the specified schema is optimized in the latter two. + ** + ** The details of optimizations performed by this pragma are expected + ** to change and improve over time. Applications should anticipate that + ** this pragma will perform new optimizations in future releases. + ** + ** The optional argument is a bitmask of optimizations to perform: + ** + ** 0x0001 Debugging mode. Do not actually perform any optimizations + ** but instead return one line of text for each optimization + ** that would have been done. Off by default. + ** + ** 0x0002 Run ANALYZE on tables that might benefit. On by default. + ** See below for additional information. + ** + ** 0x0004 (Not yet implemented) Record usage and performance + ** information from the current session in the + ** database file so that it will be available to "optimize" + ** pragmas run by future database connections. + ** + ** 0x0008 (Not yet implemented) Create indexes that might have + ** been helpful to recent queries + ** + ** The default MASK is and always shall be 0xfffe. 0xfffe means perform all + ** of the optimizations listed above except Debug Mode, including new + ** optimizations that have not yet been invented. If new optimizations are + ** ever added that should be off by default, those off-by-default + ** optimizations will have bitmasks of 0x10000 or larger. + ** + ** DETERMINATION OF WHEN TO RUN ANALYZE + ** + ** In the current implementation, a table is analyzed if only if all of + ** the following are true: + ** + ** (1) MASK bit 0x02 is set. + ** + ** (2) The query planner used sqlite_stat1-style statistics for one or + ** more indexes of the table at some point during the lifetime of + ** the current connection. + ** + ** (3) One or more indexes of the table are currently unanalyzed OR + ** the number of rows in the table has increased by 25 times or more + ** since the last time ANALYZE was run. + ** + ** The rules for when tables are analyzed are likely to change in + ** future releases. + */ + case PragTyp_OPTIMIZE: { + int iDbLast; /* Loop termination point for the schema loop */ + int iTabCur; /* Cursor for a table whose size needs checking */ + HashElem *k; /* Loop over tables of a schema */ + Schema *pSchema; /* The current schema */ + Table *pTab; /* A table in the schema */ + Index *pIdx; /* An index of the table */ + LogEst szThreshold; /* Size threshold above which reanalysis is needd */ + char *zSubSql; /* SQL statement for the OP_SqlExec opcode */ + u32 opMask; /* Mask of operations to perform */ + + if( zRight ){ + opMask = (u32)sqlite3Atoi(zRight); + if( (opMask & 0x02)==0 ) break; + }else{ + opMask = 0xfffe; + } + iTabCur = pParse->nTab++; + for(iDbLast = zDb?iDb:db->nDb-1; iDb<=iDbLast; iDb++){ + if( iDb==1 ) continue; + sqlite3CodeVerifySchema(pParse, iDb); + pSchema = db->aDb[iDb].pSchema; + for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ + pTab = (Table*)sqliteHashData(k); + + /* If table pTab has not been used in a way that would benefit from + ** having analysis statistics during the current session, then skip it. + ** This also has the effect of skipping virtual tables and views */ + if( (pTab->tabFlags & TF_StatsUsed)==0 ) continue; + + /* Reanalyze if the table is 25 times larger than the last analysis */ + szThreshold = pTab->nRowLogEst + 46; assert( sqlite3LogEst(25)==46 ); + for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( !pIdx->hasStat1 ){ + szThreshold = 0; /* Always analyze if any index lacks statistics */ + break; + } + } + if( szThreshold ){ + sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead); + sqlite3VdbeAddOp3(v, OP_IfSmaller, iTabCur, + sqlite3VdbeCurrentAddr(v)+2+(opMask&1), szThreshold); + VdbeCoverage(v); + } + zSubSql = sqlite3MPrintf(db, "ANALYZE \"%w\".\"%w\"", + db->aDb[iDb].zDbSName, pTab->zName); + if( opMask & 0x01 ){ + int r1 = sqlite3GetTempReg(pParse); + sqlite3VdbeAddOp4(v, OP_String8, 0, r1, 0, zSubSql, P4_DYNAMIC); + sqlite3VdbeAddOp2(v, OP_ResultRow, r1, 1); + }else{ + sqlite3VdbeAddOp4(v, OP_SqlExec, 0, 0, 0, zSubSql, P4_DYNAMIC); + } + } + } + sqlite3VdbeAddOp0(v, OP_Expire); + break; + } + /* ** PRAGMA busy_timeout ** PRAGMA busy_timeout = N @@ -114223,7 +116148,6 @@ SQLITE_PRIVATE void sqlite3Pragma( zState = azLockName[j]; } sqlite3VdbeMultiLoad(v, 1, "ss", db->aDb[i].zDbSName, zState); - sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2); } break; } @@ -114274,6 +116198,15 @@ SQLITE_PRIVATE void sqlite3Pragma( } /* End of the PRAGMA switch */ + /* The following block is a no-op unless SQLITE_DEBUG is defined. Its only + ** purpose is to execute assert() statements to verify that if the + ** PragFlg_NoColumns1 flag is set and the caller specified an argument + ** to the PRAGMA, the implementation has not added any OP_ResultRow + ** instructions to the VM. */ + if( (pPragma->mPragFlg & PragFlg_NoColumns1) && zRight ){ + sqlite3VdbeVerifyNoResultRow(v); + } + pragma_out: sqlite3DbFree(db, zLeft); sqlite3DbFree(db, zRight); @@ -114480,10 +116413,14 @@ static int pragmaVtabFilter( pragmaVtabCursorClear(pCsr); j = (pTab->pName->mPragFlg & PragFlg_Result1)!=0 ? 0 : 1; for(i=0; iazArg) ); - pCsr->azArg[j] = sqlite3_mprintf("%s", sqlite3_value_text(argv[i])); - if( pCsr->azArg[j]==0 ){ - return SQLITE_NOMEM; + assert( pCsr->azArg[j]==0 ); + if( zText ){ + pCsr->azArg[j] = sqlite3_mprintf("%s", zText); + if( pCsr->azArg[j]==0 ){ + return SQLITE_NOMEM; + } } } sqlite3StrAccumInit(&acc, 0, 0, 0, pTab->db->aLimit[SQLITE_LIMIT_SQL_LENGTH]); @@ -114616,7 +116553,7 @@ static void corruptSchema( const char *zExtra /* Error information */ ){ sqlite3 *db = pData->db; - if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){ + if( !db->mallocFailed && (db->flags & SQLITE_WriteSchema)==0 ){ char *z; if( zObj==0 ) zObj = "?"; z = sqlite3MPrintf(db, "malformed database schema (%s)", zObj); @@ -114903,8 +116840,8 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ rc = SQLITE_NOMEM_BKPT; sqlite3ResetAllSchemasOfConnection(db); } - if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){ - /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider + if( rc==SQLITE_OK || (db->flags&SQLITE_WriteSchema)){ + /* Black magic: If the SQLITE_WriteSchema flag is set, then consider ** the schema loaded, even if errors occurred. In this situation the ** current sqlite3_prepare() operation will fail, but the following one ** will attempt to compile the supplied statement against whatever subset @@ -115104,7 +117041,7 @@ static int sqlite3Prepare( sqlite3 *db, /* Database handle. */ const char *zSql, /* UTF-8 encoded SQL statement. */ int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ Vdbe *pReprepare, /* VM being reprepared */ sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ const char **pzTail /* OUT: End of parsed string */ @@ -115121,6 +117058,14 @@ static int sqlite3Prepare( /* assert( !db->mallocFailed ); // not true with SQLITE_USE_ALLOCA */ assert( sqlite3_mutex_held(db->mutex) ); + /* For a long-term use prepared statement avoid the use of + ** lookaside memory. + */ + if( prepFlags & SQLITE_PREPARE_PERSISTENT ){ + sParse.disableLookaside++; + db->lookaside.bDisable++; + } + /* Check to verify that it is possible to get a read lock on all ** database schemas. The inability to get a read lock indicates that ** some other database connection is holding a write-lock, which in @@ -115152,7 +117097,7 @@ static int sqlite3Prepare( if( rc ){ const char *zDb = db->aDb[i].zDbSName; sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb); - testcase( db->flags & SQLITE_ReadUncommitted ); + testcase( db->flags & SQLITE_ReadUncommit ); goto end_prepare; } } @@ -115220,8 +117165,7 @@ static int sqlite3Prepare( #endif if( db->init.busy==0 ){ - Vdbe *pVdbe = sParse.pVdbe; - sqlite3VdbeSetSql(pVdbe, zSql, (int)(sParse.zTail-zSql), saveSqlFlag); + sqlite3VdbeSetSql(sParse.pVdbe, zSql, (int)(sParse.zTail-zSql), prepFlags); } if( sParse.pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){ sqlite3VdbeFinalize(sParse.pVdbe); @@ -115255,7 +117199,7 @@ static int sqlite3LockAndPrepare( sqlite3 *db, /* Database handle. */ const char *zSql, /* UTF-8 encoded SQL statement. */ int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ Vdbe *pOld, /* VM being reprepared */ sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ const char **pzTail /* OUT: End of parsed string */ @@ -115271,10 +117215,10 @@ static int sqlite3LockAndPrepare( } sqlite3_mutex_enter(db->mutex); sqlite3BtreeEnterAll(db); - rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); + rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); if( rc==SQLITE_SCHEMA ){ sqlite3_finalize(*ppStmt); - rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail); + rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); } sqlite3BtreeLeaveAll(db); sqlite3_mutex_leave(db->mutex); @@ -115295,13 +117239,15 @@ SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){ sqlite3_stmt *pNew; const char *zSql; sqlite3 *db; + u8 prepFlags; assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) ); zSql = sqlite3_sql((sqlite3_stmt *)p); assert( zSql!=0 ); /* Reprepare only called for prepare_v2() statements */ db = sqlite3VdbeDb(p); assert( sqlite3_mutex_held(db->mutex) ); - rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0); + prepFlags = sqlite3VdbePrepareFlags(p); + rc = sqlite3LockAndPrepare(db, zSql, -1, prepFlags, p, &pNew, 0); if( rc ){ if( rc==SQLITE_NOMEM ){ sqlite3OomFault(db); @@ -115347,8 +117293,36 @@ SQLITE_API int sqlite3_prepare_v2( const char **pzTail /* OUT: End of parsed string */ ){ int rc; - rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail); - assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + /* EVIDENCE-OF: R-37923-12173 The sqlite3_prepare_v2() interface works + ** exactly the same as sqlite3_prepare_v3() with a zero prepFlags + ** parameter. + ** + ** Proof in that the 5th parameter to sqlite3LockAndPrepare is 0 */ + rc = sqlite3LockAndPrepare(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,0, + ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); + return rc; +} +SQLITE_API int sqlite3_prepare_v3( + sqlite3 *db, /* Database handle. */ + const char *zSql, /* UTF-8 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const char **pzTail /* OUT: End of parsed string */ +){ + int rc; + /* EVIDENCE-OF: R-56861-42673 sqlite3_prepare_v3() differs from + ** sqlite3_prepare_v2() only in having the extra prepFlags parameter, + ** which is a bit array consisting of zero or more of the + ** SQLITE_PREPARE_* flags. + ** + ** Proof by comparison to the implementation of sqlite3_prepare_v2() + ** directly above. */ + rc = sqlite3LockAndPrepare(db,zSql,nBytes, + SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK), + 0,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); return rc; } @@ -115361,7 +117335,7 @@ static int sqlite3Prepare16( sqlite3 *db, /* Database handle. */ const void *zSql, /* UTF-16 encoded SQL statement. */ int nBytes, /* Length of zSql in bytes. */ - int saveSqlFlag, /* True to save SQL text into the sqlite3_stmt */ + u32 prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ const void **pzTail /* OUT: End of parsed string */ ){ @@ -115389,7 +117363,7 @@ static int sqlite3Prepare16( sqlite3_mutex_enter(db->mutex); zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE); if( zSql8 ){ - rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8); + rc = sqlite3LockAndPrepare(db, zSql8, -1, prepFlags, 0, ppStmt, &zTail8); } if( zTail8 && pzTail ){ @@ -115435,7 +117409,22 @@ SQLITE_API int sqlite3_prepare16_v2( const void **pzTail /* OUT: End of parsed string */ ){ int rc; - rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail); + rc = sqlite3Prepare16(db,zSql,nBytes,SQLITE_PREPARE_SAVESQL,ppStmt,pzTail); + assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ + return rc; +} +SQLITE_API int sqlite3_prepare16_v3( + sqlite3 *db, /* Database handle. */ + const void *zSql, /* UTF-16 encoded SQL statement. */ + int nBytes, /* Length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_* flags */ + sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */ + const void **pzTail /* OUT: End of parsed string */ +){ + int rc; + rc = sqlite3Prepare16(db,zSql,nBytes, + SQLITE_PREPARE_SAVESQL|(prepFlags&SQLITE_PREPARE_MASK), + ppStmt,pzTail); assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */ return rc; } @@ -115522,7 +117511,7 @@ static void clearSelect(sqlite3 *db, Select *p, int bFree){ sqlite3ExprDelete(db, p->pLimit); sqlite3ExprDelete(db, p->pOffset); if( p->pWith ) sqlite3WithDelete(db, p->pWith); - if( bFree ) sqlite3DbFree(db, p); + if( bFree ) sqlite3DbFreeNN(db, p); p = pPrior; bFree = 1; } @@ -115558,14 +117547,13 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( ){ Select *pNew; Select standin; - sqlite3 *db = pParse->db; - pNew = sqlite3DbMallocRawNN(db, sizeof(*pNew) ); + pNew = sqlite3DbMallocRawNN(pParse->db, sizeof(*pNew) ); if( pNew==0 ){ - assert( db->mallocFailed ); + assert( pParse->db->mallocFailed ); pNew = &standin; } if( pEList==0 ){ - pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ASTERISK,0)); + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(pParse->db,TK_ASTERISK,0)); } pNew->pEList = pEList; pNew->op = TK_SELECT; @@ -115578,7 +117566,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( pNew->addrOpenEphm[0] = -1; pNew->addrOpenEphm[1] = -1; pNew->nSelectRow = 0; - if( pSrc==0 ) pSrc = sqlite3DbMallocZero(db, sizeof(*pSrc)); + if( pSrc==0 ) pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*pSrc)); pNew->pSrc = pSrc; pNew->pWhere = pWhere; pNew->pGroupBy = pGroupBy; @@ -115589,9 +117577,9 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( pNew->pLimit = pLimit; pNew->pOffset = pOffset; pNew->pWith = 0; - assert( pOffset==0 || pLimit!=0 || pParse->nErr>0 || db->mallocFailed!=0 ); - if( db->mallocFailed ) { - clearSelect(db, pNew, pNew!=&standin); + assert( pOffset==0 || pLimit!=0 || pParse->nErr>0 || pParse->db->mallocFailed!=0 ); + if( pParse->db->mallocFailed ) { + clearSelect(pParse->db, pNew, pNew!=&standin); pNew = 0; }else{ assert( pNew->pSrc!=0 || pParse->nErr>0 ); @@ -116103,6 +118091,7 @@ static void codeDistinct( sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N); VdbeCoverage(v); sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iTab, r1, iMem, N); + sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); sqlite3ReleaseTempReg(pParse, r1); } @@ -116188,8 +118177,7 @@ static void selectInnerLoop( }else{ ecelFlags = 0; } - assert( eDest!=SRT_Table || pSort==0 ); - if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab ){ + if( pSort && hasDistinct==0 && eDest!=SRT_EphemTab && eDest!=SRT_Table ){ /* For each expression in pEList that is a copy of an expression in ** the ORDER BY clause (pSort->pOrderBy), set the associated ** iOrderByCol value to one more than the index of the ORDER BY @@ -116478,7 +118466,7 @@ static void selectInnerLoop( ** X extra columns. */ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoAlloc(sqlite3 *db, int N, int X){ - int nExtra = (N+X)*(sizeof(CollSeq*)+1); + int nExtra = (N+X)*(sizeof(CollSeq*)+1) - sizeof(CollSeq*); KeyInfo *p = sqlite3DbMallocRawNN(db, sizeof(KeyInfo) + nExtra); if( p ){ p->aSortOrder = (u8*)&p->aColl[N+X]; @@ -116501,7 +118489,7 @@ SQLITE_PRIVATE void sqlite3KeyInfoUnref(KeyInfo *p){ if( p ){ assert( p->nRef>0 ); p->nRef--; - if( p->nRef==0 ) sqlite3DbFree(p->db, p); + if( p->nRef==0 ) sqlite3DbFreeNN(p->db, p); } } @@ -116731,6 +118719,7 @@ static void generateSortTail( VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan)); } switch( eDest ){ + case SRT_Table: case SRT_EphemTab: { sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid); sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid); @@ -116884,13 +118873,10 @@ static const char *columnTypeImpl( ** of the SELECT statement. Return the declaration type and origin ** data for the result-set column of the sub-select. */ - if( iCol>=0 && ALWAYS(iColpEList->nExpr) ){ + if( iCol>=0 && iColpEList->nExpr ){ /* If iCol is less than zero, then the expression requests the ** rowid of the sub-select or view. This expression is legal (see ** test case misc2.2.2) - it always evaluates to NULL. - ** - ** The ALWAYS() is because iCol>=pS->pEList->nExpr will have been - ** caught already by name resolution. */ NameContext sNC; Expr *p = pS->pEList->a[iCol].pExpr; @@ -116975,6 +118961,7 @@ static void generateColumnTypes( NameContext sNC; sNC.pSrcList = pTabList; sNC.pParse = pParse; + sNC.pNext = 0; for(i=0; inExpr; i++){ Expr *p = pEList->a[i].pExpr; const char *zType; @@ -116999,20 +118986,49 @@ static void generateColumnTypes( #endif /* !defined(SQLITE_OMIT_DECLTYPE) */ } + /* -** Generate code that will tell the VDBE the names of columns -** in the result set. This information is used to provide the -** azCol[] values in the callback. +** Compute the column names for a SELECT statement. +** +** The only guarantee that SQLite makes about column names is that if the +** column has an AS clause assigning it a name, that will be the name used. +** That is the only documented guarantee. However, countless applications +** developed over the years have made baseless assumptions about column names +** and will break if those assumptions changes. Hence, use extreme caution +** when modifying this routine to avoid breaking legacy. +** +** See Also: sqlite3ColumnsFromExprList() +** +** The PRAGMA short_column_names and PRAGMA full_column_names settings are +** deprecated. The default setting is short=ON, full=OFF. 99.9% of all +** applications should operate this way. Nevertheless, we need to support the +** other modes for legacy: +** +** short=OFF, full=OFF: Column name is the text of the expression has it +** originally appears in the SELECT statement. In +** other words, the zSpan of the result expression. +** +** short=ON, full=OFF: (This is the default setting). If the result +** refers directly to a table column, then the result +** column name is just the table column name: COLUMN. +** Otherwise use zSpan. +** +** full=ON, short=ANY: If the result refers directly to a table column, +** then the result column name with the table name +** prefix, ex: TABLE.COLUMN. Otherwise use zSpan. */ static void generateColumnNames( Parse *pParse, /* Parser context */ - SrcList *pTabList, /* List of tables */ - ExprList *pEList /* Expressions defining the result set */ + Select *pSelect /* Generate column names for this SELECT statement */ ){ Vdbe *v = pParse->pVdbe; - int i, j; + int i; + Table *pTab; + SrcList *pTabList; + ExprList *pEList; sqlite3 *db = pParse->db; - int fullNames, shortNames; + int fullName; /* TABLE.COLUMN if no AS clause and is a direct table ref */ + int srcName; /* COLUMN or TABLE.COLUMN if no AS clause and is direct */ #ifndef SQLITE_OMIT_EXPLAIN /* If this is an EXPLAIN, skip this step */ @@ -117022,28 +119038,29 @@ static void generateColumnNames( #endif if( pParse->colNamesSet || db->mallocFailed ) return; + /* Column names are determined by the left-most term of a compound select */ + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + pTabList = pSelect->pSrc; + pEList = pSelect->pEList; assert( v!=0 ); assert( pTabList!=0 ); pParse->colNamesSet = 1; - fullNames = (db->flags & SQLITE_FullColNames)!=0; - shortNames = (db->flags & SQLITE_ShortColNames)!=0; + fullName = (db->flags & SQLITE_FullColNames)!=0; + srcName = (db->flags & SQLITE_ShortColNames)!=0 || fullName; sqlite3VdbeSetNumCols(v, pEList->nExpr); for(i=0; inExpr; i++){ - Expr *p; - p = pEList->a[i].pExpr; - if( NEVER(p==0) ) continue; + Expr *p = pEList->a[i].pExpr; + + assert( p!=0 ); if( pEList->a[i].zName ){ + /* An AS clause always takes first priority */ char *zName = pEList->a[i].zName; sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT); - }else if( p->op==TK_COLUMN || p->op==TK_AGG_COLUMN ){ - Table *pTab; + }else if( srcName && p->op==TK_COLUMN ){ char *zCol; int iCol = p->iColumn; - for(j=0; ALWAYS(jnSrc); j++){ - if( pTabList->a[j].iCursor==p->iTable ) break; - } - assert( jnSrc ); - pTab = pTabList->a[j].pTab; + pTab = p->pTab; + assert( pTab!=0 ); if( iCol<0 ) iCol = pTab->iPKey; assert( iCol==-1 || (iCol>=0 && iColnCol) ); if( iCol<0 ){ @@ -117051,10 +119068,7 @@ static void generateColumnNames( }else{ zCol = pTab->aCol[iCol].zName; } - if( !shortNames && !fullNames ){ - sqlite3VdbeSetColName(v, i, COLNAME_NAME, - sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC); - }else if( fullNames ){ + if( fullName ){ char *zName = 0; zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol); sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC); @@ -117082,6 +119096,15 @@ static void generateColumnNames( ** ** Return SQLITE_OK on success. If a memory allocation error occurs, ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM. +** +** The only guarantee that SQLite makes about column names is that if the +** column has an AS clause assigning it a name, that will be the name used. +** That is the only documented guarantee. However, countless applications +** developed over the years have made baseless assumptions about column names +** and will break if those assumptions changes. Hence, use extreme caution +** when modifying this routine to avoid breaking legacy. +** +** See Also: generateColumnNames() */ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( Parse *pParse, /* Parsing context */ @@ -117094,7 +119117,6 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( u32 cnt; /* Index added to make the name unique */ Column *aCol, *pCol; /* For looping over result columns */ int nCol; /* Number of columns in the result set */ - Expr *p; /* Expression for a single result column */ char *zName; /* Column name */ int nName; /* Size of name in zName[] */ Hash ht; /* Hash table of column names */ @@ -117115,20 +119137,18 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( for(i=0, pCol=aCol; imallocFailed; i++, pCol++){ /* Get an appropriate name for the column */ - p = sqlite3ExprSkipCollate(pEList->a[i].pExpr); if( (zName = pEList->a[i].zName)!=0 ){ /* If the column contains an "AS " phrase, use as the name */ }else{ - Expr *pColExpr = p; /* The expression that is the result column name */ - Table *pTab; /* Table associated with this expression */ + Expr *pColExpr = sqlite3ExprSkipCollate(pEList->a[i].pExpr); while( pColExpr->op==TK_DOT ){ pColExpr = pColExpr->pRight; assert( pColExpr!=0 ); } - if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){ + if( pColExpr->op==TK_COLUMN && pColExpr->pTab!=0 ){ /* For columns use the column name name */ int iCol = pColExpr->iColumn; - pTab = pColExpr->pTab; + Table *pTab = pColExpr->pTab; if( iCol<0 ) iCol = pTab->iPKey; zName = iCol>=0 ? pTab->aCol[iCol].zName : "rowid"; }else if( pColExpr->op==TK_ID ){ @@ -117139,7 +119159,11 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( zName = pEList->a[i].zSpan; } } - zName = sqlite3MPrintf(db, "%s", zName); + if( zName ){ + zName = sqlite3DbStrDup(db, zName); + }else{ + zName = sqlite3MPrintf(db,"column%d",i+1); + } /* Make sure the column name is unique. If the name is not unique, ** append an integer to the name so that it becomes unique. @@ -117868,11 +119892,6 @@ static int multiSelect( if( dest.eDest!=priorOp ){ int iCont, iBreak, iStart; assert( p->pEList ); - if( dest.eDest==SRT_Output ){ - Select *pFirst = p; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, pFirst->pSrc, pFirst->pEList); - } iBreak = sqlite3VdbeMakeLabel(v); iCont = sqlite3VdbeMakeLabel(v); computeLimitRegisters(pParse, p, iBreak); @@ -117943,11 +119962,6 @@ static int multiSelect( ** tables. */ assert( p->pEList ); - if( dest.eDest==SRT_Output ){ - Select *pFirst = p; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, pFirst->pSrc, pFirst->pEList); - } iBreak = sqlite3VdbeMakeLabel(v); iCont = sqlite3VdbeMakeLabel(v); computeLimitRegisters(pParse, p, iBreak); @@ -118345,7 +120359,7 @@ static int multiSelectOrderBy( if( pNew==0 ) return SQLITE_NOMEM_BKPT; pNew->flags |= EP_IntValue; pNew->u.iValue = i; - pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); + p->pOrderBy = pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew); if( pOrderBy ) pOrderBy->a[nOrderBy++].u.x.iOrderByCol = (u16)i; } } @@ -118555,14 +120569,6 @@ static int multiSelectOrderBy( */ sqlite3VdbeResolveLabel(v, labelEnd); - /* Set the number of output columns - */ - if( pDest->eDest==SRT_Output ){ - Select *pFirst = pPrior; - while( pFirst->pPrior ) pFirst = pFirst->pPrior; - generateColumnNames(pParse, pFirst->pSrc, pFirst->pEList); - } - /* Reassembly the compound query so that it will be freed correctly ** by the calling function */ if( p->pPrior ){ @@ -118579,9 +120585,24 @@ static int multiSelectOrderBy( #endif #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + +/* An instance of the SubstContext object describes an substitution edit +** to be performed on a parse tree. +** +** All references to columns in table iTable are to be replaced by corresponding +** expressions in pEList. +*/ +typedef struct SubstContext { + Parse *pParse; /* The parsing context */ + int iTable; /* Replace references to this table */ + int iNewTable; /* New table number */ + int isLeftJoin; /* Add TK_IF_NULL_ROW opcodes on each replacement */ + ExprList *pEList; /* Replacement expressions */ +} SubstContext; + /* Forward Declarations */ -static void substExprList(Parse*, ExprList*, int, ExprList*); -static void substSelect(Parse*, Select *, int, ExprList*, int); +static void substExprList(SubstContext*, ExprList*); +static void substSelect(SubstContext*, Select*, int); /* ** Scan through the expression pExpr. Replace every reference to @@ -118592,84 +120613,95 @@ static void substSelect(Parse*, Select *, int, ExprList*, int); ** This routine is part of the flattening procedure. A subquery ** whose result set is defined by pEList appears as entry in the ** FROM clause of a SELECT such that the VDBE cursor assigned to that -** FORM clause entry is iTable. This routine make the necessary +** FORM clause entry is iTable. This routine makes the necessary ** changes to pExpr so that it refers directly to the source table ** of the subquery rather the result set of the subquery. */ static Expr *substExpr( - Parse *pParse, /* Report errors here */ - Expr *pExpr, /* Expr in which substitution occurs */ - int iTable, /* Table to be substituted */ - ExprList *pEList /* Substitute expressions */ + SubstContext *pSubst, /* Description of the substitution */ + Expr *pExpr /* Expr in which substitution occurs */ ){ - sqlite3 *db = pParse->db; if( pExpr==0 ) return 0; - if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){ + if( ExprHasProperty(pExpr, EP_FromJoin) && pExpr->iRightJoinTable==pSubst->iTable ){ + pExpr->iRightJoinTable = pSubst->iNewTable; + } + if( pExpr->op==TK_COLUMN && pExpr->iTable==pSubst->iTable ){ if( pExpr->iColumn<0 ){ pExpr->op = TK_NULL; }else{ Expr *pNew; - Expr *pCopy = pEList->a[pExpr->iColumn].pExpr; - assert( pEList!=0 && pExpr->iColumnnExpr ); + Expr *pCopy = pSubst->pEList->a[pExpr->iColumn].pExpr; + Expr ifNullRow; + assert( pSubst->pEList!=0 && pExpr->iColumnpEList->nExpr ); assert( pExpr->pLeft==0 && pExpr->pRight==0 ); if( sqlite3ExprIsVector(pCopy) ){ - sqlite3VectorErrorMsg(pParse, pCopy); + sqlite3VectorErrorMsg(pSubst->pParse, pCopy); }else{ + sqlite3 *db = pSubst->pParse->db; + if( pSubst->isLeftJoin && pCopy->op!=TK_COLUMN ){ + memset(&ifNullRow, 0, sizeof(ifNullRow)); + ifNullRow.op = TK_IF_NULL_ROW; + ifNullRow.pLeft = pCopy; + ifNullRow.iTable = pSubst->iNewTable; + pCopy = &ifNullRow; + } pNew = sqlite3ExprDup(db, pCopy, 0); - if( pNew && (pExpr->flags & EP_FromJoin) ){ + if( pNew && pSubst->isLeftJoin ){ + ExprSetProperty(pNew, EP_CanBeNull); + } + if( pNew && ExprHasProperty(pExpr,EP_FromJoin) ){ pNew->iRightJoinTable = pExpr->iRightJoinTable; - pNew->flags |= EP_FromJoin; + ExprSetProperty(pNew, EP_FromJoin); } sqlite3ExprDelete(db, pExpr); pExpr = pNew; } } }else{ - pExpr->pLeft = substExpr(pParse, pExpr->pLeft, iTable, pEList); - pExpr->pRight = substExpr(pParse, pExpr->pRight, iTable, pEList); + if( pExpr->op==TK_IF_NULL_ROW && pExpr->iTable==pSubst->iTable ){ + pExpr->iTable = pSubst->iNewTable; + } + pExpr->pLeft = substExpr(pSubst, pExpr->pLeft); + pExpr->pRight = substExpr(pSubst, pExpr->pRight); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ - substSelect(pParse, pExpr->x.pSelect, iTable, pEList, 1); + substSelect(pSubst, pExpr->x.pSelect, 1); }else{ - substExprList(pParse, pExpr->x.pList, iTable, pEList); + substExprList(pSubst, pExpr->x.pList); } } return pExpr; } static void substExprList( - Parse *pParse, /* Report errors here */ - ExprList *pList, /* List to scan and in which to make substitutes */ - int iTable, /* Table to be substituted */ - ExprList *pEList /* Substitute values */ + SubstContext *pSubst, /* Description of the substitution */ + ExprList *pList /* List to scan and in which to make substitutes */ ){ int i; if( pList==0 ) return; for(i=0; inExpr; i++){ - pList->a[i].pExpr = substExpr(pParse, pList->a[i].pExpr, iTable, pEList); + pList->a[i].pExpr = substExpr(pSubst, pList->a[i].pExpr); } } static void substSelect( - Parse *pParse, /* Report errors here */ - Select *p, /* SELECT statement in which to make substitutions */ - int iTable, /* Table to be replaced */ - ExprList *pEList, /* Substitute values */ - int doPrior /* Do substitutes on p->pPrior too */ + SubstContext *pSubst, /* Description of the substitution */ + Select *p, /* SELECT statement in which to make substitutions */ + int doPrior /* Do substitutes on p->pPrior too */ ){ SrcList *pSrc; struct SrcList_item *pItem; int i; if( !p ) return; do{ - substExprList(pParse, p->pEList, iTable, pEList); - substExprList(pParse, p->pGroupBy, iTable, pEList); - substExprList(pParse, p->pOrderBy, iTable, pEList); - p->pHaving = substExpr(pParse, p->pHaving, iTable, pEList); - p->pWhere = substExpr(pParse, p->pWhere, iTable, pEList); + substExprList(pSubst, p->pEList); + substExprList(pSubst, p->pGroupBy); + substExprList(pSubst, p->pOrderBy); + p->pHaving = substExpr(pSubst, p->pHaving); + p->pWhere = substExpr(pSubst, p->pWhere); pSrc = p->pSrc; assert( pSrc!=0 ); for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ - substSelect(pParse, pItem->pSelect, iTable, pEList, 1); + substSelect(pSubst, pItem->pSelect, 1); if( pItem->fg.isTabFunc ){ - substExprList(pParse, pItem->u1.pFuncArg, iTable, pEList); + substExprList(pSubst, pItem->u1.pFuncArg); } } }while( doPrior && (p = p->pPrior)!=0 ); @@ -118712,8 +120744,10 @@ static void substSelect( ** FROM-clause subquery that is a candidate for flattening. (2b is ** due to ticket [2f7170d73bf9abf80] from 2015-02-09.) ** -** (3) The subquery is not the right operand of a left outer join -** (Originally ticket #306. Strengthened by ticket #3300) +** (3) The subquery is not the right operand of a LEFT JOIN +** or (a) the subquery is not itself a join and (b) the FROM clause +** of the subquery does not contain a virtual table and (c) the +** outer query is not an aggregate. ** ** (4) The subquery is not DISTINCT. ** @@ -118725,7 +120759,7 @@ static void substSelect( ** DISTINCT. ** ** (7) The subquery has a FROM clause. TODO: For subqueries without -** A FROM clause, consider adding a FROM close with the special +** A FROM clause, consider adding a FROM clause with the special ** table sqlite_once that consists of a single row containing a ** single NULL. ** @@ -118829,8 +120863,9 @@ static int flattenSubquery( Select *pSub1; /* Pointer to the rightmost select in sub-query */ SrcList *pSrc; /* The FROM clause of the outer query */ SrcList *pSubSrc; /* The FROM clause of the subquery */ - ExprList *pList; /* The result set of the outer query */ int iParent; /* VDBE cursor number of the pSub result set temp table */ + int iNewParent = -1;/* Replacement table for iParent */ + int isLeftJoin = 0; /* True if pSub is the right side of a LEFT JOIN */ int i; /* Loop counter */ Expr *pWhere; /* The WHERE clause */ struct SrcList_item *pSubitem; /* The subquery */ @@ -118857,7 +120892,7 @@ static int flattenSubquery( return 0; /* Restriction (2b) */ } } - + pSubSrc = pSub->pSrc; assert( pSubSrc ); /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants, @@ -118895,10 +120930,9 @@ static int flattenSubquery( return 0; /* Restriction (23) */ } - /* OBSOLETE COMMENT 1: - ** Restriction 3: If the subquery is a join, make sure the subquery is - ** not used as the right operand of an outer join. Examples of why this - ** is not allowed: + /* + ** If the subquery is the right operand of a LEFT JOIN, then the + ** subquery may not be a join itself. Example of why this is not allowed: ** ** t1 LEFT OUTER JOIN (t2 JOIN t3) ** @@ -118908,28 +120942,27 @@ static int flattenSubquery( ** ** which is not at all the same thing. ** - ** OBSOLETE COMMENT 2: - ** Restriction 12: If the subquery is the right operand of a left outer - ** join, make sure the subquery has no WHERE clause. - ** An examples of why this is not allowed: + ** If the subquery is the right operand of a LEFT JOIN, then the outer + ** query cannot be an aggregate. This is an artifact of the way aggregates + ** are processed - there is no mechanism to determine if the LEFT JOIN + ** table should be all-NULL. ** - ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0) - ** - ** If we flatten the above, we would get - ** - ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0 - ** - ** But the t2.x>0 test will always fail on a NULL row of t2, which - ** effectively converts the OUTER JOIN into an INNER JOIN. - ** - ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE: - ** Ticket #3300 shows that flattening the right term of a LEFT JOIN - ** is fraught with danger. Best to avoid the whole thing. If the - ** subquery is the right term of a LEFT JOIN, then do not flatten. + ** See also tickets #306, #350, and #3300. */ if( (pSubitem->fg.jointype & JT_OUTER)!=0 ){ - return 0; + isLeftJoin = 1; + if( pSubSrc->nSrc>1 || isAgg || IsVirtual(pSubSrc->a[0].pTab) ){ + return 0; /* Restriction (3) */ + } } +#ifdef SQLITE_EXTRA_IFNULLROW + else if( iFrom>0 && !isAgg ){ + /* Setting isLeftJoin to -1 causes OP_IfNullRow opcodes to be generated for + ** every reference to any result column from subquery in a join, even though + ** they are not necessary. This will stress-test the OP_IfNullRow opcode. */ + isLeftJoin = -1; + } +#endif /* Restriction 17: If the sub-query is a compound SELECT, then it must ** use only the UNION ALL operator. And none of the simple select queries @@ -119137,6 +121170,7 @@ static int flattenSubquery( sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing); assert( pSrc->a[i+iFrom].fg.isTabFunc==0 ); pSrc->a[i+iFrom] = pSubSrc->a[i]; + iNewParent = pSubSrc->a[i].iCursor; memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i])); } pSrc->a[iFrom].fg.jointype = jointype; @@ -119153,14 +121187,6 @@ static int flattenSubquery( ** We look at every expression in the outer query and every place we see ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10". */ - pList = pParent->pEList; - for(i=0; inExpr; i++){ - if( pList->a[i].zName==0 ){ - char *zName = sqlite3DbStrDup(db, pList->a[i].zSpan); - sqlite3Dequote(zName); - pList->a[i].zName = zName; - } - } if( pSub->pOrderBy ){ /* At this point, any non-zero iOrderByCol values indicate that the ** ORDER BY column expression is identical to the iOrderByCol'th @@ -119182,6 +121208,9 @@ static int flattenSubquery( pSub->pOrderBy = 0; } pWhere = sqlite3ExprDup(db, pSub->pWhere, 0); + if( isLeftJoin>0 ){ + setJoinExpr(pWhere, iNewParent); + } if( subqueryIsAgg ){ assert( pParent->pHaving==0 ); pParent->pHaving = pParent->pWhere; @@ -119194,7 +121223,15 @@ static int flattenSubquery( }else{ pParent->pWhere = sqlite3ExprAnd(db, pWhere, pParent->pWhere); } - substSelect(pParse, pParent, iParent, pSub->pEList, 0); + if( db->mallocFailed==0 ){ + SubstContext x; + x.pParse = pParse; + x.iTable = iParent; + x.iNewTable = iNewParent; + x.isLeftJoin = isLeftJoin; + x.pEList = pSub->pEList; + substSelect(&x, pParent, 0); + } /* The flattened query is distinct if either the inner or the ** outer query is distinct. @@ -119296,8 +121333,14 @@ static int pushDownWhereTerms( if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){ nChng++; while( pSubq ){ + SubstContext x; pNew = sqlite3ExprDup(pParse->db, pWhere, 0); - pNew = substExpr(pParse, pNew, iCursor, pSubq->pEList); + x.pParse = pParse; + x.iTable = iCursor; + x.iNewTable = iCursor; + x.isLeftJoin = 0; + x.pEList = pSubq->pEList; + pNew = substExpr(&x, pNew); pSubq->pWhere = sqlite3ExprAnd(pParse->db, pSubq->pWhere, pNew); pSubq = pSubq->pPrior; } @@ -119631,7 +121674,15 @@ static int withExpand( pCte->zCteErr = "circular reference: %s"; pSavedWith = pParse->pWith; pParse->pWith = pWith; - sqlite3WalkSelect(pWalker, bMayRecursive ? pSel->pPrior : pSel); + if( bMayRecursive ){ + Select *pPrior = pSel->pPrior; + assert( pPrior->pWith==0 ); + pPrior->pWith = pSel->pWith; + sqlite3WalkSelect(pWalker, pPrior); + pPrior->pWith = 0; + }else{ + sqlite3WalkSelect(pWalker, pSel); + } pParse->pWith = pWith; for(pLeft=pSel; pLeft->pPrior; pLeft=pLeft->pPrior); @@ -119675,10 +121726,12 @@ static int withExpand( */ static void selectPopWith(Walker *pWalker, Select *p){ Parse *pParse = pWalker->pParse; - With *pWith = findRightmost(p)->pWith; - if( pWith!=0 ){ - assert( pParse->pWith==pWith ); - pParse->pWith = pWith->pOuter; + if( pParse->pWith && p->pPrior==0 ){ + With *pWith = findRightmost(p)->pWith; + if( pWith!=0 ){ + assert( pParse->pWith==pWith ); + pParse->pWith = pWith->pOuter; + } } } #else @@ -119728,8 +121781,8 @@ static int selectExpander(Walker *pWalker, Select *p){ } pTabList = p->pSrc; pEList = p->pEList; - if( pWalker->xSelectCallback2==selectPopWith ){ - sqlite3WithPush(pParse, findRightmost(p)->pWith, 0); + if( p->pWith ){ + sqlite3WithPush(pParse, p->pWith, 0); } /* Make sure cursor numbers have been assigned to all entries in @@ -119993,6 +122046,25 @@ SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker *NotUsed, Expr *NotUsed2){ return WRC_Continue; } +/* +** No-op routine for the parse-tree walker for SELECT statements. +** subquery in the parser tree. +*/ +SQLITE_PRIVATE int sqlite3SelectWalkNoop(Walker *NotUsed, Select *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + return WRC_Continue; +} + +#if SQLITE_DEBUG +/* +** Always assert. This xSelectCallback2 implementation proves that the +** xSelectCallback2 is never invoked. +*/ +SQLITE_PRIVATE void sqlite3SelectWalkAssert2(Walker *NotUsed, Select *NotUsed2){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + assert( 0 ); +} +#endif /* ** This routine "expands" a SELECT statement and all of its subqueries. ** For additional information on what it means to "expand" a SELECT @@ -120008,17 +122080,15 @@ SQLITE_PRIVATE int sqlite3ExprWalkNoop(Walker *NotUsed, Expr *NotUsed2){ */ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ Walker w; - memset(&w, 0, sizeof(w)); w.xExprCallback = sqlite3ExprWalkNoop; w.pParse = pParse; if( pParse->hasCompound ){ w.xSelectCallback = convertCompoundSelectToSubquery; + w.xSelectCallback2 = 0; sqlite3WalkSelect(&w, pSelect); } w.xSelectCallback = selectExpander; - if( (pSelect->selFlags & SF_MultiValue)==0 ){ - w.xSelectCallback2 = selectPopWith; - } + w.xSelectCallback2 = selectPopWith; sqlite3WalkSelect(&w, pSelect); } @@ -120074,7 +122144,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){ #ifndef SQLITE_OMIT_SUBQUERY Walker w; - memset(&w, 0, sizeof(w)); + w.xSelectCallback = sqlite3SelectWalkNoop; w.xSelectCallback2 = selectAddSubqueryTypeInfo; w.xExprCallback = sqlite3ExprWalkNoop; w.pParse = pParse; @@ -120281,6 +122351,187 @@ static void explainSimpleCount( # define explainSimpleCount(a,b,c) #endif +/* +** Context object for havingToWhereExprCb(). +*/ +struct HavingToWhereCtx { + Expr **ppWhere; + ExprList *pGroupBy; +}; + +/* +** sqlite3WalkExpr() callback used by havingToWhere(). +** +** If the node passed to the callback is a TK_AND node, return +** WRC_Continue to tell sqlite3WalkExpr() to iterate through child nodes. +** +** Otherwise, return WRC_Prune. In this case, also check if the +** sub-expression matches the criteria for being moved to the WHERE +** clause. If so, add it to the WHERE clause and replace the sub-expression +** within the HAVING expression with a constant "1". +*/ +static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){ + if( pExpr->op!=TK_AND ){ + struct HavingToWhereCtx *p = pWalker->u.pHavingCtx; + if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, p->pGroupBy) ){ + sqlite3 *db = pWalker->pParse->db; + Expr *pNew = sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[1], 0); + if( pNew ){ + Expr *pWhere = *(p->ppWhere); + SWAP(Expr, *pNew, *pExpr); + pNew = sqlite3ExprAnd(db, pWhere, pNew); + *(p->ppWhere) = pNew; + } + } + return WRC_Prune; + } + return WRC_Continue; +} + +/* +** Transfer eligible terms from the HAVING clause of a query, which is +** processed after grouping, to the WHERE clause, which is processed before +** grouping. For example, the query: +** +** SELECT * FROM WHERE a=? GROUP BY b HAVING b=? AND c=? +** +** can be rewritten as: +** +** SELECT * FROM WHERE a=? AND b=? GROUP BY b HAVING c=? +** +** A term of the HAVING expression is eligible for transfer if it consists +** entirely of constants and expressions that are also GROUP BY terms that +** use the "BINARY" collation sequence. +*/ +static void havingToWhere( + Parse *pParse, + ExprList *pGroupBy, + Expr *pHaving, + Expr **ppWhere +){ + struct HavingToWhereCtx sCtx; + Walker sWalker; + + sCtx.ppWhere = ppWhere; + sCtx.pGroupBy = pGroupBy; + + memset(&sWalker, 0, sizeof(sWalker)); + sWalker.pParse = pParse; + sWalker.xExprCallback = havingToWhereExprCb; + sWalker.u.pHavingCtx = &sCtx; + sqlite3WalkExpr(&sWalker, pHaving); +} + +/* +** Check to see if the pThis entry of pTabList is a self-join of a prior view. +** If it is, then return the SrcList_item for the prior view. If it is not, +** then return 0. +*/ +static struct SrcList_item *isSelfJoinView( + SrcList *pTabList, /* Search for self-joins in this FROM clause */ + struct SrcList_item *pThis /* Search for prior reference to this subquery */ +){ + struct SrcList_item *pItem; + for(pItem = pTabList->a; pItempSelect==0 ) continue; + if( pItem->fg.viaCoroutine ) continue; + if( pItem->zName==0 ) continue; + if( sqlite3_stricmp(pItem->zDatabase, pThis->zDatabase)!=0 ) continue; + if( sqlite3_stricmp(pItem->zName, pThis->zName)!=0 ) continue; + if( sqlite3ExprCompare(0, + pThis->pSelect->pWhere, pItem->pSelect->pWhere, -1) + ){ + /* The view was modified by some other optimization such as + ** pushDownWhereTerms() */ + continue; + } + return pItem; + } + return 0; +} + +#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION +/* +** Attempt to transform a query of the form +** +** SELECT count(*) FROM (SELECT x FROM t1 UNION ALL SELECT y FROM t2) +** +** Into this: +** +** SELECT (SELECT count(*) FROM t1)+(SELECT count(*) FROM t2) +** +** The transformation only works if all of the following are true: +** +** * The subquery is a UNION ALL of two or more terms +** * There is no WHERE or GROUP BY or HAVING clauses on the subqueries +** * The outer query is a simple count(*) +** +** Return TRUE if the optimization is undertaken. +*/ +static int countOfViewOptimization(Parse *pParse, Select *p){ + Select *pSub, *pPrior; + Expr *pExpr; + Expr *pCount; + sqlite3 *db; + if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate query */ + if( p->pEList->nExpr!=1 ) return 0; /* Single result column */ + pExpr = p->pEList->a[0].pExpr; + if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */ + if( sqlite3_stricmp(pExpr->u.zToken,"count") ) return 0; /* Must be count() */ + if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */ + if( p->pSrc->nSrc!=1 ) return 0; /* One table in the FROM clause */ + pSub = p->pSrc->a[0].pSelect; + if( pSub==0 ) return 0; /* The FROM is a subquery */ + if( pSub->pPrior==0 ) return 0; /* Must be a compound subquery */ + do{ + if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ + if( pSub->pWhere ) return 0; /* No WHERE clause */ + if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */ + pSub = pSub->pPrior; /* Repeat over compound terms */ + }while( pSub ); + + /* If we reach this point, that means it is OK to perform the transformation */ + + db = pParse->db; + pCount = pExpr; + pExpr = 0; + pSub = p->pSrc->a[0].pSelect; + p->pSrc->a[0].pSelect = 0; + sqlite3SrcListDelete(db, p->pSrc); + p->pSrc = sqlite3DbMallocZero(pParse->db, sizeof(*p->pSrc)); + while( pSub ){ + Expr *pTerm; + pPrior = pSub->pPrior; + pSub->pPrior = 0; + pSub->pNext = 0; + pSub->selFlags |= SF_Aggregate; + pSub->selFlags &= ~SF_Compound; + pSub->nSelectRow = 0; + sqlite3ExprListDelete(db, pSub->pEList); + pTerm = pPrior ? sqlite3ExprDup(db, pCount, 0) : pCount; + pSub->pEList = sqlite3ExprListAppend(pParse, 0, pTerm); + pTerm = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, pTerm, pSub); + if( pExpr==0 ){ + pExpr = pTerm; + }else{ + pExpr = sqlite3PExpr(pParse, TK_PLUS, pTerm, pExpr); + } + pSub = pPrior; + } + p->pEList->a[0].pExpr = pExpr; + p->selFlags &= ~SF_Aggregate; + +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x400 ){ + SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif + return 1; +} +#endif /* SQLITE_COUNTOFVIEW_OPTIMIZATION */ + /* ** Generate code for the SELECT statement given in the p argument. ** @@ -120365,6 +122616,14 @@ SQLITE_PRIVATE int sqlite3Select( } #endif + /* Get a pointer the VDBE under construction, allocating a new VDBE if one + ** does not already exist */ + v = sqlite3GetVdbe(pParse); + if( v==0 ) goto select_end; + if( pDest->eDest==SRT_Output ){ + generateColumnNames(pParse, p); + } + /* Try to flatten subqueries in the FROM clause up into the main query */ #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) @@ -120400,11 +122659,6 @@ SQLITE_PRIVATE int sqlite3Select( } #endif - /* Get a pointer the VDBE under construction, allocating a new VDBE if one - ** does not already exist */ - v = sqlite3GetVdbe(pParse); - if( v==0 ) goto select_end; - #ifndef SQLITE_OMIT_COMPOUND_SELECT /* Handle compound SELECT statements using the separate multiSelect() ** procedure. @@ -120420,13 +122674,38 @@ SQLITE_PRIVATE int sqlite3Select( } #endif - /* Generate code for all sub-queries in the FROM clause + /* For each term in the FROM clause, do two things: + ** (1) Authorized unreferenced tables + ** (2) Generate code for all sub-queries */ -#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) for(i=0; inSrc; i++){ struct SrcList_item *pItem = &pTabList->a[i]; SelectDest dest; - Select *pSub = pItem->pSelect; + Select *pSub; + + /* Issue SQLITE_READ authorizations with a fake column name for any tables that + ** are referenced but from which no values are extracted. Examples of where these + ** kinds of null SQLITE_READ authorizations would occur: + ** + ** SELECT count(*) FROM t1; -- SQLITE_READ t1."" + ** SELECT t1.* FROM t1, t2; -- SQLITE_READ t2."" + ** + ** The fake column name is an empty string. It is possible for a table to + ** have a column named by the empty string, in which case there is no way to + ** distinguish between an unreferenced table and an actual reference to the + ** "" column. The original design was for the fake column name to be a NULL, + ** which would be unambiguous. But legacy authorization callbacks might + ** assume the column name is non-NULL and segfault. The use of an empty string + ** for the fake column name seems safer. + */ + if( pItem->colUsed==0 ){ + sqlite3AuthCheck(pParse, SQLITE_READ, pItem->zName, "", pItem->zDatabase); + } + +#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) + /* Generate code for all sub-queries in the FROM clause + */ + pSub = pItem->pSelect; if( pSub==0 ) continue; /* Sometimes the code for a subquery will be generated more than @@ -120437,6 +122716,10 @@ SQLITE_PRIVATE int sqlite3Select( ** to be invoked again. */ if( pItem->addrFillSub ){ if( pItem->fg.viaCoroutine==0 ){ + /* The subroutine that manifests the view might be a one-time routine, + ** or it might need to be rerun on each iteration because it + ** encodes a correlated subquery. */ + testcase( sqlite3VdbeGetOp(v, pItem->addrFillSub)->opcode==OP_Once ); sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub); } continue; @@ -120511,6 +122794,8 @@ SQLITE_PRIVATE int sqlite3Select( int topAddr; int onceAddr = 0; int retAddr; + struct SrcList_item *pPrior; + assert( pItem->addrFillSub==0 ); pItem->regReturn = ++pParse->nMem; topAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pItem->regReturn); @@ -120524,9 +122809,17 @@ SQLITE_PRIVATE int sqlite3Select( }else{ VdbeNoopComment((v, "materialize \"%s\"", pItem->pTab->zName)); } - sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId); - sqlite3Select(pParse, pSub, &dest); + pPrior = isSelfJoinView(pTabList, pItem); + if( pPrior ){ + sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pPrior->iCursor); + explainSetInteger(pItem->iSelectId, pPrior->iSelectId); + assert( pPrior->pSelect!=0 ); + pSub->nSelectRow = pPrior->pSelect->nSelectRow; + }else{ + sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); + explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId); + sqlite3Select(pParse, pSub, &dest); + } pItem->pTab->nRowLogEst = pSub->nSelectRow; if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn); @@ -120536,8 +122829,8 @@ SQLITE_PRIVATE int sqlite3Select( } if( db->mallocFailed ) goto select_end; pParse->nHeight -= sqlite3SelectExprHeight(p); - } #endif + } /* Various elements of the SELECT copied into local variables for ** convenience */ @@ -120554,6 +122847,16 @@ SQLITE_PRIVATE int sqlite3Select( } #endif +#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION + if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) + && countOfViewOptimization(pParse, p) + ){ + if( db->mallocFailed ) goto select_end; + pEList = p->pEList; + pTabList = p->pSrc; + } +#endif + /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and ** if the select-list is the same as the ORDER BY list, then this query ** can be rewritten as a GROUP BY. In other words, this: @@ -120745,6 +123048,11 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprAnalyzeAggList(&sNC, pEList); sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy); if( pHaving ){ + if( pGroupBy ){ + assert( pWhere==p->pWhere ); + havingToWhere(pParse, pGroupBy, pHaving, &p->pWhere); + pWhere = p->pWhere; + } sqlite3ExprAnalyzeAggregates(&sNC, pHaving); } sAggInfo.nAccumulator = sAggInfo.nColumn; @@ -121097,7 +123405,7 @@ SQLITE_PRIVATE int sqlite3Select( ** of output. */ resetAccumulator(pParse, &sAggInfo); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMax,0,flag,0); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMax, 0,flag,0); if( pWInfo==0 ){ sqlite3ExprListDelete(db, pDel); goto select_end; @@ -121150,12 +123458,6 @@ SQLITE_PRIVATE int sqlite3Select( select_end: explainSetInteger(pParse->iSelectId, iRestoreSelectId); - /* Identify column names if results of the SELECT are to be output. - */ - if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){ - generateColumnNames(pParse, pTabList, pEList); - } - sqlite3DbFree(db, sAggInfo.aCol); sqlite3DbFree(db, sAggInfo.aFunc); #if SELECTTRACE_ENABLED @@ -121186,8 +123488,6 @@ select_end: ** if they are not used. */ /* #include "sqliteInt.h" */ -/* #include */ -/* #include */ #ifndef SQLITE_OMIT_GET_TABLE @@ -121678,6 +123978,7 @@ SQLITE_PRIVATE void sqlite3FinishTrigger( if( v==0 ) goto triggerfinish_cleanup; sqlite3BeginWriteOperation(pParse, 0, iDb); z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n); + testcase( z==0 ); sqlite3NestedParse(pParse, "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')", db->aDb[iDb].zDbSName, MASTER_NAME, zName, @@ -122545,12 +124846,12 @@ SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){ if( pValue ){ sqlite3VdbeAppendP4(v, pValue, P4_MEM); } -#ifndef SQLITE_OMIT_FLOATING_POINT - if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ - sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); - } -#endif } +#ifndef SQLITE_OMIT_FLOATING_POINT + if( pTab->aCol[i].affinity==SQLITE_AFF_REAL ){ + sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg); + } +#endif } /* @@ -122579,7 +124880,7 @@ SQLITE_PRIVATE void sqlite3Update( int iDataCur; /* Cursor for the canonical data btree */ int iIdxCur; /* Cursor for the first index */ sqlite3 *db; /* The database structure */ - int *aRegIdx = 0; /* One register assigned to each index to be updated */ + int *aRegIdx = 0; /* First register in array assigned to each index */ int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the ** an expression for the i-th column of the table. ** aXRef[i]==-1 if the i-th column is not changed. */ @@ -122591,10 +124892,11 @@ SQLITE_PRIVATE void sqlite3Update( AuthContext sContext; /* The authorization context */ NameContext sNC; /* The name-context to resolve expressions in */ int iDb; /* Database containing the table being updated */ - int okOnePass; /* True for one-pass algorithm without the FIFO */ + int eOnePass; /* ONEPASS_XXX value from where.c */ int hasFK; /* True if foreign key processing is required */ int labelBreak; /* Jump here to break out of UPDATE loop */ int labelContinue; /* Jump here to continue next step of UPDATE loop */ + int flags; /* Flags for sqlite3WhereBegin() */ #ifndef SQLITE_OMIT_TRIGGER int isView; /* True when updating a view (INSTEAD OF trigger) */ @@ -122605,6 +124907,10 @@ SQLITE_PRIVATE void sqlite3Update( int iEph = 0; /* Ephemeral table holding all primary key values */ int nKey = 0; /* Number of elements in regKey for WITHOUT ROWID */ int aiCurOnePass[2]; /* The write cursors opened by WHERE_ONEPASS */ + int addrOpen = 0; /* Address of OP_OpenEphemeral */ + int iPk = 0; /* First of nPk cells holding PRIMARY KEY value */ + i16 nPk = 0; /* Number of components of the PRIMARY KEY */ + int bReplace = 0; /* True if REPLACE conflict resolution might happen */ /* Register Allocations */ int regRowCount = 0; /* A count of rows changed */ @@ -122754,7 +125060,7 @@ SQLITE_PRIVATE void sqlite3Update( */ for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ int reg; - if( chngKey || hasFK || pIdx->pPartIdxWhere || pIdx==pPk ){ + if( chngKey || hasFK>1 || pIdx->pPartIdxWhere || pIdx==pPk ){ reg = ++pParse->nMem; pParse->nMem += pIdx->nColumn; }else{ @@ -122764,6 +125070,11 @@ SQLITE_PRIVATE void sqlite3Update( if( iIdxCol<0 || aXRef[iIdxCol]>=0 ){ reg = ++pParse->nMem; pParse->nMem += pIdx->nColumn; + if( (onError==OE_Replace) + || (onError==OE_Default && pIdx->onError==OE_Replace) + ){ + bReplace = 1; + } break; } } @@ -122771,6 +125082,11 @@ SQLITE_PRIVATE void sqlite3Update( if( reg==0 ) aToOpen[j+1] = 0; aRegIdx[j] = reg; } + if( bReplace ){ + /* If REPLACE conflict resolution might be invoked, open cursors on all + ** indexes in case they are needed to delete records. */ + memset(aToOpen, 1, nIdx+1); + } /* Begin generating code. */ v = sqlite3GetVdbe(pParse); @@ -122823,51 +125139,79 @@ SQLITE_PRIVATE void sqlite3Update( } #endif - /* Begin the database scan - */ + /* Initialize the count of updated rows */ + if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){ + regRowCount = ++pParse->nMem; + sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + } + if( HasRowid(pTab) ){ sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid); - pWInfo = sqlite3WhereBegin( - pParse, pTabList, pWhere, 0, 0, - WHERE_ONEPASS_DESIRED | WHERE_SEEK_TABLE, iIdxCur - ); - if( pWInfo==0 ) goto update_cleanup; - okOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); - - /* Remember the rowid of every item to be updated. - */ - sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regOldRowid); - if( !okOnePass ){ - sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); - } - - /* End the database scan loop. - */ - sqlite3WhereEnd(pWInfo); }else{ - int iPk; /* First of nPk memory cells holding PRIMARY KEY value */ - i16 nPk; /* Number of components of the PRIMARY KEY */ - int addrOpen; /* Address of the OpenEphemeral instruction */ - assert( pPk!=0 ); nPk = pPk->nKeyCol; iPk = pParse->nMem+1; pParse->nMem += nPk; regKey = ++pParse->nMem; iEph = pParse->nTab++; + sqlite3VdbeAddOp2(v, OP_Null, 0, iPk); addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nPk); sqlite3VdbeSetP4KeyInfo(pParse, pPk); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0, 0, - WHERE_ONEPASS_DESIRED, iIdxCur); - if( pWInfo==0 ) goto update_cleanup; - okOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + } + + /* Begin the database scan. + ** + ** Do not consider a single-pass strategy for a multi-row update if + ** there are any triggers or foreign keys to process, or rows may + ** be deleted as a result of REPLACE conflict handling. Any of these + ** things might disturb a cursor being used to scan through the table + ** or index, causing a single-pass approach to malfunction. */ + flags = WHERE_ONEPASS_DESIRED|WHERE_SEEK_UNIQ_TABLE; + if( !pParse->nested && !pTrigger && !hasFK && !chngKey && !bReplace ){ + flags |= WHERE_ONEPASS_MULTIROW; + } + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, 0, 0, flags, iIdxCur); + if( pWInfo==0 ) goto update_cleanup; + + /* A one-pass strategy that might update more than one row may not + ** be used if any column of the index used for the scan is being + ** updated. Otherwise, if there is an index on "b", statements like + ** the following could create an infinite loop: + ** + ** UPDATE t1 SET b=b+1 WHERE b>? + ** + ** Fall back to ONEPASS_OFF if where.c has selected a ONEPASS_MULTI + ** strategy that uses an index for which one or more columns are being + ** updated. */ + eOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); + if( eOnePass==ONEPASS_MULTI ){ + int iCur = aiCurOnePass[1]; + if( iCur>=0 && iCur!=iDataCur && aToOpen[iCur-iBaseCur] ){ + eOnePass = ONEPASS_OFF; + } + assert( iCur!=iDataCur || !HasRowid(pTab) ); + } + + if( HasRowid(pTab) ){ + /* Read the rowid of the current row of the WHERE scan. In ONEPASS_OFF + ** mode, write the rowid into the FIFO. In either of the one-pass modes, + ** leave it in register regOldRowid. */ + sqlite3VdbeAddOp2(v, OP_Rowid, iDataCur, regOldRowid); + if( eOnePass==ONEPASS_OFF ){ + sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid); + } + }else{ + /* Read the PK of the current row into an array of registers. In + ** ONEPASS_OFF mode, serialize the array into a record and store it in + ** the ephemeral table. Or, in ONEPASS_SINGLE or MULTI mode, change + ** the OP_OpenEphemeral instruction to a Noop (the ephemeral table + ** is not required) and leave the PK fields in the array of registers. */ for(i=0; iaiColumn[i]>=0 ); - sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, pPk->aiColumn[i], - iPk+i); + sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur,pPk->aiColumn[i],iPk+i); } - if( okOnePass ){ + if( eOnePass ){ sqlite3VdbeChangeToNoop(v, addrOpen); nKey = nPk; regKey = iPk; @@ -122876,50 +125220,42 @@ SQLITE_PRIVATE void sqlite3Update( sqlite3IndexAffinityStr(db, pPk), nPk); sqlite3VdbeAddOp4Int(v, OP_IdxInsert, iEph, regKey, iPk, nPk); } - sqlite3WhereEnd(pWInfo); } - /* Initialize the count of updated rows - */ - if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){ - regRowCount = ++pParse->nMem; - sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount); + if( eOnePass!=ONEPASS_MULTI ){ + sqlite3WhereEnd(pWInfo); } labelBreak = sqlite3VdbeMakeLabel(v); if( !isView ){ - /* - ** Open every index that needs updating. Note that if any - ** index could potentially invoke a REPLACE conflict resolution - ** action, then we need to open all indices because we might need - ** to be deleting some records. - */ - if( onError==OE_Replace ){ - memset(aToOpen, 1, nIdx+1); - }else{ - for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->onError==OE_Replace ){ - memset(aToOpen, 1, nIdx+1); - break; - } - } - } - if( okOnePass ){ + int addrOnce = 0; + + /* Open every index that needs updating. */ + if( eOnePass!=ONEPASS_OFF ){ if( aiCurOnePass[0]>=0 ) aToOpen[aiCurOnePass[0]-iBaseCur] = 0; if( aiCurOnePass[1]>=0 ) aToOpen[aiCurOnePass[1]-iBaseCur] = 0; } + + if( eOnePass==ONEPASS_MULTI && (nIdx-(aiCurOnePass[1]>=0))>0 ){ + addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); + } sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, iBaseCur, aToOpen, 0, 0); + if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce); } /* Top of the update loop */ - if( okOnePass ){ - if( aToOpen[iDataCur-iBaseCur] && !isView ){ + if( eOnePass!=ONEPASS_OFF ){ + if( !isView && aiCurOnePass[0]!=iDataCur && aiCurOnePass[1]!=iDataCur ){ assert( pPk ); sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey, nKey); VdbeCoverageNeverTaken(v); } - labelContinue = labelBreak; + if( eOnePass==ONEPASS_SINGLE ){ + labelContinue = labelBreak; + }else{ + labelContinue = sqlite3VdbeMakeLabel(v); + } sqlite3VdbeAddOp2(v, OP_IsNull, pPk ? regKey : regOldRowid, labelBreak); VdbeCoverageIf(v, pPk==0); VdbeCoverageIf(v, pPk!=0); @@ -123044,7 +125380,6 @@ SQLITE_PRIVATE void sqlite3Update( if( !isView ){ int addr1 = 0; /* Address of jump instruction */ - int bReplace = 0; /* True if REPLACE conflict resolution might happen */ /* Do constraint checks. */ assert( regOldRowid>0 ); @@ -123080,14 +125415,18 @@ SQLITE_PRIVATE void sqlite3Update( assert( regNew==regNewRowid+1 ); #ifdef SQLITE_ENABLE_PREUPDATE_HOOK sqlite3VdbeAddOp3(v, OP_Delete, iDataCur, - OPFLAG_ISUPDATE | ((hasFK || chngKey || pPk!=0) ? 0 : OPFLAG_ISNOOP), + OPFLAG_ISUPDATE | ((hasFK>1 || chngKey) ? 0 : OPFLAG_ISNOOP), regNewRowid ); + if( eOnePass==ONEPASS_MULTI ){ + assert( hasFK==0 && chngKey==0 ); + sqlite3VdbeChangeP5(v, OPFLAG_SAVEPOSITION); + } if( !pParse->nested ){ sqlite3VdbeAppendP4(v, pTab, P4_TABLE); } #else - if( hasFK || chngKey || pPk!=0 ){ + if( hasFK>1 || chngKey ){ sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, 0); } #endif @@ -123100,8 +125439,11 @@ SQLITE_PRIVATE void sqlite3Update( } /* Insert the new index entries and the new record. */ - sqlite3CompleteInsertion(pParse, pTab, iDataCur, iIdxCur, - regNewRowid, aRegIdx, 1, 0, 0); + sqlite3CompleteInsertion( + pParse, pTab, iDataCur, iIdxCur, regNewRowid, aRegIdx, + OPFLAG_ISUPDATE | (eOnePass==ONEPASS_MULTI ? OPFLAG_SAVEPOSITION : 0), + 0, 0 + ); /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to ** handle rows (possibly in other tables) that refer via a foreign key @@ -123123,8 +125465,11 @@ SQLITE_PRIVATE void sqlite3Update( /* Repeat the above with the next record to be updated, until ** all record selected by the WHERE clause have been updated. */ - if( okOnePass ){ + if( eOnePass==ONEPASS_SINGLE ){ /* Nothing to do at end-of-loop for a single-pass */ + }else if( eOnePass==ONEPASS_MULTI ){ + sqlite3VdbeResolveLabel(v, labelContinue); + sqlite3WhereEnd(pWInfo); }else if( pPk ){ sqlite3VdbeResolveLabel(v, labelContinue); sqlite3VdbeAddOp2(v, OP_Next, iEph, addrTop); VdbeCoverage(v); @@ -123398,8 +125743,25 @@ static int execSqlF(sqlite3 *db, char **pzErrMsg, const char *zSql, ...){ */ SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse, Token *pNm){ Vdbe *v = sqlite3GetVdbe(pParse); - int iDb = pNm ? sqlite3TwoPartName(pParse, pNm, pNm, &pNm) : 0; - if( v && (iDb>=2 || iDb==0) ){ + int iDb = 0; + if( v==0 ) return; + if( pNm ){ +#ifndef SQLITE_BUG_COMPATIBLE_20160819 + /* Default behavior: Report an error if the argument to VACUUM is + ** not recognized */ + iDb = sqlite3TwoPartName(pParse, pNm, pNm, &pNm); + if( iDb<0 ) return; +#else + /* When SQLITE_BUG_COMPATIBLE_20160819 is defined, unrecognized arguments + ** to VACUUM are silently ignored. This is a back-out of a bug fix that + ** occurred on 2016-08-19 (https://www.sqlite.org/src/info/083f9e6270). + ** The buggy behavior is required for binary compatibility with some + ** legacy applications. */ + iDb = sqlite3FindDb(pParse->db, pNm); + if( iDb<0 ) iDb = 0; +#endif + } + if( iDb!=1 ){ sqlite3VdbeAddOp1(v, OP_Vacuum, iDb); sqlite3VdbeUsesBtree(v, iDb); } @@ -123484,7 +125846,7 @@ SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db, int iDb){ extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*); int nKey; char *zKey; - sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey); + sqlite3CodecGetKey(db, iDb, (void**)&zKey, &nKey); if( nKey ) db->nextPagesize = 0; } #endif @@ -123993,8 +126355,7 @@ SQLITE_PRIVATE void sqlite3VtabBeginParse( iDb = sqlite3SchemaToIndex(db, pTable->pSchema); assert( iDb>=0 ); - pTable->tabFlags |= TF_Virtual; - pTable->nModuleArg = 0; + assert( pTable->nModuleArg==0 ); addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName)); addModuleArgument(db, pTable, 0); addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName)); @@ -124282,7 +126643,7 @@ SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){ int rc; assert( pTab ); - if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){ + if( !IsVirtual(pTab) || sqlite3GetVTable(db, pTab) ){ return SQLITE_OK; } @@ -124352,7 +126713,7 @@ SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, const char *zMod; pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zDbSName); - assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable ); + assert( pTab && IsVirtual(pTab) && !pTab->pVTable ); /* Locate the required virtual table module */ zMod = pTab->azModuleArg[0]; @@ -124406,7 +126767,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ return SQLITE_MISUSE_BKPT; } pTab = pCtx->pTab; - assert( (pTab->tabFlags & TF_Virtual)!=0 ); + assert( IsVirtual(pTab) ); pParse = sqlite3StackAllocZero(db, sizeof(*pParse)); if( pParse==0 ){ @@ -124420,7 +126781,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){ && pParse->pNewTable && !db->mallocFailed && !pParse->pNewTable->pSelect - && (pParse->pNewTable->tabFlags & TF_Virtual)==0 + && !IsVirtual(pParse->pNewTable) ){ if( !pTab->aCol ){ Table *pNew = pParse->pNewTable; @@ -124708,8 +127069,8 @@ SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction( if( NEVER(pExpr==0) ) return pDef; if( pExpr->op!=TK_COLUMN ) return pDef; pTab = pExpr->pTab; - if( NEVER(pTab==0) ) return pDef; - if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef; + if( pTab==0 ) return pDef; + if( !IsVirtual(pTab) ) return pDef; pVtab = sqlite3GetVTable(db, pTab)->pVtab; assert( pVtab!=0 ); assert( pVtab->pModule!=0 ); @@ -124804,8 +127165,7 @@ SQLITE_PRIVATE int sqlite3VtabEponymousTableInit(Parse *pParse, Module *pMod){ pMod->pEpoTab = pTab; pTab->nTabRef = 1; pTab->pSchema = db->aDb[0].pSchema; - pTab->tabFlags |= TF_Virtual; - pTab->nModuleArg = 0; + assert( pTab->nModuleArg==0 ); pTab->iPKey = -1; addModuleArgument(db, pTab, sqlite3DbStrDup(db, pTab->zName)); addModuleArgument(db, pTab, 0); @@ -124876,7 +127236,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ if( !p ){ rc = SQLITE_MISUSE_BKPT; }else{ - assert( p->pTab==0 || (p->pTab->tabFlags & TF_Virtual)!=0 ); + assert( p->pTab==0 || IsVirtual(p->pTab) ); p->pVTable->bConstraint = (u8)va_arg(ap, int); } break; @@ -125044,6 +127404,7 @@ struct WhereLoop { u16 nEq; /* Number of equality constraints */ u16 nBtm; /* Size of BTM vector */ u16 nTop; /* Size of TOP vector */ + u16 nIdxCol; /* Index column used for ORDER BY */ Index *pIndex; /* Index used, or NULL */ } btree; struct { /* Information for virtual tables */ @@ -125203,6 +127564,7 @@ struct WhereTerm { #define TERM_LIKECOND 0x200 /* Conditionally this LIKE operator term */ #define TERM_LIKE 0x400 /* The original LIKE operator */ #define TERM_IS 0x800 /* Term.pExpr is an IS operator */ +#define TERM_VARSELECT 0x1000 /* Term.pExpr contains a correlated sub-query */ /* ** An instance of the WhereScan object is used as an iterator for locating @@ -125292,6 +127654,7 @@ struct WhereAndInfo { ** no gaps. */ struct WhereMaskSet { + int bVarSelect; /* Used by sqlite3WhereExprUsage() */ int n; /* Number of assigned cursor values */ int ix[BMS]; /* Cursor assigned to each bit */ }; @@ -125315,8 +127678,13 @@ struct WhereLoopBuilder { UnpackedRecord *pRec; /* Probe for stat4 (if required) */ int nRecValid; /* Number of valid fields currently in pRec */ #endif + unsigned int bldFlags; /* SQLITE_BLDF_* flags */ }; +/* Allowed values for WhereLoopBuider.bldFlags */ +#define SQLITE_BLDF_INDEXED 0x0001 /* An index is used */ +#define SQLITE_BLDF_UNIQUE 0x0002 /* All keys of a UNIQUE index used */ + /* ** The WHERE clause processing routine has two halves. The ** first part does the start of the WHERE loop and the second @@ -125331,7 +127699,8 @@ struct WhereInfo { Parse *pParse; /* Parsing and code generating context */ SrcList *pTabList; /* List of tables in the join */ ExprList *pOrderBy; /* The ORDER BY clause or NULL */ - ExprList *pDistinctSet; /* DISTINCT over all these values */ + ExprList *pResultSet; /* Result set of the query */ + Expr *pWhere; /* The complete WHERE clause */ LogEst iLimit; /* LIMIT if wctrlFlags has WHERE_USE_LIMIT */ int aiCurOnePass[2]; /* OP_OpenWrite cursors for the ONEPASS opt */ int iContinue; /* Jump here to continue with next record */ @@ -126419,10 +128788,10 @@ static void codeCursorHint( ** ** Normally, this is just: ** -** OP_Seek $iCur $iRowid +** OP_DeferredSeek $iCur $iRowid ** ** However, if the scan currently being coded is a branch of an OR-loop and -** the statement currently being coded is a SELECT, then P3 of the OP_Seek +** the statement currently being coded is a SELECT, then P3 of OP_DeferredSeek ** is set to iIdxCur and P4 is set to point to an array of integers ** containing one entry for each column of the table cursor iCur is open ** on. For each table column, if the column is the i'th column of the @@ -126441,7 +128810,7 @@ static void codeDeferredSeek( assert( iIdxCur>0 ); assert( pIdx->aiColumn[pIdx->nColumn-1]==-1 ); - sqlite3VdbeAddOp3(v, OP_Seek, iIdxCur, 0, iCur); + sqlite3VdbeAddOp3(v, OP_DeferredSeek, iIdxCur, 0, iCur); if( (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE) && DbMaskAllZero(sqlite3ParseToplevel(pParse)->writeMask) ){ @@ -126492,6 +128861,69 @@ static void codeExprOrVector(Parse *pParse, Expr *p, int iReg, int nReg){ } } +/* An instance of the IdxExprTrans object carries information about a +** mapping from an expression on table columns into a column in an index +** down through the Walker. +*/ +typedef struct IdxExprTrans { + Expr *pIdxExpr; /* The index expression */ + int iTabCur; /* The cursor of the corresponding table */ + int iIdxCur; /* The cursor for the index */ + int iIdxCol; /* The column for the index */ +} IdxExprTrans; + +/* The walker node callback used to transform matching expressions into +** a reference to an index column for an index on an expression. +** +** If pExpr matches, then transform it into a reference to the index column +** that contains the value of pExpr. +*/ +static int whereIndexExprTransNode(Walker *p, Expr *pExpr){ + IdxExprTrans *pX = p->u.pIdxTrans; + if( sqlite3ExprCompare(0, pExpr, pX->pIdxExpr, pX->iTabCur)==0 ){ + pExpr->op = TK_COLUMN; + pExpr->iTable = pX->iIdxCur; + pExpr->iColumn = pX->iIdxCol; + pExpr->pTab = 0; + return WRC_Prune; + }else{ + return WRC_Continue; + } +} + +/* +** For an indexes on expression X, locate every instance of expression X in pExpr +** and change that subexpression into a reference to the appropriate column of +** the index. +*/ +static void whereIndexExprTrans( + Index *pIdx, /* The Index */ + int iTabCur, /* Cursor of the table that is being indexed */ + int iIdxCur, /* Cursor of the index itself */ + WhereInfo *pWInfo /* Transform expressions in this WHERE clause */ +){ + int iIdxCol; /* Column number of the index */ + ExprList *aColExpr; /* Expressions that are indexed */ + Walker w; + IdxExprTrans x; + aColExpr = pIdx->aColExpr; + if( aColExpr==0 ) return; /* Not an index on expressions */ + memset(&w, 0, sizeof(w)); + w.xExprCallback = whereIndexExprTransNode; + w.u.pIdxTrans = &x; + x.iTabCur = iTabCur; + x.iIdxCur = iIdxCur; + for(iIdxCol=0; iIdxColnExpr; iIdxCol++){ + if( pIdx->aiColumn[iIdxCol]!=XN_EXPR ) continue; + assert( aColExpr->a[iIdxCol].pExpr!=0 ); + x.iIdxCol = iIdxCol; + x.pIdxExpr = aColExpr->a[iIdxCol].pExpr; + sqlite3WalkExpr(&w, pWInfo->pWhere); + sqlite3WalkExprList(&w, pWInfo->pOrderBy); + sqlite3WalkExprList(&w, pWInfo->pResultSet); + } +} + /* ** Generate code for the start of the iLevel-th loop in the WHERE clause ** implementation described by pWInfo. @@ -126515,9 +128947,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( Vdbe *v; /* The prepared stmt under constructions */ struct SrcList_item *pTabItem; /* FROM clause term being coded */ int addrBrk; /* Jump here to break out of the loop */ + int addrHalt; /* addrBrk for the outermost loop */ int addrCont; /* Jump here to continue with next cycle */ int iRowidReg = 0; /* Rowid is stored in this register, if not zero */ int iReleaseReg = 0; /* Temp register to free before returning */ + Index *pIdx = 0; /* Index used by loop (if any) */ + int iLoop; /* Iteration of constraint generator loop */ pParse = pWInfo->pParse; v = pParse->pVdbe; @@ -126556,6 +128991,11 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( VdbeComment((v, "init LEFT JOIN no-match flag")); } + /* Compute a safe address to jump to if we discover that the table for + ** this loop is empty and can never contribute content. */ + for(j=iLevel; j>0 && pWInfo->a[j].iLeftJoin==0; j--){} + addrHalt = pWInfo->a[j].addrBrk; + /* Special case of a FROM clause subquery implemented as a co-routine */ if( pTabItem->fg.viaCoroutine ){ int regYield = pTabItem->regReturn; @@ -126740,7 +129180,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( sqlite3ExprCacheAffinityChange(pParse, r1, 1); sqlite3ReleaseTempReg(pParse, rTemp); }else{ - sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk); + sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrHalt); VdbeCoverageIf(v, bRev==0); VdbeCoverageIf(v, bRev!=0); } @@ -126838,7 +129278,6 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( int endEq; /* True if range end uses ==, >= or <= */ int start_constraints; /* Start of range is constrained */ int nConstraint; /* Number of constraint terms */ - Index *pIdx; /* The index we will be using */ int iIdxCur; /* The VDBE cursor for the index */ int nExtraReg = 0; /* Number of extra registers needed */ int op; /* Instruction opcode */ @@ -127044,7 +129483,10 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( if( omitTable ){ /* pIdx is a covering index. No need to access the main table. */ }else if( HasRowid(pIdx->pTable) ){ - if( (pWInfo->wctrlFlags & WHERE_SEEK_TABLE)!=0 ){ + if( (pWInfo->wctrlFlags & WHERE_SEEK_TABLE) || ( + (pWInfo->wctrlFlags & WHERE_SEEK_UNIQ_TABLE) + && (pWInfo->eOnePass==ONEPASS_SINGLE) + )){ iRowidReg = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg); sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg); @@ -127064,6 +129506,13 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( iRowidReg, pPk->nKeyCol); VdbeCoverage(v); } + /* If pIdx is an index on one or more expressions, then look through + ** all the expressions in pWInfo and try to transform matching expressions + ** into reference to index columns. + */ + whereIndexExprTrans(pIdx, iCur, iIdxCur, pWInfo); + + /* Record the instruction used to terminate the loop. */ if( pLoop->wsFlags & WHERE_ONEROW ){ pLevel->op = OP_Noop; @@ -127079,6 +129528,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( }else{ assert( pLevel->p5==0 ); } + if( omitTable ) pIdx = 0; }else #ifndef SQLITE_OMIT_OR_OPTIMIZATION @@ -127383,7 +129833,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( codeCursorHint(pTabItem, pWInfo, pLevel, 0); pLevel->op = aStep[bRev]; pLevel->p1 = iCur; - pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk); + pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrHalt); VdbeCoverageIf(v, bRev==0); VdbeCoverageIf(v, bRev!=0); pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP; @@ -127396,43 +129846,75 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( /* Insert code to test every subexpression that can be completely ** computed using the current set of tables. + ** + ** This loop may run between one and three times, depending on the + ** constraints to be generated. The value of stack variable iLoop + ** determines the constraints coded by each iteration, as follows: + ** + ** iLoop==1: Code only expressions that are entirely covered by pIdx. + ** iLoop==2: Code remaining expressions that do not contain correlated + ** sub-queries. + ** iLoop==3: Code all remaining expressions. + ** + ** An effort is made to skip unnecessary iterations of the loop. */ - for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ - Expr *pE; - int skipLikeAddr = 0; - testcase( pTerm->wtFlags & TERM_VIRTUAL ); - testcase( pTerm->wtFlags & TERM_CODED ); - if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; - if( (pTerm->prereqAll & pLevel->notReady)!=0 ){ - testcase( pWInfo->untestedTerms==0 - && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)!=0 ); - pWInfo->untestedTerms = 1; - continue; - } - pE = pTerm->pExpr; - assert( pE!=0 ); - if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ - continue; - } - if( pTerm->wtFlags & TERM_LIKECOND ){ - /* If the TERM_LIKECOND flag is set, that means that the range search - ** is sufficient to guarantee that the LIKE operator is true, so we - ** can skip the call to the like(A,B) function. But this only works - ** for strings. So do not skip the call to the function on the pass - ** that compares BLOBs. */ + iLoop = (pIdx ? 1 : 2); + do{ + int iNext = 0; /* Next value for iLoop */ + for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ + Expr *pE; + int skipLikeAddr = 0; + testcase( pTerm->wtFlags & TERM_VIRTUAL ); + testcase( pTerm->wtFlags & TERM_CODED ); + if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; + if( (pTerm->prereqAll & pLevel->notReady)!=0 ){ + testcase( pWInfo->untestedTerms==0 + && (pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE)!=0 ); + pWInfo->untestedTerms = 1; + continue; + } + pE = pTerm->pExpr; + assert( pE!=0 ); + if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){ + continue; + } + + if( iLoop==1 && !sqlite3ExprCoveredByIndex(pE, pLevel->iTabCur, pIdx) ){ + iNext = 2; + continue; + } + if( iLoop<3 && (pTerm->wtFlags & TERM_VARSELECT) ){ + if( iNext==0 ) iNext = 3; + continue; + } + + if( pTerm->wtFlags & TERM_LIKECOND ){ + /* If the TERM_LIKECOND flag is set, that means that the range search + ** is sufficient to guarantee that the LIKE operator is true, so we + ** can skip the call to the like(A,B) function. But this only works + ** for strings. So do not skip the call to the function on the pass + ** that compares BLOBs. */ #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS - continue; + continue; #else - u32 x = pLevel->iLikeRepCntr; - assert( x>0 ); - skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)? OP_IfNot : OP_If, (int)(x>>1)); - VdbeCoverage(v); + u32 x = pLevel->iLikeRepCntr; + assert( x>0 ); + skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)?OP_IfNot:OP_If, (int)(x>>1)); + VdbeCoverage(v); #endif + } +#ifdef WHERETRACE_ENABLED /* 0xffff */ + if( sqlite3WhereTrace ){ + VdbeNoopComment((v, "WhereTerm[%d] (%p) priority=%d", + pWC->nTerm-j, pTerm, iLoop)); + } +#endif + sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL); + if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr); + pTerm->wtFlags |= TERM_CODED; } - sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL); - if( skipLikeAddr ) sqlite3VdbeJumpHere(v, skipLikeAddr); - pTerm->wtFlags |= TERM_CODED; - } + iLoop = iNext; + }while( iLoop>0 ); /* Insert code to test for implied constraints based on transitivity ** of the "==" operator. @@ -127708,19 +130190,10 @@ static int isLikeOrGlob( #endif pList = pExpr->x.pList; pLeft = pList->a[1].pExpr; - if( pLeft->op!=TK_COLUMN - || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT - || IsVirtual(pLeft->pTab) /* Value might be numeric */ - ){ - /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must - ** be the name of an indexed column with TEXT affinity. */ - return 0; - } - assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */ pRight = sqlite3ExprSkipCollate(pList->a[0].pExpr); op = pRight->op; - if( op==TK_VARIABLE ){ + if( op==TK_VARIABLE && (db->flags & SQLITE_EnableQPSG)==0 ){ Vdbe *pReprepare = pParse->pReprepare; int iCol = pRight->iColumn; pVal = sqlite3VdbeGetBoundValue(pReprepare, iCol, SQLITE_AFF_BLOB); @@ -127733,6 +130206,23 @@ static int isLikeOrGlob( z = pRight->u.zToken; } if( z ){ + + /* If the RHS begins with a digit or a minus sign, then the LHS must + ** be an ordinary column (not a virtual table column) with TEXT affinity. + ** Otherwise the LHS might be numeric and "lhs >= rhs" would be false + ** even though "lhs LIKE rhs" is true. But if the RHS does not start + ** with a digit or '-', then "lhs LIKE rhs" will always be false if + ** the LHS is numeric and so the optimization still works. + */ + if( sqlite3Isdigit(z[0]) || z[0]=='-' ){ + if( pLeft->op!=TK_COLUMN + || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT + || IsVirtual(pLeft->pTab) /* Value might be numeric */ + ){ + sqlite3ValueFree(pVal); + return 0; + } + } cnt = 0; while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){ cnt++; @@ -127893,8 +130383,8 @@ static void whereCombineDisjuncts( && (eOp & (WO_EQ|WO_GT|WO_GE))!=eOp ) return; assert( pOne->pExpr->pLeft!=0 && pOne->pExpr->pRight!=0 ); assert( pTwo->pExpr->pLeft!=0 && pTwo->pExpr->pRight!=0 ); - if( sqlite3ExprCompare(pOne->pExpr->pLeft, pTwo->pExpr->pLeft, -1) ) return; - if( sqlite3ExprCompare(pOne->pExpr->pRight, pTwo->pExpr->pRight, -1) )return; + if( sqlite3ExprCompare(0,pOne->pExpr->pLeft, pTwo->pExpr->pLeft, -1) ) return; + if( sqlite3ExprCompare(0,pOne->pExpr->pRight, pTwo->pExpr->pRight,-1) )return; /* If we reach this point, it means the two subterms can be combined */ if( (eOp & (eOp-1))!=0 ){ if( eOp & (WO_LT|WO_LE) ){ @@ -128317,8 +130807,8 @@ static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){ ** Expression pExpr is one operand of a comparison operator that might ** be useful for indexing. This routine checks to see if pExpr appears ** in any index. Return TRUE (1) if pExpr is an indexed term and return -** FALSE (0) if not. If TRUE is returned, also set *piCur to the cursor -** number of the table that is indexed and *piColumn to the column number +** FALSE (0) if not. If TRUE is returned, also set aiCurCol[0] to the cursor +** number of the table that is indexed and aiCurCol[1] to the column number ** of the column that is indexed, or XN_EXPR (-2) if an expression is being ** indexed. ** @@ -128326,18 +130816,37 @@ static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){ ** true even if that particular column is not indexed, because the column ** might be added to an automatic index later. */ -static int exprMightBeIndexed( +static SQLITE_NOINLINE int exprMightBeIndexed2( SrcList *pFrom, /* The FROM clause */ - int op, /* The specific comparison operator */ Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */ - Expr *pExpr, /* An operand of a comparison operator */ - int *piCur, /* Write the referenced table cursor number here */ - int *piColumn /* Write the referenced table column number here */ + int *aiCurCol, /* Write the referenced table cursor and column here */ + Expr *pExpr /* An operand of a comparison operator */ ){ Index *pIdx; int i; int iCur; - + for(i=0; mPrereq>1; i++, mPrereq>>=1){} + iCur = pFrom->a[i].iCursor; + for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->aColExpr==0 ) continue; + for(i=0; inKeyCol; i++){ + if( pIdx->aiColumn[i]!=XN_EXPR ) continue; + if( sqlite3ExprCompareSkip(pExpr, pIdx->aColExpr->a[i].pExpr, iCur)==0 ){ + aiCurCol[0] = iCur; + aiCurCol[1] = XN_EXPR; + return 1; + } + } + } + return 0; +} +static int exprMightBeIndexed( + SrcList *pFrom, /* The FROM clause */ + Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */ + int *aiCurCol, /* Write the referenced table cursor & column here */ + Expr *pExpr, /* An operand of a comparison operator */ + int op /* The specific comparison operator */ +){ /* If this expression is a vector to the left or right of a ** inequality constraint (>, <, >= or <=), perform the processing ** on the first element of the vector. */ @@ -128349,26 +130858,13 @@ static int exprMightBeIndexed( } if( pExpr->op==TK_COLUMN ){ - *piCur = pExpr->iTable; - *piColumn = pExpr->iColumn; + aiCurCol[0] = pExpr->iTable; + aiCurCol[1] = pExpr->iColumn; return 1; } if( mPrereq==0 ) return 0; /* No table references */ if( (mPrereq&(mPrereq-1))!=0 ) return 0; /* Refs more than one table */ - for(i=0; mPrereq>1; i++, mPrereq>>=1){} - iCur = pFrom->a[i].iCursor; - for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->aColExpr==0 ) continue; - for(i=0; inKeyCol; i++){ - if( pIdx->aiColumn[i]!=XN_EXPR ) continue; - if( sqlite3ExprCompare(pExpr, pIdx->aColExpr->a[i].pExpr, iCur)==0 ){ - *piCur = iCur; - *piColumn = XN_EXPR; - return 1; - } - } - } - return 0; + return exprMightBeIndexed2(pFrom,mPrereq,aiCurCol,pExpr); } /* @@ -128408,6 +130904,7 @@ static void exprAnalyze( Parse *pParse = pWInfo->pParse; /* Parsing context */ sqlite3 *db = pParse->db; /* Database connection */ unsigned char eOp2; /* op2 value for LIKE/REGEXP/GLOB */ + int nLeft; /* Number of elements on left side vector */ if( db->mallocFailed ){ return; @@ -128431,19 +130928,25 @@ static void exprAnalyze( }else{ pTerm->prereqRight = sqlite3WhereExprUsage(pMaskSet, pExpr->pRight); } + pMaskSet->bVarSelect = 0; prereqAll = sqlite3WhereExprUsage(pMaskSet, pExpr); + if( pMaskSet->bVarSelect ) pTerm->wtFlags |= TERM_VARSELECT; if( ExprHasProperty(pExpr, EP_FromJoin) ){ Bitmask x = sqlite3WhereGetMask(pMaskSet, pExpr->iRightJoinTable); prereqAll |= x; extraRight = x-1; /* ON clause terms may not be used with an index ** on left table of a LEFT JOIN. Ticket #3015 */ + if( (prereqAll>>1)>=x ){ + sqlite3ErrorMsg(pParse, "ON clause references tables to its right"); + return; + } } pTerm->prereqAll = prereqAll; pTerm->leftCursor = -1; pTerm->iParent = -1; pTerm->eOperator = 0; if( allowedOp(op) ){ - int iCur, iColumn; + int aiCurCol[2]; Expr *pLeft = sqlite3ExprSkipCollate(pExpr->pLeft); Expr *pRight = sqlite3ExprSkipCollate(pExpr->pRight); u16 opMask = (pTerm->prereqRight & prereqLeft)==0 ? WO_ALL : WO_EQUIV; @@ -128454,14 +130957,14 @@ static void exprAnalyze( pLeft = pLeft->x.pList->a[pTerm->iField-1].pExpr; } - if( exprMightBeIndexed(pSrc, op, prereqLeft, pLeft, &iCur, &iColumn) ){ - pTerm->leftCursor = iCur; - pTerm->u.leftColumn = iColumn; + if( exprMightBeIndexed(pSrc, prereqLeft, aiCurCol, pLeft, op) ){ + pTerm->leftCursor = aiCurCol[0]; + pTerm->u.leftColumn = aiCurCol[1]; pTerm->eOperator = operatorMask(op) & opMask; } if( op==TK_IS ) pTerm->wtFlags |= TERM_IS; if( pRight - && exprMightBeIndexed(pSrc, op, pTerm->prereqRight, pRight, &iCur,&iColumn) + && exprMightBeIndexed(pSrc, pTerm->prereqRight, aiCurCol, pRight, op) ){ WhereTerm *pNew; Expr *pDup; @@ -128491,8 +130994,8 @@ static void exprAnalyze( pNew = pTerm; } exprCommute(pParse, pDup); - pNew->leftCursor = iCur; - pNew->u.leftColumn = iColumn; + pNew->leftCursor = aiCurCol[0]; + pNew->u.leftColumn = aiCurCol[1]; testcase( (prereqLeft | extraRight) != prereqLeft ); pNew->prereqRight = prereqLeft | extraRight; pNew->prereqAll = prereqAll; @@ -128654,6 +131157,9 @@ static void exprAnalyze( Expr *pNewExpr; pNewExpr = sqlite3PExpr(pParse, TK_MATCH, 0, sqlite3ExprDup(db, pRight, 0)); + if( ExprHasProperty(pExpr, EP_FromJoin) && pNewExpr ){ + ExprSetProperty(pNewExpr, EP_FromJoin); + } idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC); testcase( idxNew==0 ); pNewTerm = &pWC->a[idxNew]; @@ -128679,13 +131185,12 @@ static void exprAnalyze( ** is not a sub-select. */ if( pWC->op==TK_AND && (pExpr->op==TK_EQ || pExpr->op==TK_IS) - && sqlite3ExprIsVector(pExpr->pLeft) + && (nLeft = sqlite3ExprVectorSize(pExpr->pLeft))>1 + && sqlite3ExprVectorSize(pExpr->pRight)==nLeft && ( (pExpr->pLeft->flags & EP_xIsSelect)==0 - || (pExpr->pRight->flags & EP_xIsSelect)==0 - )){ - int nLeft = sqlite3ExprVectorSize(pExpr->pLeft); + || (pExpr->pRight->flags & EP_xIsSelect)==0) + ){ int i; - assert( nLeft==sqlite3ExprVectorSize(pExpr->pRight) ); for(i=0; iop==TK_COLUMN ){ - mask = sqlite3WhereGetMask(pMaskSet, p->iTable); - return mask; + return sqlite3WhereGetMask(pMaskSet, p->iTable); } + mask = (p->op==TK_IF_NULL_ROW) ? sqlite3WhereGetMask(pMaskSet, p->iTable) : 0; assert( !ExprHasProperty(p, EP_TokenOnly) ); - mask = p->pRight ? sqlite3WhereExprUsage(pMaskSet, p->pRight) : 0; if( p->pLeft ) mask |= sqlite3WhereExprUsage(pMaskSet, p->pLeft); - if( ExprHasProperty(p, EP_xIsSelect) ){ + if( p->pRight ){ + mask |= sqlite3WhereExprUsage(pMaskSet, p->pRight); + assert( p->x.pList==0 ); + }else if( ExprHasProperty(p, EP_xIsSelect) ){ + if( ExprHasProperty(p, EP_VarSelect) ) pMaskSet->bVarSelect = 1; mask |= exprSelectUsage(pMaskSet, p->x.pSelect); }else if( p->x.pList ){ mask |= sqlite3WhereExprListUsage(pMaskSet, p->x.pList); @@ -129148,7 +131656,8 @@ static WhereTerm *whereScanNext(WhereScan *pScan){ if( pTerm->leftCursor==iCur && pTerm->u.leftColumn==iColumn && (iColumn!=XN_EXPR - || sqlite3ExprCompare(pTerm->pExpr->pLeft,pScan->pIdxExpr,iCur)==0) + || sqlite3ExprCompareSkip(pTerm->pExpr->pLeft, + pScan->pIdxExpr,iCur)==0) && (pScan->iEquiv<=1 || !ExprHasProperty(pTerm->pExpr, EP_FromJoin)) ){ if( (pTerm->eOperator & WO_EQUIV)!=0 @@ -129247,6 +131756,7 @@ static WhereTerm *whereScanInit( iColumn = pIdx->aiColumn[j]; if( iColumn==XN_EXPR ){ pScan->pIdxExpr = pIdx->aColExpr->a[j].pExpr; + pScan->zCollName = pIdx->azColl[j]; }else if( iColumn==pIdx->pTable->iPKey ){ iColumn = XN_ROWID; }else if( iColumn>=0 ){ @@ -129454,14 +131964,16 @@ static LogEst estLog(LogEst N){ ** value stored in its output register. */ static void translateColumnToCopy( - Vdbe *v, /* The VDBE containing code to translate */ + Parse *pParse, /* Parsing context */ int iStart, /* Translate from this opcode to the end */ int iTabCur, /* OP_Column/OP_Rowid references to this table */ int iRegister, /* The first column is in this register */ int bIncrRowid /* If non-zero, transform OP_rowid to OP_AddImm(1) */ ){ + Vdbe *v = pParse->pVdbe; VdbeOp *pOp = sqlite3VdbeGetOp(v, iStart); int iEnd = sqlite3VdbeCurrentAddr(v); + if( pParse->db->mallocFailed ) return; for(; iStartp1!=iTabCur ) continue; if( pOp->opcode==OP_Column ){ @@ -129543,6 +132055,15 @@ static int termCanDriveIndex( char aff; if( pTerm->leftCursor!=pSrc->iCursor ) return 0; if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) return 0; + if( (pSrc->fg.jointype & JT_LEFT) + && !ExprHasProperty(pTerm->pExpr, EP_FromJoin) + && (pTerm->eOperator & WO_IS) + ){ + /* Cannot use an IS term from the WHERE clause as an index driver for + ** the RHS of a LEFT JOIN. Such a term can only be used if it is from + ** the ON clause. */ + return 0; + } if( (pTerm->prereqRight & notReady)!=0 ) return 0; if( pTerm->u.leftColumn<0 ) return 0; aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity; @@ -129739,7 +132260,9 @@ static void constructAutomaticIndex( if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue); if( pTabItem->fg.viaCoroutine ){ sqlite3VdbeChangeP2(v, addrCounter, regBase+n); - translateColumnToCopy(v, addrTop, pLevel->iTabCur, pTabItem->regResult, 1); + testcase( pParse->db->mallocFailed ); + translateColumnToCopy(pParse, addrTop, pLevel->iTabCur, + pTabItem->regResult, 1); sqlite3VdbeGoto(v, addrTop); pTabItem->fg.viaCoroutine = 0; }else{ @@ -130125,7 +132648,7 @@ static int whereKeyStats( iGap = iGap/3; } aStat[0] = iLower + iGap; - aStat[1] = pIdx->aAvgEq[iCol]; + aStat[1] = pIdx->aAvgEq[nField-1]; } /* Restore the pRec->nField value before returning. */ @@ -130719,7 +133242,7 @@ static void whereLoopClearUnion(sqlite3 *db, WhereLoop *p){ p->u.vtab.idxStr = 0; }else if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 && p->u.btree.pIndex!=0 ){ sqlite3DbFree(db, p->u.btree.pIndex->zColAff); - sqlite3DbFree(db, p->u.btree.pIndex); + sqlite3DbFreeNN(db, p->u.btree.pIndex); p->u.btree.pIndex = 0; } } @@ -130729,7 +133252,7 @@ static void whereLoopClearUnion(sqlite3 *db, WhereLoop *p){ ** Deallocate internal memory used by a WhereLoop object */ static void whereLoopClear(sqlite3 *db, WhereLoop *p){ - if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFree(db, p->aLTerm); + if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm); whereLoopClearUnion(db, p); whereLoopInit(p); } @@ -130744,7 +133267,7 @@ static int whereLoopResize(sqlite3 *db, WhereLoop *p, int n){ paNew = sqlite3DbMallocRawNN(db, sizeof(p->aLTerm[0])*n); if( paNew==0 ) return SQLITE_NOMEM_BKPT; memcpy(paNew, p->aLTerm, sizeof(p->aLTerm[0])*p->nLSlot); - if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFree(db, p->aLTerm); + if( p->aLTerm!=p->aLTermSpace ) sqlite3DbFreeNN(db, p->aLTerm); p->aLTerm = paNew; p->nLSlot = n; return SQLITE_OK; @@ -130774,7 +133297,7 @@ static int whereLoopXfer(sqlite3 *db, WhereLoop *pTo, WhereLoop *pFrom){ */ static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ whereLoopClear(db, p); - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } /* @@ -130795,7 +133318,7 @@ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ pWInfo->pLoops = p->pNextLoop; whereLoopDelete(db, p); } - sqlite3DbFree(db, pWInfo); + sqlite3DbFreeNN(db, pWInfo); } } @@ -130878,16 +133401,17 @@ static void whereLoopAdjustCost(const WhereLoop *p, WhereLoop *pTemplate){ /* ** Search the list of WhereLoops in *ppPrev looking for one that can be -** supplanted by pTemplate. +** replaced by pTemplate. ** -** Return NULL if the WhereLoop list contains an entry that can supplant -** pTemplate, in other words if pTemplate does not belong on the list. +** Return NULL if pTemplate does not belong on the WhereLoop list. +** In other words if pTemplate ought to be dropped from further consideration. ** -** If pX is a WhereLoop that pTemplate can supplant, then return the +** If pX is a WhereLoop that pTemplate can replace, then return the ** link that points to pX. ** -** If pTemplate cannot supplant any existing element of the list but needs -** to be added to the list, then return a pointer to the tail of the list. +** If pTemplate cannot replace any existing element of the list but needs +** to be added to the list as a new entry, then return a pointer to the +** tail of the list. */ static WhereLoop **whereLoopFindLesser( WhereLoop **ppPrev, @@ -131032,8 +133556,10 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ if( p!=0 ){ sqlite3DebugPrintf("replace: "); whereLoopPrint(p, pBuilder->pWC); + sqlite3DebugPrintf(" with: "); + }else{ + sqlite3DebugPrintf(" add: "); } - sqlite3DebugPrintf(" add: "); whereLoopPrint(pTemplate, pBuilder->pWC); } #endif @@ -131324,6 +133850,11 @@ static int whereLoopAddBtreeIndex( continue; } + if( IsUniqueIndex(pProbe) && saved_nEq==pProbe->nKeyCol-1 ){ + pBuilder->bldFlags |= SQLITE_BLDF_UNIQUE; + }else{ + pBuilder->bldFlags |= SQLITE_BLDF_INDEXED; + } pNew->wsFlags = saved_wsFlags; pNew->u.btree.nEq = saved_nEq; pNew->u.btree.nBtm = saved_nBtm; @@ -131579,7 +134110,7 @@ static int indexMightHelpWithOrderBy( }else if( (aColExpr = pIndex->aColExpr)!=0 ){ for(jj=0; jjnKeyCol; jj++){ if( pIndex->aiColumn[jj]!=XN_EXPR ) continue; - if( sqlite3ExprCompare(pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){ + if( sqlite3ExprCompare(0, pExpr,aColExpr->a[jj].pExpr,iCursor)==0 ){ return 1; } } @@ -131612,14 +134143,16 @@ static Bitmask columnsInIndex(Index *pIdx){ static int whereUsablePartialIndex(int iTab, WhereClause *pWC, Expr *pWhere){ int i; WhereTerm *pTerm; + Parse *pParse = pWC->pWInfo->pParse; while( pWhere->op==TK_AND ){ if( !whereUsablePartialIndex(iTab,pWC,pWhere->pLeft) ) return 0; pWhere = pWhere->pRight; } + if( pParse->db->flags & SQLITE_EnableQPSG ) pParse = 0; for(i=0, pTerm=pWC->a; inTerm; i++, pTerm++){ Expr *pExpr = pTerm->pExpr; - if( sqlite3ExprImpliesExpr(pExpr, pWhere, iTab) - && (!ExprHasProperty(pExpr, EP_FromJoin) || pExpr->iRightJoinTable==iTab) + if( (!ExprHasProperty(pExpr, EP_FromJoin) || pExpr->iRightJoinTable==iTab) + && sqlite3ExprImpliesExpr(pParse, pExpr, pWhere, iTab) ){ return 1; } @@ -131871,7 +134404,15 @@ static int whereLoopAddBtree( } } + pBuilder->bldFlags = 0; rc = whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, 0); + if( pBuilder->bldFlags==SQLITE_BLDF_INDEXED ){ + /* If a non-unique index is used, or if a prefix of the key for + ** unique index is used (making the index functionally non-unique) + ** then the sqlite_stat1 data becomes important for scoring the + ** plan */ + pTab->tabFlags |= TF_StatsUsed; + } #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 sqlite3Stat4ProbeFree(pBuilder->pRec); pBuilder->nRecValid = 0; @@ -132173,7 +134714,7 @@ static int whereLoopAddVirtual( } if( p->needToFreeIdxStr ) sqlite3_free(p->idxStr); - sqlite3DbFree(pParse->db, p); + sqlite3DbFreeNN(pParse->db, p); return rc; } #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -132357,7 +134898,7 @@ static int whereLoopAddAll(WhereLoopBuilder *pBuilder){ } /* -** Examine a WherePath (with the addition of the extra WhereLoop of the 5th +** Examine a WherePath (with the addition of the extra WhereLoop of the 6th ** parameters) to see if it outputs rows in the requested ORDER BY ** (or GROUP BY) without requiring a separate sort operation. Return N: ** @@ -132452,6 +134993,8 @@ static i8 wherePathSatisfiesOrderBy( if( pLoop->wsFlags & WHERE_VIRTUALTABLE ){ if( pLoop->u.vtab.isOrdered ) obSat = obDone; break; + }else{ + pLoop->u.btree.nIdxCol = 0; } iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor; @@ -132588,7 +135131,8 @@ static i8 wherePathSatisfiesOrderBy( if( pOBExpr->iTable!=iCur ) continue; if( pOBExpr->iColumn!=iColumn ) continue; }else{ - if( sqlite3ExprCompare(pOBExpr,pIndex->aColExpr->a[j].pExpr,iCur) ){ + if( sqlite3ExprCompare(0, + pOBExpr,pIndex->aColExpr->a[j].pExpr,iCur) ){ continue; } } @@ -132597,6 +135141,7 @@ static i8 wherePathSatisfiesOrderBy( if( !pColl ) pColl = db->pDfltColl; if( sqlite3StrICmp(pColl->zName, pIndex->azColl[j])!=0 ) continue; } + pLoop->u.btree.nIdxCol = j+1; isMatch = 1; break; } @@ -132886,6 +135431,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ rUnsorted, rCost)); }else{ rCost = rUnsorted; + rUnsorted -= 2; /* TUNING: Slight bias in favor of no-sort plans */ } /* Check to see if pWLoop should be added to the set of @@ -132917,8 +135463,8 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ ** this candidate as not viable. */ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ - sqlite3DebugPrintf("Skip %s cost=%-3d,%3d order=%c\n", - wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, + sqlite3DebugPrintf("Skip %s cost=%-3d,%3d,%3d order=%c\n", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsorted, isOrdered>=0 ? isOrdered+'0' : '?'); } #endif @@ -132936,26 +135482,36 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ pTo = &aTo[jj]; #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ - sqlite3DebugPrintf("New %s cost=%-3d,%3d order=%c\n", - wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, + sqlite3DebugPrintf("New %s cost=%-3d,%3d,%3d order=%c\n", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsorted, isOrdered>=0 ? isOrdered+'0' : '?'); } #endif }else{ /* Control reaches here if best-so-far path pTo=aTo[jj] covers the - ** same set of loops and has the sam isOrdered setting as the + ** same set of loops and has the same isOrdered setting as the ** candidate path. Check to see if the candidate should replace - ** pTo or if the candidate should be skipped */ - if( pTo->rCostrCost==rCost && pTo->nRow<=nOut) ){ + ** pTo or if the candidate should be skipped. + ** + ** The conditional is an expanded vector comparison equivalent to: + ** (pTo->rCost,pTo->nRow,pTo->rUnsorted) <= (rCost,nOut,rUnsorted) + */ + if( pTo->rCostrCost==rCost + && (pTo->nRownRow==nOut && pTo->rUnsorted<=rUnsorted) + ) + ) + ){ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( - "Skip %s cost=%-3d,%3d order=%c", - wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, + "Skip %s cost=%-3d,%3d,%3d order=%c", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsorted, isOrdered>=0 ? isOrdered+'0' : '?'); - sqlite3DebugPrintf(" vs %s cost=%-3d,%d order=%c\n", + sqlite3DebugPrintf(" vs %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, - pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); + pTo->rUnsorted, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); } #endif /* Discard the candidate path from further consideration */ @@ -132968,12 +135524,12 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ #ifdef WHERETRACE_ENABLED /* 0x4 */ if( sqlite3WhereTrace&0x4 ){ sqlite3DebugPrintf( - "Update %s cost=%-3d,%3d order=%c", - wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, + "Update %s cost=%-3d,%3d,%3d order=%c", + wherePathName(pFrom, iLoop, pWLoop), rCost, nOut, rUnsorted, isOrdered>=0 ? isOrdered+'0' : '?'); - sqlite3DebugPrintf(" was %s cost=%-3d,%3d order=%c\n", + sqlite3DebugPrintf(" was %s cost=%-3d,%3d,%3d order=%c\n", wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow, - pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); + pTo->rUnsorted, pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?'); } #endif } @@ -133028,7 +135584,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ if( nFrom==0 ){ sqlite3ErrorMsg(pParse, "no query solution"); - sqlite3DbFree(db, pSpace); + sqlite3DbFreeNN(db, pSpace); return SQLITE_ERROR; } @@ -133051,9 +135607,9 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ && nRowEst ){ Bitmask notUsed; - int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pDistinctSet, pFrom, + int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pResultSet, pFrom, WHERE_DISTINCTBY, nLoop-1, pFrom->aLoop[nLoop-1], ¬Used); - if( rc==pWInfo->pDistinctSet->nExpr ){ + if( rc==pWInfo->pResultSet->nExpr ){ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; } } @@ -133104,7 +135660,7 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ pWInfo->nRowOut = pFrom->nRow; /* Free temporary memory and return success */ - sqlite3DbFree(db, pSpace); + sqlite3DbFreeNN(db, pSpace); return SQLITE_OK; } @@ -133182,7 +135738,8 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ if( pLoop->wsFlags ){ pLoop->nOut = (LogEst)1; pWInfo->a[0].pWLoop = pLoop; - pLoop->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); + assert( pWInfo->sMaskSet.n==1 && iCur==pWInfo->sMaskSet.ix[0] ); + pLoop->maskSelf = 1; /* sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); */ pWInfo->a[0].iTabCur = iCur; pWInfo->nRowOut = 1; if( pWInfo->pOrderBy ) pWInfo->nOBSat = pWInfo->pOrderBy->nExpr; @@ -133197,6 +135754,31 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ return 0; } +/* +** Helper function for exprIsDeterministic(). +*/ +static int exprNodeIsDeterministic(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_FUNCTION && ExprHasProperty(pExpr, EP_ConstFunc)==0 ){ + pWalker->eCode = 0; + return WRC_Abort; + } + return WRC_Continue; +} + +/* +** Return true if the expression contains no non-deterministic SQL +** functions. Do not consider non-deterministic SQL functions that are +** part of sub-select statements. +*/ +static int exprIsDeterministic(Expr *p){ + Walker w; + memset(&w, 0, sizeof(w)); + w.eCode = 1; + w.xExprCallback = exprNodeIsDeterministic; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + /* ** Generate the beginning of the loop used for WHERE clause processing. ** The return value is a pointer to an opaque structure that contains @@ -133290,7 +135872,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( SrcList *pTabList, /* FROM clause: A list of all tables to be scanned */ Expr *pWhere, /* The WHERE clause */ ExprList *pOrderBy, /* An ORDER BY (or GROUP BY) clause, or NULL */ - ExprList *pDistinctSet, /* Try not to output two rows that duplicate these */ + ExprList *pResultSet, /* Query result set. Req'd for DISTINCT */ u16 wctrlFlags, /* The WHERE_* flags defined in sqliteInt.h */ int iAuxArg /* If WHERE_OR_SUBCLAUSE is set, index cursor number ** If WHERE_USE_LIMIT, then the limit amount */ @@ -133366,7 +135948,8 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( pWInfo->pParse = pParse; pWInfo->pTabList = pTabList; pWInfo->pOrderBy = pOrderBy; - pWInfo->pDistinctSet = pDistinctSet; + pWInfo->pWhere = pWhere; + pWInfo->pResultSet = pResultSet; pWInfo->aiCurOnePass[0] = pWInfo->aiCurOnePass[1] = -1; pWInfo->nLevel = nTabList; pWInfo->iBreak = pWInfo->iContinue = sqlite3VdbeMakeLabel(v); @@ -133394,17 +135977,6 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sqlite3WhereClauseInit(&pWInfo->sWC, pWInfo); sqlite3WhereSplit(&pWInfo->sWC, pWhere, TK_AND); - /* Special case: a WHERE clause that is constant. Evaluate the - ** expression and either jump over all of the code or fall thru. - */ - for(ii=0; iinTerm; ii++){ - if( nTabList==0 || sqlite3ExprIsConstantNotJoin(sWLB.pWC->a[ii].pExpr) ){ - sqlite3ExprIfFalse(pParse, sWLB.pWC->a[ii].pExpr, pWInfo->iBreak, - SQLITE_JUMPIFNULL); - sWLB.pWC->a[ii].wtFlags |= TERM_CODED; - } - } - /* Special case: No FROM clause */ if( nTabList==0 ){ @@ -133433,9 +136005,13 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC); } #ifdef SQLITE_DEBUG - for(ii=0; iinSrc; ii++){ - Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor); - assert( m==MASKBIT(ii) ); + { + Bitmask mx = 0; + for(ii=0; iinSrc; ii++){ + Bitmask m = sqlite3WhereGetMask(pMaskSet, pTabList->a[ii].iCursor); + assert( m>=mx ); + mx = m; + } } #endif @@ -133443,14 +136019,33 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); if( db->mallocFailed ) goto whereBeginError; + /* Special case: WHERE terms that do not refer to any tables in the join + ** (constant expressions). Evaluate each such term, and jump over all the + ** generated code if the result is not true. + ** + ** Do not do this if the expression contains non-deterministic functions + ** that are not within a sub-select. This is not strictly required, but + ** preserves SQLite's legacy behaviour in the following two cases: + ** + ** FROM ... WHERE random()>0; -- eval random() once per row + ** FROM ... WHERE (SELECT random())>0; -- eval random() once overall + */ + for(ii=0; iinTerm; ii++){ + WhereTerm *pT = &sWLB.pWC->a[ii]; + if( pT->prereqAll==0 && (nTabList==0 || exprIsDeterministic(pT->pExpr)) ){ + sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL); + pT->wtFlags |= TERM_CODED; + } + } + if( wctrlFlags & WHERE_WANT_DISTINCT ){ - if( isDistinctRedundant(pParse, pTabList, &pWInfo->sWC, pDistinctSet) ){ + if( isDistinctRedundant(pParse, pTabList, &pWInfo->sWC, pResultSet) ){ /* The DISTINCT marking is pointless. Ignore it. */ pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; }else if( pOrderBy==0 ){ /* Try to ORDER BY the result set to make distinct processing easier */ pWInfo->wctrlFlags |= WHERE_DISTINCTBY; - pWInfo->pOrderBy = pDistinctSet; + pWInfo->pOrderBy = pResultSet; } } @@ -133479,7 +136074,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( static const char zLabel[] = "0123456789abcdefghijklmnopqrstuvwyxz" "ABCDEFGHIJKLMNOPQRSTUVWYXZ"; for(p=pWInfo->pLoops, i=0; p; p=p->pNextLoop, i++){ - p->cId = zLabel[i%sizeof(zLabel)]; + p->cId = zLabel[i%(sizeof(zLabel)-1)]; whereLoopPrint(p, sWLB.pWC); } } @@ -133526,10 +136121,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( #endif /* Attempt to omit tables from the join that do not effect the result */ if( pWInfo->nLevel>=2 - && pDistinctSet!=0 + && pResultSet!=0 && OptimizationEnabled(db, SQLITE_OmitNoopJoin) ){ - Bitmask tabUsed = sqlite3WhereExprListUsage(pMaskSet, pDistinctSet); + Bitmask tabUsed = sqlite3WhereExprListUsage(pMaskSet, pResultSet); if( sWLB.pOrderBy ){ tabUsed |= sqlite3WhereExprListUsage(pMaskSet, sWLB.pOrderBy); } @@ -133676,6 +136271,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0 && (pLoop->wsFlags & (WHERE_COLUMN_RANGE|WHERE_SKIPSCAN))==0 && (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 + && pWInfo->eDistinct!=WHERE_DISTINCT_ORDERED ){ sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ); /* Hint to COMDB2 */ } @@ -133764,14 +136360,43 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ int addr; pLevel = &pWInfo->a[i]; pLoop = pLevel->pWLoop; - sqlite3VdbeResolveLabel(v, pLevel->addrCont); if( pLevel->op!=OP_Noop ){ +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + int addrSeek = 0; + Index *pIdx; + int n; + if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED + && (pLoop->wsFlags & WHERE_INDEXED)!=0 + && (pIdx = pLoop->u.btree.pIndex)->hasStat1 + && (n = pLoop->u.btree.nIdxCol)>0 + && pIdx->aiRowLogEst[n]>=36 + ){ + int r1 = pParse->nMem+1; + int j, op; + for(j=0; jiIdxCur, j, r1+j); + } + pParse->nMem += n+1; + op = pLevel->op==OP_Prev ? OP_SeekLT : OP_SeekGT; + addrSeek = sqlite3VdbeAddOp4Int(v, op, pLevel->iIdxCur, 0, r1, n); + VdbeCoverageIf(v, op==OP_SeekLT); + VdbeCoverageIf(v, op==OP_SeekGT); + sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2); + } +#endif /* SQLITE_DISABLE_SKIPAHEAD_DISTINCT */ + /* The common case: Advance to the next row */ + sqlite3VdbeResolveLabel(v, pLevel->addrCont); sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3); sqlite3VdbeChangeP5(v, pLevel->p5); VdbeCoverage(v); VdbeCoverageIf(v, pLevel->op==OP_Next); VdbeCoverageIf(v, pLevel->op==OP_Prev); VdbeCoverageIf(v, pLevel->op==OP_VNext); +#ifndef SQLITE_DISABLE_SKIPAHEAD_DISTINCT + if( addrSeek ) sqlite3VdbeJumpHere(v, addrSeek); +#endif + }else{ + sqlite3VdbeResolveLabel(v, pLevel->addrCont); } if( pLoop->wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){ struct InLoop *pIn; @@ -133844,8 +136469,9 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ ** the co-routine into OP_Copy of result contained in a register. ** OP_Rowid becomes OP_Null. */ - if( pTabItem->fg.viaCoroutine && !db->mallocFailed ){ - translateColumnToCopy(v, pLevel->addrBody, pLevel->iTabCur, + if( pTabItem->fg.viaCoroutine ){ + testcase( pParse->db->mallocFailed ); + translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur, pTabItem->regResult, 0); continue; } @@ -133888,10 +136514,13 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ pOp->p2 = x; pOp->p1 = pLevel->iIdxCur; } - assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0 ); + assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0 + || pWInfo->eOnePass ); }else if( pOp->opcode==OP_Rowid ){ pOp->p1 = pLevel->iIdxCur; pOp->opcode = OP_IdxRowid; + }else if( pOp->opcode==OP_IfNullRow ){ + pOp->p1 = pLevel->iIdxCur; } } } @@ -133952,6 +136581,19 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ */ #define YYPARSEFREENEVERNULL 1 +/* +** In the amalgamation, the parse.c file generated by lemon and the +** tokenize.c file are concatenated. In that case, sqlite3RunParser() +** has access to the the size of the yyParser object and so the parser +** engine can be allocated from stack. In that case, only the +** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked +** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be +** omitted. +*/ +#ifdef SQLITE_AMALGAMATION +# define sqlite3Parser_ENGINEALWAYSONSTACK 1 +#endif + /* ** Alternative datatype for the argument to the malloc() routine passed ** into sqlite3ParserAlloc(). The default is size_t. @@ -134188,7 +136830,7 @@ static void disableLookaside(Parse *pParse){ #define YYCODETYPE unsigned char #define YYNOCODE 252 #define YYACTIONTYPE unsigned short int -#define YYWILDCARD 96 +#define YYWILDCARD 69 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; @@ -134214,16 +136856,16 @@ typedef union { #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse #define sqlite3ParserARG_STORE yypParser->pParse = pParse #define YYFALLBACK 1 -#define YYNSTATE 456 -#define YYNRULE 332 -#define YY_MAX_SHIFT 455 -#define YY_MIN_SHIFTREDUCE 668 -#define YY_MAX_SHIFTREDUCE 999 -#define YY_MIN_REDUCE 1000 -#define YY_MAX_REDUCE 1331 -#define YY_ERROR_ACTION 1332 -#define YY_ACCEPT_ACTION 1333 -#define YY_NO_ACTION 1334 +#define YYNSTATE 455 +#define YYNRULE 329 +#define YY_MAX_SHIFT 454 +#define YY_MIN_SHIFTREDUCE 664 +#define YY_MAX_SHIFTREDUCE 992 +#define YY_MIN_REDUCE 993 +#define YY_MAX_REDUCE 1321 +#define YY_ERROR_ACTION 1322 +#define YY_ACCEPT_ACTION 1323 +#define YY_NO_ACTION 1324 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -134295,463 +136937,463 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (1567) +#define YY_ACTTAB_COUNT (1565) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 325, 832, 351, 825, 5, 203, 203, 819, 99, 100, - /* 10 */ 90, 842, 842, 854, 857, 846, 846, 97, 97, 98, - /* 20 */ 98, 98, 98, 301, 96, 96, 96, 96, 95, 95, - /* 30 */ 94, 94, 94, 93, 351, 325, 977, 977, 824, 824, - /* 40 */ 826, 947, 354, 99, 100, 90, 842, 842, 854, 857, - /* 50 */ 846, 846, 97, 97, 98, 98, 98, 98, 338, 96, - /* 60 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 351, - /* 70 */ 95, 95, 94, 94, 94, 93, 351, 791, 977, 977, - /* 80 */ 325, 94, 94, 94, 93, 351, 792, 75, 99, 100, - /* 90 */ 90, 842, 842, 854, 857, 846, 846, 97, 97, 98, - /* 100 */ 98, 98, 98, 450, 96, 96, 96, 96, 95, 95, - /* 110 */ 94, 94, 94, 93, 351, 1333, 155, 155, 2, 325, - /* 120 */ 275, 146, 132, 52, 52, 93, 351, 99, 100, 90, - /* 130 */ 842, 842, 854, 857, 846, 846, 97, 97, 98, 98, - /* 140 */ 98, 98, 101, 96, 96, 96, 96, 95, 95, 94, - /* 150 */ 94, 94, 93, 351, 958, 958, 325, 268, 428, 413, - /* 160 */ 411, 61, 752, 752, 99, 100, 90, 842, 842, 854, - /* 170 */ 857, 846, 846, 97, 97, 98, 98, 98, 98, 60, - /* 180 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 190 */ 351, 325, 270, 329, 273, 277, 959, 960, 250, 99, - /* 200 */ 100, 90, 842, 842, 854, 857, 846, 846, 97, 97, - /* 210 */ 98, 98, 98, 98, 301, 96, 96, 96, 96, 95, - /* 220 */ 95, 94, 94, 94, 93, 351, 325, 938, 1326, 698, - /* 230 */ 706, 1326, 242, 412, 99, 100, 90, 842, 842, 854, - /* 240 */ 857, 846, 846, 97, 97, 98, 98, 98, 98, 347, - /* 250 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 260 */ 351, 325, 938, 1327, 384, 699, 1327, 381, 379, 99, - /* 270 */ 100, 90, 842, 842, 854, 857, 846, 846, 97, 97, - /* 280 */ 98, 98, 98, 98, 701, 96, 96, 96, 96, 95, - /* 290 */ 95, 94, 94, 94, 93, 351, 325, 92, 89, 178, - /* 300 */ 833, 936, 373, 700, 99, 100, 90, 842, 842, 854, - /* 310 */ 857, 846, 846, 97, 97, 98, 98, 98, 98, 375, - /* 320 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 330 */ 351, 325, 1276, 947, 354, 818, 936, 739, 739, 99, - /* 340 */ 100, 90, 842, 842, 854, 857, 846, 846, 97, 97, - /* 350 */ 98, 98, 98, 98, 230, 96, 96, 96, 96, 95, - /* 360 */ 95, 94, 94, 94, 93, 351, 325, 969, 227, 92, - /* 370 */ 89, 178, 373, 300, 99, 100, 90, 842, 842, 854, - /* 380 */ 857, 846, 846, 97, 97, 98, 98, 98, 98, 921, - /* 390 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 400 */ 351, 325, 449, 447, 447, 447, 147, 737, 737, 99, - /* 410 */ 100, 90, 842, 842, 854, 857, 846, 846, 97, 97, - /* 420 */ 98, 98, 98, 98, 296, 96, 96, 96, 96, 95, - /* 430 */ 95, 94, 94, 94, 93, 351, 325, 419, 231, 958, - /* 440 */ 958, 158, 25, 422, 99, 100, 90, 842, 842, 854, - /* 450 */ 857, 846, 846, 97, 97, 98, 98, 98, 98, 450, - /* 460 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 470 */ 351, 443, 224, 224, 420, 958, 958, 962, 325, 52, - /* 480 */ 52, 959, 960, 176, 415, 78, 99, 100, 90, 842, - /* 490 */ 842, 854, 857, 846, 846, 97, 97, 98, 98, 98, - /* 500 */ 98, 379, 96, 96, 96, 96, 95, 95, 94, 94, - /* 510 */ 94, 93, 351, 325, 428, 418, 298, 959, 960, 962, - /* 520 */ 81, 99, 88, 90, 842, 842, 854, 857, 846, 846, - /* 530 */ 97, 97, 98, 98, 98, 98, 717, 96, 96, 96, - /* 540 */ 96, 95, 95, 94, 94, 94, 93, 351, 325, 843, - /* 550 */ 843, 855, 858, 996, 318, 343, 379, 100, 90, 842, - /* 560 */ 842, 854, 857, 846, 846, 97, 97, 98, 98, 98, - /* 570 */ 98, 450, 96, 96, 96, 96, 95, 95, 94, 94, - /* 580 */ 94, 93, 351, 325, 350, 350, 350, 260, 377, 340, - /* 590 */ 929, 52, 52, 90, 842, 842, 854, 857, 846, 846, - /* 600 */ 97, 97, 98, 98, 98, 98, 361, 96, 96, 96, - /* 610 */ 96, 95, 95, 94, 94, 94, 93, 351, 86, 445, - /* 620 */ 847, 3, 1203, 361, 360, 378, 344, 813, 958, 958, - /* 630 */ 1300, 86, 445, 729, 3, 212, 169, 287, 405, 282, - /* 640 */ 404, 199, 232, 450, 300, 760, 83, 84, 280, 245, - /* 650 */ 262, 365, 251, 85, 352, 352, 92, 89, 178, 83, - /* 660 */ 84, 242, 412, 52, 52, 448, 85, 352, 352, 246, - /* 670 */ 959, 960, 194, 455, 670, 402, 399, 398, 448, 243, - /* 680 */ 221, 114, 434, 776, 361, 450, 397, 268, 747, 224, - /* 690 */ 224, 132, 132, 198, 832, 434, 452, 451, 428, 427, - /* 700 */ 819, 415, 734, 713, 132, 52, 52, 832, 268, 452, - /* 710 */ 451, 734, 194, 819, 363, 402, 399, 398, 450, 1271, - /* 720 */ 1271, 23, 958, 958, 86, 445, 397, 3, 228, 429, - /* 730 */ 895, 824, 824, 826, 827, 19, 203, 720, 52, 52, - /* 740 */ 428, 408, 439, 249, 824, 824, 826, 827, 19, 229, - /* 750 */ 403, 153, 83, 84, 761, 177, 241, 450, 721, 85, - /* 760 */ 352, 352, 120, 157, 959, 960, 58, 977, 409, 355, - /* 770 */ 330, 448, 268, 428, 430, 320, 790, 32, 32, 86, - /* 780 */ 445, 776, 3, 341, 98, 98, 98, 98, 434, 96, - /* 790 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 351, - /* 800 */ 832, 120, 452, 451, 813, 887, 819, 83, 84, 977, - /* 810 */ 813, 132, 410, 920, 85, 352, 352, 132, 407, 789, - /* 820 */ 958, 958, 92, 89, 178, 917, 448, 262, 370, 261, - /* 830 */ 82, 914, 80, 262, 370, 261, 776, 824, 824, 826, - /* 840 */ 827, 19, 934, 434, 96, 96, 96, 96, 95, 95, - /* 850 */ 94, 94, 94, 93, 351, 832, 74, 452, 451, 958, - /* 860 */ 958, 819, 959, 960, 120, 92, 89, 178, 945, 2, - /* 870 */ 918, 965, 268, 1, 976, 76, 445, 762, 3, 708, - /* 880 */ 901, 901, 387, 958, 958, 757, 919, 371, 740, 778, - /* 890 */ 756, 257, 824, 824, 826, 827, 19, 417, 741, 450, - /* 900 */ 24, 959, 960, 83, 84, 369, 958, 958, 177, 226, - /* 910 */ 85, 352, 352, 885, 315, 314, 313, 215, 311, 10, - /* 920 */ 10, 683, 448, 349, 348, 959, 960, 909, 777, 157, - /* 930 */ 120, 958, 958, 337, 776, 416, 711, 310, 450, 434, - /* 940 */ 450, 321, 450, 791, 103, 200, 175, 450, 959, 960, - /* 950 */ 908, 832, 792, 452, 451, 9, 9, 819, 10, 10, - /* 960 */ 52, 52, 51, 51, 180, 716, 248, 10, 10, 171, - /* 970 */ 170, 167, 339, 959, 960, 247, 984, 702, 702, 450, - /* 980 */ 715, 233, 686, 982, 889, 983, 182, 914, 824, 824, - /* 990 */ 826, 827, 19, 183, 256, 423, 132, 181, 394, 10, - /* 1000 */ 10, 889, 891, 749, 958, 958, 917, 268, 985, 198, - /* 1010 */ 985, 349, 348, 425, 415, 299, 817, 832, 326, 825, - /* 1020 */ 120, 332, 133, 819, 268, 98, 98, 98, 98, 91, - /* 1030 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 1040 */ 351, 157, 810, 371, 382, 359, 959, 960, 358, 268, - /* 1050 */ 450, 918, 368, 324, 824, 824, 826, 450, 709, 450, - /* 1060 */ 264, 380, 889, 450, 877, 746, 253, 919, 255, 433, - /* 1070 */ 36, 36, 234, 450, 234, 120, 269, 37, 37, 12, - /* 1080 */ 12, 334, 272, 27, 27, 450, 330, 118, 450, 162, - /* 1090 */ 742, 280, 450, 38, 38, 450, 985, 356, 985, 450, - /* 1100 */ 709, 1210, 450, 132, 450, 39, 39, 450, 40, 40, - /* 1110 */ 450, 362, 41, 41, 450, 42, 42, 450, 254, 28, - /* 1120 */ 28, 450, 29, 29, 31, 31, 450, 43, 43, 450, - /* 1130 */ 44, 44, 450, 714, 45, 45, 450, 11, 11, 767, - /* 1140 */ 450, 46, 46, 450, 268, 450, 105, 105, 450, 47, - /* 1150 */ 47, 450, 48, 48, 450, 237, 33, 33, 450, 172, - /* 1160 */ 49, 49, 450, 50, 50, 34, 34, 274, 122, 122, - /* 1170 */ 450, 123, 123, 450, 124, 124, 450, 898, 56, 56, - /* 1180 */ 450, 897, 35, 35, 450, 267, 450, 817, 450, 817, - /* 1190 */ 106, 106, 450, 53, 53, 385, 107, 107, 450, 817, - /* 1200 */ 108, 108, 817, 450, 104, 104, 121, 121, 119, 119, - /* 1210 */ 450, 117, 112, 112, 450, 276, 450, 225, 111, 111, - /* 1220 */ 450, 730, 450, 109, 109, 450, 673, 674, 675, 912, - /* 1230 */ 110, 110, 317, 998, 55, 55, 57, 57, 692, 331, - /* 1240 */ 54, 54, 26, 26, 696, 30, 30, 317, 937, 197, - /* 1250 */ 196, 195, 335, 281, 336, 446, 331, 745, 689, 436, - /* 1260 */ 440, 444, 120, 72, 386, 223, 175, 345, 757, 933, - /* 1270 */ 20, 286, 319, 756, 815, 372, 374, 202, 202, 202, - /* 1280 */ 263, 395, 285, 74, 208, 21, 696, 719, 718, 884, - /* 1290 */ 120, 120, 120, 120, 120, 754, 278, 828, 77, 74, - /* 1300 */ 726, 727, 785, 783, 880, 202, 999, 208, 894, 893, - /* 1310 */ 894, 893, 694, 816, 763, 116, 774, 1290, 431, 432, - /* 1320 */ 302, 999, 390, 303, 823, 697, 691, 680, 159, 289, - /* 1330 */ 679, 884, 681, 952, 291, 218, 293, 7, 316, 828, - /* 1340 */ 173, 805, 259, 364, 252, 911, 376, 713, 295, 435, - /* 1350 */ 308, 168, 955, 993, 135, 400, 990, 284, 882, 881, - /* 1360 */ 205, 928, 926, 59, 333, 62, 144, 156, 130, 72, - /* 1370 */ 802, 366, 367, 393, 137, 185, 189, 160, 139, 383, - /* 1380 */ 67, 896, 140, 141, 142, 148, 389, 812, 775, 266, - /* 1390 */ 219, 190, 154, 391, 913, 876, 271, 406, 191, 322, - /* 1400 */ 682, 733, 192, 342, 732, 724, 731, 711, 723, 421, - /* 1410 */ 705, 71, 323, 6, 204, 771, 288, 79, 297, 346, - /* 1420 */ 772, 704, 290, 283, 703, 770, 292, 294, 967, 239, - /* 1430 */ 769, 102, 862, 438, 426, 240, 424, 442, 73, 213, - /* 1440 */ 688, 238, 22, 453, 953, 214, 217, 216, 454, 677, - /* 1450 */ 676, 671, 753, 125, 115, 235, 126, 669, 353, 166, - /* 1460 */ 127, 244, 179, 357, 306, 304, 305, 307, 113, 892, - /* 1470 */ 327, 890, 811, 328, 134, 128, 136, 138, 743, 258, - /* 1480 */ 907, 184, 143, 129, 910, 186, 63, 64, 145, 187, - /* 1490 */ 906, 65, 8, 66, 13, 188, 202, 899, 265, 149, - /* 1500 */ 987, 388, 150, 685, 161, 392, 285, 193, 279, 396, - /* 1510 */ 151, 401, 68, 14, 15, 722, 69, 236, 831, 131, - /* 1520 */ 830, 860, 70, 751, 16, 414, 755, 4, 174, 220, - /* 1530 */ 222, 784, 201, 152, 779, 77, 74, 17, 18, 875, - /* 1540 */ 861, 859, 916, 864, 915, 207, 206, 942, 163, 437, - /* 1550 */ 948, 943, 164, 209, 1002, 441, 863, 165, 210, 829, - /* 1560 */ 695, 87, 312, 211, 1292, 1291, 309, + /* 0 */ 324, 410, 342, 747, 747, 203, 939, 353, 969, 98, + /* 10 */ 98, 98, 98, 91, 96, 96, 96, 96, 95, 95, + /* 20 */ 94, 94, 94, 93, 350, 1323, 155, 155, 2, 808, + /* 30 */ 971, 971, 98, 98, 98, 98, 20, 96, 96, 96, + /* 40 */ 96, 95, 95, 94, 94, 94, 93, 350, 92, 89, + /* 50 */ 178, 99, 100, 90, 847, 850, 839, 839, 97, 97, + /* 60 */ 98, 98, 98, 98, 350, 96, 96, 96, 96, 95, + /* 70 */ 95, 94, 94, 94, 93, 350, 324, 339, 969, 262, + /* 80 */ 364, 251, 212, 169, 287, 404, 282, 403, 199, 786, + /* 90 */ 242, 411, 21, 950, 378, 280, 93, 350, 787, 95, + /* 100 */ 95, 94, 94, 94, 93, 350, 971, 971, 96, 96, + /* 110 */ 96, 96, 95, 95, 94, 94, 94, 93, 350, 808, + /* 120 */ 328, 242, 411, 1235, 826, 1235, 132, 99, 100, 90, + /* 130 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98, + /* 140 */ 449, 96, 96, 96, 96, 95, 95, 94, 94, 94, + /* 150 */ 93, 350, 324, 819, 348, 347, 120, 818, 120, 75, + /* 160 */ 52, 52, 950, 951, 952, 1084, 977, 146, 360, 262, + /* 170 */ 369, 261, 950, 975, 954, 976, 92, 89, 178, 370, + /* 180 */ 230, 370, 971, 971, 1141, 360, 359, 101, 818, 818, + /* 190 */ 820, 383, 24, 1286, 380, 427, 412, 368, 978, 379, + /* 200 */ 978, 1032, 324, 99, 100, 90, 847, 850, 839, 839, + /* 210 */ 97, 97, 98, 98, 98, 98, 372, 96, 96, 96, + /* 220 */ 96, 95, 95, 94, 94, 94, 93, 350, 950, 132, + /* 230 */ 890, 449, 971, 971, 890, 60, 94, 94, 94, 93, + /* 240 */ 350, 950, 951, 952, 954, 103, 360, 950, 384, 333, + /* 250 */ 697, 52, 52, 99, 100, 90, 847, 850, 839, 839, + /* 260 */ 97, 97, 98, 98, 98, 98, 1022, 96, 96, 96, + /* 270 */ 96, 95, 95, 94, 94, 94, 93, 350, 324, 454, + /* 280 */ 995, 449, 227, 61, 157, 243, 343, 114, 1025, 1211, + /* 290 */ 147, 826, 950, 372, 1071, 950, 319, 950, 951, 952, + /* 300 */ 194, 10, 10, 401, 398, 397, 1211, 1213, 971, 971, + /* 310 */ 757, 171, 170, 157, 396, 336, 950, 951, 952, 697, + /* 320 */ 819, 310, 153, 950, 818, 320, 82, 23, 80, 99, + /* 330 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98, + /* 340 */ 98, 98, 888, 96, 96, 96, 96, 95, 95, 94, + /* 350 */ 94, 94, 93, 350, 324, 818, 818, 820, 277, 231, + /* 360 */ 300, 950, 951, 952, 950, 951, 952, 1211, 194, 25, + /* 370 */ 449, 401, 398, 397, 950, 354, 300, 449, 950, 74, + /* 380 */ 449, 1, 396, 132, 971, 971, 950, 224, 224, 808, + /* 390 */ 10, 10, 950, 951, 952, 1290, 132, 52, 52, 414, + /* 400 */ 52, 52, 1063, 1063, 338, 99, 100, 90, 847, 850, + /* 410 */ 839, 839, 97, 97, 98, 98, 98, 98, 1114, 96, + /* 420 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 350, + /* 430 */ 324, 1113, 427, 417, 701, 427, 426, 1260, 1260, 262, + /* 440 */ 369, 261, 950, 950, 951, 952, 752, 950, 951, 952, + /* 450 */ 449, 751, 449, 1058, 1037, 950, 951, 952, 442, 706, + /* 460 */ 971, 971, 1058, 393, 92, 89, 178, 446, 446, 446, + /* 470 */ 51, 51, 52, 52, 438, 773, 1024, 92, 89, 178, + /* 480 */ 172, 99, 100, 90, 847, 850, 839, 839, 97, 97, + /* 490 */ 98, 98, 98, 98, 198, 96, 96, 96, 96, 95, + /* 500 */ 95, 94, 94, 94, 93, 350, 324, 427, 407, 909, + /* 510 */ 694, 950, 951, 952, 92, 89, 178, 224, 224, 157, + /* 520 */ 241, 221, 418, 299, 771, 910, 415, 374, 449, 414, + /* 530 */ 58, 323, 1061, 1061, 1242, 378, 971, 971, 378, 772, + /* 540 */ 448, 911, 362, 735, 296, 681, 9, 9, 52, 52, + /* 550 */ 234, 329, 234, 256, 416, 736, 280, 99, 100, 90, + /* 560 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98, + /* 570 */ 449, 96, 96, 96, 96, 95, 95, 94, 94, 94, + /* 580 */ 93, 350, 324, 422, 72, 449, 827, 120, 367, 449, + /* 590 */ 10, 10, 5, 301, 203, 449, 177, 969, 253, 419, + /* 600 */ 255, 771, 200, 175, 233, 10, 10, 836, 836, 36, + /* 610 */ 36, 1289, 971, 971, 724, 37, 37, 348, 347, 424, + /* 620 */ 203, 260, 771, 969, 232, 930, 1316, 870, 337, 1316, + /* 630 */ 421, 848, 851, 99, 100, 90, 847, 850, 839, 839, + /* 640 */ 97, 97, 98, 98, 98, 98, 268, 96, 96, 96, + /* 650 */ 96, 95, 95, 94, 94, 94, 93, 350, 324, 840, + /* 660 */ 449, 978, 813, 978, 1200, 449, 909, 969, 715, 349, + /* 670 */ 349, 349, 928, 177, 449, 930, 1317, 254, 198, 1317, + /* 680 */ 12, 12, 910, 402, 449, 27, 27, 250, 971, 971, + /* 690 */ 118, 716, 162, 969, 38, 38, 268, 176, 911, 771, + /* 700 */ 432, 1265, 939, 353, 39, 39, 316, 991, 324, 99, + /* 710 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98, + /* 720 */ 98, 98, 928, 96, 96, 96, 96, 95, 95, 94, + /* 730 */ 94, 94, 93, 350, 449, 329, 449, 357, 971, 971, + /* 740 */ 1041, 316, 929, 340, 893, 893, 386, 669, 670, 671, + /* 750 */ 275, 1318, 317, 992, 40, 40, 41, 41, 268, 99, + /* 760 */ 100, 90, 847, 850, 839, 839, 97, 97, 98, 98, + /* 770 */ 98, 98, 449, 96, 96, 96, 96, 95, 95, 94, + /* 780 */ 94, 94, 93, 350, 324, 449, 355, 449, 992, 449, + /* 790 */ 1016, 330, 42, 42, 786, 270, 449, 273, 449, 228, + /* 800 */ 449, 298, 449, 787, 449, 28, 28, 29, 29, 31, + /* 810 */ 31, 449, 1141, 449, 971, 971, 43, 43, 44, 44, + /* 820 */ 45, 45, 11, 11, 46, 46, 887, 78, 887, 268, + /* 830 */ 268, 105, 105, 47, 47, 99, 100, 90, 847, 850, + /* 840 */ 839, 839, 97, 97, 98, 98, 98, 98, 449, 96, + /* 850 */ 96, 96, 96, 95, 95, 94, 94, 94, 93, 350, + /* 860 */ 324, 449, 117, 449, 1073, 158, 449, 691, 48, 48, + /* 870 */ 229, 1241, 449, 1250, 449, 414, 449, 334, 449, 245, + /* 880 */ 449, 33, 33, 49, 49, 449, 50, 50, 246, 1141, + /* 890 */ 971, 971, 34, 34, 122, 122, 123, 123, 124, 124, + /* 900 */ 56, 56, 268, 81, 249, 35, 35, 197, 196, 195, + /* 910 */ 324, 99, 100, 90, 847, 850, 839, 839, 97, 97, + /* 920 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95, + /* 930 */ 95, 94, 94, 94, 93, 350, 449, 691, 449, 1141, + /* 940 */ 971, 971, 968, 1207, 106, 106, 268, 1209, 268, 1266, + /* 950 */ 2, 886, 268, 886, 335, 1040, 53, 53, 107, 107, + /* 960 */ 324, 99, 100, 90, 847, 850, 839, 839, 97, 97, + /* 970 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95, + /* 980 */ 95, 94, 94, 94, 93, 350, 449, 1070, 449, 1066, + /* 990 */ 971, 971, 1039, 267, 108, 108, 445, 330, 331, 133, + /* 1000 */ 223, 175, 301, 225, 385, 1255, 104, 104, 121, 121, + /* 1010 */ 324, 99, 88, 90, 847, 850, 839, 839, 97, 97, + /* 1020 */ 98, 98, 98, 98, 1141, 96, 96, 96, 96, 95, + /* 1030 */ 95, 94, 94, 94, 93, 350, 449, 346, 449, 167, + /* 1040 */ 971, 971, 925, 810, 371, 318, 202, 202, 373, 263, + /* 1050 */ 394, 202, 74, 208, 721, 722, 119, 119, 112, 112, + /* 1060 */ 324, 406, 100, 90, 847, 850, 839, 839, 97, 97, + /* 1070 */ 98, 98, 98, 98, 449, 96, 96, 96, 96, 95, + /* 1080 */ 95, 94, 94, 94, 93, 350, 449, 752, 449, 344, + /* 1090 */ 971, 971, 751, 278, 111, 111, 74, 714, 713, 704, + /* 1100 */ 286, 877, 749, 1279, 257, 77, 109, 109, 110, 110, + /* 1110 */ 1230, 285, 1134, 90, 847, 850, 839, 839, 97, 97, + /* 1120 */ 98, 98, 98, 98, 1233, 96, 96, 96, 96, 95, + /* 1130 */ 95, 94, 94, 94, 93, 350, 86, 444, 449, 3, + /* 1140 */ 1193, 449, 1069, 132, 351, 120, 1013, 86, 444, 780, + /* 1150 */ 3, 1091, 202, 376, 447, 351, 1229, 120, 55, 55, + /* 1160 */ 449, 57, 57, 822, 873, 447, 449, 208, 449, 704, + /* 1170 */ 449, 877, 237, 433, 435, 120, 439, 428, 361, 120, + /* 1180 */ 54, 54, 132, 449, 433, 826, 52, 52, 26, 26, + /* 1190 */ 30, 30, 381, 132, 408, 443, 826, 689, 264, 389, + /* 1200 */ 116, 269, 272, 32, 32, 83, 84, 120, 274, 120, + /* 1210 */ 120, 276, 85, 351, 451, 450, 83, 84, 818, 1054, + /* 1220 */ 1038, 427, 429, 85, 351, 451, 450, 120, 120, 818, + /* 1230 */ 377, 218, 281, 822, 1107, 1140, 86, 444, 409, 3, + /* 1240 */ 1087, 1098, 430, 431, 351, 302, 303, 1146, 1021, 818, + /* 1250 */ 818, 820, 821, 19, 447, 1015, 1004, 1003, 1005, 1273, + /* 1260 */ 818, 818, 820, 821, 19, 289, 159, 291, 293, 7, + /* 1270 */ 315, 173, 259, 433, 1129, 363, 252, 1232, 375, 1037, + /* 1280 */ 295, 434, 168, 986, 399, 826, 284, 1204, 1203, 205, + /* 1290 */ 1276, 308, 1249, 86, 444, 983, 3, 1247, 332, 144, + /* 1300 */ 130, 351, 72, 135, 59, 83, 84, 756, 137, 365, + /* 1310 */ 1126, 447, 85, 351, 451, 450, 139, 226, 818, 140, + /* 1320 */ 156, 62, 314, 314, 313, 215, 311, 366, 392, 678, + /* 1330 */ 433, 185, 141, 1234, 142, 160, 148, 1136, 1198, 382, + /* 1340 */ 189, 67, 826, 180, 388, 248, 1218, 1099, 219, 818, + /* 1350 */ 818, 820, 821, 19, 247, 190, 266, 154, 390, 271, + /* 1360 */ 191, 192, 83, 84, 1006, 405, 1057, 182, 321, 85, + /* 1370 */ 351, 451, 450, 1056, 183, 818, 341, 132, 181, 706, + /* 1380 */ 1055, 420, 76, 444, 1029, 3, 322, 1028, 283, 1048, + /* 1390 */ 351, 1095, 1027, 1288, 1047, 71, 204, 6, 288, 290, + /* 1400 */ 447, 1096, 1094, 1093, 79, 292, 818, 818, 820, 821, + /* 1410 */ 19, 294, 297, 437, 345, 441, 102, 1184, 1077, 433, + /* 1420 */ 238, 425, 73, 305, 239, 304, 325, 240, 423, 306, + /* 1430 */ 307, 826, 213, 1012, 22, 945, 452, 214, 216, 217, + /* 1440 */ 453, 1001, 115, 996, 125, 126, 235, 127, 665, 352, + /* 1450 */ 326, 83, 84, 358, 166, 244, 179, 327, 85, 351, + /* 1460 */ 451, 450, 134, 356, 818, 113, 885, 806, 883, 136, + /* 1470 */ 128, 138, 738, 258, 184, 899, 143, 145, 63, 64, + /* 1480 */ 65, 66, 129, 902, 187, 186, 898, 8, 13, 188, + /* 1490 */ 265, 891, 149, 202, 980, 818, 818, 820, 821, 19, + /* 1500 */ 150, 387, 161, 680, 285, 391, 151, 395, 400, 193, + /* 1510 */ 68, 14, 236, 279, 15, 69, 717, 825, 131, 824, + /* 1520 */ 853, 70, 746, 16, 413, 750, 4, 174, 220, 222, + /* 1530 */ 152, 779, 857, 774, 201, 77, 74, 868, 17, 854, + /* 1540 */ 852, 908, 18, 907, 207, 206, 934, 163, 436, 210, + /* 1550 */ 935, 164, 209, 165, 440, 856, 823, 690, 87, 211, + /* 1560 */ 309, 312, 1281, 940, 1280, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 19, 95, 53, 97, 22, 24, 24, 101, 27, 28, - /* 10 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 20 */ 39, 40, 41, 152, 43, 44, 45, 46, 47, 48, - /* 30 */ 49, 50, 51, 52, 53, 19, 55, 55, 132, 133, - /* 40 */ 134, 1, 2, 27, 28, 29, 30, 31, 32, 33, - /* 50 */ 34, 35, 36, 37, 38, 39, 40, 41, 187, 43, - /* 60 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 70 */ 47, 48, 49, 50, 51, 52, 53, 61, 97, 97, - /* 80 */ 19, 49, 50, 51, 52, 53, 70, 26, 27, 28, - /* 90 */ 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - /* 100 */ 39, 40, 41, 152, 43, 44, 45, 46, 47, 48, - /* 110 */ 49, 50, 51, 52, 53, 144, 145, 146, 147, 19, - /* 120 */ 16, 22, 92, 172, 173, 52, 53, 27, 28, 29, - /* 130 */ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - /* 140 */ 40, 41, 81, 43, 44, 45, 46, 47, 48, 49, - /* 150 */ 50, 51, 52, 53, 55, 56, 19, 152, 207, 208, - /* 160 */ 115, 24, 117, 118, 27, 28, 29, 30, 31, 32, - /* 170 */ 33, 34, 35, 36, 37, 38, 39, 40, 41, 79, - /* 180 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 190 */ 53, 19, 88, 157, 90, 23, 97, 98, 193, 27, - /* 200 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 210 */ 38, 39, 40, 41, 152, 43, 44, 45, 46, 47, - /* 220 */ 48, 49, 50, 51, 52, 53, 19, 22, 23, 172, - /* 230 */ 23, 26, 119, 120, 27, 28, 29, 30, 31, 32, - /* 240 */ 33, 34, 35, 36, 37, 38, 39, 40, 41, 187, - /* 250 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 260 */ 53, 19, 22, 23, 228, 23, 26, 231, 152, 27, - /* 270 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 280 */ 38, 39, 40, 41, 172, 43, 44, 45, 46, 47, - /* 290 */ 48, 49, 50, 51, 52, 53, 19, 221, 222, 223, - /* 300 */ 23, 96, 152, 172, 27, 28, 29, 30, 31, 32, - /* 310 */ 33, 34, 35, 36, 37, 38, 39, 40, 41, 152, - /* 320 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 330 */ 53, 19, 0, 1, 2, 23, 96, 190, 191, 27, - /* 340 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 350 */ 38, 39, 40, 41, 238, 43, 44, 45, 46, 47, - /* 360 */ 48, 49, 50, 51, 52, 53, 19, 185, 218, 221, - /* 370 */ 222, 223, 152, 152, 27, 28, 29, 30, 31, 32, - /* 380 */ 33, 34, 35, 36, 37, 38, 39, 40, 41, 241, - /* 390 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 400 */ 53, 19, 152, 168, 169, 170, 22, 190, 191, 27, - /* 410 */ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - /* 420 */ 38, 39, 40, 41, 152, 43, 44, 45, 46, 47, - /* 430 */ 48, 49, 50, 51, 52, 53, 19, 19, 218, 55, - /* 440 */ 56, 24, 22, 152, 27, 28, 29, 30, 31, 32, - /* 450 */ 33, 34, 35, 36, 37, 38, 39, 40, 41, 152, - /* 460 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 470 */ 53, 250, 194, 195, 56, 55, 56, 55, 19, 172, - /* 480 */ 173, 97, 98, 152, 206, 138, 27, 28, 29, 30, - /* 490 */ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - /* 500 */ 41, 152, 43, 44, 45, 46, 47, 48, 49, 50, - /* 510 */ 51, 52, 53, 19, 207, 208, 152, 97, 98, 97, - /* 520 */ 138, 27, 28, 29, 30, 31, 32, 33, 34, 35, - /* 530 */ 36, 37, 38, 39, 40, 41, 181, 43, 44, 45, - /* 540 */ 46, 47, 48, 49, 50, 51, 52, 53, 19, 30, - /* 550 */ 31, 32, 33, 247, 248, 19, 152, 28, 29, 30, - /* 560 */ 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - /* 570 */ 41, 152, 43, 44, 45, 46, 47, 48, 49, 50, - /* 580 */ 51, 52, 53, 19, 168, 169, 170, 238, 19, 53, - /* 590 */ 152, 172, 173, 29, 30, 31, 32, 33, 34, 35, - /* 600 */ 36, 37, 38, 39, 40, 41, 152, 43, 44, 45, - /* 610 */ 46, 47, 48, 49, 50, 51, 52, 53, 19, 20, - /* 620 */ 101, 22, 23, 169, 170, 56, 207, 85, 55, 56, - /* 630 */ 23, 19, 20, 26, 22, 99, 100, 101, 102, 103, - /* 640 */ 104, 105, 238, 152, 152, 210, 47, 48, 112, 152, - /* 650 */ 108, 109, 110, 54, 55, 56, 221, 222, 223, 47, - /* 660 */ 48, 119, 120, 172, 173, 66, 54, 55, 56, 152, - /* 670 */ 97, 98, 99, 148, 149, 102, 103, 104, 66, 154, - /* 680 */ 23, 156, 83, 26, 230, 152, 113, 152, 163, 194, - /* 690 */ 195, 92, 92, 30, 95, 83, 97, 98, 207, 208, - /* 700 */ 101, 206, 179, 180, 92, 172, 173, 95, 152, 97, - /* 710 */ 98, 188, 99, 101, 219, 102, 103, 104, 152, 119, - /* 720 */ 120, 196, 55, 56, 19, 20, 113, 22, 193, 163, - /* 730 */ 11, 132, 133, 134, 135, 136, 24, 65, 172, 173, - /* 740 */ 207, 208, 250, 152, 132, 133, 134, 135, 136, 193, - /* 750 */ 78, 84, 47, 48, 49, 98, 199, 152, 86, 54, - /* 760 */ 55, 56, 196, 152, 97, 98, 209, 55, 163, 244, - /* 770 */ 107, 66, 152, 207, 208, 164, 175, 172, 173, 19, - /* 780 */ 20, 124, 22, 111, 38, 39, 40, 41, 83, 43, - /* 790 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 800 */ 95, 196, 97, 98, 85, 152, 101, 47, 48, 97, - /* 810 */ 85, 92, 207, 193, 54, 55, 56, 92, 49, 175, - /* 820 */ 55, 56, 221, 222, 223, 12, 66, 108, 109, 110, - /* 830 */ 137, 163, 139, 108, 109, 110, 26, 132, 133, 134, - /* 840 */ 135, 136, 152, 83, 43, 44, 45, 46, 47, 48, - /* 850 */ 49, 50, 51, 52, 53, 95, 26, 97, 98, 55, - /* 860 */ 56, 101, 97, 98, 196, 221, 222, 223, 146, 147, - /* 870 */ 57, 171, 152, 22, 26, 19, 20, 49, 22, 179, - /* 880 */ 108, 109, 110, 55, 56, 116, 73, 219, 75, 124, - /* 890 */ 121, 152, 132, 133, 134, 135, 136, 163, 85, 152, - /* 900 */ 232, 97, 98, 47, 48, 237, 55, 56, 98, 5, - /* 910 */ 54, 55, 56, 193, 10, 11, 12, 13, 14, 172, - /* 920 */ 173, 17, 66, 47, 48, 97, 98, 152, 124, 152, - /* 930 */ 196, 55, 56, 186, 124, 152, 106, 160, 152, 83, - /* 940 */ 152, 164, 152, 61, 22, 211, 212, 152, 97, 98, - /* 950 */ 152, 95, 70, 97, 98, 172, 173, 101, 172, 173, - /* 960 */ 172, 173, 172, 173, 60, 181, 62, 172, 173, 47, - /* 970 */ 48, 123, 186, 97, 98, 71, 100, 55, 56, 152, - /* 980 */ 181, 186, 21, 107, 152, 109, 82, 163, 132, 133, - /* 990 */ 134, 135, 136, 89, 16, 207, 92, 93, 19, 172, - /* 1000 */ 173, 169, 170, 195, 55, 56, 12, 152, 132, 30, - /* 1010 */ 134, 47, 48, 186, 206, 225, 152, 95, 114, 97, - /* 1020 */ 196, 245, 246, 101, 152, 38, 39, 40, 41, 42, - /* 1030 */ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - /* 1040 */ 53, 152, 163, 219, 152, 141, 97, 98, 193, 152, - /* 1050 */ 152, 57, 91, 164, 132, 133, 134, 152, 55, 152, - /* 1060 */ 152, 237, 230, 152, 103, 193, 88, 73, 90, 75, - /* 1070 */ 172, 173, 183, 152, 185, 196, 152, 172, 173, 172, - /* 1080 */ 173, 217, 152, 172, 173, 152, 107, 22, 152, 24, - /* 1090 */ 193, 112, 152, 172, 173, 152, 132, 242, 134, 152, - /* 1100 */ 97, 140, 152, 92, 152, 172, 173, 152, 172, 173, - /* 1110 */ 152, 100, 172, 173, 152, 172, 173, 152, 140, 172, - /* 1120 */ 173, 152, 172, 173, 172, 173, 152, 172, 173, 152, - /* 1130 */ 172, 173, 152, 152, 172, 173, 152, 172, 173, 213, - /* 1140 */ 152, 172, 173, 152, 152, 152, 172, 173, 152, 172, - /* 1150 */ 173, 152, 172, 173, 152, 210, 172, 173, 152, 26, - /* 1160 */ 172, 173, 152, 172, 173, 172, 173, 152, 172, 173, - /* 1170 */ 152, 172, 173, 152, 172, 173, 152, 59, 172, 173, - /* 1180 */ 152, 63, 172, 173, 152, 193, 152, 152, 152, 152, - /* 1190 */ 172, 173, 152, 172, 173, 77, 172, 173, 152, 152, - /* 1200 */ 172, 173, 152, 152, 172, 173, 172, 173, 172, 173, - /* 1210 */ 152, 22, 172, 173, 152, 152, 152, 22, 172, 173, - /* 1220 */ 152, 152, 152, 172, 173, 152, 7, 8, 9, 163, - /* 1230 */ 172, 173, 22, 23, 172, 173, 172, 173, 166, 167, - /* 1240 */ 172, 173, 172, 173, 55, 172, 173, 22, 23, 108, - /* 1250 */ 109, 110, 217, 152, 217, 166, 167, 163, 163, 163, - /* 1260 */ 163, 163, 196, 130, 217, 211, 212, 217, 116, 23, - /* 1270 */ 22, 101, 26, 121, 23, 23, 23, 26, 26, 26, - /* 1280 */ 23, 23, 112, 26, 26, 37, 97, 100, 101, 55, - /* 1290 */ 196, 196, 196, 196, 196, 23, 23, 55, 26, 26, - /* 1300 */ 7, 8, 23, 152, 23, 26, 96, 26, 132, 132, - /* 1310 */ 134, 134, 23, 152, 152, 26, 152, 122, 152, 191, - /* 1320 */ 152, 96, 234, 152, 152, 152, 152, 152, 197, 210, - /* 1330 */ 152, 97, 152, 152, 210, 233, 210, 198, 150, 97, - /* 1340 */ 184, 201, 239, 214, 214, 201, 239, 180, 214, 227, - /* 1350 */ 200, 198, 155, 67, 243, 176, 69, 175, 175, 175, - /* 1360 */ 122, 159, 159, 240, 159, 240, 22, 220, 27, 130, - /* 1370 */ 201, 18, 159, 18, 189, 158, 158, 220, 192, 159, - /* 1380 */ 137, 236, 192, 192, 192, 189, 74, 189, 159, 235, - /* 1390 */ 159, 158, 22, 177, 201, 201, 159, 107, 158, 177, - /* 1400 */ 159, 174, 158, 76, 174, 182, 174, 106, 182, 125, - /* 1410 */ 174, 107, 177, 22, 159, 216, 215, 137, 159, 53, - /* 1420 */ 216, 176, 215, 174, 174, 216, 215, 215, 174, 229, - /* 1430 */ 216, 129, 224, 177, 126, 229, 127, 177, 128, 25, - /* 1440 */ 162, 226, 26, 161, 13, 153, 6, 153, 151, 151, - /* 1450 */ 151, 151, 205, 165, 178, 178, 165, 4, 3, 22, - /* 1460 */ 165, 142, 15, 94, 202, 204, 203, 201, 16, 23, - /* 1470 */ 249, 23, 120, 249, 246, 111, 131, 123, 20, 16, - /* 1480 */ 1, 125, 123, 111, 56, 64, 37, 37, 131, 122, - /* 1490 */ 1, 37, 5, 37, 22, 107, 26, 80, 140, 80, - /* 1500 */ 87, 72, 107, 20, 24, 19, 112, 105, 23, 79, - /* 1510 */ 22, 79, 22, 22, 22, 58, 22, 79, 23, 68, - /* 1520 */ 23, 23, 26, 116, 22, 26, 23, 22, 122, 23, - /* 1530 */ 23, 56, 64, 22, 124, 26, 26, 64, 64, 23, - /* 1540 */ 23, 23, 23, 11, 23, 22, 26, 23, 22, 24, - /* 1550 */ 1, 23, 22, 26, 251, 24, 23, 22, 122, 23, - /* 1560 */ 23, 22, 15, 122, 122, 122, 23, + /* 0 */ 19, 115, 19, 117, 118, 24, 1, 2, 27, 79, + /* 10 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 20 */ 90, 91, 92, 93, 94, 144, 145, 146, 147, 58, + /* 30 */ 49, 50, 79, 80, 81, 82, 22, 84, 85, 86, + /* 40 */ 87, 88, 89, 90, 91, 92, 93, 94, 221, 222, + /* 50 */ 223, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 60 */ 79, 80, 81, 82, 94, 84, 85, 86, 87, 88, + /* 70 */ 89, 90, 91, 92, 93, 94, 19, 94, 97, 108, + /* 80 */ 109, 110, 99, 100, 101, 102, 103, 104, 105, 32, + /* 90 */ 119, 120, 78, 27, 152, 112, 93, 94, 41, 88, + /* 100 */ 89, 90, 91, 92, 93, 94, 49, 50, 84, 85, + /* 110 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 58, + /* 120 */ 157, 119, 120, 163, 68, 163, 65, 70, 71, 72, + /* 130 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + /* 140 */ 152, 84, 85, 86, 87, 88, 89, 90, 91, 92, + /* 150 */ 93, 94, 19, 97, 88, 89, 196, 101, 196, 26, + /* 160 */ 172, 173, 96, 97, 98, 210, 100, 22, 152, 108, + /* 170 */ 109, 110, 27, 107, 27, 109, 221, 222, 223, 219, + /* 180 */ 238, 219, 49, 50, 152, 169, 170, 54, 132, 133, + /* 190 */ 134, 228, 232, 171, 231, 207, 208, 237, 132, 237, + /* 200 */ 134, 179, 19, 70, 71, 72, 73, 74, 75, 76, + /* 210 */ 77, 78, 79, 80, 81, 82, 152, 84, 85, 86, + /* 220 */ 87, 88, 89, 90, 91, 92, 93, 94, 27, 65, + /* 230 */ 30, 152, 49, 50, 34, 52, 90, 91, 92, 93, + /* 240 */ 94, 96, 97, 98, 97, 22, 230, 27, 48, 217, + /* 250 */ 27, 172, 173, 70, 71, 72, 73, 74, 75, 76, + /* 260 */ 77, 78, 79, 80, 81, 82, 172, 84, 85, 86, + /* 270 */ 87, 88, 89, 90, 91, 92, 93, 94, 19, 148, + /* 280 */ 149, 152, 218, 24, 152, 154, 207, 156, 172, 152, + /* 290 */ 22, 68, 27, 152, 163, 27, 164, 96, 97, 98, + /* 300 */ 99, 172, 173, 102, 103, 104, 169, 170, 49, 50, + /* 310 */ 90, 88, 89, 152, 113, 186, 96, 97, 98, 96, + /* 320 */ 97, 160, 57, 27, 101, 164, 137, 196, 139, 70, + /* 330 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 340 */ 81, 82, 11, 84, 85, 86, 87, 88, 89, 90, + /* 350 */ 91, 92, 93, 94, 19, 132, 133, 134, 23, 218, + /* 360 */ 152, 96, 97, 98, 96, 97, 98, 230, 99, 22, + /* 370 */ 152, 102, 103, 104, 27, 244, 152, 152, 27, 26, + /* 380 */ 152, 22, 113, 65, 49, 50, 27, 194, 195, 58, + /* 390 */ 172, 173, 96, 97, 98, 185, 65, 172, 173, 206, + /* 400 */ 172, 173, 190, 191, 186, 70, 71, 72, 73, 74, + /* 410 */ 75, 76, 77, 78, 79, 80, 81, 82, 175, 84, + /* 420 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 430 */ 19, 175, 207, 208, 23, 207, 208, 119, 120, 108, + /* 440 */ 109, 110, 27, 96, 97, 98, 116, 96, 97, 98, + /* 450 */ 152, 121, 152, 179, 180, 96, 97, 98, 250, 106, + /* 460 */ 49, 50, 188, 19, 221, 222, 223, 168, 169, 170, + /* 470 */ 172, 173, 172, 173, 250, 124, 172, 221, 222, 223, + /* 480 */ 26, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 490 */ 79, 80, 81, 82, 50, 84, 85, 86, 87, 88, + /* 500 */ 89, 90, 91, 92, 93, 94, 19, 207, 208, 12, + /* 510 */ 23, 96, 97, 98, 221, 222, 223, 194, 195, 152, + /* 520 */ 199, 23, 19, 225, 26, 28, 152, 152, 152, 206, + /* 530 */ 209, 164, 190, 191, 241, 152, 49, 50, 152, 124, + /* 540 */ 152, 44, 219, 46, 152, 21, 172, 173, 172, 173, + /* 550 */ 183, 107, 185, 16, 163, 58, 112, 70, 71, 72, + /* 560 */ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + /* 570 */ 152, 84, 85, 86, 87, 88, 89, 90, 91, 92, + /* 580 */ 93, 94, 19, 207, 130, 152, 23, 196, 64, 152, + /* 590 */ 172, 173, 22, 152, 24, 152, 98, 27, 61, 96, + /* 600 */ 63, 26, 211, 212, 186, 172, 173, 49, 50, 172, + /* 610 */ 173, 23, 49, 50, 26, 172, 173, 88, 89, 186, + /* 620 */ 24, 238, 124, 27, 238, 22, 23, 103, 187, 26, + /* 630 */ 152, 73, 74, 70, 71, 72, 73, 74, 75, 76, + /* 640 */ 77, 78, 79, 80, 81, 82, 152, 84, 85, 86, + /* 650 */ 87, 88, 89, 90, 91, 92, 93, 94, 19, 101, + /* 660 */ 152, 132, 23, 134, 140, 152, 12, 97, 36, 168, + /* 670 */ 169, 170, 69, 98, 152, 22, 23, 140, 50, 26, + /* 680 */ 172, 173, 28, 51, 152, 172, 173, 193, 49, 50, + /* 690 */ 22, 59, 24, 97, 172, 173, 152, 152, 44, 124, + /* 700 */ 46, 0, 1, 2, 172, 173, 22, 23, 19, 70, + /* 710 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 720 */ 81, 82, 69, 84, 85, 86, 87, 88, 89, 90, + /* 730 */ 91, 92, 93, 94, 152, 107, 152, 193, 49, 50, + /* 740 */ 181, 22, 23, 111, 108, 109, 110, 7, 8, 9, + /* 750 */ 16, 247, 248, 69, 172, 173, 172, 173, 152, 70, + /* 760 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + /* 770 */ 81, 82, 152, 84, 85, 86, 87, 88, 89, 90, + /* 780 */ 91, 92, 93, 94, 19, 152, 242, 152, 69, 152, + /* 790 */ 166, 167, 172, 173, 32, 61, 152, 63, 152, 193, + /* 800 */ 152, 152, 152, 41, 152, 172, 173, 172, 173, 172, + /* 810 */ 173, 152, 152, 152, 49, 50, 172, 173, 172, 173, + /* 820 */ 172, 173, 172, 173, 172, 173, 132, 138, 134, 152, + /* 830 */ 152, 172, 173, 172, 173, 70, 71, 72, 73, 74, + /* 840 */ 75, 76, 77, 78, 79, 80, 81, 82, 152, 84, + /* 850 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 860 */ 19, 152, 22, 152, 195, 24, 152, 27, 172, 173, + /* 870 */ 193, 193, 152, 152, 152, 206, 152, 217, 152, 152, + /* 880 */ 152, 172, 173, 172, 173, 152, 172, 173, 152, 152, + /* 890 */ 49, 50, 172, 173, 172, 173, 172, 173, 172, 173, + /* 900 */ 172, 173, 152, 138, 152, 172, 173, 108, 109, 110, + /* 910 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 920 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88, + /* 930 */ 89, 90, 91, 92, 93, 94, 152, 97, 152, 152, + /* 940 */ 49, 50, 26, 193, 172, 173, 152, 152, 152, 146, + /* 950 */ 147, 132, 152, 134, 217, 181, 172, 173, 172, 173, + /* 960 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 970 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88, + /* 980 */ 89, 90, 91, 92, 93, 94, 152, 193, 152, 193, + /* 990 */ 49, 50, 181, 193, 172, 173, 166, 167, 245, 246, + /* 1000 */ 211, 212, 152, 22, 217, 152, 172, 173, 172, 173, + /* 1010 */ 19, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 1020 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88, + /* 1030 */ 89, 90, 91, 92, 93, 94, 152, 187, 152, 123, + /* 1040 */ 49, 50, 23, 23, 23, 26, 26, 26, 23, 23, + /* 1050 */ 23, 26, 26, 26, 7, 8, 172, 173, 172, 173, + /* 1060 */ 19, 90, 71, 72, 73, 74, 75, 76, 77, 78, + /* 1070 */ 79, 80, 81, 82, 152, 84, 85, 86, 87, 88, + /* 1080 */ 89, 90, 91, 92, 93, 94, 152, 116, 152, 217, + /* 1090 */ 49, 50, 121, 23, 172, 173, 26, 100, 101, 27, + /* 1100 */ 101, 27, 23, 122, 152, 26, 172, 173, 172, 173, + /* 1110 */ 152, 112, 163, 72, 73, 74, 75, 76, 77, 78, + /* 1120 */ 79, 80, 81, 82, 163, 84, 85, 86, 87, 88, + /* 1130 */ 89, 90, 91, 92, 93, 94, 19, 20, 152, 22, + /* 1140 */ 23, 152, 163, 65, 27, 196, 163, 19, 20, 23, + /* 1150 */ 22, 213, 26, 19, 37, 27, 152, 196, 172, 173, + /* 1160 */ 152, 172, 173, 27, 23, 37, 152, 26, 152, 97, + /* 1170 */ 152, 97, 210, 56, 163, 196, 163, 163, 100, 196, + /* 1180 */ 172, 173, 65, 152, 56, 68, 172, 173, 172, 173, + /* 1190 */ 172, 173, 152, 65, 163, 163, 68, 23, 152, 234, + /* 1200 */ 26, 152, 152, 172, 173, 88, 89, 196, 152, 196, + /* 1210 */ 196, 152, 95, 96, 97, 98, 88, 89, 101, 152, + /* 1220 */ 152, 207, 208, 95, 96, 97, 98, 196, 196, 101, + /* 1230 */ 96, 233, 152, 97, 152, 152, 19, 20, 207, 22, + /* 1240 */ 152, 152, 152, 191, 27, 152, 152, 152, 152, 132, + /* 1250 */ 133, 134, 135, 136, 37, 152, 152, 152, 152, 152, + /* 1260 */ 132, 133, 134, 135, 136, 210, 197, 210, 210, 198, + /* 1270 */ 150, 184, 239, 56, 201, 214, 214, 201, 239, 180, + /* 1280 */ 214, 227, 198, 38, 176, 68, 175, 175, 175, 122, + /* 1290 */ 155, 200, 159, 19, 20, 40, 22, 159, 159, 22, + /* 1300 */ 70, 27, 130, 243, 240, 88, 89, 90, 189, 18, + /* 1310 */ 201, 37, 95, 96, 97, 98, 192, 5, 101, 192, + /* 1320 */ 220, 240, 10, 11, 12, 13, 14, 159, 18, 17, + /* 1330 */ 56, 158, 192, 201, 192, 220, 189, 189, 201, 159, + /* 1340 */ 158, 137, 68, 31, 45, 33, 236, 159, 159, 132, + /* 1350 */ 133, 134, 135, 136, 42, 158, 235, 22, 177, 159, + /* 1360 */ 158, 158, 88, 89, 159, 107, 174, 55, 177, 95, + /* 1370 */ 96, 97, 98, 174, 62, 101, 47, 65, 66, 106, + /* 1380 */ 174, 125, 19, 20, 174, 22, 177, 176, 174, 182, + /* 1390 */ 27, 216, 174, 174, 182, 107, 159, 22, 215, 215, + /* 1400 */ 37, 216, 216, 216, 137, 215, 132, 133, 134, 135, + /* 1410 */ 136, 215, 159, 177, 94, 177, 129, 224, 205, 56, + /* 1420 */ 226, 126, 128, 203, 229, 204, 114, 229, 127, 202, + /* 1430 */ 201, 68, 25, 162, 26, 13, 161, 153, 153, 6, + /* 1440 */ 151, 151, 178, 151, 165, 165, 178, 165, 4, 3, + /* 1450 */ 249, 88, 89, 141, 22, 142, 15, 249, 95, 96, + /* 1460 */ 97, 98, 246, 67, 101, 16, 23, 120, 23, 131, + /* 1470 */ 111, 123, 20, 16, 125, 1, 123, 131, 78, 78, + /* 1480 */ 78, 78, 111, 96, 122, 35, 1, 5, 22, 107, + /* 1490 */ 140, 53, 53, 26, 60, 132, 133, 134, 135, 136, + /* 1500 */ 107, 43, 24, 20, 112, 19, 22, 52, 52, 105, + /* 1510 */ 22, 22, 52, 23, 22, 22, 29, 23, 39, 23, + /* 1520 */ 23, 26, 116, 22, 26, 23, 22, 122, 23, 23, + /* 1530 */ 22, 96, 11, 124, 35, 26, 26, 23, 35, 23, + /* 1540 */ 23, 23, 35, 23, 22, 26, 23, 22, 24, 122, + /* 1550 */ 23, 22, 26, 22, 24, 23, 23, 23, 22, 122, + /* 1560 */ 23, 15, 122, 1, 122, }; -#define YY_SHIFT_USE_DFLT (1567) -#define YY_SHIFT_COUNT (455) -#define YY_SHIFT_MIN (-94) -#define YY_SHIFT_MAX (1549) +#define YY_SHIFT_USE_DFLT (1565) +#define YY_SHIFT_COUNT (454) +#define YY_SHIFT_MIN (-114) +#define YY_SHIFT_MAX (1562) static const short yy_shift_ofst[] = { - /* 0 */ 40, 599, 904, 612, 760, 760, 760, 760, 725, -19, - /* 10 */ 16, 16, 100, 760, 760, 760, 760, 760, 760, 760, - /* 20 */ 876, 876, 573, 542, 719, 600, 61, 137, 172, 207, - /* 30 */ 242, 277, 312, 347, 382, 417, 459, 459, 459, 459, - /* 40 */ 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, - /* 50 */ 459, 459, 459, 494, 459, 529, 564, 564, 705, 760, - /* 60 */ 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, - /* 70 */ 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, - /* 80 */ 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, - /* 90 */ 856, 760, 760, 760, 760, 760, 760, 760, 760, 760, - /* 100 */ 760, 760, 760, 760, 987, 746, 746, 746, 746, 746, - /* 110 */ 801, 23, 32, 949, 961, 979, 964, 964, 949, 73, - /* 120 */ 113, -51, 1567, 1567, 1567, 536, 536, 536, 99, 99, - /* 130 */ 813, 813, 667, 205, 240, 949, 949, 949, 949, 949, - /* 140 */ 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, - /* 150 */ 949, 949, 949, 949, 949, 332, 1011, 422, 422, 113, - /* 160 */ 30, 30, 30, 30, 30, 30, 1567, 1567, 1567, 922, - /* 170 */ -94, -94, 384, 613, 828, 420, 765, 804, 851, 949, - /* 180 */ 949, 949, 949, 949, 949, 949, 949, 949, 949, 949, - /* 190 */ 949, 949, 949, 949, 949, 672, 672, 672, 949, 949, - /* 200 */ 657, 949, 949, 949, -18, 949, 949, 994, 949, 949, - /* 210 */ 949, 949, 949, 949, 949, 949, 949, 949, 772, 1118, - /* 220 */ 712, 712, 712, 810, 45, 769, 1219, 1133, 418, 418, - /* 230 */ 569, 1133, 569, 830, 607, 663, 882, 418, 693, 882, - /* 240 */ 882, 848, 1152, 1065, 1286, 1238, 1238, 1287, 1287, 1238, - /* 250 */ 1344, 1341, 1239, 1353, 1353, 1353, 1353, 1238, 1355, 1239, - /* 260 */ 1344, 1341, 1341, 1239, 1238, 1355, 1243, 1312, 1238, 1238, - /* 270 */ 1355, 1370, 1238, 1355, 1238, 1355, 1370, 1290, 1290, 1290, - /* 280 */ 1327, 1370, 1290, 1301, 1290, 1327, 1290, 1290, 1284, 1304, - /* 290 */ 1284, 1304, 1284, 1304, 1284, 1304, 1238, 1391, 1238, 1280, - /* 300 */ 1370, 1366, 1366, 1370, 1302, 1308, 1310, 1309, 1239, 1414, - /* 310 */ 1416, 1431, 1431, 1440, 1440, 1440, 1440, 1567, 1567, 1567, - /* 320 */ 1567, 1567, 1567, 1567, 1567, 519, 978, 1210, 1225, 104, - /* 330 */ 1141, 1189, 1246, 1248, 1251, 1252, 1253, 1257, 1258, 1273, - /* 340 */ 1003, 1187, 1293, 1170, 1272, 1279, 1234, 1281, 1176, 1177, - /* 350 */ 1289, 1242, 1195, 1453, 1455, 1437, 1319, 1447, 1369, 1452, - /* 360 */ 1446, 1448, 1352, 1345, 1364, 1354, 1458, 1356, 1463, 1479, - /* 370 */ 1359, 1357, 1449, 1450, 1454, 1456, 1372, 1428, 1421, 1367, - /* 380 */ 1489, 1487, 1472, 1388, 1358, 1417, 1470, 1419, 1413, 1429, - /* 390 */ 1395, 1480, 1483, 1486, 1394, 1402, 1488, 1430, 1490, 1491, - /* 400 */ 1485, 1492, 1432, 1457, 1494, 1438, 1451, 1495, 1497, 1498, - /* 410 */ 1496, 1407, 1502, 1503, 1505, 1499, 1406, 1506, 1507, 1475, - /* 420 */ 1468, 1511, 1410, 1509, 1473, 1510, 1474, 1516, 1509, 1517, - /* 430 */ 1518, 1519, 1520, 1521, 1523, 1532, 1524, 1526, 1525, 1527, - /* 440 */ 1528, 1530, 1531, 1527, 1533, 1535, 1536, 1537, 1539, 1436, - /* 450 */ 1441, 1442, 1443, 1543, 1547, 1549, + /* 0 */ 5, 1117, 1312, 1128, 1274, 1274, 1274, 1274, 61, -19, + /* 10 */ 57, 57, 183, 1274, 1274, 1274, 1274, 1274, 1274, 1274, + /* 20 */ 66, 66, 201, -29, 331, 318, 133, 259, 335, 411, + /* 30 */ 487, 563, 639, 689, 765, 841, 891, 891, 891, 891, + /* 40 */ 891, 891, 891, 891, 891, 891, 891, 891, 891, 891, + /* 50 */ 891, 891, 891, 941, 891, 991, 1041, 1041, 1217, 1274, + /* 60 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, + /* 70 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, + /* 80 */ 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, + /* 90 */ 1363, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, + /* 100 */ 1274, 1274, 1274, 1274, -70, -47, -47, -47, -47, -47, + /* 110 */ 24, 11, 146, 296, 524, 444, 529, 529, 296, 3, + /* 120 */ 2, -30, 1565, 1565, 1565, -17, -17, -17, 145, 145, + /* 130 */ 497, 497, 265, 603, 653, 296, 296, 296, 296, 296, + /* 140 */ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + /* 150 */ 296, 296, 296, 296, 296, 701, 1078, 147, 147, 2, + /* 160 */ 164, 164, 164, 164, 164, 164, 1565, 1565, 1565, 223, + /* 170 */ 56, 56, 268, 269, 220, 347, 351, 415, 359, 296, + /* 180 */ 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, + /* 190 */ 296, 296, 296, 296, 296, 632, 632, 632, 296, 296, + /* 200 */ 498, 296, 296, 296, 570, 296, 296, 654, 296, 296, + /* 210 */ 296, 296, 296, 296, 296, 296, 296, 296, 636, 200, + /* 220 */ 596, 596, 596, 575, -114, 971, 740, 454, 503, 503, + /* 230 */ 1134, 454, 1134, 353, 588, 628, 762, 503, 189, 762, + /* 240 */ 762, 916, 330, 668, 1245, 1167, 1167, 1255, 1255, 1167, + /* 250 */ 1277, 1230, 1172, 1291, 1291, 1291, 1291, 1167, 1310, 1172, + /* 260 */ 1277, 1230, 1230, 1172, 1167, 1310, 1204, 1299, 1167, 1167, + /* 270 */ 1310, 1335, 1167, 1310, 1167, 1310, 1335, 1258, 1258, 1258, + /* 280 */ 1329, 1335, 1258, 1273, 1258, 1329, 1258, 1258, 1256, 1288, + /* 290 */ 1256, 1288, 1256, 1288, 1256, 1288, 1167, 1375, 1167, 1267, + /* 300 */ 1335, 1320, 1320, 1335, 1287, 1295, 1294, 1301, 1172, 1407, + /* 310 */ 1408, 1422, 1422, 1433, 1433, 1433, 1565, 1565, 1565, 1565, + /* 320 */ 1565, 1565, 1565, 1565, 558, 537, 684, 719, 734, 799, + /* 330 */ 840, 1019, 14, 1020, 1021, 1025, 1026, 1027, 1070, 1072, + /* 340 */ 997, 1047, 999, 1079, 1126, 1074, 1141, 694, 819, 1174, + /* 350 */ 1136, 981, 1444, 1446, 1432, 1313, 1441, 1396, 1449, 1443, + /* 360 */ 1445, 1347, 1338, 1359, 1348, 1452, 1349, 1457, 1474, 1353, + /* 370 */ 1346, 1400, 1401, 1402, 1403, 1371, 1387, 1450, 1362, 1485, + /* 380 */ 1482, 1466, 1382, 1350, 1438, 1467, 1439, 1434, 1458, 1393, + /* 390 */ 1478, 1483, 1486, 1392, 1404, 1484, 1455, 1488, 1489, 1490, + /* 400 */ 1492, 1456, 1487, 1493, 1460, 1479, 1494, 1496, 1497, 1495, + /* 410 */ 1406, 1501, 1502, 1504, 1498, 1405, 1505, 1506, 1435, 1499, + /* 420 */ 1508, 1409, 1509, 1503, 1510, 1507, 1514, 1509, 1516, 1517, + /* 430 */ 1518, 1519, 1520, 1522, 1521, 1523, 1525, 1524, 1526, 1527, + /* 440 */ 1529, 1530, 1526, 1532, 1531, 1533, 1534, 1536, 1427, 1437, + /* 450 */ 1440, 1442, 1537, 1546, 1562, }; -#define YY_REDUCE_USE_DFLT (-130) -#define YY_REDUCE_COUNT (324) -#define YY_REDUCE_MIN (-129) -#define YY_REDUCE_MAX (1300) +#define YY_REDUCE_USE_DFLT (-174) +#define YY_REDUCE_COUNT (323) +#define YY_REDUCE_MIN (-173) +#define YY_REDUCE_MAX (1292) static const short yy_reduce_ofst[] = { - /* 0 */ -29, 566, 525, 605, -49, 307, 491, 533, 668, 435, - /* 10 */ 601, 644, 148, 747, 786, 795, 419, 788, 827, 790, - /* 20 */ 454, 832, 889, 495, 824, 734, 76, 76, 76, 76, - /* 30 */ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - /* 40 */ 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - /* 50 */ 76, 76, 76, 76, 76, 76, 76, 76, 783, 898, - /* 60 */ 905, 907, 911, 921, 933, 936, 940, 943, 947, 950, - /* 70 */ 952, 955, 958, 962, 965, 969, 974, 977, 980, 984, - /* 80 */ 988, 991, 993, 996, 999, 1002, 1006, 1010, 1018, 1021, - /* 90 */ 1024, 1028, 1032, 1034, 1036, 1040, 1046, 1051, 1058, 1062, - /* 100 */ 1064, 1068, 1070, 1073, 76, 76, 76, 76, 76, 76, - /* 110 */ 76, 76, 76, 855, 36, 523, 235, 416, 777, 76, - /* 120 */ 278, 76, 76, 76, 76, 700, 700, 700, 150, 220, - /* 130 */ 147, 217, 221, 306, 306, 611, 5, 535, 556, 620, - /* 140 */ 720, 872, 897, 116, 864, 349, 1035, 1037, 404, 1047, - /* 150 */ 992, -129, 1050, 492, 62, 722, 879, 1072, 1089, 808, - /* 160 */ 1066, 1094, 1095, 1096, 1097, 1098, 776, 1054, 557, 57, - /* 170 */ 112, 131, 167, 182, 250, 272, 291, 331, 364, 438, - /* 180 */ 497, 517, 591, 653, 690, 739, 775, 798, 892, 908, - /* 190 */ 924, 930, 1015, 1063, 1069, 355, 784, 799, 981, 1101, - /* 200 */ 926, 1151, 1161, 1162, 945, 1164, 1166, 1128, 1168, 1171, - /* 210 */ 1172, 250, 1173, 1174, 1175, 1178, 1180, 1181, 1088, 1102, - /* 220 */ 1119, 1124, 1126, 926, 1131, 1139, 1188, 1140, 1129, 1130, - /* 230 */ 1103, 1144, 1107, 1179, 1156, 1167, 1182, 1134, 1122, 1183, - /* 240 */ 1184, 1150, 1153, 1197, 1111, 1202, 1203, 1123, 1125, 1205, - /* 250 */ 1147, 1185, 1169, 1186, 1190, 1191, 1192, 1213, 1217, 1193, - /* 260 */ 1157, 1196, 1198, 1194, 1220, 1218, 1145, 1154, 1229, 1231, - /* 270 */ 1233, 1216, 1237, 1240, 1241, 1244, 1222, 1227, 1230, 1232, - /* 280 */ 1223, 1235, 1236, 1245, 1249, 1226, 1250, 1254, 1199, 1201, - /* 290 */ 1204, 1207, 1209, 1211, 1214, 1212, 1255, 1208, 1259, 1215, - /* 300 */ 1256, 1200, 1206, 1260, 1247, 1261, 1263, 1262, 1266, 1278, - /* 310 */ 1282, 1292, 1294, 1297, 1298, 1299, 1300, 1221, 1224, 1228, - /* 320 */ 1288, 1291, 1276, 1277, 1295, + /* 0 */ -119, 1014, 131, 1031, -12, 225, 228, 300, -40, -45, + /* 10 */ 243, 256, 293, 129, 218, 418, 79, 376, 433, 298, + /* 20 */ 16, 137, 367, 323, -38, 391, -173, -173, -173, -173, + /* 30 */ -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + /* 40 */ -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + /* 50 */ -173, -173, -173, -173, -173, -173, -173, -173, 374, 437, + /* 60 */ 443, 508, 513, 522, 532, 582, 584, 620, 633, 635, + /* 70 */ 637, 644, 646, 648, 650, 652, 659, 661, 696, 709, + /* 80 */ 711, 714, 720, 722, 724, 726, 728, 733, 772, 784, + /* 90 */ 786, 822, 834, 836, 884, 886, 922, 934, 936, 986, + /* 100 */ 989, 1008, 1016, 1018, -173, -173, -173, -173, -173, -173, + /* 110 */ -173, -173, -173, 544, -37, 274, 299, 501, 161, -173, + /* 120 */ 193, -173, -173, -173, -173, 22, 22, 22, 64, 141, + /* 130 */ 212, 342, 208, 504, 504, 132, 494, 606, 677, 678, + /* 140 */ 750, 794, 796, -58, 32, 383, 660, 737, 386, 787, + /* 150 */ 800, 441, 872, 224, 850, 803, 949, 624, 830, 669, + /* 160 */ 961, 979, 983, 1011, 1013, 1032, 753, 789, 321, 94, + /* 170 */ 116, 304, 375, 210, 388, 392, 478, 545, 649, 721, + /* 180 */ 727, 736, 752, 795, 853, 952, 958, 1004, 1040, 1046, + /* 190 */ 1049, 1050, 1056, 1059, 1067, 559, 774, 811, 1068, 1080, + /* 200 */ 938, 1082, 1083, 1088, 962, 1089, 1090, 1052, 1093, 1094, + /* 210 */ 1095, 388, 1096, 1103, 1104, 1105, 1106, 1107, 965, 998, + /* 220 */ 1055, 1057, 1058, 938, 1069, 1071, 1120, 1073, 1061, 1062, + /* 230 */ 1033, 1076, 1039, 1108, 1087, 1099, 1111, 1066, 1054, 1112, + /* 240 */ 1113, 1091, 1084, 1135, 1060, 1133, 1138, 1064, 1081, 1139, + /* 250 */ 1100, 1119, 1109, 1124, 1127, 1140, 1142, 1168, 1173, 1132, + /* 260 */ 1115, 1147, 1148, 1137, 1180, 1182, 1110, 1121, 1188, 1189, + /* 270 */ 1197, 1181, 1200, 1202, 1205, 1203, 1191, 1192, 1199, 1206, + /* 280 */ 1207, 1209, 1210, 1211, 1214, 1212, 1218, 1219, 1175, 1183, + /* 290 */ 1185, 1184, 1186, 1190, 1187, 1196, 1237, 1193, 1253, 1194, + /* 300 */ 1236, 1195, 1198, 1238, 1213, 1221, 1220, 1227, 1229, 1271, + /* 310 */ 1275, 1284, 1285, 1289, 1290, 1292, 1201, 1208, 1216, 1279, + /* 320 */ 1280, 1264, 1268, 1282, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1281, 1271, 1271, 1271, 1203, 1203, 1203, 1203, 1271, 1096, - /* 10 */ 1125, 1125, 1255, 1332, 1332, 1332, 1332, 1332, 1332, 1202, - /* 20 */ 1332, 1332, 1332, 1332, 1271, 1100, 1131, 1332, 1332, 1332, - /* 30 */ 1332, 1204, 1205, 1332, 1332, 1332, 1254, 1256, 1141, 1140, - /* 40 */ 1139, 1138, 1237, 1112, 1136, 1129, 1133, 1204, 1198, 1199, - /* 50 */ 1197, 1201, 1205, 1332, 1132, 1167, 1182, 1166, 1332, 1332, - /* 60 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 70 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 80 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 90 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 100 */ 1332, 1332, 1332, 1332, 1176, 1181, 1188, 1180, 1177, 1169, - /* 110 */ 1168, 1170, 1171, 1332, 1019, 1067, 1332, 1332, 1332, 1172, - /* 120 */ 1332, 1173, 1185, 1184, 1183, 1262, 1289, 1288, 1332, 1332, - /* 130 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 140 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 150 */ 1332, 1332, 1332, 1332, 1332, 1281, 1271, 1025, 1025, 1332, - /* 160 */ 1271, 1271, 1271, 1271, 1271, 1271, 1267, 1100, 1091, 1332, - /* 170 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 180 */ 1259, 1257, 1332, 1218, 1332, 1332, 1332, 1332, 1332, 1332, - /* 190 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 200 */ 1332, 1332, 1332, 1332, 1096, 1332, 1332, 1332, 1332, 1332, - /* 210 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1283, 1332, 1232, - /* 220 */ 1096, 1096, 1096, 1098, 1080, 1090, 1004, 1135, 1114, 1114, - /* 230 */ 1321, 1135, 1321, 1042, 1303, 1039, 1125, 1114, 1200, 1125, - /* 240 */ 1125, 1097, 1090, 1332, 1324, 1105, 1105, 1323, 1323, 1105, - /* 250 */ 1146, 1070, 1135, 1076, 1076, 1076, 1076, 1105, 1016, 1135, - /* 260 */ 1146, 1070, 1070, 1135, 1105, 1016, 1236, 1318, 1105, 1105, - /* 270 */ 1016, 1211, 1105, 1016, 1105, 1016, 1211, 1068, 1068, 1068, - /* 280 */ 1057, 1211, 1068, 1042, 1068, 1057, 1068, 1068, 1118, 1113, - /* 290 */ 1118, 1113, 1118, 1113, 1118, 1113, 1105, 1206, 1105, 1332, - /* 300 */ 1211, 1215, 1215, 1211, 1130, 1119, 1128, 1126, 1135, 1022, - /* 310 */ 1060, 1286, 1286, 1282, 1282, 1282, 1282, 1329, 1329, 1267, - /* 320 */ 1298, 1298, 1044, 1044, 1298, 1332, 1332, 1332, 1332, 1332, - /* 330 */ 1332, 1293, 1332, 1220, 1332, 1332, 1332, 1332, 1332, 1332, - /* 340 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 350 */ 1332, 1332, 1152, 1332, 1000, 1264, 1332, 1332, 1263, 1332, - /* 360 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 370 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1320, - /* 380 */ 1332, 1332, 1332, 1332, 1332, 1332, 1235, 1234, 1332, 1332, - /* 390 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 400 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, - /* 410 */ 1332, 1082, 1332, 1332, 1332, 1307, 1332, 1332, 1332, 1332, - /* 420 */ 1332, 1332, 1332, 1127, 1332, 1120, 1332, 1332, 1311, 1332, - /* 430 */ 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1273, - /* 440 */ 1332, 1332, 1332, 1272, 1332, 1332, 1332, 1332, 1332, 1154, - /* 450 */ 1332, 1153, 1157, 1332, 1010, 1332, + /* 0 */ 1270, 1260, 1260, 1260, 1193, 1193, 1193, 1193, 1260, 1088, + /* 10 */ 1117, 1117, 1244, 1322, 1322, 1322, 1322, 1322, 1322, 1192, + /* 20 */ 1322, 1322, 1322, 1322, 1260, 1092, 1123, 1322, 1322, 1322, + /* 30 */ 1322, 1194, 1195, 1322, 1322, 1322, 1243, 1245, 1133, 1132, + /* 40 */ 1131, 1130, 1226, 1104, 1128, 1121, 1125, 1194, 1188, 1189, + /* 50 */ 1187, 1191, 1195, 1322, 1124, 1158, 1172, 1157, 1322, 1322, + /* 60 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 70 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 80 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 90 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 100 */ 1322, 1322, 1322, 1322, 1166, 1171, 1178, 1170, 1167, 1160, + /* 110 */ 1159, 1161, 1162, 1322, 1011, 1059, 1322, 1322, 1322, 1163, + /* 120 */ 1322, 1164, 1175, 1174, 1173, 1251, 1278, 1277, 1322, 1322, + /* 130 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 140 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 150 */ 1322, 1322, 1322, 1322, 1322, 1270, 1260, 1017, 1017, 1322, + /* 160 */ 1260, 1260, 1260, 1260, 1260, 1260, 1256, 1092, 1083, 1322, + /* 170 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 180 */ 1248, 1246, 1322, 1208, 1322, 1322, 1322, 1322, 1322, 1322, + /* 190 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 200 */ 1322, 1322, 1322, 1322, 1088, 1322, 1322, 1322, 1322, 1322, + /* 210 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1272, 1322, 1221, + /* 220 */ 1088, 1088, 1088, 1090, 1072, 1082, 997, 1127, 1106, 1106, + /* 230 */ 1311, 1127, 1311, 1034, 1292, 1031, 1117, 1106, 1190, 1117, + /* 240 */ 1117, 1089, 1082, 1322, 1314, 1097, 1097, 1313, 1313, 1097, + /* 250 */ 1138, 1062, 1127, 1068, 1068, 1068, 1068, 1097, 1008, 1127, + /* 260 */ 1138, 1062, 1062, 1127, 1097, 1008, 1225, 1308, 1097, 1097, + /* 270 */ 1008, 1201, 1097, 1008, 1097, 1008, 1201, 1060, 1060, 1060, + /* 280 */ 1049, 1201, 1060, 1034, 1060, 1049, 1060, 1060, 1110, 1105, + /* 290 */ 1110, 1105, 1110, 1105, 1110, 1105, 1097, 1196, 1097, 1322, + /* 300 */ 1201, 1205, 1205, 1201, 1122, 1111, 1120, 1118, 1127, 1014, + /* 310 */ 1052, 1275, 1275, 1271, 1271, 1271, 1319, 1319, 1256, 1287, + /* 320 */ 1287, 1036, 1036, 1287, 1322, 1322, 1322, 1322, 1322, 1322, + /* 330 */ 1282, 1322, 1210, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 340 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 350 */ 1322, 1143, 1322, 993, 1253, 1322, 1322, 1252, 1322, 1322, + /* 360 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 370 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1310, 1322, + /* 380 */ 1322, 1322, 1322, 1322, 1322, 1224, 1223, 1322, 1322, 1322, + /* 390 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 400 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, + /* 410 */ 1074, 1322, 1322, 1322, 1296, 1322, 1322, 1322, 1322, 1322, + /* 420 */ 1322, 1322, 1119, 1322, 1112, 1322, 1322, 1301, 1322, 1322, + /* 430 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1262, 1322, + /* 440 */ 1322, 1322, 1261, 1322, 1322, 1322, 1322, 1322, 1145, 1322, + /* 450 */ 1144, 1148, 1322, 1002, 1322, }; /********** End of lemon-generated parsing tables *****************************/ @@ -134773,100 +137415,73 @@ static const YYACTIONTYPE yy_default[] = { static const YYCODETYPE yyFallback[] = { 0, /* $ => nothing */ 0, /* SEMI => nothing */ - 55, /* EXPLAIN => ID */ - 55, /* QUERY => ID */ - 55, /* PLAN => ID */ - 55, /* BEGIN => ID */ + 27, /* EXPLAIN => ID */ + 27, /* QUERY => ID */ + 27, /* PLAN => ID */ + 27, /* BEGIN => ID */ 0, /* TRANSACTION => nothing */ - 55, /* DEFERRED => ID */ - 55, /* IMMEDIATE => ID */ - 55, /* EXCLUSIVE => ID */ + 27, /* DEFERRED => ID */ + 27, /* IMMEDIATE => ID */ + 27, /* EXCLUSIVE => ID */ 0, /* COMMIT => nothing */ - 55, /* END => ID */ - 55, /* ROLLBACK => ID */ - 55, /* SAVEPOINT => ID */ - 55, /* RELEASE => ID */ + 27, /* END => ID */ + 27, /* ROLLBACK => ID */ + 27, /* SAVEPOINT => ID */ + 27, /* RELEASE => ID */ 0, /* TO => nothing */ 0, /* TABLE => nothing */ 0, /* CREATE => nothing */ - 55, /* IF => ID */ + 27, /* IF => ID */ 0, /* NOT => nothing */ 0, /* EXISTS => nothing */ - 55, /* TEMP => ID */ + 27, /* TEMP => ID */ 0, /* LP => nothing */ 0, /* RP => nothing */ 0, /* AS => nothing */ - 55, /* WITHOUT => ID */ + 27, /* WITHOUT => ID */ 0, /* COMMA => nothing */ - 0, /* OR => nothing */ - 0, /* AND => nothing */ - 0, /* IS => nothing */ - 55, /* MATCH => ID */ - 55, /* LIKE_KW => ID */ - 0, /* BETWEEN => nothing */ - 0, /* IN => nothing */ - 0, /* ISNULL => nothing */ - 0, /* NOTNULL => nothing */ - 0, /* NE => nothing */ - 0, /* EQ => nothing */ - 0, /* GT => nothing */ - 0, /* LE => nothing */ - 0, /* LT => nothing */ - 0, /* GE => nothing */ - 0, /* ESCAPE => nothing */ - 0, /* BITAND => nothing */ - 0, /* BITOR => nothing */ - 0, /* LSHIFT => nothing */ - 0, /* RSHIFT => nothing */ - 0, /* PLUS => nothing */ - 0, /* MINUS => nothing */ - 0, /* STAR => nothing */ - 0, /* SLASH => nothing */ - 0, /* REM => nothing */ - 0, /* CONCAT => nothing */ - 0, /* COLLATE => nothing */ - 0, /* BITNOT => nothing */ 0, /* ID => nothing */ - 0, /* INDEXED => nothing */ - 55, /* ABORT => ID */ - 55, /* ACTION => ID */ - 55, /* AFTER => ID */ - 55, /* ANALYZE => ID */ - 55, /* ASC => ID */ - 55, /* ATTACH => ID */ - 55, /* BEFORE => ID */ - 55, /* BY => ID */ - 55, /* CASCADE => ID */ - 55, /* CAST => ID */ - 55, /* COLUMNKW => ID */ - 55, /* CONFLICT => ID */ - 55, /* DATABASE => ID */ - 55, /* DESC => ID */ - 55, /* DETACH => ID */ - 55, /* EACH => ID */ - 55, /* FAIL => ID */ - 55, /* FOR => ID */ - 55, /* IGNORE => ID */ - 55, /* INITIALLY => ID */ - 55, /* INSTEAD => ID */ - 55, /* NO => ID */ - 55, /* KEY => ID */ - 55, /* OF => ID */ - 55, /* OFFSET => ID */ - 55, /* PRAGMA => ID */ - 55, /* RAISE => ID */ - 55, /* RECURSIVE => ID */ - 55, /* REPLACE => ID */ - 55, /* RESTRICT => ID */ - 55, /* ROW => ID */ - 55, /* TRIGGER => ID */ - 55, /* VACUUM => ID */ - 55, /* VIEW => ID */ - 55, /* VIRTUAL => ID */ - 55, /* WITH => ID */ - 55, /* REINDEX => ID */ - 55, /* RENAME => ID */ - 55, /* CTIME_KW => ID */ + 27, /* ABORT => ID */ + 27, /* ACTION => ID */ + 27, /* AFTER => ID */ + 27, /* ANALYZE => ID */ + 27, /* ASC => ID */ + 27, /* ATTACH => ID */ + 27, /* BEFORE => ID */ + 27, /* BY => ID */ + 27, /* CASCADE => ID */ + 27, /* CAST => ID */ + 27, /* COLUMNKW => ID */ + 27, /* CONFLICT => ID */ + 27, /* DATABASE => ID */ + 27, /* DESC => ID */ + 27, /* DETACH => ID */ + 27, /* EACH => ID */ + 27, /* FAIL => ID */ + 27, /* FOR => ID */ + 27, /* IGNORE => ID */ + 27, /* INITIALLY => ID */ + 27, /* INSTEAD => ID */ + 27, /* LIKE_KW => ID */ + 27, /* MATCH => ID */ + 27, /* NO => ID */ + 27, /* KEY => ID */ + 27, /* OF => ID */ + 27, /* OFFSET => ID */ + 27, /* PRAGMA => ID */ + 27, /* RAISE => ID */ + 27, /* RECURSIVE => ID */ + 27, /* REPLACE => ID */ + 27, /* RESTRICT => ID */ + 27, /* ROW => ID */ + 27, /* TRIGGER => ID */ + 27, /* VACUUM => ID */ + 27, /* VIEW => ID */ + 27, /* VIRTUAL => ID */ + 27, /* WITH => ID */ + 27, /* REINDEX => ID */ + 27, /* RENAME => ID */ + 27, /* CTIME_KW => ID */ }; #endif /* YYFALLBACK */ @@ -134912,6 +137527,7 @@ struct yyParser { yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ + yyStackEntry *yystackEnd; /* Last entry in the stack */ #endif }; typedef struct yyParser yyParser; @@ -134958,25 +137574,25 @@ static const char *const yyTokenName[] = { "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", "TABLE", "CREATE", "IF", "NOT", "EXISTS", "TEMP", "LP", "RP", - "AS", "WITHOUT", "COMMA", "OR", - "AND", "IS", "MATCH", "LIKE_KW", - "BETWEEN", "IN", "ISNULL", "NOTNULL", - "NE", "EQ", "GT", "LE", - "LT", "GE", "ESCAPE", "BITAND", - "BITOR", "LSHIFT", "RSHIFT", "PLUS", - "MINUS", "STAR", "SLASH", "REM", - "CONCAT", "COLLATE", "BITNOT", "ID", - "INDEXED", "ABORT", "ACTION", "AFTER", - "ANALYZE", "ASC", "ATTACH", "BEFORE", - "BY", "CASCADE", "CAST", "COLUMNKW", - "CONFLICT", "DATABASE", "DESC", "DETACH", - "EACH", "FAIL", "FOR", "IGNORE", - "INITIALLY", "INSTEAD", "NO", "KEY", - "OF", "OFFSET", "PRAGMA", "RAISE", - "RECURSIVE", "REPLACE", "RESTRICT", "ROW", - "TRIGGER", "VACUUM", "VIEW", "VIRTUAL", - "WITH", "REINDEX", "RENAME", "CTIME_KW", - "ANY", "STRING", "JOIN_KW", "CONSTRAINT", + "AS", "WITHOUT", "COMMA", "ID", + "ABORT", "ACTION", "AFTER", "ANALYZE", + "ASC", "ATTACH", "BEFORE", "BY", + "CASCADE", "CAST", "COLUMNKW", "CONFLICT", + "DATABASE", "DESC", "DETACH", "EACH", + "FAIL", "FOR", "IGNORE", "INITIALLY", + "INSTEAD", "LIKE_KW", "MATCH", "NO", + "KEY", "OF", "OFFSET", "PRAGMA", + "RAISE", "RECURSIVE", "REPLACE", "RESTRICT", + "ROW", "TRIGGER", "VACUUM", "VIEW", + "VIRTUAL", "WITH", "REINDEX", "RENAME", + "CTIME_KW", "ANY", "OR", "AND", + "IS", "BETWEEN", "IN", "ISNULL", + "NOTNULL", "NE", "EQ", "GT", + "LE", "LT", "GE", "ESCAPE", + "BITAND", "BITOR", "LSHIFT", "RSHIFT", + "PLUS", "MINUS", "STAR", "SLASH", + "REM", "CONCAT", "COLLATE", "BITNOT", + "INDEXED", "STRING", "JOIN_KW", "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY", "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR", "ON", "INSERT", "DELETE", "UPDATE", "SET", @@ -135030,330 +137646,327 @@ static const char *const yyRuleName[] = { /* 5 */ "transtype ::= DEFERRED", /* 6 */ "transtype ::= IMMEDIATE", /* 7 */ "transtype ::= EXCLUSIVE", - /* 8 */ "cmd ::= COMMIT trans_opt", - /* 9 */ "cmd ::= END trans_opt", - /* 10 */ "cmd ::= ROLLBACK trans_opt", - /* 11 */ "cmd ::= SAVEPOINT nm", - /* 12 */ "cmd ::= RELEASE savepoint_opt nm", - /* 13 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", - /* 14 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", - /* 15 */ "createkw ::= CREATE", - /* 16 */ "ifnotexists ::=", - /* 17 */ "ifnotexists ::= IF NOT EXISTS", - /* 18 */ "temp ::= TEMP", - /* 19 */ "temp ::=", - /* 20 */ "create_table_args ::= LP columnlist conslist_opt RP table_options", - /* 21 */ "create_table_args ::= AS select", - /* 22 */ "table_options ::=", - /* 23 */ "table_options ::= WITHOUT nm", - /* 24 */ "columnname ::= nm typetoken", - /* 25 */ "typetoken ::=", - /* 26 */ "typetoken ::= typename LP signed RP", - /* 27 */ "typetoken ::= typename LP signed COMMA signed RP", - /* 28 */ "typename ::= typename ID|STRING", - /* 29 */ "ccons ::= CONSTRAINT nm", - /* 30 */ "ccons ::= DEFAULT term", - /* 31 */ "ccons ::= DEFAULT LP expr RP", - /* 32 */ "ccons ::= DEFAULT PLUS term", - /* 33 */ "ccons ::= DEFAULT MINUS term", - /* 34 */ "ccons ::= DEFAULT ID|INDEXED", - /* 35 */ "ccons ::= NOT NULL onconf", - /* 36 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", - /* 37 */ "ccons ::= UNIQUE onconf", - /* 38 */ "ccons ::= CHECK LP expr RP", - /* 39 */ "ccons ::= REFERENCES nm eidlist_opt refargs", - /* 40 */ "ccons ::= defer_subclause", - /* 41 */ "ccons ::= COLLATE ID|STRING", - /* 42 */ "autoinc ::=", - /* 43 */ "autoinc ::= AUTOINCR", - /* 44 */ "refargs ::=", - /* 45 */ "refargs ::= refargs refarg", - /* 46 */ "refarg ::= MATCH nm", - /* 47 */ "refarg ::= ON INSERT refact", - /* 48 */ "refarg ::= ON DELETE refact", - /* 49 */ "refarg ::= ON UPDATE refact", - /* 50 */ "refact ::= SET NULL", - /* 51 */ "refact ::= SET DEFAULT", - /* 52 */ "refact ::= CASCADE", - /* 53 */ "refact ::= RESTRICT", - /* 54 */ "refact ::= NO ACTION", - /* 55 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", - /* 56 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", - /* 57 */ "init_deferred_pred_opt ::=", - /* 58 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", - /* 59 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", - /* 60 */ "conslist_opt ::=", - /* 61 */ "tconscomma ::= COMMA", - /* 62 */ "tcons ::= CONSTRAINT nm", - /* 63 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", - /* 64 */ "tcons ::= UNIQUE LP sortlist RP onconf", - /* 65 */ "tcons ::= CHECK LP expr RP onconf", - /* 66 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", - /* 67 */ "defer_subclause_opt ::=", - /* 68 */ "onconf ::=", - /* 69 */ "onconf ::= ON CONFLICT resolvetype", - /* 70 */ "orconf ::=", - /* 71 */ "orconf ::= OR resolvetype", - /* 72 */ "resolvetype ::= IGNORE", - /* 73 */ "resolvetype ::= REPLACE", - /* 74 */ "cmd ::= DROP TABLE ifexists fullname", - /* 75 */ "ifexists ::= IF EXISTS", - /* 76 */ "ifexists ::=", - /* 77 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", - /* 78 */ "cmd ::= DROP VIEW ifexists fullname", - /* 79 */ "cmd ::= select", - /* 80 */ "select ::= with selectnowith", - /* 81 */ "selectnowith ::= selectnowith multiselect_op oneselect", - /* 82 */ "multiselect_op ::= UNION", - /* 83 */ "multiselect_op ::= UNION ALL", - /* 84 */ "multiselect_op ::= EXCEPT|INTERSECT", - /* 85 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", - /* 86 */ "values ::= VALUES LP nexprlist RP", - /* 87 */ "values ::= values COMMA LP exprlist RP", - /* 88 */ "distinct ::= DISTINCT", - /* 89 */ "distinct ::= ALL", - /* 90 */ "distinct ::=", - /* 91 */ "sclp ::=", - /* 92 */ "selcollist ::= sclp expr as", - /* 93 */ "selcollist ::= sclp STAR", - /* 94 */ "selcollist ::= sclp nm DOT STAR", - /* 95 */ "as ::= AS nm", - /* 96 */ "as ::=", - /* 97 */ "from ::=", - /* 98 */ "from ::= FROM seltablist", - /* 99 */ "stl_prefix ::= seltablist joinop", - /* 100 */ "stl_prefix ::=", - /* 101 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", - /* 102 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", - /* 103 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", - /* 104 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", - /* 105 */ "dbnm ::=", - /* 106 */ "dbnm ::= DOT nm", - /* 107 */ "fullname ::= nm dbnm", - /* 108 */ "joinop ::= COMMA|JOIN", - /* 109 */ "joinop ::= JOIN_KW JOIN", - /* 110 */ "joinop ::= JOIN_KW nm JOIN", - /* 111 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 112 */ "on_opt ::= ON expr", - /* 113 */ "on_opt ::=", - /* 114 */ "indexed_opt ::=", - /* 115 */ "indexed_opt ::= INDEXED BY nm", - /* 116 */ "indexed_opt ::= NOT INDEXED", - /* 117 */ "using_opt ::= USING LP idlist RP", - /* 118 */ "using_opt ::=", - /* 119 */ "orderby_opt ::=", - /* 120 */ "orderby_opt ::= ORDER BY sortlist", - /* 121 */ "sortlist ::= sortlist COMMA expr sortorder", - /* 122 */ "sortlist ::= expr sortorder", - /* 123 */ "sortorder ::= ASC", - /* 124 */ "sortorder ::= DESC", - /* 125 */ "sortorder ::=", - /* 126 */ "groupby_opt ::=", - /* 127 */ "groupby_opt ::= GROUP BY nexprlist", - /* 128 */ "having_opt ::=", - /* 129 */ "having_opt ::= HAVING expr", - /* 130 */ "limit_opt ::=", - /* 131 */ "limit_opt ::= LIMIT expr", - /* 132 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 133 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 134 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt", - /* 135 */ "where_opt ::=", - /* 136 */ "where_opt ::= WHERE expr", - /* 137 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt", - /* 138 */ "setlist ::= setlist COMMA nm EQ expr", - /* 139 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", - /* 140 */ "setlist ::= nm EQ expr", - /* 141 */ "setlist ::= LP idlist RP EQ expr", - /* 142 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select", - /* 143 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES", - /* 144 */ "insert_cmd ::= INSERT orconf", - /* 145 */ "insert_cmd ::= REPLACE", - /* 146 */ "idlist_opt ::=", - /* 147 */ "idlist_opt ::= LP idlist RP", - /* 148 */ "idlist ::= idlist COMMA nm", - /* 149 */ "idlist ::= nm", - /* 150 */ "expr ::= LP expr RP", - /* 151 */ "term ::= NULL", - /* 152 */ "expr ::= ID|INDEXED", - /* 153 */ "expr ::= JOIN_KW", - /* 154 */ "expr ::= nm DOT nm", - /* 155 */ "expr ::= nm DOT nm DOT nm", - /* 156 */ "term ::= FLOAT|BLOB", - /* 157 */ "term ::= STRING", - /* 158 */ "term ::= INTEGER", - /* 159 */ "expr ::= VARIABLE", - /* 160 */ "expr ::= expr COLLATE ID|STRING", - /* 161 */ "expr ::= CAST LP expr AS typetoken RP", - /* 162 */ "expr ::= ID|INDEXED LP distinct exprlist RP", - /* 163 */ "expr ::= ID|INDEXED LP STAR RP", - /* 164 */ "term ::= CTIME_KW", - /* 165 */ "expr ::= LP nexprlist COMMA expr RP", - /* 166 */ "expr ::= expr AND expr", - /* 167 */ "expr ::= expr OR expr", - /* 168 */ "expr ::= expr LT|GT|GE|LE expr", - /* 169 */ "expr ::= expr EQ|NE expr", - /* 170 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 171 */ "expr ::= expr PLUS|MINUS expr", - /* 172 */ "expr ::= expr STAR|SLASH|REM expr", - /* 173 */ "expr ::= expr CONCAT expr", - /* 174 */ "likeop ::= LIKE_KW|MATCH", - /* 175 */ "likeop ::= NOT LIKE_KW|MATCH", - /* 176 */ "expr ::= expr likeop expr", - /* 177 */ "expr ::= expr likeop expr ESCAPE expr", - /* 178 */ "expr ::= expr ISNULL|NOTNULL", - /* 179 */ "expr ::= expr NOT NULL", - /* 180 */ "expr ::= expr IS expr", - /* 181 */ "expr ::= expr IS NOT expr", - /* 182 */ "expr ::= NOT expr", - /* 183 */ "expr ::= BITNOT expr", - /* 184 */ "expr ::= MINUS expr", - /* 185 */ "expr ::= PLUS expr", - /* 186 */ "between_op ::= BETWEEN", - /* 187 */ "between_op ::= NOT BETWEEN", - /* 188 */ "expr ::= expr between_op expr AND expr", - /* 189 */ "in_op ::= IN", - /* 190 */ "in_op ::= NOT IN", - /* 191 */ "expr ::= expr in_op LP exprlist RP", - /* 192 */ "expr ::= LP select RP", - /* 193 */ "expr ::= expr in_op LP select RP", - /* 194 */ "expr ::= expr in_op nm dbnm paren_exprlist", - /* 195 */ "expr ::= EXISTS LP select RP", - /* 196 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 197 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 198 */ "case_exprlist ::= WHEN expr THEN expr", - /* 199 */ "case_else ::= ELSE expr", - /* 200 */ "case_else ::=", - /* 201 */ "case_operand ::= expr", - /* 202 */ "case_operand ::=", - /* 203 */ "exprlist ::=", - /* 204 */ "nexprlist ::= nexprlist COMMA expr", - /* 205 */ "nexprlist ::= expr", - /* 206 */ "paren_exprlist ::=", - /* 207 */ "paren_exprlist ::= LP exprlist RP", - /* 208 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", - /* 209 */ "uniqueflag ::= UNIQUE", - /* 210 */ "uniqueflag ::=", - /* 211 */ "eidlist_opt ::=", - /* 212 */ "eidlist_opt ::= LP eidlist RP", - /* 213 */ "eidlist ::= eidlist COMMA nm collate sortorder", - /* 214 */ "eidlist ::= nm collate sortorder", - /* 215 */ "collate ::=", - /* 216 */ "collate ::= COLLATE ID|STRING", - /* 217 */ "cmd ::= DROP INDEX ifexists fullname", - /* 218 */ "cmd ::= VACUUM", - /* 219 */ "cmd ::= VACUUM nm", - /* 220 */ "cmd ::= PRAGMA nm dbnm", - /* 221 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 222 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 223 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 224 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 225 */ "plus_num ::= PLUS INTEGER|FLOAT", - /* 226 */ "minus_num ::= MINUS INTEGER|FLOAT", - /* 227 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 228 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 229 */ "trigger_time ::= BEFORE", - /* 230 */ "trigger_time ::= AFTER", - /* 231 */ "trigger_time ::= INSTEAD OF", - /* 232 */ "trigger_time ::=", - /* 233 */ "trigger_event ::= DELETE|INSERT", - /* 234 */ "trigger_event ::= UPDATE", - /* 235 */ "trigger_event ::= UPDATE OF idlist", - /* 236 */ "when_clause ::=", - /* 237 */ "when_clause ::= WHEN expr", - /* 238 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 239 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 240 */ "trnm ::= nm DOT nm", - /* 241 */ "tridxby ::= INDEXED BY nm", - /* 242 */ "tridxby ::= NOT INDEXED", - /* 243 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", - /* 244 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select", - /* 245 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", - /* 246 */ "trigger_cmd ::= select", - /* 247 */ "expr ::= RAISE LP IGNORE RP", - /* 248 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 249 */ "raisetype ::= ROLLBACK", - /* 250 */ "raisetype ::= ABORT", - /* 251 */ "raisetype ::= FAIL", - /* 252 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 253 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 254 */ "cmd ::= DETACH database_kw_opt expr", - /* 255 */ "key_opt ::=", - /* 256 */ "key_opt ::= KEY expr", - /* 257 */ "cmd ::= REINDEX", - /* 258 */ "cmd ::= REINDEX nm dbnm", - /* 259 */ "cmd ::= ANALYZE", - /* 260 */ "cmd ::= ANALYZE nm dbnm", - /* 261 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 262 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", - /* 263 */ "add_column_fullname ::= fullname", - /* 264 */ "cmd ::= create_vtab", - /* 265 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 266 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 267 */ "vtabarg ::=", - /* 268 */ "vtabargtoken ::= ANY", - /* 269 */ "vtabargtoken ::= lp anylist RP", - /* 270 */ "lp ::= LP", - /* 271 */ "with ::=", - /* 272 */ "with ::= WITH wqlist", - /* 273 */ "with ::= WITH RECURSIVE wqlist", - /* 274 */ "wqlist ::= nm eidlist_opt AS LP select RP", - /* 275 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", - /* 276 */ "input ::= cmdlist", - /* 277 */ "cmdlist ::= cmdlist ecmd", - /* 278 */ "cmdlist ::= ecmd", - /* 279 */ "ecmd ::= SEMI", - /* 280 */ "ecmd ::= explain cmdx SEMI", - /* 281 */ "explain ::=", - /* 282 */ "trans_opt ::=", - /* 283 */ "trans_opt ::= TRANSACTION", - /* 284 */ "trans_opt ::= TRANSACTION nm", - /* 285 */ "savepoint_opt ::= SAVEPOINT", - /* 286 */ "savepoint_opt ::=", - /* 287 */ "cmd ::= create_table create_table_args", - /* 288 */ "columnlist ::= columnlist COMMA columnname carglist", - /* 289 */ "columnlist ::= columnname carglist", - /* 290 */ "nm ::= ID|INDEXED", - /* 291 */ "nm ::= STRING", - /* 292 */ "nm ::= JOIN_KW", - /* 293 */ "typetoken ::= typename", - /* 294 */ "typename ::= ID|STRING", - /* 295 */ "signed ::= plus_num", - /* 296 */ "signed ::= minus_num", - /* 297 */ "carglist ::= carglist ccons", - /* 298 */ "carglist ::=", - /* 299 */ "ccons ::= NULL onconf", - /* 300 */ "conslist_opt ::= COMMA conslist", - /* 301 */ "conslist ::= conslist tconscomma tcons", - /* 302 */ "conslist ::= tcons", - /* 303 */ "tconscomma ::=", - /* 304 */ "defer_subclause_opt ::= defer_subclause", - /* 305 */ "resolvetype ::= raisetype", - /* 306 */ "selectnowith ::= oneselect", - /* 307 */ "oneselect ::= values", - /* 308 */ "sclp ::= selcollist COMMA", - /* 309 */ "as ::= ID|STRING", - /* 310 */ "expr ::= term", - /* 311 */ "exprlist ::= nexprlist", - /* 312 */ "nmnum ::= plus_num", - /* 313 */ "nmnum ::= nm", - /* 314 */ "nmnum ::= ON", - /* 315 */ "nmnum ::= DELETE", - /* 316 */ "nmnum ::= DEFAULT", - /* 317 */ "plus_num ::= INTEGER|FLOAT", - /* 318 */ "foreach_clause ::=", - /* 319 */ "foreach_clause ::= FOR EACH ROW", - /* 320 */ "trnm ::= nm", - /* 321 */ "tridxby ::=", - /* 322 */ "database_kw_opt ::= DATABASE", - /* 323 */ "database_kw_opt ::=", - /* 324 */ "kwcolumn_opt ::=", - /* 325 */ "kwcolumn_opt ::= COLUMNKW", - /* 326 */ "vtabarglist ::= vtabarg", - /* 327 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 328 */ "vtabarg ::= vtabarg vtabargtoken", - /* 329 */ "anylist ::=", - /* 330 */ "anylist ::= anylist LP anylist RP", - /* 331 */ "anylist ::= anylist ANY", + /* 8 */ "cmd ::= COMMIT|END trans_opt", + /* 9 */ "cmd ::= ROLLBACK trans_opt", + /* 10 */ "cmd ::= SAVEPOINT nm", + /* 11 */ "cmd ::= RELEASE savepoint_opt nm", + /* 12 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", + /* 13 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", + /* 14 */ "createkw ::= CREATE", + /* 15 */ "ifnotexists ::=", + /* 16 */ "ifnotexists ::= IF NOT EXISTS", + /* 17 */ "temp ::= TEMP", + /* 18 */ "temp ::=", + /* 19 */ "create_table_args ::= LP columnlist conslist_opt RP table_options", + /* 20 */ "create_table_args ::= AS select", + /* 21 */ "table_options ::=", + /* 22 */ "table_options ::= WITHOUT nm", + /* 23 */ "columnname ::= nm typetoken", + /* 24 */ "typetoken ::=", + /* 25 */ "typetoken ::= typename LP signed RP", + /* 26 */ "typetoken ::= typename LP signed COMMA signed RP", + /* 27 */ "typename ::= typename ID|STRING", + /* 28 */ "ccons ::= CONSTRAINT nm", + /* 29 */ "ccons ::= DEFAULT term", + /* 30 */ "ccons ::= DEFAULT LP expr RP", + /* 31 */ "ccons ::= DEFAULT PLUS term", + /* 32 */ "ccons ::= DEFAULT MINUS term", + /* 33 */ "ccons ::= DEFAULT ID|INDEXED", + /* 34 */ "ccons ::= NOT NULL onconf", + /* 35 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", + /* 36 */ "ccons ::= UNIQUE onconf", + /* 37 */ "ccons ::= CHECK LP expr RP", + /* 38 */ "ccons ::= REFERENCES nm eidlist_opt refargs", + /* 39 */ "ccons ::= defer_subclause", + /* 40 */ "ccons ::= COLLATE ID|STRING", + /* 41 */ "autoinc ::=", + /* 42 */ "autoinc ::= AUTOINCR", + /* 43 */ "refargs ::=", + /* 44 */ "refargs ::= refargs refarg", + /* 45 */ "refarg ::= MATCH nm", + /* 46 */ "refarg ::= ON INSERT refact", + /* 47 */ "refarg ::= ON DELETE refact", + /* 48 */ "refarg ::= ON UPDATE refact", + /* 49 */ "refact ::= SET NULL", + /* 50 */ "refact ::= SET DEFAULT", + /* 51 */ "refact ::= CASCADE", + /* 52 */ "refact ::= RESTRICT", + /* 53 */ "refact ::= NO ACTION", + /* 54 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", + /* 55 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", + /* 56 */ "init_deferred_pred_opt ::=", + /* 57 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", + /* 58 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", + /* 59 */ "conslist_opt ::=", + /* 60 */ "tconscomma ::= COMMA", + /* 61 */ "tcons ::= CONSTRAINT nm", + /* 62 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", + /* 63 */ "tcons ::= UNIQUE LP sortlist RP onconf", + /* 64 */ "tcons ::= CHECK LP expr RP onconf", + /* 65 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", + /* 66 */ "defer_subclause_opt ::=", + /* 67 */ "onconf ::=", + /* 68 */ "onconf ::= ON CONFLICT resolvetype", + /* 69 */ "orconf ::=", + /* 70 */ "orconf ::= OR resolvetype", + /* 71 */ "resolvetype ::= IGNORE", + /* 72 */ "resolvetype ::= REPLACE", + /* 73 */ "cmd ::= DROP TABLE ifexists fullname", + /* 74 */ "ifexists ::= IF EXISTS", + /* 75 */ "ifexists ::=", + /* 76 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", + /* 77 */ "cmd ::= DROP VIEW ifexists fullname", + /* 78 */ "cmd ::= select", + /* 79 */ "select ::= with selectnowith", + /* 80 */ "selectnowith ::= selectnowith multiselect_op oneselect", + /* 81 */ "multiselect_op ::= UNION", + /* 82 */ "multiselect_op ::= UNION ALL", + /* 83 */ "multiselect_op ::= EXCEPT|INTERSECT", + /* 84 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", + /* 85 */ "values ::= VALUES LP nexprlist RP", + /* 86 */ "values ::= values COMMA LP exprlist RP", + /* 87 */ "distinct ::= DISTINCT", + /* 88 */ "distinct ::= ALL", + /* 89 */ "distinct ::=", + /* 90 */ "sclp ::=", + /* 91 */ "selcollist ::= sclp expr as", + /* 92 */ "selcollist ::= sclp STAR", + /* 93 */ "selcollist ::= sclp nm DOT STAR", + /* 94 */ "as ::= AS nm", + /* 95 */ "as ::=", + /* 96 */ "from ::=", + /* 97 */ "from ::= FROM seltablist", + /* 98 */ "stl_prefix ::= seltablist joinop", + /* 99 */ "stl_prefix ::=", + /* 100 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", + /* 101 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", + /* 102 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", + /* 103 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", + /* 104 */ "dbnm ::=", + /* 105 */ "dbnm ::= DOT nm", + /* 106 */ "fullname ::= nm dbnm", + /* 107 */ "joinop ::= COMMA|JOIN", + /* 108 */ "joinop ::= JOIN_KW JOIN", + /* 109 */ "joinop ::= JOIN_KW nm JOIN", + /* 110 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 111 */ "on_opt ::= ON expr", + /* 112 */ "on_opt ::=", + /* 113 */ "indexed_opt ::=", + /* 114 */ "indexed_opt ::= INDEXED BY nm", + /* 115 */ "indexed_opt ::= NOT INDEXED", + /* 116 */ "using_opt ::= USING LP idlist RP", + /* 117 */ "using_opt ::=", + /* 118 */ "orderby_opt ::=", + /* 119 */ "orderby_opt ::= ORDER BY sortlist", + /* 120 */ "sortlist ::= sortlist COMMA expr sortorder", + /* 121 */ "sortlist ::= expr sortorder", + /* 122 */ "sortorder ::= ASC", + /* 123 */ "sortorder ::= DESC", + /* 124 */ "sortorder ::=", + /* 125 */ "groupby_opt ::=", + /* 126 */ "groupby_opt ::= GROUP BY nexprlist", + /* 127 */ "having_opt ::=", + /* 128 */ "having_opt ::= HAVING expr", + /* 129 */ "limit_opt ::=", + /* 130 */ "limit_opt ::= LIMIT expr", + /* 131 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 132 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 133 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt", + /* 134 */ "where_opt ::=", + /* 135 */ "where_opt ::= WHERE expr", + /* 136 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt", + /* 137 */ "setlist ::= setlist COMMA nm EQ expr", + /* 138 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", + /* 139 */ "setlist ::= nm EQ expr", + /* 140 */ "setlist ::= LP idlist RP EQ expr", + /* 141 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select", + /* 142 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES", + /* 143 */ "insert_cmd ::= INSERT orconf", + /* 144 */ "insert_cmd ::= REPLACE", + /* 145 */ "idlist_opt ::=", + /* 146 */ "idlist_opt ::= LP idlist RP", + /* 147 */ "idlist ::= idlist COMMA nm", + /* 148 */ "idlist ::= nm", + /* 149 */ "expr ::= LP expr RP", + /* 150 */ "expr ::= ID|INDEXED", + /* 151 */ "expr ::= JOIN_KW", + /* 152 */ "expr ::= nm DOT nm", + /* 153 */ "expr ::= nm DOT nm DOT nm", + /* 154 */ "term ::= NULL|FLOAT|BLOB", + /* 155 */ "term ::= STRING", + /* 156 */ "term ::= INTEGER", + /* 157 */ "expr ::= VARIABLE", + /* 158 */ "expr ::= expr COLLATE ID|STRING", + /* 159 */ "expr ::= CAST LP expr AS typetoken RP", + /* 160 */ "expr ::= ID|INDEXED LP distinct exprlist RP", + /* 161 */ "expr ::= ID|INDEXED LP STAR RP", + /* 162 */ "term ::= CTIME_KW", + /* 163 */ "expr ::= LP nexprlist COMMA expr RP", + /* 164 */ "expr ::= expr AND expr", + /* 165 */ "expr ::= expr OR expr", + /* 166 */ "expr ::= expr LT|GT|GE|LE expr", + /* 167 */ "expr ::= expr EQ|NE expr", + /* 168 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 169 */ "expr ::= expr PLUS|MINUS expr", + /* 170 */ "expr ::= expr STAR|SLASH|REM expr", + /* 171 */ "expr ::= expr CONCAT expr", + /* 172 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 173 */ "expr ::= expr likeop expr", + /* 174 */ "expr ::= expr likeop expr ESCAPE expr", + /* 175 */ "expr ::= expr ISNULL|NOTNULL", + /* 176 */ "expr ::= expr NOT NULL", + /* 177 */ "expr ::= expr IS expr", + /* 178 */ "expr ::= expr IS NOT expr", + /* 179 */ "expr ::= NOT expr", + /* 180 */ "expr ::= BITNOT expr", + /* 181 */ "expr ::= MINUS expr", + /* 182 */ "expr ::= PLUS expr", + /* 183 */ "between_op ::= BETWEEN", + /* 184 */ "between_op ::= NOT BETWEEN", + /* 185 */ "expr ::= expr between_op expr AND expr", + /* 186 */ "in_op ::= IN", + /* 187 */ "in_op ::= NOT IN", + /* 188 */ "expr ::= expr in_op LP exprlist RP", + /* 189 */ "expr ::= LP select RP", + /* 190 */ "expr ::= expr in_op LP select RP", + /* 191 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 192 */ "expr ::= EXISTS LP select RP", + /* 193 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 194 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 195 */ "case_exprlist ::= WHEN expr THEN expr", + /* 196 */ "case_else ::= ELSE expr", + /* 197 */ "case_else ::=", + /* 198 */ "case_operand ::= expr", + /* 199 */ "case_operand ::=", + /* 200 */ "exprlist ::=", + /* 201 */ "nexprlist ::= nexprlist COMMA expr", + /* 202 */ "nexprlist ::= expr", + /* 203 */ "paren_exprlist ::=", + /* 204 */ "paren_exprlist ::= LP exprlist RP", + /* 205 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 206 */ "uniqueflag ::= UNIQUE", + /* 207 */ "uniqueflag ::=", + /* 208 */ "eidlist_opt ::=", + /* 209 */ "eidlist_opt ::= LP eidlist RP", + /* 210 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 211 */ "eidlist ::= nm collate sortorder", + /* 212 */ "collate ::=", + /* 213 */ "collate ::= COLLATE ID|STRING", + /* 214 */ "cmd ::= DROP INDEX ifexists fullname", + /* 215 */ "cmd ::= VACUUM", + /* 216 */ "cmd ::= VACUUM nm", + /* 217 */ "cmd ::= PRAGMA nm dbnm", + /* 218 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 219 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 220 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 221 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 222 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 223 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 224 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 225 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 226 */ "trigger_time ::= BEFORE|AFTER", + /* 227 */ "trigger_time ::= INSTEAD OF", + /* 228 */ "trigger_time ::=", + /* 229 */ "trigger_event ::= DELETE|INSERT", + /* 230 */ "trigger_event ::= UPDATE", + /* 231 */ "trigger_event ::= UPDATE OF idlist", + /* 232 */ "when_clause ::=", + /* 233 */ "when_clause ::= WHEN expr", + /* 234 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 235 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 236 */ "trnm ::= nm DOT nm", + /* 237 */ "tridxby ::= INDEXED BY nm", + /* 238 */ "tridxby ::= NOT INDEXED", + /* 239 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", + /* 240 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select", + /* 241 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", + /* 242 */ "trigger_cmd ::= select", + /* 243 */ "expr ::= RAISE LP IGNORE RP", + /* 244 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 245 */ "raisetype ::= ROLLBACK", + /* 246 */ "raisetype ::= ABORT", + /* 247 */ "raisetype ::= FAIL", + /* 248 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 249 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 250 */ "cmd ::= DETACH database_kw_opt expr", + /* 251 */ "key_opt ::=", + /* 252 */ "key_opt ::= KEY expr", + /* 253 */ "cmd ::= REINDEX", + /* 254 */ "cmd ::= REINDEX nm dbnm", + /* 255 */ "cmd ::= ANALYZE", + /* 256 */ "cmd ::= ANALYZE nm dbnm", + /* 257 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 258 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 259 */ "add_column_fullname ::= fullname", + /* 260 */ "cmd ::= create_vtab", + /* 261 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 262 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 263 */ "vtabarg ::=", + /* 264 */ "vtabargtoken ::= ANY", + /* 265 */ "vtabargtoken ::= lp anylist RP", + /* 266 */ "lp ::= LP", + /* 267 */ "with ::=", + /* 268 */ "with ::= WITH wqlist", + /* 269 */ "with ::= WITH RECURSIVE wqlist", + /* 270 */ "wqlist ::= nm eidlist_opt AS LP select RP", + /* 271 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", + /* 272 */ "input ::= cmdlist", + /* 273 */ "cmdlist ::= cmdlist ecmd", + /* 274 */ "cmdlist ::= ecmd", + /* 275 */ "ecmd ::= SEMI", + /* 276 */ "ecmd ::= explain cmdx SEMI", + /* 277 */ "explain ::=", + /* 278 */ "trans_opt ::=", + /* 279 */ "trans_opt ::= TRANSACTION", + /* 280 */ "trans_opt ::= TRANSACTION nm", + /* 281 */ "savepoint_opt ::= SAVEPOINT", + /* 282 */ "savepoint_opt ::=", + /* 283 */ "cmd ::= create_table create_table_args", + /* 284 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 285 */ "columnlist ::= columnname carglist", + /* 286 */ "nm ::= ID|INDEXED", + /* 287 */ "nm ::= STRING", + /* 288 */ "nm ::= JOIN_KW", + /* 289 */ "typetoken ::= typename", + /* 290 */ "typename ::= ID|STRING", + /* 291 */ "signed ::= plus_num", + /* 292 */ "signed ::= minus_num", + /* 293 */ "carglist ::= carglist ccons", + /* 294 */ "carglist ::=", + /* 295 */ "ccons ::= NULL onconf", + /* 296 */ "conslist_opt ::= COMMA conslist", + /* 297 */ "conslist ::= conslist tconscomma tcons", + /* 298 */ "conslist ::= tcons", + /* 299 */ "tconscomma ::=", + /* 300 */ "defer_subclause_opt ::= defer_subclause", + /* 301 */ "resolvetype ::= raisetype", + /* 302 */ "selectnowith ::= oneselect", + /* 303 */ "oneselect ::= values", + /* 304 */ "sclp ::= selcollist COMMA", + /* 305 */ "as ::= ID|STRING", + /* 306 */ "expr ::= term", + /* 307 */ "likeop ::= LIKE_KW|MATCH", + /* 308 */ "exprlist ::= nexprlist", + /* 309 */ "nmnum ::= plus_num", + /* 310 */ "nmnum ::= nm", + /* 311 */ "nmnum ::= ON", + /* 312 */ "nmnum ::= DELETE", + /* 313 */ "nmnum ::= DEFAULT", + /* 314 */ "plus_num ::= INTEGER|FLOAT", + /* 315 */ "foreach_clause ::=", + /* 316 */ "foreach_clause ::= FOR EACH ROW", + /* 317 */ "trnm ::= nm", + /* 318 */ "tridxby ::=", + /* 319 */ "database_kw_opt ::= DATABASE", + /* 320 */ "database_kw_opt ::=", + /* 321 */ "kwcolumn_opt ::=", + /* 322 */ "kwcolumn_opt ::= COLUMNKW", + /* 323 */ "vtabarglist ::= vtabarg", + /* 324 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 325 */ "vtabarg ::= vtabarg vtabargtoken", + /* 326 */ "anylist ::=", + /* 327 */ "anylist ::= anylist LP anylist RP", + /* 328 */ "anylist ::= anylist ANY", }; #endif /* NDEBUG */ @@ -135400,6 +138013,34 @@ static int yyGrowStack(yyParser *p){ # define YYMALLOCARGTYPE size_t #endif +/* Initialize a new parser that has already been allocated. +*/ +SQLITE_PRIVATE void sqlite3ParserInit(void *yypParser){ + yyParser *pParser = (yyParser*)yypParser; +#ifdef YYTRACKMAXSTACKDEPTH + pParser->yyhwm = 0; +#endif +#if YYSTACKDEPTH<=0 + pParser->yytos = NULL; + pParser->yystack = NULL; + pParser->yystksz = 0; + if( yyGrowStack(pParser) ){ + pParser->yystack = &pParser->yystk0; + pParser->yystksz = 1; + } +#endif +#ifndef YYNOERRORRECOVERY + pParser->yyerrcnt = -1; +#endif + pParser->yytos = pParser->yystack; + pParser->yystack[0].stateno = 0; + pParser->yystack[0].major = 0; +#if YYSTACKDEPTH>0 + pParser->yystackEnd = &pParser->yystack[YYSTACKDEPTH-1]; +#endif +} + +#ifndef sqlite3Parser_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like @@ -135415,28 +138056,11 @@ static int yyGrowStack(yyParser *p){ SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){ yyParser *pParser; pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); - if( pParser ){ -#ifdef YYTRACKMAXSTACKDEPTH - pParser->yyhwm = 0; -#endif -#if YYSTACKDEPTH<=0 - pParser->yytos = NULL; - pParser->yystack = NULL; - pParser->yystksz = 0; - if( yyGrowStack(pParser) ){ - pParser->yystack = &pParser->yystk0; - pParser->yystksz = 1; - } -#endif -#ifndef YYNOERRORRECOVERY - pParser->yyerrcnt = -1; -#endif - pParser->yytos = pParser->yystack; - pParser->yystack[0].stateno = 0; - pParser->yystack[0].major = 0; - } + if( pParser ) sqlite3ParserInit(pParser); return pParser; } +#endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ + /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal @@ -135562,6 +138186,18 @@ static void yy_pop_parser_stack(yyParser *pParser){ yy_destructor(pParser, yytos->major, &yytos->minor); } +/* +** Clear all secondary memory allocations from the parser +*/ +SQLITE_PRIVATE void sqlite3ParserFinalize(void *p){ + yyParser *pParser = (yyParser*)p; + while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); +#if YYSTACKDEPTH<=0 + if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); +#endif +} + +#ifndef sqlite3Parser_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. @@ -135574,16 +138210,13 @@ SQLITE_PRIVATE void sqlite3ParserFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ - yyParser *pParser = (yyParser*)p; #ifndef YYPARSEFREENEVERNULL - if( pParser==0 ) return; + if( p==0 ) return; #endif - while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); -#if YYSTACKDEPTH<=0 - if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); -#endif - (*freeProc)((void*)pParser); + sqlite3ParserFinalize(p); + (*freeProc)(p); } +#endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. @@ -135747,7 +138380,7 @@ static void yy_shift( } #endif #if YYSTACKDEPTH>0 - if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH] ){ + if( yypParser->yytos>yypParser->yystackEnd ){ yypParser->yytos--; yyStackOverflow(yypParser); return; @@ -135775,341 +138408,338 @@ static void yy_shift( ** is used during the reduce. */ static const struct { - YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ - unsigned char nrhs; /* Number of right-hand side symbols in the rule */ + YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ + signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 147, 1 }, - { 147, 3 }, - { 148, 1 }, - { 149, 3 }, + { 147, -1 }, + { 147, -3 }, + { 148, -1 }, + { 149, -3 }, { 150, 0 }, - { 150, 1 }, - { 150, 1 }, - { 150, 1 }, - { 149, 2 }, - { 149, 2 }, - { 149, 2 }, - { 149, 2 }, - { 149, 3 }, - { 149, 5 }, - { 154, 6 }, - { 156, 1 }, + { 150, -1 }, + { 150, -1 }, + { 150, -1 }, + { 149, -2 }, + { 149, -2 }, + { 149, -2 }, + { 149, -3 }, + { 149, -5 }, + { 154, -6 }, + { 156, -1 }, { 158, 0 }, - { 158, 3 }, - { 157, 1 }, + { 158, -3 }, + { 157, -1 }, { 157, 0 }, - { 155, 5 }, - { 155, 2 }, + { 155, -5 }, + { 155, -2 }, { 162, 0 }, - { 162, 2 }, - { 164, 2 }, + { 162, -2 }, + { 164, -2 }, { 166, 0 }, - { 166, 4 }, - { 166, 6 }, - { 167, 2 }, - { 171, 2 }, - { 171, 2 }, - { 171, 4 }, - { 171, 3 }, - { 171, 3 }, - { 171, 2 }, - { 171, 3 }, - { 171, 5 }, - { 171, 2 }, - { 171, 4 }, - { 171, 4 }, - { 171, 1 }, - { 171, 2 }, + { 166, -4 }, + { 166, -6 }, + { 167, -2 }, + { 171, -2 }, + { 171, -2 }, + { 171, -4 }, + { 171, -3 }, + { 171, -3 }, + { 171, -2 }, + { 171, -3 }, + { 171, -5 }, + { 171, -2 }, + { 171, -4 }, + { 171, -4 }, + { 171, -1 }, + { 171, -2 }, { 176, 0 }, - { 176, 1 }, + { 176, -1 }, { 178, 0 }, - { 178, 2 }, - { 180, 2 }, - { 180, 3 }, - { 180, 3 }, - { 180, 3 }, - { 181, 2 }, - { 181, 2 }, - { 181, 1 }, - { 181, 1 }, - { 181, 2 }, - { 179, 3 }, - { 179, 2 }, + { 178, -2 }, + { 180, -2 }, + { 180, -3 }, + { 180, -3 }, + { 180, -3 }, + { 181, -2 }, + { 181, -2 }, + { 181, -1 }, + { 181, -1 }, + { 181, -2 }, + { 179, -3 }, + { 179, -2 }, { 182, 0 }, - { 182, 2 }, - { 182, 2 }, + { 182, -2 }, + { 182, -2 }, { 161, 0 }, - { 184, 1 }, - { 185, 2 }, - { 185, 7 }, - { 185, 5 }, - { 185, 5 }, - { 185, 10 }, + { 184, -1 }, + { 185, -2 }, + { 185, -7 }, + { 185, -5 }, + { 185, -5 }, + { 185, -10 }, { 188, 0 }, { 174, 0 }, - { 174, 3 }, + { 174, -3 }, { 189, 0 }, - { 189, 2 }, - { 190, 1 }, - { 190, 1 }, - { 149, 4 }, - { 192, 2 }, + { 189, -2 }, + { 190, -1 }, + { 190, -1 }, + { 149, -4 }, + { 192, -2 }, { 192, 0 }, - { 149, 9 }, - { 149, 4 }, - { 149, 1 }, - { 163, 2 }, - { 194, 3 }, - { 197, 1 }, - { 197, 2 }, - { 197, 1 }, - { 195, 9 }, - { 206, 4 }, - { 206, 5 }, - { 198, 1 }, - { 198, 1 }, + { 149, -9 }, + { 149, -4 }, + { 149, -1 }, + { 163, -2 }, + { 194, -3 }, + { 197, -1 }, + { 197, -2 }, + { 197, -1 }, + { 195, -9 }, + { 206, -4 }, + { 206, -5 }, + { 198, -1 }, + { 198, -1 }, { 198, 0 }, { 209, 0 }, - { 199, 3 }, - { 199, 2 }, - { 199, 4 }, - { 210, 2 }, + { 199, -3 }, + { 199, -2 }, + { 199, -4 }, + { 210, -2 }, { 210, 0 }, { 200, 0 }, - { 200, 2 }, - { 212, 2 }, + { 200, -2 }, + { 212, -2 }, { 212, 0 }, - { 211, 7 }, - { 211, 9 }, - { 211, 7 }, - { 211, 7 }, + { 211, -7 }, + { 211, -9 }, + { 211, -7 }, + { 211, -7 }, { 159, 0 }, - { 159, 2 }, - { 193, 2 }, - { 213, 1 }, - { 213, 2 }, - { 213, 3 }, - { 213, 4 }, - { 215, 2 }, + { 159, -2 }, + { 193, -2 }, + { 213, -1 }, + { 213, -2 }, + { 213, -3 }, + { 213, -4 }, + { 215, -2 }, { 215, 0 }, { 214, 0 }, - { 214, 3 }, - { 214, 2 }, - { 216, 4 }, + { 214, -3 }, + { 214, -2 }, + { 216, -4 }, { 216, 0 }, { 204, 0 }, - { 204, 3 }, - { 186, 4 }, - { 186, 2 }, - { 175, 1 }, - { 175, 1 }, + { 204, -3 }, + { 186, -4 }, + { 186, -2 }, + { 175, -1 }, + { 175, -1 }, { 175, 0 }, { 202, 0 }, - { 202, 3 }, + { 202, -3 }, { 203, 0 }, - { 203, 2 }, + { 203, -2 }, { 205, 0 }, - { 205, 2 }, - { 205, 4 }, - { 205, 4 }, - { 149, 6 }, + { 205, -2 }, + { 205, -4 }, + { 205, -4 }, + { 149, -6 }, { 201, 0 }, - { 201, 2 }, - { 149, 8 }, - { 218, 5 }, - { 218, 7 }, - { 218, 3 }, - { 218, 5 }, - { 149, 6 }, - { 149, 7 }, - { 219, 2 }, - { 219, 1 }, + { 201, -2 }, + { 149, -8 }, + { 218, -5 }, + { 218, -7 }, + { 218, -3 }, + { 218, -5 }, + { 149, -6 }, + { 149, -7 }, + { 219, -2 }, + { 219, -1 }, { 220, 0 }, - { 220, 3 }, - { 217, 3 }, - { 217, 1 }, - { 173, 3 }, - { 172, 1 }, - { 173, 1 }, - { 173, 1 }, - { 173, 3 }, - { 173, 5 }, - { 172, 1 }, - { 172, 1 }, - { 172, 1 }, - { 173, 1 }, - { 173, 3 }, - { 173, 6 }, - { 173, 5 }, - { 173, 4 }, - { 172, 1 }, - { 173, 5 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 173, 3 }, - { 221, 1 }, - { 221, 2 }, - { 173, 3 }, - { 173, 5 }, - { 173, 2 }, - { 173, 3 }, - { 173, 3 }, - { 173, 4 }, - { 173, 2 }, - { 173, 2 }, - { 173, 2 }, - { 173, 2 }, - { 222, 1 }, - { 222, 2 }, - { 173, 5 }, - { 223, 1 }, - { 223, 2 }, - { 173, 5 }, - { 173, 3 }, - { 173, 5 }, - { 173, 5 }, - { 173, 4 }, - { 173, 5 }, - { 226, 5 }, - { 226, 4 }, - { 227, 2 }, + { 220, -3 }, + { 217, -3 }, + { 217, -1 }, + { 173, -3 }, + { 173, -1 }, + { 173, -1 }, + { 173, -3 }, + { 173, -5 }, + { 172, -1 }, + { 172, -1 }, + { 172, -1 }, + { 173, -1 }, + { 173, -3 }, + { 173, -6 }, + { 173, -5 }, + { 173, -4 }, + { 172, -1 }, + { 173, -5 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 173, -3 }, + { 221, -2 }, + { 173, -3 }, + { 173, -5 }, + { 173, -2 }, + { 173, -3 }, + { 173, -3 }, + { 173, -4 }, + { 173, -2 }, + { 173, -2 }, + { 173, -2 }, + { 173, -2 }, + { 222, -1 }, + { 222, -2 }, + { 173, -5 }, + { 223, -1 }, + { 223, -2 }, + { 173, -5 }, + { 173, -3 }, + { 173, -5 }, + { 173, -5 }, + { 173, -4 }, + { 173, -5 }, + { 226, -5 }, + { 226, -4 }, + { 227, -2 }, { 227, 0 }, - { 225, 1 }, + { 225, -1 }, { 225, 0 }, { 208, 0 }, - { 207, 3 }, - { 207, 1 }, + { 207, -3 }, + { 207, -1 }, { 224, 0 }, - { 224, 3 }, - { 149, 12 }, - { 228, 1 }, + { 224, -3 }, + { 149, -12 }, + { 228, -1 }, { 228, 0 }, { 177, 0 }, - { 177, 3 }, - { 187, 5 }, - { 187, 3 }, + { 177, -3 }, + { 187, -5 }, + { 187, -3 }, { 229, 0 }, - { 229, 2 }, - { 149, 4 }, - { 149, 1 }, - { 149, 2 }, - { 149, 3 }, - { 149, 5 }, - { 149, 6 }, - { 149, 5 }, - { 149, 6 }, - { 169, 2 }, - { 170, 2 }, - { 149, 5 }, - { 231, 11 }, - { 233, 1 }, - { 233, 1 }, - { 233, 2 }, + { 229, -2 }, + { 149, -4 }, + { 149, -1 }, + { 149, -2 }, + { 149, -3 }, + { 149, -5 }, + { 149, -6 }, + { 149, -5 }, + { 149, -6 }, + { 169, -2 }, + { 170, -2 }, + { 149, -5 }, + { 231, -11 }, + { 233, -1 }, + { 233, -2 }, { 233, 0 }, - { 234, 1 }, - { 234, 1 }, - { 234, 3 }, + { 234, -1 }, + { 234, -1 }, + { 234, -3 }, { 236, 0 }, - { 236, 2 }, - { 232, 3 }, - { 232, 2 }, - { 238, 3 }, - { 239, 3 }, - { 239, 2 }, - { 237, 7 }, - { 237, 5 }, - { 237, 5 }, - { 237, 1 }, - { 173, 4 }, - { 173, 6 }, - { 191, 1 }, - { 191, 1 }, - { 191, 1 }, - { 149, 4 }, - { 149, 6 }, - { 149, 3 }, + { 236, -2 }, + { 232, -3 }, + { 232, -2 }, + { 238, -3 }, + { 239, -3 }, + { 239, -2 }, + { 237, -7 }, + { 237, -5 }, + { 237, -5 }, + { 237, -1 }, + { 173, -4 }, + { 173, -6 }, + { 191, -1 }, + { 191, -1 }, + { 191, -1 }, + { 149, -4 }, + { 149, -6 }, + { 149, -3 }, { 241, 0 }, - { 241, 2 }, - { 149, 1 }, - { 149, 3 }, - { 149, 1 }, - { 149, 3 }, - { 149, 6 }, - { 149, 7 }, - { 242, 1 }, - { 149, 1 }, - { 149, 4 }, - { 244, 8 }, + { 241, -2 }, + { 149, -1 }, + { 149, -3 }, + { 149, -1 }, + { 149, -3 }, + { 149, -6 }, + { 149, -7 }, + { 242, -1 }, + { 149, -1 }, + { 149, -4 }, + { 244, -8 }, { 246, 0 }, - { 247, 1 }, - { 247, 3 }, - { 248, 1 }, + { 247, -1 }, + { 247, -3 }, + { 248, -1 }, { 196, 0 }, - { 196, 2 }, - { 196, 3 }, - { 250, 6 }, - { 250, 8 }, - { 144, 1 }, - { 145, 2 }, - { 145, 1 }, - { 146, 1 }, - { 146, 3 }, + { 196, -2 }, + { 196, -3 }, + { 250, -6 }, + { 250, -8 }, + { 144, -1 }, + { 145, -2 }, + { 145, -1 }, + { 146, -1 }, + { 146, -3 }, { 147, 0 }, { 151, 0 }, - { 151, 1 }, - { 151, 2 }, - { 153, 1 }, + { 151, -1 }, + { 151, -2 }, + { 153, -1 }, { 153, 0 }, - { 149, 2 }, - { 160, 4 }, - { 160, 2 }, - { 152, 1 }, - { 152, 1 }, - { 152, 1 }, - { 166, 1 }, - { 167, 1 }, - { 168, 1 }, - { 168, 1 }, - { 165, 2 }, + { 149, -2 }, + { 160, -4 }, + { 160, -2 }, + { 152, -1 }, + { 152, -1 }, + { 152, -1 }, + { 166, -1 }, + { 167, -1 }, + { 168, -1 }, + { 168, -1 }, + { 165, -2 }, { 165, 0 }, - { 171, 2 }, - { 161, 2 }, - { 183, 3 }, - { 183, 1 }, + { 171, -2 }, + { 161, -2 }, + { 183, -3 }, + { 183, -1 }, { 184, 0 }, - { 188, 1 }, - { 190, 1 }, - { 194, 1 }, - { 195, 1 }, - { 209, 2 }, - { 210, 1 }, - { 173, 1 }, - { 208, 1 }, - { 230, 1 }, - { 230, 1 }, - { 230, 1 }, - { 230, 1 }, - { 230, 1 }, - { 169, 1 }, + { 188, -1 }, + { 190, -1 }, + { 194, -1 }, + { 195, -1 }, + { 209, -2 }, + { 210, -1 }, + { 173, -1 }, + { 221, -1 }, + { 208, -1 }, + { 230, -1 }, + { 230, -1 }, + { 230, -1 }, + { 230, -1 }, + { 230, -1 }, + { 169, -1 }, { 235, 0 }, - { 235, 3 }, - { 238, 1 }, + { 235, -3 }, + { 238, -1 }, { 239, 0 }, - { 240, 1 }, + { 240, -1 }, { 240, 0 }, { 243, 0 }, - { 243, 1 }, - { 245, 1 }, - { 245, 3 }, - { 246, 2 }, + { 243, -1 }, + { 245, -1 }, + { 245, -3 }, + { 246, -2 }, { 249, 0 }, - { 249, 4 }, - { 249, 2 }, + { 249, -4 }, + { 249, -2 }, }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -136132,7 +138762,7 @@ static void yy_reduce( if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt, - yyRuleName[yyruleno], yymsp[-yysize].stateno); + yyRuleName[yyruleno], yymsp[yysize].stateno); } #endif /* NDEBUG */ @@ -136147,7 +138777,7 @@ static void yy_reduce( } #endif #if YYSTACKDEPTH>0 - if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH-1] ){ + if( yypParser->yytos>=yypParser->yystackEnd ){ yyStackOverflow(yypParser); return; } @@ -136193,66 +138823,63 @@ static void yy_reduce( case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); {yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/} break; - case 8: /* cmd ::= COMMIT trans_opt */ - case 9: /* cmd ::= END trans_opt */ yytestcase(yyruleno==9); -{sqlite3CommitTransaction(pParse);} + case 8: /* cmd ::= COMMIT|END trans_opt */ + case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); +{sqlite3EndTransaction(pParse,yymsp[-1].major);} break; - case 10: /* cmd ::= ROLLBACK trans_opt */ -{sqlite3RollbackTransaction(pParse);} - break; - case 11: /* cmd ::= SAVEPOINT nm */ + case 10: /* cmd ::= SAVEPOINT nm */ { sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0); } break; - case 12: /* cmd ::= RELEASE savepoint_opt nm */ + case 11: /* cmd ::= RELEASE savepoint_opt nm */ { sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0); } break; - case 13: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ { sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); } break; - case 14: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy194,0,0,yymsp[-2].minor.yy194); } break; - case 15: /* createkw ::= CREATE */ + case 14: /* createkw ::= CREATE */ {disableLookaside(pParse);} break; - case 16: /* ifnotexists ::= */ - case 19: /* temp ::= */ yytestcase(yyruleno==19); - case 22: /* table_options ::= */ yytestcase(yyruleno==22); - case 42: /* autoinc ::= */ yytestcase(yyruleno==42); - case 57: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==57); - case 67: /* defer_subclause_opt ::= */ yytestcase(yyruleno==67); - case 76: /* ifexists ::= */ yytestcase(yyruleno==76); - case 90: /* distinct ::= */ yytestcase(yyruleno==90); - case 215: /* collate ::= */ yytestcase(yyruleno==215); + case 15: /* ifnotexists ::= */ + case 18: /* temp ::= */ yytestcase(yyruleno==18); + case 21: /* table_options ::= */ yytestcase(yyruleno==21); + case 41: /* autoinc ::= */ yytestcase(yyruleno==41); + case 56: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==56); + case 66: /* defer_subclause_opt ::= */ yytestcase(yyruleno==66); + case 75: /* ifexists ::= */ yytestcase(yyruleno==75); + case 89: /* distinct ::= */ yytestcase(yyruleno==89); + case 212: /* collate ::= */ yytestcase(yyruleno==212); {yymsp[1].minor.yy194 = 0;} break; - case 17: /* ifnotexists ::= IF NOT EXISTS */ + case 16: /* ifnotexists ::= IF NOT EXISTS */ {yymsp[-2].minor.yy194 = 1;} break; - case 18: /* temp ::= TEMP */ - case 43: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==43); + case 17: /* temp ::= TEMP */ + case 42: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==42); {yymsp[0].minor.yy194 = 1;} break; - case 20: /* create_table_args ::= LP columnlist conslist_opt RP table_options */ + case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */ { sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy194,0); } break; - case 21: /* create_table_args ::= AS select */ + case 20: /* create_table_args ::= AS select */ { sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy243); sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); } break; - case 23: /* table_options ::= WITHOUT nm */ + case 22: /* table_options ::= WITHOUT nm */ { if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ yymsp[-1].minor.yy194 = TF_WithoutRowid | TF_NoVisibleRowid; @@ -136262,39 +138889,39 @@ static void yy_reduce( } } break; - case 24: /* columnname ::= nm typetoken */ + case 23: /* columnname ::= nm typetoken */ {sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} break; - case 25: /* typetoken ::= */ - case 60: /* conslist_opt ::= */ yytestcase(yyruleno==60); - case 96: /* as ::= */ yytestcase(yyruleno==96); + case 24: /* typetoken ::= */ + case 59: /* conslist_opt ::= */ yytestcase(yyruleno==59); + case 95: /* as ::= */ yytestcase(yyruleno==95); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} break; - case 26: /* typetoken ::= typename LP signed RP */ + case 25: /* typetoken ::= typename LP signed RP */ { yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); } break; - case 27: /* typetoken ::= typename LP signed COMMA signed RP */ + case 26: /* typetoken ::= typename LP signed COMMA signed RP */ { yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); } break; - case 28: /* typename ::= typename ID|STRING */ + case 27: /* typename ::= typename ID|STRING */ {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} break; - case 29: /* ccons ::= CONSTRAINT nm */ - case 62: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==62); + case 28: /* ccons ::= CONSTRAINT nm */ + case 61: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==61); {pParse->constraintName = yymsp[0].minor.yy0;} break; - case 30: /* ccons ::= DEFAULT term */ - case 32: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==32); + case 29: /* ccons ::= DEFAULT term */ + case 31: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==31); {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy190);} break; - case 31: /* ccons ::= DEFAULT LP expr RP */ + case 30: /* ccons ::= DEFAULT LP expr RP */ {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy190);} break; - case 33: /* ccons ::= DEFAULT MINUS term */ + case 32: /* ccons ::= DEFAULT MINUS term */ { ExprSpan v; v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy190.pExpr, 0); @@ -136303,142 +138930,142 @@ static void yy_reduce( sqlite3AddDefaultValue(pParse,&v); } break; - case 34: /* ccons ::= DEFAULT ID|INDEXED */ + case 33: /* ccons ::= DEFAULT ID|INDEXED */ { ExprSpan v; spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0); sqlite3AddDefaultValue(pParse,&v); } break; - case 35: /* ccons ::= NOT NULL onconf */ + case 34: /* ccons ::= NOT NULL onconf */ {sqlite3AddNotNull(pParse, yymsp[0].minor.yy194);} break; - case 36: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ + case 35: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy194,yymsp[0].minor.yy194,yymsp[-2].minor.yy194);} break; - case 37: /* ccons ::= UNIQUE onconf */ + case 36: /* ccons ::= UNIQUE onconf */ {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy194,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; - case 38: /* ccons ::= CHECK LP expr RP */ + case 37: /* ccons ::= CHECK LP expr RP */ {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy190.pExpr);} break; - case 39: /* ccons ::= REFERENCES nm eidlist_opt refargs */ + case 38: /* ccons ::= REFERENCES nm eidlist_opt refargs */ {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy148,yymsp[0].minor.yy194);} break; - case 40: /* ccons ::= defer_subclause */ + case 39: /* ccons ::= defer_subclause */ {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy194);} break; - case 41: /* ccons ::= COLLATE ID|STRING */ + case 40: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; - case 44: /* refargs ::= */ + case 43: /* refargs ::= */ { yymsp[1].minor.yy194 = OE_None*0x0101; /* EV: R-19803-45884 */} break; - case 45: /* refargs ::= refargs refarg */ + case 44: /* refargs ::= refargs refarg */ { yymsp[-1].minor.yy194 = (yymsp[-1].minor.yy194 & ~yymsp[0].minor.yy497.mask) | yymsp[0].minor.yy497.value; } break; - case 46: /* refarg ::= MATCH nm */ + case 45: /* refarg ::= MATCH nm */ { yymsp[-1].minor.yy497.value = 0; yymsp[-1].minor.yy497.mask = 0x000000; } break; - case 47: /* refarg ::= ON INSERT refact */ + case 46: /* refarg ::= ON INSERT refact */ { yymsp[-2].minor.yy497.value = 0; yymsp[-2].minor.yy497.mask = 0x000000; } break; - case 48: /* refarg ::= ON DELETE refact */ + case 47: /* refarg ::= ON DELETE refact */ { yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194; yymsp[-2].minor.yy497.mask = 0x0000ff; } break; - case 49: /* refarg ::= ON UPDATE refact */ + case 48: /* refarg ::= ON UPDATE refact */ { yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194<<8; yymsp[-2].minor.yy497.mask = 0x00ff00; } break; - case 50: /* refact ::= SET NULL */ + case 49: /* refact ::= SET NULL */ { yymsp[-1].minor.yy194 = OE_SetNull; /* EV: R-33326-45252 */} break; - case 51: /* refact ::= SET DEFAULT */ + case 50: /* refact ::= SET DEFAULT */ { yymsp[-1].minor.yy194 = OE_SetDflt; /* EV: R-33326-45252 */} break; - case 52: /* refact ::= CASCADE */ + case 51: /* refact ::= CASCADE */ { yymsp[0].minor.yy194 = OE_Cascade; /* EV: R-33326-45252 */} break; - case 53: /* refact ::= RESTRICT */ + case 52: /* refact ::= RESTRICT */ { yymsp[0].minor.yy194 = OE_Restrict; /* EV: R-33326-45252 */} break; - case 54: /* refact ::= NO ACTION */ + case 53: /* refact ::= NO ACTION */ { yymsp[-1].minor.yy194 = OE_None; /* EV: R-33326-45252 */} break; - case 55: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + case 54: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ {yymsp[-2].minor.yy194 = 0;} break; - case 56: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ - case 71: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==71); - case 144: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==144); + case 55: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + case 70: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==70); + case 143: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==143); {yymsp[-1].minor.yy194 = yymsp[0].minor.yy194;} break; - case 58: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ - case 75: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==75); - case 187: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==187); - case 190: /* in_op ::= NOT IN */ yytestcase(yyruleno==190); - case 216: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==216); + case 57: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ + case 74: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==74); + case 184: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==184); + case 187: /* in_op ::= NOT IN */ yytestcase(yyruleno==187); + case 213: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==213); {yymsp[-1].minor.yy194 = 1;} break; - case 59: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + case 58: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ {yymsp[-1].minor.yy194 = 0;} break; - case 61: /* tconscomma ::= COMMA */ + case 60: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; - case 63: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + case 62: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy148,yymsp[0].minor.yy194,yymsp[-2].minor.yy194,0);} break; - case 64: /* tcons ::= UNIQUE LP sortlist RP onconf */ + case 63: /* tcons ::= UNIQUE LP sortlist RP onconf */ {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy148,yymsp[0].minor.yy194,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; - case 65: /* tcons ::= CHECK LP expr RP onconf */ + case 64: /* tcons ::= CHECK LP expr RP onconf */ {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy190.pExpr);} break; - case 66: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + case 65: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy148, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[-1].minor.yy194); sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy194); } break; - case 68: /* onconf ::= */ - case 70: /* orconf ::= */ yytestcase(yyruleno==70); + case 67: /* onconf ::= */ + case 69: /* orconf ::= */ yytestcase(yyruleno==69); {yymsp[1].minor.yy194 = OE_Default;} break; - case 69: /* onconf ::= ON CONFLICT resolvetype */ + case 68: /* onconf ::= ON CONFLICT resolvetype */ {yymsp[-2].minor.yy194 = yymsp[0].minor.yy194;} break; - case 72: /* resolvetype ::= IGNORE */ + case 71: /* resolvetype ::= IGNORE */ {yymsp[0].minor.yy194 = OE_Ignore;} break; - case 73: /* resolvetype ::= REPLACE */ - case 145: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==145); + case 72: /* resolvetype ::= REPLACE */ + case 144: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==144); {yymsp[0].minor.yy194 = OE_Replace;} break; - case 74: /* cmd ::= DROP TABLE ifexists fullname */ + case 73: /* cmd ::= DROP TABLE ifexists fullname */ { sqlite3DropTable(pParse, yymsp[0].minor.yy185, 0, yymsp[-1].minor.yy194); } break; - case 77: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + case 76: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[0].minor.yy243, yymsp[-7].minor.yy194, yymsp[-5].minor.yy194); } break; - case 78: /* cmd ::= DROP VIEW ifexists fullname */ + case 77: /* cmd ::= DROP VIEW ifexists fullname */ { sqlite3DropTable(pParse, yymsp[0].minor.yy185, 1, yymsp[-1].minor.yy194); } break; - case 79: /* cmd ::= select */ + case 78: /* cmd ::= select */ { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0}; sqlite3Select(pParse, yymsp[0].minor.yy243, &dest); sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); } break; - case 80: /* select ::= with selectnowith */ + case 79: /* select ::= with selectnowith */ { Select *p = yymsp[0].minor.yy243; if( p ){ @@ -136450,7 +139077,7 @@ static void yy_reduce( yymsp[-1].minor.yy243 = p; /*A-overwrites-W*/ } break; - case 81: /* selectnowith ::= selectnowith multiselect_op oneselect */ + case 80: /* selectnowith ::= selectnowith multiselect_op oneselect */ { Select *pRhs = yymsp[0].minor.yy243; Select *pLhs = yymsp[-2].minor.yy243; @@ -136474,14 +139101,14 @@ static void yy_reduce( yymsp[-2].minor.yy243 = pRhs; } break; - case 82: /* multiselect_op ::= UNION */ - case 84: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==84); + case 81: /* multiselect_op ::= UNION */ + case 83: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==83); {yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-OP*/} break; - case 83: /* multiselect_op ::= UNION ALL */ + case 82: /* multiselect_op ::= UNION ALL */ {yymsp[-1].minor.yy194 = TK_ALL;} break; - case 85: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + case 84: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { #if SELECTTRACE_ENABLED Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/ @@ -136513,12 +139140,12 @@ static void yy_reduce( #endif /* SELECTRACE_ENABLED */ } break; - case 86: /* values ::= VALUES LP nexprlist RP */ + case 85: /* values ::= VALUES LP nexprlist RP */ { yymsp[-3].minor.yy243 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values,0,0); } break; - case 87: /* values ::= values COMMA LP exprlist RP */ + case 86: /* values ::= values COMMA LP exprlist RP */ { Select *pRight, *pLeft = yymsp[-4].minor.yy243; pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values|SF_MultiValue,0,0); @@ -136532,34 +139159,34 @@ static void yy_reduce( } } break; - case 88: /* distinct ::= DISTINCT */ + case 87: /* distinct ::= DISTINCT */ {yymsp[0].minor.yy194 = SF_Distinct;} break; - case 89: /* distinct ::= ALL */ + case 88: /* distinct ::= ALL */ {yymsp[0].minor.yy194 = SF_All;} break; - case 91: /* sclp ::= */ - case 119: /* orderby_opt ::= */ yytestcase(yyruleno==119); - case 126: /* groupby_opt ::= */ yytestcase(yyruleno==126); - case 203: /* exprlist ::= */ yytestcase(yyruleno==203); - case 206: /* paren_exprlist ::= */ yytestcase(yyruleno==206); - case 211: /* eidlist_opt ::= */ yytestcase(yyruleno==211); + case 90: /* sclp ::= */ + case 118: /* orderby_opt ::= */ yytestcase(yyruleno==118); + case 125: /* groupby_opt ::= */ yytestcase(yyruleno==125); + case 200: /* exprlist ::= */ yytestcase(yyruleno==200); + case 203: /* paren_exprlist ::= */ yytestcase(yyruleno==203); + case 208: /* eidlist_opt ::= */ yytestcase(yyruleno==208); {yymsp[1].minor.yy148 = 0;} break; - case 92: /* selcollist ::= sclp expr as */ + case 91: /* selcollist ::= sclp expr as */ { yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy148, yymsp[-1].minor.yy190.pExpr); if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy148, &yymsp[0].minor.yy0, 1); sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy148,&yymsp[-1].minor.yy190); } break; - case 93: /* selcollist ::= sclp STAR */ + case 92: /* selcollist ::= sclp STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy148, p); } break; - case 94: /* selcollist ::= sclp nm DOT STAR */ + case 93: /* selcollist ::= sclp nm DOT STAR */ { Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); @@ -136567,47 +139194,47 @@ static void yy_reduce( yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, pDot); } break; - case 95: /* as ::= AS nm */ - case 106: /* dbnm ::= DOT nm */ yytestcase(yyruleno==106); - case 225: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==225); - case 226: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==226); + case 94: /* as ::= AS nm */ + case 105: /* dbnm ::= DOT nm */ yytestcase(yyruleno==105); + case 222: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==222); + case 223: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==223); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; - case 97: /* from ::= */ + case 96: /* from ::= */ {yymsp[1].minor.yy185 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy185));} break; - case 98: /* from ::= FROM seltablist */ + case 97: /* from ::= FROM seltablist */ { yymsp[-1].minor.yy185 = yymsp[0].minor.yy185; sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy185); } break; - case 99: /* stl_prefix ::= seltablist joinop */ + case 98: /* stl_prefix ::= seltablist joinop */ { if( ALWAYS(yymsp[-1].minor.yy185 && yymsp[-1].minor.yy185->nSrc>0) ) yymsp[-1].minor.yy185->a[yymsp[-1].minor.yy185->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy194; } break; - case 100: /* stl_prefix ::= */ + case 99: /* stl_prefix ::= */ {yymsp[1].minor.yy185 = 0;} break; - case 101: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + case 100: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ { yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy185, &yymsp[-2].minor.yy0); } break; - case 102: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ + case 101: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ { yymsp[-8].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy185,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy185, yymsp[-4].minor.yy148); } break; - case 103: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + case 102: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ { yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy243,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); } break; - case 104: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + case 103: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ { if( yymsp[-6].minor.yy185==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy72==0 && yymsp[0].minor.yy254==0 ){ yymsp[-6].minor.yy185 = yymsp[-4].minor.yy185; @@ -136631,96 +139258,96 @@ static void yy_reduce( } } break; - case 105: /* dbnm ::= */ - case 114: /* indexed_opt ::= */ yytestcase(yyruleno==114); + case 104: /* dbnm ::= */ + case 113: /* indexed_opt ::= */ yytestcase(yyruleno==113); {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} break; - case 107: /* fullname ::= nm dbnm */ + case 106: /* fullname ::= nm dbnm */ {yymsp[-1].minor.yy185 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 108: /* joinop ::= COMMA|JOIN */ + case 107: /* joinop ::= COMMA|JOIN */ { yymsp[0].minor.yy194 = JT_INNER; } break; - case 109: /* joinop ::= JOIN_KW JOIN */ + case 108: /* joinop ::= JOIN_KW JOIN */ {yymsp[-1].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} break; - case 110: /* joinop ::= JOIN_KW nm JOIN */ + case 109: /* joinop ::= JOIN_KW nm JOIN */ {yymsp[-2].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} break; - case 111: /* joinop ::= JOIN_KW nm nm JOIN */ + case 110: /* joinop ::= JOIN_KW nm nm JOIN */ {yymsp[-3].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} break; - case 112: /* on_opt ::= ON expr */ - case 129: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==129); - case 136: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==136); - case 199: /* case_else ::= ELSE expr */ yytestcase(yyruleno==199); + case 111: /* on_opt ::= ON expr */ + case 128: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==128); + case 135: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==135); + case 196: /* case_else ::= ELSE expr */ yytestcase(yyruleno==196); {yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr;} break; - case 113: /* on_opt ::= */ - case 128: /* having_opt ::= */ yytestcase(yyruleno==128); - case 135: /* where_opt ::= */ yytestcase(yyruleno==135); - case 200: /* case_else ::= */ yytestcase(yyruleno==200); - case 202: /* case_operand ::= */ yytestcase(yyruleno==202); + case 112: /* on_opt ::= */ + case 127: /* having_opt ::= */ yytestcase(yyruleno==127); + case 134: /* where_opt ::= */ yytestcase(yyruleno==134); + case 197: /* case_else ::= */ yytestcase(yyruleno==197); + case 199: /* case_operand ::= */ yytestcase(yyruleno==199); {yymsp[1].minor.yy72 = 0;} break; - case 115: /* indexed_opt ::= INDEXED BY nm */ + case 114: /* indexed_opt ::= INDEXED BY nm */ {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} break; - case 116: /* indexed_opt ::= NOT INDEXED */ + case 115: /* indexed_opt ::= NOT INDEXED */ {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} break; - case 117: /* using_opt ::= USING LP idlist RP */ + case 116: /* using_opt ::= USING LP idlist RP */ {yymsp[-3].minor.yy254 = yymsp[-1].minor.yy254;} break; - case 118: /* using_opt ::= */ - case 146: /* idlist_opt ::= */ yytestcase(yyruleno==146); + case 117: /* using_opt ::= */ + case 145: /* idlist_opt ::= */ yytestcase(yyruleno==145); {yymsp[1].minor.yy254 = 0;} break; - case 120: /* orderby_opt ::= ORDER BY sortlist */ - case 127: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==127); + case 119: /* orderby_opt ::= ORDER BY sortlist */ + case 126: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==126); {yymsp[-2].minor.yy148 = yymsp[0].minor.yy148;} break; - case 121: /* sortlist ::= sortlist COMMA expr sortorder */ + case 120: /* sortlist ::= sortlist COMMA expr sortorder */ { yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148,yymsp[-1].minor.yy190.pExpr); sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy148,yymsp[0].minor.yy194); } break; - case 122: /* sortlist ::= expr sortorder */ + case 121: /* sortlist ::= expr sortorder */ { yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy190.pExpr); /*A-overwrites-Y*/ sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy148,yymsp[0].minor.yy194); } break; - case 123: /* sortorder ::= ASC */ + case 122: /* sortorder ::= ASC */ {yymsp[0].minor.yy194 = SQLITE_SO_ASC;} break; - case 124: /* sortorder ::= DESC */ + case 123: /* sortorder ::= DESC */ {yymsp[0].minor.yy194 = SQLITE_SO_DESC;} break; - case 125: /* sortorder ::= */ + case 124: /* sortorder ::= */ {yymsp[1].minor.yy194 = SQLITE_SO_UNDEFINED;} break; - case 130: /* limit_opt ::= */ + case 129: /* limit_opt ::= */ {yymsp[1].minor.yy354.pLimit = 0; yymsp[1].minor.yy354.pOffset = 0;} break; - case 131: /* limit_opt ::= LIMIT expr */ + case 130: /* limit_opt ::= LIMIT expr */ {yymsp[-1].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr; yymsp[-1].minor.yy354.pOffset = 0;} break; - case 132: /* limit_opt ::= LIMIT expr OFFSET expr */ + case 131: /* limit_opt ::= LIMIT expr OFFSET expr */ {yymsp[-3].minor.yy354.pLimit = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pOffset = yymsp[0].minor.yy190.pExpr;} break; - case 133: /* limit_opt ::= LIMIT expr COMMA expr */ + case 132: /* limit_opt ::= LIMIT expr COMMA expr */ {yymsp[-3].minor.yy354.pOffset = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr;} break; - case 134: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */ + case 133: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */ { sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1); sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy185, &yymsp[-1].minor.yy0); sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy185,yymsp[0].minor.yy72); } break; - case 137: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ + case 136: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ { sqlite3WithPush(pParse, yymsp[-7].minor.yy285, 1); sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy185, &yymsp[-3].minor.yy0); @@ -136728,63 +139355,58 @@ static void yy_reduce( sqlite3Update(pParse,yymsp[-4].minor.yy185,yymsp[-1].minor.yy148,yymsp[0].minor.yy72,yymsp[-5].minor.yy194); } break; - case 138: /* setlist ::= setlist COMMA nm EQ expr */ + case 137: /* setlist ::= setlist COMMA nm EQ expr */ { yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr); sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, 1); } break; - case 139: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ + case 138: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { yymsp[-6].minor.yy148 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy148, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr); } break; - case 140: /* setlist ::= nm EQ expr */ + case 139: /* setlist ::= nm EQ expr */ { yylhsminor.yy148 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy190.pExpr); sqlite3ExprListSetName(pParse, yylhsminor.yy148, &yymsp[-2].minor.yy0, 1); } yymsp[-2].minor.yy148 = yylhsminor.yy148; break; - case 141: /* setlist ::= LP idlist RP EQ expr */ + case 140: /* setlist ::= LP idlist RP EQ expr */ { yymsp[-4].minor.yy148 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr); } break; - case 142: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */ + case 141: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */ { sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1); sqlite3Insert(pParse, yymsp[-2].minor.yy185, yymsp[0].minor.yy243, yymsp[-1].minor.yy254, yymsp[-4].minor.yy194); } break; - case 143: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */ + case 142: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */ { sqlite3WithPush(pParse, yymsp[-6].minor.yy285, 1); sqlite3Insert(pParse, yymsp[-3].minor.yy185, 0, yymsp[-2].minor.yy254, yymsp[-5].minor.yy194); } break; - case 147: /* idlist_opt ::= LP idlist RP */ + case 146: /* idlist_opt ::= LP idlist RP */ {yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;} break; - case 148: /* idlist ::= idlist COMMA nm */ + case 147: /* idlist ::= idlist COMMA nm */ {yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);} break; - case 149: /* idlist ::= nm */ + case 148: /* idlist ::= nm */ {yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} break; - case 150: /* expr ::= LP expr RP */ + case 149: /* expr ::= LP expr RP */ {spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ yymsp[-2].minor.yy190.pExpr = yymsp[-1].minor.yy190.pExpr;} break; - case 151: /* term ::= NULL */ - case 156: /* term ::= FLOAT|BLOB */ yytestcase(yyruleno==156); - case 157: /* term ::= STRING */ yytestcase(yyruleno==157); -{spanExpr(&yymsp[0].minor.yy190,pParse,yymsp[0].major,yymsp[0].minor.yy0);/*A-overwrites-X*/} - break; - case 152: /* expr ::= ID|INDEXED */ - case 153: /* expr ::= JOIN_KW */ yytestcase(yyruleno==153); + case 150: /* expr ::= ID|INDEXED */ + case 151: /* expr ::= JOIN_KW */ yytestcase(yyruleno==151); {spanExpr(&yymsp[0].minor.yy190,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 154: /* expr ::= nm DOT nm */ + case 152: /* expr ::= nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1); @@ -136792,7 +139414,7 @@ static void yy_reduce( yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } break; - case 155: /* expr ::= nm DOT nm DOT nm */ + case 153: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); @@ -136802,16 +139424,19 @@ static void yy_reduce( yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } break; - case 158: /* term ::= INTEGER */ + case 154: /* term ::= NULL|FLOAT|BLOB */ + case 155: /* term ::= STRING */ yytestcase(yyruleno==155); +{spanExpr(&yymsp[0].minor.yy190,pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} + break; + case 156: /* term ::= INTEGER */ { yylhsminor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); yylhsminor.yy190.zStart = yymsp[0].minor.yy0.z; yylhsminor.yy190.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n; - if( yylhsminor.yy190.pExpr ) yylhsminor.yy190.pExpr->flags |= EP_Leaf; } yymsp[0].minor.yy190 = yylhsminor.yy190; break; - case 159: /* expr ::= VARIABLE */ + case 157: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; @@ -136834,20 +139459,20 @@ static void yy_reduce( } } break; - case 160: /* expr ::= expr COLLATE ID|STRING */ + case 158: /* expr ::= expr COLLATE ID|STRING */ { yymsp[-2].minor.yy190.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy190.pExpr, &yymsp[0].minor.yy0, 1); yymsp[-2].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 161: /* expr ::= CAST LP expr AS typetoken RP */ + case 159: /* expr ::= CAST LP expr AS typetoken RP */ { spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, 0); } break; - case 162: /* expr ::= ID|INDEXED LP distinct exprlist RP */ + case 160: /* expr ::= ID|INDEXED LP distinct exprlist RP */ { if( yymsp[-1].minor.yy148 && yymsp[-1].minor.yy148->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); @@ -136860,21 +139485,21 @@ static void yy_reduce( } yymsp[-4].minor.yy190 = yylhsminor.yy190; break; - case 163: /* expr ::= ID|INDEXED LP STAR RP */ + case 161: /* expr ::= ID|INDEXED LP STAR RP */ { yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); spanSet(&yylhsminor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); } yymsp[-3].minor.yy190 = yylhsminor.yy190; break; - case 164: /* term ::= CTIME_KW */ + case 162: /* term ::= CTIME_KW */ { yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0); spanSet(&yylhsminor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); } yymsp[0].minor.yy190 = yylhsminor.yy190; break; - case 165: /* expr ::= LP nexprlist COMMA expr RP */ + case 163: /* expr ::= LP nexprlist COMMA expr RP */ { ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy148, yymsp[-1].minor.yy190.pExpr); yylhsminor.yy190.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); @@ -136887,23 +139512,20 @@ static void yy_reduce( } yymsp[-4].minor.yy190 = yylhsminor.yy190; break; - case 166: /* expr ::= expr AND expr */ - case 167: /* expr ::= expr OR expr */ yytestcase(yyruleno==167); - case 168: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==168); - case 169: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==169); - case 170: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==170); - case 171: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==171); - case 172: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==172); - case 173: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==173); + case 164: /* expr ::= expr AND expr */ + case 165: /* expr ::= expr OR expr */ yytestcase(yyruleno==165); + case 166: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==166); + case 167: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==167); + case 168: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==168); + case 169: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==169); + case 170: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==170); + case 171: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==171); {spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190);} break; - case 174: /* likeop ::= LIKE_KW|MATCH */ -{yymsp[0].minor.yy0=yymsp[0].minor.yy0;/*A-overwrites-X*/} - break; - case 175: /* likeop ::= NOT LIKE_KW|MATCH */ + case 172: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; - case 176: /* expr ::= expr likeop expr */ + case 173: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; @@ -136916,7 +139538,7 @@ static void yy_reduce( if( yymsp[-2].minor.yy190.pExpr ) yymsp[-2].minor.yy190.pExpr->flags |= EP_InfixFunc; } break; - case 177: /* expr ::= expr likeop expr ESCAPE expr */ + case 174: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; @@ -136930,39 +139552,39 @@ static void yy_reduce( if( yymsp[-4].minor.yy190.pExpr ) yymsp[-4].minor.yy190.pExpr->flags |= EP_InfixFunc; } break; - case 178: /* expr ::= expr ISNULL|NOTNULL */ + case 175: /* expr ::= expr ISNULL|NOTNULL */ {spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy190,&yymsp[0].minor.yy0);} break; - case 179: /* expr ::= expr NOT NULL */ + case 176: /* expr ::= expr NOT NULL */ {spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy0);} break; - case 180: /* expr ::= expr IS expr */ + case 177: /* expr ::= expr IS expr */ { spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-2].minor.yy190.pExpr, TK_ISNULL); } break; - case 181: /* expr ::= expr IS NOT expr */ + case 178: /* expr ::= expr IS NOT expr */ { spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy190,&yymsp[0].minor.yy190); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, TK_NOTNULL); } break; - case 182: /* expr ::= NOT expr */ - case 183: /* expr ::= BITNOT expr */ yytestcase(yyruleno==183); + case 179: /* expr ::= NOT expr */ + case 180: /* expr ::= BITNOT expr */ yytestcase(yyruleno==180); {spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,yymsp[-1].major,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} break; - case 184: /* expr ::= MINUS expr */ + case 181: /* expr ::= MINUS expr */ {spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UMINUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} break; - case 185: /* expr ::= PLUS expr */ + case 182: /* expr ::= PLUS expr */ {spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UPLUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} break; - case 186: /* between_op ::= BETWEEN */ - case 189: /* in_op ::= IN */ yytestcase(yyruleno==189); + case 183: /* between_op ::= BETWEEN */ + case 186: /* in_op ::= IN */ yytestcase(yyruleno==186); {yymsp[0].minor.yy194 = 0;} break; - case 188: /* expr ::= expr between_op expr AND expr */ + case 185: /* expr ::= expr between_op expr AND expr */ { ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr); @@ -136976,7 +139598,7 @@ static void yy_reduce( yymsp[-4].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd; } break; - case 191: /* expr ::= expr in_op LP exprlist RP */ + case 188: /* expr ::= expr in_op LP exprlist RP */ { if( yymsp[-1].minor.yy148==0 ){ /* Expressions of the form @@ -137029,14 +139651,14 @@ static void yy_reduce( yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 192: /* expr ::= LP select RP */ + case 189: /* expr ::= LP select RP */ { spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0); sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy190.pExpr, yymsp[-1].minor.yy243); } break; - case 193: /* expr ::= expr in_op LP select RP */ + case 190: /* expr ::= expr in_op LP select RP */ { yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy190.pExpr, yymsp[-1].minor.yy243); @@ -137044,7 +139666,7 @@ static void yy_reduce( yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 194: /* expr ::= expr in_op nm dbnm paren_exprlist */ + case 191: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); @@ -137055,7 +139677,7 @@ static void yy_reduce( yymsp[-4].minor.yy190.zEnd = yymsp[-1].minor.yy0.z ? &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n] : &yymsp[-2].minor.yy0.z[yymsp[-2].minor.yy0.n]; } break; - case 195: /* expr ::= EXISTS LP select RP */ + case 192: /* expr ::= EXISTS LP select RP */ { Expr *p; spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ @@ -137063,7 +139685,7 @@ static void yy_reduce( sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy243); } break; - case 196: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 193: /* expr ::= CASE case_operand case_exprlist case_else END */ { spanSet(&yymsp[-4].minor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-C*/ yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy72, 0); @@ -137076,80 +139698,80 @@ static void yy_reduce( } } break; - case 197: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 194: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[-2].minor.yy190.pExpr); yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr); } break; - case 198: /* case_exprlist ::= WHEN expr THEN expr */ + case 195: /* case_exprlist ::= WHEN expr THEN expr */ { yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, yymsp[0].minor.yy190.pExpr); } break; - case 201: /* case_operand ::= expr */ + case 198: /* case_operand ::= expr */ {yymsp[0].minor.yy72 = yymsp[0].minor.yy190.pExpr; /*A-overwrites-X*/} break; - case 204: /* nexprlist ::= nexprlist COMMA expr */ + case 201: /* nexprlist ::= nexprlist COMMA expr */ {yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[0].minor.yy190.pExpr);} break; - case 205: /* nexprlist ::= expr */ + case 202: /* nexprlist ::= expr */ {yymsp[0].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy190.pExpr); /*A-overwrites-Y*/} break; - case 207: /* paren_exprlist ::= LP exprlist RP */ - case 212: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==212); + case 204: /* paren_exprlist ::= LP exprlist RP */ + case 209: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==209); {yymsp[-2].minor.yy148 = yymsp[-1].minor.yy148;} break; - case 208: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + case 205: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy148, yymsp[-10].minor.yy194, &yymsp[-11].minor.yy0, yymsp[0].minor.yy72, SQLITE_SO_ASC, yymsp[-8].minor.yy194, SQLITE_IDXTYPE_APPDEF); } break; - case 209: /* uniqueflag ::= UNIQUE */ - case 250: /* raisetype ::= ABORT */ yytestcase(yyruleno==250); + case 206: /* uniqueflag ::= UNIQUE */ + case 246: /* raisetype ::= ABORT */ yytestcase(yyruleno==246); {yymsp[0].minor.yy194 = OE_Abort;} break; - case 210: /* uniqueflag ::= */ + case 207: /* uniqueflag ::= */ {yymsp[1].minor.yy194 = OE_None;} break; - case 213: /* eidlist ::= eidlist COMMA nm collate sortorder */ + case 210: /* eidlist ::= eidlist COMMA nm collate sortorder */ { yymsp[-4].minor.yy148 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194); } break; - case 214: /* eidlist ::= nm collate sortorder */ + case 211: /* eidlist ::= nm collate sortorder */ { yymsp[-2].minor.yy148 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194); /*A-overwrites-Y*/ } break; - case 217: /* cmd ::= DROP INDEX ifexists fullname */ + case 214: /* cmd ::= DROP INDEX ifexists fullname */ {sqlite3DropIndex(pParse, yymsp[0].minor.yy185, yymsp[-1].minor.yy194);} break; - case 218: /* cmd ::= VACUUM */ + case 215: /* cmd ::= VACUUM */ {sqlite3Vacuum(pParse,0);} break; - case 219: /* cmd ::= VACUUM nm */ + case 216: /* cmd ::= VACUUM nm */ {sqlite3Vacuum(pParse,&yymsp[0].minor.yy0);} break; - case 220: /* cmd ::= PRAGMA nm dbnm */ + case 217: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 221: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 218: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 222: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 219: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 223: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 220: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 224: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 221: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 227: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 224: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; @@ -137157,53 +139779,50 @@ static void yy_reduce( sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy145, &all); } break; - case 228: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 225: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy194, yymsp[-4].minor.yy332.a, yymsp[-4].minor.yy332.b, yymsp[-2].minor.yy185, yymsp[0].minor.yy72, yymsp[-10].minor.yy194, yymsp[-8].minor.yy194); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; - case 229: /* trigger_time ::= BEFORE */ -{ yymsp[0].minor.yy194 = TK_BEFORE; } + case 226: /* trigger_time ::= BEFORE|AFTER */ +{ yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/ } break; - case 230: /* trigger_time ::= AFTER */ -{ yymsp[0].minor.yy194 = TK_AFTER; } - break; - case 231: /* trigger_time ::= INSTEAD OF */ + case 227: /* trigger_time ::= INSTEAD OF */ { yymsp[-1].minor.yy194 = TK_INSTEAD;} break; - case 232: /* trigger_time ::= */ + case 228: /* trigger_time ::= */ { yymsp[1].minor.yy194 = TK_BEFORE; } break; - case 233: /* trigger_event ::= DELETE|INSERT */ - case 234: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==234); + case 229: /* trigger_event ::= DELETE|INSERT */ + case 230: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==230); {yymsp[0].minor.yy332.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy332.b = 0;} break; - case 235: /* trigger_event ::= UPDATE OF idlist */ + case 231: /* trigger_event ::= UPDATE OF idlist */ {yymsp[-2].minor.yy332.a = TK_UPDATE; yymsp[-2].minor.yy332.b = yymsp[0].minor.yy254;} break; - case 236: /* when_clause ::= */ - case 255: /* key_opt ::= */ yytestcase(yyruleno==255); + case 232: /* when_clause ::= */ + case 251: /* key_opt ::= */ yytestcase(yyruleno==251); { yymsp[1].minor.yy72 = 0; } break; - case 237: /* when_clause ::= WHEN expr */ - case 256: /* key_opt ::= KEY expr */ yytestcase(yyruleno==256); + case 233: /* when_clause ::= WHEN expr */ + case 252: /* key_opt ::= KEY expr */ yytestcase(yyruleno==252); { yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr; } break; - case 238: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 234: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { assert( yymsp[-2].minor.yy145!=0 ); yymsp[-2].minor.yy145->pLast->pNext = yymsp[-1].minor.yy145; yymsp[-2].minor.yy145->pLast = yymsp[-1].minor.yy145; } break; - case 239: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 235: /* trigger_cmd_list ::= trigger_cmd SEMI */ { assert( yymsp[-1].minor.yy145!=0 ); yymsp[-1].minor.yy145->pLast = yymsp[-1].minor.yy145; } break; - case 240: /* trnm ::= nm DOT nm */ + case 236: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -137211,33 +139830,33 @@ static void yy_reduce( "statements within triggers"); } break; - case 241: /* tridxby ::= INDEXED BY nm */ + case 237: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 242: /* tridxby ::= NOT INDEXED */ + case 238: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 243: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ + case 239: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ {yymsp[-6].minor.yy145 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy148, yymsp[0].minor.yy72, yymsp[-5].minor.yy194);} break; - case 244: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */ + case 240: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */ {yymsp[-4].minor.yy145 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy254, yymsp[0].minor.yy243, yymsp[-4].minor.yy194);/*A-overwrites-R*/} break; - case 245: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ + case 241: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ {yymsp[-4].minor.yy145 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy72);} break; - case 246: /* trigger_cmd ::= select */ + case 242: /* trigger_cmd ::= select */ {yymsp[0].minor.yy145 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy243); /*A-overwrites-X*/} break; - case 247: /* expr ::= RAISE LP IGNORE RP */ + case 243: /* expr ::= RAISE LP IGNORE RP */ { spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ yymsp[-3].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); @@ -137246,7 +139865,7 @@ static void yy_reduce( } } break; - case 248: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 244: /* expr ::= RAISE LP raisetype COMMA nm RP */ { spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); @@ -137255,171 +139874,176 @@ static void yy_reduce( } } break; - case 249: /* raisetype ::= ROLLBACK */ + case 245: /* raisetype ::= ROLLBACK */ {yymsp[0].minor.yy194 = OE_Rollback;} break; - case 251: /* raisetype ::= FAIL */ + case 247: /* raisetype ::= FAIL */ {yymsp[0].minor.yy194 = OE_Fail;} break; - case 252: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 248: /* cmd ::= DROP TRIGGER ifexists fullname */ { sqlite3DropTrigger(pParse,yymsp[0].minor.yy185,yymsp[-1].minor.yy194); } break; - case 253: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 249: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { sqlite3Attach(pParse, yymsp[-3].minor.yy190.pExpr, yymsp[-1].minor.yy190.pExpr, yymsp[0].minor.yy72); } break; - case 254: /* cmd ::= DETACH database_kw_opt expr */ + case 250: /* cmd ::= DETACH database_kw_opt expr */ { sqlite3Detach(pParse, yymsp[0].minor.yy190.pExpr); } break; - case 257: /* cmd ::= REINDEX */ + case 253: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 258: /* cmd ::= REINDEX nm dbnm */ + case 254: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 259: /* cmd ::= ANALYZE */ + case 255: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 260: /* cmd ::= ANALYZE nm dbnm */ + case 256: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 261: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 257: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy185,&yymsp[0].minor.yy0); } break; - case 262: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + case 258: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; - case 263: /* add_column_fullname ::= fullname */ + case 259: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy185); } break; - case 264: /* cmd ::= create_vtab */ + case 260: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 265: /* cmd ::= create_vtab LP vtabarglist RP */ + case 261: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 266: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 262: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy194); } break; - case 267: /* vtabarg ::= */ + case 263: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 268: /* vtabargtoken ::= ANY */ - case 269: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==269); - case 270: /* lp ::= LP */ yytestcase(yyruleno==270); + case 264: /* vtabargtoken ::= ANY */ + case 265: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==265); + case 266: /* lp ::= LP */ yytestcase(yyruleno==266); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; - case 271: /* with ::= */ + case 267: /* with ::= */ {yymsp[1].minor.yy285 = 0;} break; - case 272: /* with ::= WITH wqlist */ + case 268: /* with ::= WITH wqlist */ { yymsp[-1].minor.yy285 = yymsp[0].minor.yy285; } break; - case 273: /* with ::= WITH RECURSIVE wqlist */ + case 269: /* with ::= WITH RECURSIVE wqlist */ { yymsp[-2].minor.yy285 = yymsp[0].minor.yy285; } break; - case 274: /* wqlist ::= nm eidlist_opt AS LP select RP */ + case 270: /* wqlist ::= nm eidlist_opt AS LP select RP */ { yymsp[-5].minor.yy285 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243); /*A-overwrites-X*/ } break; - case 275: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ + case 271: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ { yymsp[-7].minor.yy285 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy285, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243); } break; default: - /* (276) input ::= cmdlist */ yytestcase(yyruleno==276); - /* (277) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==277); - /* (278) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=278); - /* (279) ecmd ::= SEMI */ yytestcase(yyruleno==279); - /* (280) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==280); - /* (281) explain ::= */ yytestcase(yyruleno==281); - /* (282) trans_opt ::= */ yytestcase(yyruleno==282); - /* (283) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==283); - /* (284) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==284); - /* (285) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==285); - /* (286) savepoint_opt ::= */ yytestcase(yyruleno==286); - /* (287) cmd ::= create_table create_table_args */ yytestcase(yyruleno==287); - /* (288) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==288); - /* (289) columnlist ::= columnname carglist */ yytestcase(yyruleno==289); - /* (290) nm ::= ID|INDEXED */ yytestcase(yyruleno==290); - /* (291) nm ::= STRING */ yytestcase(yyruleno==291); - /* (292) nm ::= JOIN_KW */ yytestcase(yyruleno==292); - /* (293) typetoken ::= typename */ yytestcase(yyruleno==293); - /* (294) typename ::= ID|STRING */ yytestcase(yyruleno==294); - /* (295) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=295); - /* (296) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=296); - /* (297) carglist ::= carglist ccons */ yytestcase(yyruleno==297); - /* (298) carglist ::= */ yytestcase(yyruleno==298); - /* (299) ccons ::= NULL onconf */ yytestcase(yyruleno==299); - /* (300) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==300); - /* (301) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==301); - /* (302) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=302); - /* (303) tconscomma ::= */ yytestcase(yyruleno==303); - /* (304) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=304); - /* (305) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=305); - /* (306) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=306); - /* (307) oneselect ::= values */ yytestcase(yyruleno==307); - /* (308) sclp ::= selcollist COMMA */ yytestcase(yyruleno==308); - /* (309) as ::= ID|STRING */ yytestcase(yyruleno==309); - /* (310) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=310); - /* (311) exprlist ::= nexprlist */ yytestcase(yyruleno==311); - /* (312) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=312); - /* (313) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=313); - /* (314) nmnum ::= ON */ yytestcase(yyruleno==314); - /* (315) nmnum ::= DELETE */ yytestcase(yyruleno==315); - /* (316) nmnum ::= DEFAULT */ yytestcase(yyruleno==316); - /* (317) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==317); - /* (318) foreach_clause ::= */ yytestcase(yyruleno==318); - /* (319) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==319); - /* (320) trnm ::= nm */ yytestcase(yyruleno==320); - /* (321) tridxby ::= */ yytestcase(yyruleno==321); - /* (322) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==322); - /* (323) database_kw_opt ::= */ yytestcase(yyruleno==323); - /* (324) kwcolumn_opt ::= */ yytestcase(yyruleno==324); - /* (325) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==325); - /* (326) vtabarglist ::= vtabarg */ yytestcase(yyruleno==326); - /* (327) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==327); - /* (328) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==328); - /* (329) anylist ::= */ yytestcase(yyruleno==329); - /* (330) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==330); - /* (331) anylist ::= anylist ANY */ yytestcase(yyruleno==331); + /* (272) input ::= cmdlist */ yytestcase(yyruleno==272); + /* (273) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==273); + /* (274) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=274); + /* (275) ecmd ::= SEMI */ yytestcase(yyruleno==275); + /* (276) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==276); + /* (277) explain ::= */ yytestcase(yyruleno==277); + /* (278) trans_opt ::= */ yytestcase(yyruleno==278); + /* (279) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==279); + /* (280) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==280); + /* (281) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==281); + /* (282) savepoint_opt ::= */ yytestcase(yyruleno==282); + /* (283) cmd ::= create_table create_table_args */ yytestcase(yyruleno==283); + /* (284) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==284); + /* (285) columnlist ::= columnname carglist */ yytestcase(yyruleno==285); + /* (286) nm ::= ID|INDEXED */ yytestcase(yyruleno==286); + /* (287) nm ::= STRING */ yytestcase(yyruleno==287); + /* (288) nm ::= JOIN_KW */ yytestcase(yyruleno==288); + /* (289) typetoken ::= typename */ yytestcase(yyruleno==289); + /* (290) typename ::= ID|STRING */ yytestcase(yyruleno==290); + /* (291) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=291); + /* (292) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=292); + /* (293) carglist ::= carglist ccons */ yytestcase(yyruleno==293); + /* (294) carglist ::= */ yytestcase(yyruleno==294); + /* (295) ccons ::= NULL onconf */ yytestcase(yyruleno==295); + /* (296) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==296); + /* (297) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==297); + /* (298) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=298); + /* (299) tconscomma ::= */ yytestcase(yyruleno==299); + /* (300) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=300); + /* (301) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=301); + /* (302) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=302); + /* (303) oneselect ::= values */ yytestcase(yyruleno==303); + /* (304) sclp ::= selcollist COMMA */ yytestcase(yyruleno==304); + /* (305) as ::= ID|STRING */ yytestcase(yyruleno==305); + /* (306) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=306); + /* (307) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==307); + /* (308) exprlist ::= nexprlist */ yytestcase(yyruleno==308); + /* (309) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=309); + /* (310) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=310); + /* (311) nmnum ::= ON */ yytestcase(yyruleno==311); + /* (312) nmnum ::= DELETE */ yytestcase(yyruleno==312); + /* (313) nmnum ::= DEFAULT */ yytestcase(yyruleno==313); + /* (314) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==314); + /* (315) foreach_clause ::= */ yytestcase(yyruleno==315); + /* (316) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==316); + /* (317) trnm ::= nm */ yytestcase(yyruleno==317); + /* (318) tridxby ::= */ yytestcase(yyruleno==318); + /* (319) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==319); + /* (320) database_kw_opt ::= */ yytestcase(yyruleno==320); + /* (321) kwcolumn_opt ::= */ yytestcase(yyruleno==321); + /* (322) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==322); + /* (323) vtabarglist ::= vtabarg */ yytestcase(yyruleno==323); + /* (324) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==324); + /* (325) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==325); + /* (326) anylist ::= */ yytestcase(yyruleno==326); + /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327); + /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328); break; /********** End reduce actions ************************************************/ }; assert( yyrulenoYY_MAX_SHIFT ){ - yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; - } - yymsp -= yysize-1; + yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto); + + /* There are no SHIFTREDUCE actions on nonterminals because the table + ** generator has simplified them to pure REDUCE actions. */ + assert( !(yyact>YY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); + + /* It is not possible for a REDUCE to be followed by an error */ + assert( yyact!=YY_ERROR_ACTION ); + + if( yyact==YY_ACCEPT_ACTION ){ + yypParser->yytos += yysize; + yy_accept(yypParser); + }else{ + yymsp += yysize+1; yypParser->yytos = yymsp; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yyTraceShift(yypParser, yyact); - }else{ - assert( yyact == YY_ACCEPT_ACTION ); - yypParser->yytos -= yysize; - yy_accept(yypParser); } } @@ -137825,134 +140449,145 @@ const unsigned char ebcdicToAscii[] = { ** on platforms with limited memory. */ /* Hash score: 182 */ +/* zKWText[] encodes 834 bytes of keyword text in 554 bytes */ +/* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ +/* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */ +/* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */ +/* UNIQUERYWITHOUTERELEASEATTACHAVINGROUPDATEBEGINNERECURSIVE */ +/* BETWEENOTNULLIKECASCADELETECASECOLLATECREATECURRENT_DATEDETACH */ +/* IMMEDIATEJOINSERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHEN */ +/* WHERENAMEAFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMIT */ +/* CONFLICTCROSSCURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAIL */ +/* FROMFULLGLOBYIFISNULLORDERESTRICTRIGHTROLLBACKROWUNIONUSING */ +/* VACUUMVIEWINITIALLY */ +static const char zKWText[553] = { + 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', + 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', + 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', + 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', + 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N', + 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I', + 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E', + 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E', + 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T', + 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q', + 'U','E','R','Y','W','I','T','H','O','U','T','E','R','E','L','E','A','S', + 'E','A','T','T','A','C','H','A','V','I','N','G','R','O','U','P','D','A', + 'T','E','B','E','G','I','N','N','E','R','E','C','U','R','S','I','V','E', + 'B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C','A', + 'S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L','A', + 'T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D','A', + 'T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E','J', + 'O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A','L', + 'Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U','E', + 'S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W','H', + 'E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C','E', + 'A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R','E', + 'M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M','M', + 'I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U','R', + 'R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M','A', + 'R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T','D', + 'R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L','O', + 'B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S','T', + 'R','I','C','T','R','I','G','H','T','R','O','L','L','B','A','C','K','R', + 'O','W','U','N','I','O','N','U','S','I','N','G','V','A','C','U','U','M', + 'V','I','E','W','I','N','I','T','I','A','L','L','Y', +}; +/* aKWHash[i] is the hash value for the i-th keyword */ +static const unsigned char aKWHash[127] = { + 76, 105, 117, 74, 0, 45, 0, 0, 82, 0, 77, 0, 0, + 42, 12, 78, 15, 0, 116, 85, 54, 112, 0, 19, 0, 0, + 121, 0, 119, 115, 0, 22, 93, 0, 9, 0, 0, 70, 71, + 0, 69, 6, 0, 48, 90, 102, 0, 118, 101, 0, 0, 44, + 0, 103, 24, 0, 17, 0, 122, 53, 23, 0, 5, 110, 25, + 96, 0, 0, 124, 106, 60, 123, 57, 28, 55, 0, 91, 0, + 100, 26, 0, 99, 0, 0, 0, 95, 92, 97, 88, 109, 14, + 39, 108, 0, 81, 0, 18, 89, 111, 32, 0, 120, 80, 113, + 62, 46, 84, 0, 0, 94, 40, 59, 114, 0, 36, 0, 0, + 29, 0, 86, 63, 64, 0, 20, 61, 0, 56, +}; +/* aKWNext[] forms the hash collision chain. If aKWHash[i]==0 +** then the i-th keyword has no more hash collisions. Otherwise, +** the next keyword with the same hash is aKWHash[i]-1. */ +static const unsigned char aKWNext[124] = { + 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 0, 0, 50, + 0, 43, 3, 47, 0, 0, 0, 0, 30, 0, 58, 0, 38, + 0, 0, 0, 1, 66, 0, 0, 67, 0, 41, 0, 0, 0, + 0, 0, 0, 49, 65, 0, 0, 0, 0, 31, 52, 16, 34, + 10, 0, 0, 0, 0, 0, 0, 0, 11, 72, 79, 0, 8, + 0, 104, 98, 0, 107, 0, 87, 0, 75, 51, 0, 27, 37, + 73, 83, 0, 35, 68, 0, 0, +}; +/* aKWLen[i] is the length (in bytes) of the i-th keyword */ +static const unsigned char aKWLen[124] = { + 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, + 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6, + 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10, + 4, 6, 2, 3, 9, 4, 2, 6, 5, 7, 4, 5, 7, + 6, 6, 5, 6, 5, 5, 9, 7, 7, 3, 2, 4, 4, + 7, 3, 6, 4, 7, 6, 12, 6, 9, 4, 6, 5, 4, + 7, 6, 5, 6, 7, 5, 4, 5, 6, 5, 7, 3, 7, + 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, 7, 8, 8, + 2, 4, 4, 4, 4, 4, 2, 2, 6, 5, 8, 5, 8, + 3, 5, 5, 6, 4, 9, 3, +}; +/* aKWOffset[i] is the index into zKWText[] of the start of +** the text for the i-th keyword. */ +static const unsigned short int aKWOffset[124] = { + 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, + 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, + 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152, + 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 184, 188, 192, + 199, 204, 209, 212, 218, 221, 225, 234, 240, 240, 240, 243, 246, + 250, 251, 255, 261, 265, 272, 278, 290, 296, 305, 307, 313, 318, + 320, 327, 332, 337, 343, 349, 354, 358, 361, 367, 371, 378, 380, + 387, 389, 391, 400, 404, 410, 416, 424, 429, 429, 445, 452, 459, + 460, 467, 471, 475, 479, 483, 486, 488, 490, 496, 500, 508, 513, + 521, 524, 529, 534, 540, 544, 549, +}; +/* aKWCode[i] is the parser symbol code for the i-th keyword */ +static const unsigned char aKWCode[124] = { + TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, + TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, + TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, + TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, + TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, + TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW, + TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT, + TK_INTERSECT, TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO, + TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP, + TK_OR, TK_UNIQUE, TK_QUERY, TK_WITHOUT, TK_WITH, + TK_JOIN_KW, TK_RELEASE, TK_ATTACH, TK_HAVING, TK_GROUP, + TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RECURSIVE, TK_BETWEEN, + TK_NOTNULL, TK_NOT, TK_NO, TK_NULL, TK_LIKE_KW, + TK_CASCADE, TK_ASC, TK_DELETE, TK_CASE, TK_COLLATE, + TK_CREATE, TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE, TK_JOIN, + TK_INSERT, TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA, + TK_ABORT, TK_VALUES, TK_VIRTUAL, TK_LIMIT, TK_WHEN, + TK_WHERE, TK_RENAME, TK_AFTER, TK_REPLACE, TK_AND, + TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, + TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, + TK_CTIME_KW, TK_PRIMARY, TK_DEFERRED, TK_DISTINCT, TK_IS, + TK_DROP, TK_FAIL, TK_FROM, TK_JOIN_KW, TK_LIKE_KW, + TK_BY, TK_IF, TK_ISNULL, TK_ORDER, TK_RESTRICT, + TK_JOIN_KW, TK_ROLLBACK, TK_ROW, TK_UNION, TK_USING, + TK_VACUUM, TK_VIEW, TK_INITIALLY, TK_ALL, +}; +/* Check to see if z[0..n-1] is a keyword. If it is, write the +** parser symbol code for that keyword into *pType. Always +** return the integer n (the length of the token). */ static int keywordCode(const char *z, int n, int *pType){ - /* zText[] encodes 834 bytes of keywords in 554 bytes */ - /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */ - /* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */ - /* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */ - /* UNIQUERYWITHOUTERELEASEATTACHAVINGROUPDATEBEGINNERECURSIVE */ - /* BETWEENOTNULLIKECASCADELETECASECOLLATECREATECURRENT_DATEDETACH */ - /* IMMEDIATEJOINSERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHEN */ - /* WHERENAMEAFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMIT */ - /* CONFLICTCROSSCURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAIL */ - /* FROMFULLGLOBYIFISNULLORDERESTRICTRIGHTROLLBACKROWUNIONUSING */ - /* VACUUMVIEWINITIALLY */ - static const char zText[553] = { - 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H', - 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G', - 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A', - 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F', - 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N', - 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I', - 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E', - 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E', - 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T', - 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q', - 'U','E','R','Y','W','I','T','H','O','U','T','E','R','E','L','E','A','S', - 'E','A','T','T','A','C','H','A','V','I','N','G','R','O','U','P','D','A', - 'T','E','B','E','G','I','N','N','E','R','E','C','U','R','S','I','V','E', - 'B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C','A', - 'S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L','A', - 'T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D','A', - 'T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E','J', - 'O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A','L', - 'Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U','E', - 'S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W','H', - 'E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C','E', - 'A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R','E', - 'M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M','M', - 'I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U','R', - 'R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M','A', - 'R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T','D', - 'R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L','O', - 'B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S','T', - 'R','I','C','T','R','I','G','H','T','R','O','L','L','B','A','C','K','R', - 'O','W','U','N','I','O','N','U','S','I','N','G','V','A','C','U','U','M', - 'V','I','E','W','I','N','I','T','I','A','L','L','Y', - }; - static const unsigned char aHash[127] = { - 76, 105, 117, 74, 0, 45, 0, 0, 82, 0, 77, 0, 0, - 42, 12, 78, 15, 0, 116, 85, 54, 112, 0, 19, 0, 0, - 121, 0, 119, 115, 0, 22, 93, 0, 9, 0, 0, 70, 71, - 0, 69, 6, 0, 48, 90, 102, 0, 118, 101, 0, 0, 44, - 0, 103, 24, 0, 17, 0, 122, 53, 23, 0, 5, 110, 25, - 96, 0, 0, 124, 106, 60, 123, 57, 28, 55, 0, 91, 0, - 100, 26, 0, 99, 0, 0, 0, 95, 92, 97, 88, 109, 14, - 39, 108, 0, 81, 0, 18, 89, 111, 32, 0, 120, 80, 113, - 62, 46, 84, 0, 0, 94, 40, 59, 114, 0, 36, 0, 0, - 29, 0, 86, 63, 64, 0, 20, 61, 0, 56, - }; - static const unsigned char aNext[124] = { - 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 0, 0, 50, - 0, 43, 3, 47, 0, 0, 0, 0, 30, 0, 58, 0, 38, - 0, 0, 0, 1, 66, 0, 0, 67, 0, 41, 0, 0, 0, - 0, 0, 0, 49, 65, 0, 0, 0, 0, 31, 52, 16, 34, - 10, 0, 0, 0, 0, 0, 0, 0, 11, 72, 79, 0, 8, - 0, 104, 98, 0, 107, 0, 87, 0, 75, 51, 0, 27, 37, - 73, 83, 0, 35, 68, 0, 0, - }; - static const unsigned char aLen[124] = { - 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, - 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6, - 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10, - 4, 6, 2, 3, 9, 4, 2, 6, 5, 7, 4, 5, 7, - 6, 6, 5, 6, 5, 5, 9, 7, 7, 3, 2, 4, 4, - 7, 3, 6, 4, 7, 6, 12, 6, 9, 4, 6, 5, 4, - 7, 6, 5, 6, 7, 5, 4, 5, 6, 5, 7, 3, 7, - 13, 2, 2, 4, 6, 6, 8, 5, 17, 12, 7, 8, 8, - 2, 4, 4, 4, 4, 4, 2, 2, 6, 5, 8, 5, 8, - 3, 5, 5, 6, 4, 9, 3, - }; - static const unsigned short int aOffset[124] = { - 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, - 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, - 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152, - 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 184, 188, 192, - 199, 204, 209, 212, 218, 221, 225, 234, 240, 240, 240, 243, 246, - 250, 251, 255, 261, 265, 272, 278, 290, 296, 305, 307, 313, 318, - 320, 327, 332, 337, 343, 349, 354, 358, 361, 367, 371, 378, 380, - 387, 389, 391, 400, 404, 410, 416, 424, 429, 429, 445, 452, 459, - 460, 467, 471, 475, 479, 483, 486, 488, 490, 496, 500, 508, 513, - 521, 524, 529, 534, 540, 544, 549, - }; - static const unsigned char aCode[124] = { - TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, - TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, - TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, - TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE, - TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE, - TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW, - TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT, - TK_INTERSECT, TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO, - TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP, - TK_OR, TK_UNIQUE, TK_QUERY, TK_WITHOUT, TK_WITH, - TK_JOIN_KW, TK_RELEASE, TK_ATTACH, TK_HAVING, TK_GROUP, - TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RECURSIVE, TK_BETWEEN, - TK_NOTNULL, TK_NOT, TK_NO, TK_NULL, TK_LIKE_KW, - TK_CASCADE, TK_ASC, TK_DELETE, TK_CASE, TK_COLLATE, - TK_CREATE, TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE, TK_JOIN, - TK_INSERT, TK_MATCH, TK_PLAN, TK_ANALYZE, TK_PRAGMA, - TK_ABORT, TK_VALUES, TK_VIRTUAL, TK_LIMIT, TK_WHEN, - TK_WHERE, TK_RENAME, TK_AFTER, TK_REPLACE, TK_AND, - TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN, TK_CAST, - TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW, TK_CTIME_KW, - TK_CTIME_KW, TK_PRIMARY, TK_DEFERRED, TK_DISTINCT, TK_IS, - TK_DROP, TK_FAIL, TK_FROM, TK_JOIN_KW, TK_LIKE_KW, - TK_BY, TK_IF, TK_ISNULL, TK_ORDER, TK_RESTRICT, - TK_JOIN_KW, TK_ROLLBACK, TK_ROW, TK_UNION, TK_USING, - TK_VACUUM, TK_VIEW, TK_INITIALLY, TK_ALL, - }; int i, j; const char *zKW; if( n>=2 ){ i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n) % 127; - for(i=((int)aHash[i])-1; i>=0; i=((int)aNext[i])-1){ - if( aLen[i]!=n ) continue; + for(i=((int)aKWHash[i])-1; i>=0; i=((int)aKWNext[i])-1){ + if( aKWLen[i]!=n ) continue; j = 0; - zKW = &zText[aOffset[i]]; + zKW = &zKWText[aKWOffset[i]]; #ifdef SQLITE_ASCII while( jdb; /* The database connection */ int mxSqlLen; /* Max length of an SQL string */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + yyParser sEngine; /* Space to hold the Lemon-generated Parser object */ +#endif assert( zSql!=0 ); mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; @@ -138445,25 +141083,27 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr } pParse->rc = SQLITE_OK; pParse->zTail = zSql; - i = 0; assert( pzErrMsg!=0 ); /* sqlite3ParserTrace(stdout, "parser: "); */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + pEngine = &sEngine; + sqlite3ParserInit(pEngine); +#else pEngine = sqlite3ParserAlloc(sqlite3Malloc); if( pEngine==0 ){ sqlite3OomFault(db); return SQLITE_NOMEM_BKPT; } +#endif assert( pParse->pNewTable==0 ); assert( pParse->pNewTrigger==0 ); assert( pParse->nVar==0 ); assert( pParse->pVList==0 ); while( 1 ){ - assert( i>=0 ); - if( zSql[i]!=0 ){ - pParse->sLastToken.z = &zSql[i]; - pParse->sLastToken.n = sqlite3GetToken((u8*)&zSql[i],&tokenType); - i += pParse->sLastToken.n; - if( i>mxSqlLen ){ + if( zSql[0]!=0 ){ + n = sqlite3GetToken((u8*)zSql, &tokenType); + mxSqlLen -= n; + if( mxSqlLen<0 ){ pParse->rc = SQLITE_TOOBIG; break; } @@ -138477,6 +141117,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr }else{ tokenType = TK_SEMI; } + zSql -= n; } if( tokenType>=TK_SPACE ){ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL ); @@ -138485,18 +141126,21 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr break; } if( tokenType==TK_ILLEGAL ){ - sqlite3ErrorMsg(pParse, "unrecognized token: \"%T\"", - &pParse->sLastToken); + sqlite3ErrorMsg(pParse, "unrecognized token: \"%.*s\"", n, zSql); break; } + zSql += n; }else{ + pParse->sLastToken.z = zSql; + pParse->sLastToken.n = n; sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse); lastTokenParsed = tokenType; + zSql += n; if( pParse->rc!=SQLITE_OK || db->mallocFailed ) break; } } assert( nErr==0 ); - pParse->zTail = &zSql[i]; + pParse->zTail = zSql; #ifdef YYTRACKMAXSTACKDEPTH sqlite3_mutex_enter(sqlite3MallocMutex()); sqlite3StatusHighwater(SQLITE_STATUS_PARSER_STACK, @@ -138504,7 +141148,11 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr ); sqlite3_mutex_leave(sqlite3MallocMutex()); #endif /* YYDEBUG */ +#ifdef sqlite3Parser_ENGINEALWAYSONSTACK + sqlite3ParserFinalize(pEngine); +#else sqlite3ParserFree(pEngine, sqlite3_free); +#endif if( db->mallocFailed ){ pParse->rc = SQLITE_NOMEM_BKPT; } @@ -138547,7 +141195,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr while( pParse->pAinc ){ AutoincInfo *p = pParse->pAinc; pParse->pAinc = p->pNext; - sqlite3DbFree(db, p); + sqlite3DbFreeNN(db, p); } while( pParse->pZombieTab ){ Table *p = pParse->pZombieTab; @@ -138974,6 +141622,9 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db); #ifdef SQLITE_ENABLE_JSON1 SQLITE_PRIVATE int sqlite3Json1Init(sqlite3*); #endif +#ifdef SQLITE_ENABLE_STMTVTAB +SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3*); +#endif #ifdef SQLITE_ENABLE_FTS5 SQLITE_PRIVATE int sqlite3Fts5Init(sqlite3*); #endif @@ -139736,6 +142387,8 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ va_start(ap, op); switch( op ){ case SQLITE_DBCONFIG_MAINDBNAME: { + /* IMP: R-06824-28531 */ + /* IMP: R-36257-52125 */ db->aDb[0].zDbSName = va_arg(ap,char*); rc = SQLITE_OK; break; @@ -139757,6 +142410,7 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ { SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER, SQLITE_Fts3Tokenizer }, { SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, SQLITE_LoadExtension }, { SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE, SQLITE_NoCkptOnClose }, + { SQLITE_DBCONFIG_ENABLE_QPSG, SQLITE_EnableQPSG }, }; unsigned int i; rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ @@ -139813,6 +142467,7 @@ static int binCollFunc( /* EVIDENCE-OF: R-65033-28449 The built-in BINARY collation compares ** strings byte by byte using the memcmp() function from the standard C ** library. */ + assert( pKey1 && pKey2 ); rc = memcmp(pKey1, pKey2, n); if( rc==0 ){ if( padFlag @@ -139867,6 +142522,21 @@ SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){ return db->lastRowid; } +/* +** Set the value returned by the sqlite3_last_insert_rowid() API function. +*/ +SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3 *db, sqlite3_int64 iRowid){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return; + } +#endif + sqlite3_mutex_enter(db->mutex); + db->lastRowid = iRowid; + sqlite3_mutex_leave(db->mutex); +} + /* ** Return the number of changes in the most recent call to sqlite3_exec(). */ @@ -140330,10 +143000,10 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ static const char* const aMsg[] = { /* SQLITE_OK */ "not an error", - /* SQLITE_ERROR */ "SQL logic error or missing database", + /* SQLITE_ERROR */ "SQL logic error", /* SQLITE_INTERNAL */ 0, /* SQLITE_PERM */ "access permission denied", - /* SQLITE_ABORT */ "callback requested query abort", + /* SQLITE_ABORT */ "query aborted", /* SQLITE_BUSY */ "database is locked", /* SQLITE_LOCKED */ "database table is locked", /* SQLITE_NOMEM */ "out of memory", @@ -140345,17 +143015,21 @@ SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ /* SQLITE_FULL */ "database or disk is full", /* SQLITE_CANTOPEN */ "unable to open database file", /* SQLITE_PROTOCOL */ "locking protocol", - /* SQLITE_EMPTY */ "table contains no data", + /* SQLITE_EMPTY */ 0, /* SQLITE_SCHEMA */ "database schema has changed", /* SQLITE_TOOBIG */ "string or blob too big", /* SQLITE_CONSTRAINT */ "constraint failed", /* SQLITE_MISMATCH */ "datatype mismatch", - /* SQLITE_MISUSE */ "library routine called out of sequence", + /* SQLITE_MISUSE */ "bad parameter or other API misuse", +#ifdef SQLITE_DISABLE_LFS /* SQLITE_NOLFS */ "large file support is disabled", +#else + /* SQLITE_NOLFS */ 0, +#endif /* SQLITE_AUTH */ "authorization denied", - /* SQLITE_FORMAT */ "auxiliary database format error", - /* SQLITE_RANGE */ "bind or column index out of range", - /* SQLITE_NOTADB */ "file is encrypted or is not a database", + /* SQLITE_FORMAT */ 0, + /* SQLITE_RANGE */ "column index out of range", + /* SQLITE_NOTADB */ "file is not a database", }; const char *zErr = "unknown error"; switch( rc ){ @@ -141195,12 +143869,9 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){ 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0 }; static const u16 misuse[] = { - 'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ', - 'r', 'o', 'u', 't', 'i', 'n', 'e', ' ', - 'c', 'a', 'l', 'l', 'e', 'd', ' ', - 'o', 'u', 't', ' ', - 'o', 'f', ' ', - 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0 + 'b', 'a', 'd', ' ', 'p', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', ' ', + 'o', 'r', ' ', 'o', 't', 'h', 'e', 'r', ' ', 'A', 'P', 'I', ' ', + 'm', 'i', 's', 'u', 's', 'e', 0 }; const void *z; @@ -141735,26 +144406,6 @@ static int openDatabase( if( rc ) return rc; #endif - /* Only allow sensible combinations of bits in the flags argument. - ** Throw an error if any non-sense combination is used. If we - ** do not block illegal combinations here, it could trigger - ** assert() statements in deeper layers. Sensible combinations - ** are: - ** - ** 1: SQLITE_OPEN_READONLY - ** 2: SQLITE_OPEN_READWRITE - ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE - */ - assert( SQLITE_OPEN_READONLY == 0x01 ); - assert( SQLITE_OPEN_READWRITE == 0x02 ); - assert( SQLITE_OPEN_CREATE == 0x04 ); - testcase( (1<<(flags&7))==0x02 ); /* READONLY */ - testcase( (1<<(flags&7))==0x04 ); /* READWRITE */ - testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */ - if( ((1<<(flags&7)) & 0x46)==0 ){ - return SQLITE_MISUSE_BKPT; /* IMP: R-65497-44594 */ - } - if( sqlite3GlobalConfig.bCoreMutex==0 ){ isThreadsafe = 0; }else if( flags & SQLITE_OPEN_NOMUTEX ){ @@ -141845,6 +144496,9 @@ static int openDatabase( #endif #if defined(SQLITE_ENABLE_FTS3_TOKENIZER) | SQLITE_Fts3Tokenizer +#endif +#if defined(SQLITE_ENABLE_QPSG) + | SQLITE_EnableQPSG #endif ; sqlite3HashInit(&db->aCollSeq); @@ -141873,9 +144527,30 @@ static int openDatabase( db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, sqlite3StrBINARY, 0); assert( db->pDfltColl!=0 ); - /* Parse the filename/URI argument. */ + /* Parse the filename/URI argument + ** + ** Only allow sensible combinations of bits in the flags argument. + ** Throw an error if any non-sense combination is used. If we + ** do not block illegal combinations here, it could trigger + ** assert() statements in deeper layers. Sensible combinations + ** are: + ** + ** 1: SQLITE_OPEN_READONLY + ** 2: SQLITE_OPEN_READWRITE + ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE + */ db->openFlags = flags; - rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); + assert( SQLITE_OPEN_READONLY == 0x01 ); + assert( SQLITE_OPEN_READWRITE == 0x02 ); + assert( SQLITE_OPEN_CREATE == 0x04 ); + testcase( (1<<(flags&7))==0x02 ); /* READONLY */ + testcase( (1<<(flags&7))==0x04 ); /* READWRITE */ + testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */ + if( ((1<<(flags&7)) & 0x46)==0 ){ + rc = SQLITE_MISUSE_BKPT; /* IMP: R-65497-44594 */ + }else{ + rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg); + } if( rc!=SQLITE_OK ){ if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); sqlite3ErrorWithMsg(db, rc, zErrMsg ? "%s" : 0, zErrMsg); @@ -141984,6 +144659,12 @@ static int openDatabase( } #endif +#ifdef SQLITE_ENABLE_STMTVTAB + if( !db->mallocFailed && rc==SQLITE_OK){ + rc = sqlite3StmtVtabInit(db); + } +#endif + /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking ** mode. Doing nothing at all also makes NORMAL the default. @@ -142026,16 +144707,18 @@ opendb_out: #endif #if defined(SQLITE_HAS_CODEC) if( rc==SQLITE_OK ){ - const char *zHexKey = sqlite3_uri_parameter(zOpen, "hexkey"); - if( zHexKey && zHexKey[0] ){ + const char *zKey; + if( (zKey = sqlite3_uri_parameter(zOpen, "hexkey"))!=0 && zKey[0] ){ u8 iByte; int i; - char zKey[40]; - for(i=0, iByte=0; i=0 && N=0 ); return 5; } @@ -144758,6 +147504,7 @@ static int fts3DisconnectMethod(sqlite3_vtab *pVtab){ assert( p->pSegments==0 ); /* Free any prepared statements held */ + sqlite3_finalize(p->pSeekStmt); for(i=0; iaStmt); i++){ sqlite3_finalize(p->aStmt[i]); } @@ -145483,65 +148230,66 @@ static int fts3InitVtab( break; } } - if( iOpt==SizeofArray(aFts4Opt) ){ - sqlite3Fts3ErrMsg(pzErr, "unrecognized parameter: %s", z); - rc = SQLITE_ERROR; - }else{ - switch( iOpt ){ - case 0: /* MATCHINFO */ - if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){ - sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo: %s", zVal); - rc = SQLITE_ERROR; - } - bNoDocsize = 1; - break; + switch( iOpt ){ + case 0: /* MATCHINFO */ + if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){ + sqlite3Fts3ErrMsg(pzErr, "unrecognized matchinfo: %s", zVal); + rc = SQLITE_ERROR; + } + bNoDocsize = 1; + break; - case 1: /* PREFIX */ - sqlite3_free(zPrefix); - zPrefix = zVal; - zVal = 0; - break; + case 1: /* PREFIX */ + sqlite3_free(zPrefix); + zPrefix = zVal; + zVal = 0; + break; - case 2: /* COMPRESS */ - sqlite3_free(zCompress); - zCompress = zVal; - zVal = 0; - break; + case 2: /* COMPRESS */ + sqlite3_free(zCompress); + zCompress = zVal; + zVal = 0; + break; - case 3: /* UNCOMPRESS */ - sqlite3_free(zUncompress); - zUncompress = zVal; - zVal = 0; - break; + case 3: /* UNCOMPRESS */ + sqlite3_free(zUncompress); + zUncompress = zVal; + zVal = 0; + break; - case 4: /* ORDER */ - if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) - && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4)) - ){ - sqlite3Fts3ErrMsg(pzErr, "unrecognized order: %s", zVal); - rc = SQLITE_ERROR; - } - bDescIdx = (zVal[0]=='d' || zVal[0]=='D'); - break; + case 4: /* ORDER */ + if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3)) + && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4)) + ){ + sqlite3Fts3ErrMsg(pzErr, "unrecognized order: %s", zVal); + rc = SQLITE_ERROR; + } + bDescIdx = (zVal[0]=='d' || zVal[0]=='D'); + break; - case 5: /* CONTENT */ - sqlite3_free(zContent); - zContent = zVal; - zVal = 0; - break; + case 5: /* CONTENT */ + sqlite3_free(zContent); + zContent = zVal; + zVal = 0; + break; - case 6: /* LANGUAGEID */ - assert( iOpt==6 ); - sqlite3_free(zLanguageid); - zLanguageid = zVal; - zVal = 0; - break; + case 6: /* LANGUAGEID */ + assert( iOpt==6 ); + sqlite3_free(zLanguageid); + zLanguageid = zVal; + zVal = 0; + break; - case 7: /* NOTINDEXED */ - azNotindexed[nNotindexed++] = zVal; - zVal = 0; - break; - } + case 7: /* NOTINDEXED */ + azNotindexed[nNotindexed++] = zVal; + zVal = 0; + break; + + default: + assert( iOpt==SizeofArray(aFts4Opt) ); + sqlite3Fts3ErrMsg(pzErr, "unrecognized parameter: %s", z); + rc = SQLITE_ERROR; + break; } sqlite3_free(zVal); } @@ -145629,9 +148377,9 @@ static int fts3InitVtab( p->pTokenizer = pTokenizer; p->nMaxPendingData = FTS3_MAX_PENDING_DATA; p->bHasDocsize = (isFts4 && bNoDocsize==0); - p->bHasStat = isFts4; - p->bFts4 = isFts4; - p->bDescIdx = bDescIdx; + p->bHasStat = (u8)isFts4; + p->bFts4 = (u8)isFts4; + p->bDescIdx = (u8)bDescIdx; p->nAutoincrmerge = 0xff; /* 0xff means setting unknown */ p->zContentTbl = zContent; p->zLanguageid = zLanguageid; @@ -145662,7 +148410,9 @@ static int fts3InitVtab( char *z; int n = 0; z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n); - memcpy(zCsr, z, n); + if( n>0 ){ + memcpy(zCsr, z, n); + } zCsr[n] = '\0'; sqlite3Fts3Dequote(zCsr); p->azColumn[iCol] = zCsr; @@ -145946,6 +148696,39 @@ static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ return SQLITE_OK; } +/* +** Finalize the statement handle at pCsr->pStmt. +** +** Or, if that statement handle is one created by fts3CursorSeekStmt(), +** and the Fts3Table.pSeekStmt slot is currently NULL, save the statement +** pointer there instead of finalizing it. +*/ +static void fts3CursorFinalizeStmt(Fts3Cursor *pCsr){ + if( pCsr->bSeekStmt ){ + Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; + if( p->pSeekStmt==0 ){ + p->pSeekStmt = pCsr->pStmt; + sqlite3_reset(pCsr->pStmt); + pCsr->pStmt = 0; + } + pCsr->bSeekStmt = 0; + } + sqlite3_finalize(pCsr->pStmt); +} + +/* +** Free all resources currently held by the cursor passed as the only +** argument. +*/ +static void fts3ClearCursor(Fts3Cursor *pCsr){ + fts3CursorFinalizeStmt(pCsr); + sqlite3Fts3FreeDeferredTokens(pCsr); + sqlite3_free(pCsr->aDoclist); + sqlite3Fts3MIBufferFree(pCsr->pMIBuffer); + sqlite3Fts3ExprFree(pCsr->pExpr); + memset(&(&pCsr->base)[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor)); +} + /* ** Close the cursor. For additional information see the documentation ** on the xClose method of the virtual table interface. @@ -145953,11 +148736,7 @@ static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){ static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){ Fts3Cursor *pCsr = (Fts3Cursor *)pCursor; assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); - sqlite3_finalize(pCsr->pStmt); - sqlite3Fts3ExprFree(pCsr->pExpr); - sqlite3Fts3FreeDeferredTokens(pCsr); - sqlite3_free(pCsr->aDoclist); - sqlite3Fts3MIBufferFree(pCsr->pMIBuffer); + fts3ClearCursor(pCsr); assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); sqlite3_free(pCsr); return SQLITE_OK; @@ -145971,20 +148750,23 @@ static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){ ** ** (or the equivalent for a content=xxx table) and set pCsr->pStmt to ** it. If an error occurs, return an SQLite error code. -** -** Otherwise, set *ppStmt to point to pCsr->pStmt and return SQLITE_OK. */ -static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){ +static int fts3CursorSeekStmt(Fts3Cursor *pCsr){ int rc = SQLITE_OK; if( pCsr->pStmt==0 ){ Fts3Table *p = (Fts3Table *)pCsr->base.pVtab; char *zSql; - zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist); - if( !zSql ) return SQLITE_NOMEM; - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0); - sqlite3_free(zSql); + if( p->pSeekStmt ){ + pCsr->pStmt = p->pSeekStmt; + p->pSeekStmt = 0; + }else{ + zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist); + if( !zSql ) return SQLITE_NOMEM; + rc = sqlite3_prepare_v3(p->db, zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0); + sqlite3_free(zSql); + } + if( rc==SQLITE_OK ) pCsr->bSeekStmt = 1; } - *ppStmt = pCsr->pStmt; return rc; } @@ -145996,9 +148778,7 @@ static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){ static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){ int rc = SQLITE_OK; if( pCsr->isRequireSeek ){ - sqlite3_stmt *pStmt = 0; - - rc = fts3CursorSeekStmt(pCsr, &pStmt); + rc = fts3CursorSeekStmt(pCsr); if( rc==SQLITE_OK ){ sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId); pCsr->isRequireSeek = 0; @@ -146087,7 +148867,8 @@ static int fts3ScanInteriorNode( isFirstTerm = 0; zCsr += fts3GetVarint32(zCsr, &nSuffix); - if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){ + assert( nPrefix>=0 && nSuffix>=0 ); + if( &zCsr[nSuffix]>zEnd ){ rc = FTS_CORRUPT_VTAB; goto finish_scan; } @@ -146897,7 +149678,7 @@ SQLITE_PRIVATE int sqlite3Fts3FirstFilter( fts3ColumnlistCopy(0, &p); } - while( ppStmt); - sqlite3_free(pCsr->aDoclist); - sqlite3Fts3MIBufferFree(pCsr->pMIBuffer); - sqlite3Fts3ExprFree(pCsr->pExpr); - memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor)); + fts3ClearCursor(pCsr); /* Set the lower and upper bounds on docids to return */ pCsr->iMinDocid = fts3DocidRange(pDocidGe, SMALLEST_INT64); @@ -147518,13 +150295,13 @@ static int fts3FilterMethod( ); } if( zSql ){ - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0); + rc = sqlite3_prepare_v3(p->db,zSql,-1,SQLITE_PREPARE_PERSISTENT,&pCsr->pStmt,0); sqlite3_free(zSql); }else{ rc = SQLITE_NOMEM; } }else if( eSearch==FTS3_DOCID_SEARCH ){ - rc = fts3CursorSeekStmt(pCsr, &pCsr->pStmt); + rc = fts3CursorSeekStmt(pCsr); if( rc==SQLITE_OK ){ rc = sqlite3_bind_value(pCsr->pStmt, 1, pCons); } @@ -147539,7 +150316,12 @@ static int fts3FilterMethod( ** routine to find out if it has reached the end of a result set. */ static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){ - return ((Fts3Cursor *)pCursor)->isEof; + Fts3Cursor *pCsr = (Fts3Cursor*)pCursor; + if( pCsr->isEof ){ + fts3ClearCursor(pCsr); + pCsr->isEof = 1; + } + return pCsr->isEof; } /* @@ -147577,33 +150359,37 @@ static int fts3ColumnMethod( /* The column value supplied by SQLite must be in range. */ assert( iCol>=0 && iCol<=p->nColumn+2 ); - if( iCol==p->nColumn+1 ){ - /* This call is a request for the "docid" column. Since "docid" is an - ** alias for "rowid", use the xRowid() method to obtain the value. - */ - sqlite3_result_int64(pCtx, pCsr->iPrevId); - }else if( iCol==p->nColumn ){ - /* The extra column whose name is the same as the table. - ** Return a blob which is a pointer to the cursor. */ - sqlite3_result_blob(pCtx, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT); - }else if( iCol==p->nColumn+2 && pCsr->pExpr ){ - sqlite3_result_int64(pCtx, pCsr->iLangid); - }else{ - /* The requested column is either a user column (one that contains - ** indexed data), or the language-id column. */ - rc = fts3CursorSeek(0, pCsr); + switch( iCol-p->nColumn ){ + case 0: + /* The special 'table-name' column */ + sqlite3_result_pointer(pCtx, pCsr, "fts3cursor", 0); + break; - if( rc==SQLITE_OK ){ - if( iCol==p->nColumn+2 ){ - int iLangid = 0; - if( p->zLanguageid ){ - iLangid = sqlite3_column_int(pCsr->pStmt, p->nColumn+1); - } - sqlite3_result_int(pCtx, iLangid); - }else if( sqlite3_data_count(pCsr->pStmt)>(iCol+1) ){ + case 1: + /* The docid column */ + sqlite3_result_int64(pCtx, pCsr->iPrevId); + break; + + case 2: + if( pCsr->pExpr ){ + sqlite3_result_int64(pCtx, pCsr->iLangid); + break; + }else if( p->zLanguageid==0 ){ + sqlite3_result_int(pCtx, 0); + break; + }else{ + iCol = p->nColumn; + /* fall-through */ + } + + default: + /* A user column. Or, if this is a full-table scan, possibly the + ** language-id column. Seek the cursor. */ + rc = fts3CursorSeek(0, pCsr); + if( rc==SQLITE_OK && sqlite3_data_count(pCsr->pStmt)-1>iCol ){ sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1)); } - } + break; } assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 ); @@ -147652,8 +150438,10 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){ const u32 nMinMerge = 64; /* Minimum amount of incr-merge work to do */ Fts3Table *p = (Fts3Table*)pVtab; - int rc = sqlite3Fts3PendingTermsFlush(p); + int rc; + i64 iLastRowid = sqlite3_last_insert_rowid(p->db); + rc = sqlite3Fts3PendingTermsFlush(p); if( rc==SQLITE_OK && p->nLeafAdd>(nMinMerge/16) && p->nAutoincrmerge && p->nAutoincrmerge!=0xff @@ -147668,6 +150456,7 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){ if( A>(int)nMinMerge ) rc = sqlite3Fts3Incrmerge(p, A, p->nAutoincrmerge); } sqlite3Fts3SegmentsClose(p); + sqlite3_set_last_insert_rowid(p->db, iLastRowid); return rc; } @@ -147680,17 +150469,11 @@ static int fts3SyncMethod(sqlite3_vtab *pVtab){ static int fts3SetHasStat(Fts3Table *p){ int rc = SQLITE_OK; if( p->bHasStat==2 ){ - const char *zFmt ="SELECT 1 FROM %Q.sqlite_master WHERE tbl_name='%q_stat'"; - char *zSql = sqlite3_mprintf(zFmt, p->zDb, p->zName); - if( zSql ){ - sqlite3_stmt *pStmt = 0; - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0); - if( rc==SQLITE_OK ){ - int bHasStat = (sqlite3_step(pStmt)==SQLITE_ROW); - rc = sqlite3_finalize(pStmt); - if( rc==SQLITE_OK ) p->bHasStat = bHasStat; - } - sqlite3_free(zSql); + char *zTbl = sqlite3_mprintf("%s_stat", p->zName); + if( zTbl ){ + int res = sqlite3_table_column_metadata(p->db, p->zDb, zTbl, 0,0,0,0,0,0); + sqlite3_free(zTbl); + p->bHasStat = (res==SQLITE_OK); }else{ rc = SQLITE_NOMEM; } @@ -147797,18 +150580,17 @@ static int fts3FunctionArg( sqlite3_value *pVal, /* argv[0] passed to function */ Fts3Cursor **ppCsr /* OUT: Store cursor handle here */ ){ - Fts3Cursor *pRet; - if( sqlite3_value_type(pVal)!=SQLITE_BLOB - || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *) - ){ + int rc; + *ppCsr = (Fts3Cursor*)sqlite3_value_pointer(pVal, "fts3cursor"); + if( (*ppCsr)!=0 ){ + rc = SQLITE_OK; + }else{ char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc); sqlite3_result_error(pContext, zErr, -1); sqlite3_free(zErr); - return SQLITE_ERROR; + rc = SQLITE_ERROR; } - memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *)); - *ppCsr = pRet; - return SQLITE_OK; + return rc; } /* @@ -148195,7 +150977,7 @@ SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){ #endif /* Create the virtual table wrapper around the hash-table and overload - ** the two scalar functions. If this is successful, register the + ** the four scalar functions. If this is successful, register the ** module with sqlite. */ if( SQLITE_OK==rc @@ -148778,7 +151560,7 @@ static int fts3EvalIncrPhraseNext( ** one incremental token. In which case the bIncr flag is set. */ assert( p->bIncr==1 ); - if( p->nToken==1 && p->bIncr ){ + if( p->nToken==1 ){ rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr, &pDL->iDocid, &pDL->pList, &pDL->nList ); @@ -149011,6 +151793,7 @@ static void fts3EvalTokenCosts( ** the number of overflow pages consumed by a record B bytes in size. */ static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){ + int rc = SQLITE_OK; if( pCsr->nRowAvg==0 ){ /* The average document size, which is required to calculate the cost ** of each doclist, has not yet been determined. Read the required @@ -149023,7 +151806,6 @@ static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){ ** data stored in all rows of each column of the table, from left ** to right. */ - int rc; Fts3Table *p = (Fts3Table*)pCsr->base.pVtab; sqlite3_stmt *pStmt; sqlite3_int64 nDoc = 0; @@ -149050,11 +151832,10 @@ static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){ pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz); assert( pCsr->nRowAvg>0 ); rc = sqlite3_reset(pStmt); - if( rc!=SQLITE_OK ) return rc; } *pnPage = pCsr->nRowAvg; - return SQLITE_OK; + return rc; } /* @@ -149404,7 +152185,8 @@ static void fts3EvalNextRow( pExpr->iDocid = pLeft->iDocid; pExpr->bEof = (pLeft->bEof || pRight->bEof); if( pExpr->eType==FTSQUERY_NEAR && pExpr->bEof ){ - if( pRight->pPhrase && pRight->pPhrase->doclist.aAll ){ + assert( pRight->eType==FTSQUERY_PHRASE ); + if( pRight->pPhrase->doclist.aAll ){ Fts3Doclist *pDl = &pRight->pPhrase->doclist; while( *pRc==SQLITE_OK && pRight->bEof==0 ){ memset(pDl->pList, 0, pDl->nList); @@ -149433,7 +152215,7 @@ static void fts3EvalNextRow( if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){ fts3EvalNextRow(pCsr, pLeft, pRc); - }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){ + }else if( pLeft->bEof || iCmp>0 ){ fts3EvalNextRow(pCsr, pRight, pRc); }else{ fts3EvalNextRow(pCsr, pLeft, pRc); @@ -149525,7 +152307,6 @@ static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){ */ if( *pRc==SQLITE_OK && pExpr->eType==FTSQUERY_NEAR - && pExpr->bEof==0 && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR) ){ Fts3Expr *p; @@ -149534,42 +152315,39 @@ static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){ /* Allocate temporary working space. */ for(p=pExpr; p->pLeft; p=p->pLeft){ + assert( p->pRight->pPhrase->doclist.nList>0 ); nTmp += p->pRight->pPhrase->doclist.nList; } nTmp += p->pPhrase->doclist.nList; - if( nTmp==0 ){ + aTmp = sqlite3_malloc(nTmp*2); + if( !aTmp ){ + *pRc = SQLITE_NOMEM; res = 0; }else{ - aTmp = sqlite3_malloc(nTmp*2); - if( !aTmp ){ - *pRc = SQLITE_NOMEM; - res = 0; - }else{ - char *aPoslist = p->pPhrase->doclist.pList; - int nToken = p->pPhrase->nToken; + char *aPoslist = p->pPhrase->doclist.pList; + int nToken = p->pPhrase->nToken; - for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){ - Fts3Phrase *pPhrase = p->pRight->pPhrase; - int nNear = p->nNear; - res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); - } - - aPoslist = pExpr->pRight->pPhrase->doclist.pList; - nToken = pExpr->pRight->pPhrase->nToken; - for(p=pExpr->pLeft; p && res; p=p->pLeft){ - int nNear; - Fts3Phrase *pPhrase; - assert( p->pParent && p->pParent->pLeft==p ); - nNear = p->pParent->nNear; - pPhrase = ( - p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase - ); - res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); - } + for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){ + Fts3Phrase *pPhrase = p->pRight->pPhrase; + int nNear = p->nNear; + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); } - sqlite3_free(aTmp); + aPoslist = pExpr->pRight->pPhrase->doclist.pList; + nToken = pExpr->pRight->pPhrase->nToken; + for(p=pExpr->pLeft; p && res; p=p->pLeft){ + int nNear; + Fts3Phrase *pPhrase; + assert( p->pParent && p->pParent->pLeft==p ); + nNear = p->pParent->nNear; + pPhrase = ( + p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase + ); + res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase); + } } + + sqlite3_free(aTmp); } return res; @@ -154729,7 +157507,8 @@ static int fts3SqlStmt( if( !zSql ){ rc = SQLITE_NOMEM; }else{ - rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL); + rc = sqlite3_prepare_v3(p->db, zSql, -1, SQLITE_PREPARE_PERSISTENT, + &pStmt, NULL); sqlite3_free(zSql); assert( rc==SQLITE_OK || pStmt==0 ); p->aStmt[eStmt] = pStmt; @@ -159278,11 +162057,14 @@ SQLITE_PRIVATE int sqlite3Fts3Incrmerge(Fts3Table *p, int nMerge, int nMin){ ** Convert the text beginning at *pz into an integer and return ** its value. Advance *pz to point to the first character past ** the integer. +** +** This function used for parameters to merge= and incrmerge= +** commands. */ static int fts3Getint(const char **pz){ const char *z = *pz; int i = 0; - while( (*z)>='0' && (*z)<='9' ) i = 10*i + *(z++) - '0'; + while( (*z)>='0' && (*z)<='9' && i<214748363 ) i = 10*i + *(z++) - '0'; *pz = z; return i; } @@ -161848,16 +164630,16 @@ static int unicodeAddExceptions( ){ const unsigned char *z = (const unsigned char *)zIn; const unsigned char *zTerm = &z[nIn]; - int iCode; + unsigned int iCode; int nEntry = 0; assert( bAlnum==0 || bAlnum==1 ); while( zi; j--) aNew[j] = aNew[j-1]; - aNew[i] = iCode; + aNew[i] = (int)iCode; nNew++; } } @@ -162030,7 +164812,7 @@ static int unicodeNext( ){ unicode_cursor *pCsr = (unicode_cursor *)pC; unicode_tokenizer *p = ((unicode_tokenizer *)pCsr->base.pTokenizer); - int iCode = 0; + unsigned int iCode = 0; char *zOut; const unsigned char *z = &pCsr->aInput[pCsr->iOff]; const unsigned char *zStart = z; @@ -162042,7 +164824,7 @@ static int unicodeNext( ** the input. */ while( z=zTerm ) return SQLITE_DONE; @@ -162062,7 +164844,7 @@ static int unicodeNext( /* Write the folded case of the last character read to the output */ zEnd = z; - iOut = sqlite3FtsUnicodeFold(iCode, p->bRemoveDiacritic); + iOut = sqlite3FtsUnicodeFold((int)iCode, p->bRemoveDiacritic); if( iOut ){ WRITE_UTF8(zOut, iOut); } @@ -162070,8 +164852,8 @@ static int unicodeNext( /* If the cursor is not at EOF, read the next character */ if( z>=zTerm ) break; READ_UTF8(z, zTerm, iCode); - }while( unicodeIsAlnum(p, iCode) - || sqlite3FtsUnicodeIsdiacritic(iCode) + }while( unicodeIsAlnum(p, (int)iCode) + || sqlite3FtsUnicodeIsdiacritic((int)iCode) ); /* Set the output variables and return. */ @@ -162235,9 +165017,9 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int c){ 0xFFFFFFFF, 0xFC00FFFF, 0xF8000001, 0xF8000001, }; - if( c<128 ){ - return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 ); - }else if( c<(1<<22) ){ + if( (unsigned int)c<128 ){ + return ( (aAscii[c >> 5] & ((unsigned int)1 << (c & 0x001F)))==0 ); + }else if( (unsigned int)c<(1<<22) ){ unsigned int key = (((unsigned int)c)<<10) | 0x000003FF; int iRes = 0; int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; @@ -162430,16 +165212,17 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){ int ret = c; - assert( c>=0 ); assert( sizeof(unsigned short)==2 && sizeof(unsigned char)==1 ); if( c<128 ){ if( c>='A' && c<='Z' ) ret = c + ('a' - 'A'); }else if( c<65536 ){ + const struct TableEntry *p; int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1; int iLo = 0; int iRes = -1; + assert( c>aEntry[0].iCode ); while( iHi>=iLo ){ int iTest = (iHi + iLo) / 2; int cmp = (c - aEntry[iTest].iCode); @@ -162450,14 +165233,12 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){ iHi = iTest-1; } } - assert( iRes<0 || c>=aEntry[iRes].iCode ); - if( iRes>=0 ){ - const struct TableEntry *p = &aEntry[iRes]; - if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){ - ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF; - assert( ret>0 ); - } + assert( iRes>=0 && c>=aEntry[iRes].iCode ); + p = &aEntry[iRes]; + if( c<(p->iCode + p->nRange) && 0==(0x01 & p->flags & (p->iCode ^ c)) ){ + ret = (c + (aiOff[p->flags>>1])) & 0x0000FFFF; + assert( ret>0 ); } if( bRemoveDiacritic ) ret = remove_diacritic(ret); @@ -162544,6 +165325,7 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){ #ifndef SQLITE_AMALGAMATION #include "sqlite3rtree.h" typedef sqlite3_int64 i64; +typedef sqlite3_uint64 u64; typedef unsigned char u8; typedef unsigned short u16; typedef unsigned int u32; @@ -162592,13 +165374,16 @@ struct Rtree { sqlite3 *db; /* Host database connection */ int iNodeSize; /* Size in bytes of each node in the node table */ u8 nDim; /* Number of dimensions */ + u8 nDim2; /* Twice the number of dimensions */ u8 eCoordType; /* RTREE_COORD_REAL32 or RTREE_COORD_INT32 */ u8 nBytesPerCell; /* Bytes consumed per cell */ + u8 inWrTrans; /* True if inside write transaction */ int iDepth; /* Current depth of the r-tree structure */ char *zDb; /* Name of database containing r-tree table */ char *zName; /* Name of r-tree table */ - int nBusy; /* Current number of users of this structure */ + u32 nBusy; /* Current number of users of this structure */ i64 nRowEst; /* Estimated number of rows in this table */ + u32 nCursor; /* Number of open cursors */ /* List of nodes removed during a CondenseTree operation. List is ** linked together via the pointer normally used for hash chains - @@ -162608,8 +165393,10 @@ struct Rtree { RtreeNode *pDeleted; int iReinsertHeight; /* Height of sub-trees Reinsert() has run on */ + /* Blob I/O on xxx_node */ + sqlite3_blob *pNodeBlob; + /* Statements to read/write/delete a record from xxx_node */ - sqlite3_stmt *pReadNode; sqlite3_stmt *pWriteNode; sqlite3_stmt *pDeleteNode; @@ -162809,14 +165596,6 @@ struct RtreeGeomCallback { void *pContext; }; - -/* -** Value for the first field of every RtreeMatchArg object. The MATCH -** operator tests that the first field of a blob operand matches this -** value to avoid operating on invalid blobs (which could cause a segfault). -*/ -#define RTREE_GEOMETRY_MAGIC 0x891245AB - /* ** An instance of this structure (in the form of a BLOB) is returned by ** the SQL functions that sqlite3_rtree_geometry_callback() and @@ -162824,7 +165603,7 @@ struct RtreeGeomCallback { ** operand to the MATCH operator of an R-Tree. */ struct RtreeMatchArg { - u32 magic; /* Always RTREE_GEOMETRY_MAGIC */ + u32 iSize; /* Size of this object */ RtreeGeomCallback cb; /* Info about the callback functions */ int nParam; /* Number of parameters to the SQL function */ sqlite3_value **apSqlParam; /* Original SQL parameter values */ @@ -162838,6 +165617,58 @@ struct RtreeMatchArg { # define MIN(x,y) ((x) > (y) ? (y) : (x)) #endif +/* What version of GCC is being used. 0 means GCC is not being used . +** Note that the GCC_VERSION macro will also be set correctly when using +** clang, since clang works hard to be gcc compatible. So the gcc +** optimizations will also work when compiling with clang. +*/ +#ifndef GCC_VERSION +#if defined(__GNUC__) && !defined(SQLITE_DISABLE_INTRINSIC) +# define GCC_VERSION (__GNUC__*1000000+__GNUC_MINOR__*1000+__GNUC_PATCHLEVEL__) +#else +# define GCC_VERSION 0 +#endif +#endif + +/* The testcase() macro should already be defined in the amalgamation. If +** it is not, make it a no-op. +*/ +#ifndef SQLITE_AMALGAMATION +# define testcase(X) +#endif + +/* +** Macros to determine whether the machine is big or little endian, +** and whether or not that determination is run-time or compile-time. +** +** For best performance, an attempt is made to guess at the byte-order +** using C-preprocessor macros. If that is unsuccessful, or if +** -DSQLITE_RUNTIME_BYTEORDER=1 is set, then byte-order is determined +** at run-time. +*/ +#ifndef SQLITE_BYTEORDER +#if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ + defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ + defined(__arm__) +# define SQLITE_BYTEORDER 1234 +#elif defined(sparc) || defined(__ppc__) +# define SQLITE_BYTEORDER 4321 +#else +# define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ +#endif +#endif + + +/* What version of MSVC is being used. 0 means MSVC is not being used */ +#ifndef MSVC_VERSION +#if defined(_MSC_VER) && !defined(SQLITE_DISABLE_INTRINSIC) +# define MSVC_VERSION _MSC_VER +#else +# define MSVC_VERSION 0 +#endif +#endif + /* ** Functions to deserialize a 16 bit integer, 32 bit real number and ** 64 bit integer. The deserialized value is returned. @@ -162846,24 +165677,47 @@ static int readInt16(u8 *p){ return (p[0]<<8) + p[1]; } static void readCoord(u8 *p, RtreeCoord *pCoord){ + assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + pCoord->u = _byteswap_ulong(*(u32*)p); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + pCoord->u = __builtin_bswap32(*(u32*)p); +#elif SQLITE_BYTEORDER==4321 + pCoord->u = *(u32*)p; +#else pCoord->u = ( (((u32)p[0]) << 24) + (((u32)p[1]) << 16) + (((u32)p[2]) << 8) + (((u32)p[3]) << 0) ); +#endif } static i64 readInt64(u8 *p){ - return ( - (((i64)p[0]) << 56) + - (((i64)p[1]) << 48) + - (((i64)p[2]) << 40) + - (((i64)p[3]) << 32) + - (((i64)p[4]) << 24) + - (((i64)p[5]) << 16) + - (((i64)p[6]) << 8) + - (((i64)p[7]) << 0) +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + u64 x; + memcpy(&x, p, 8); + return (i64)_byteswap_uint64(x); +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + u64 x; + memcpy(&x, p, 8); + return (i64)__builtin_bswap64(x); +#elif SQLITE_BYTEORDER==4321 + i64 x; + memcpy(&x, p, 8); + return x; +#else + return (i64)( + (((u64)p[0]) << 56) + + (((u64)p[1]) << 48) + + (((u64)p[2]) << 40) + + (((u64)p[3]) << 32) + + (((u64)p[4]) << 24) + + (((u64)p[5]) << 16) + + (((u64)p[6]) << 8) + + (((u64)p[7]) << 0) ); +#endif } /* @@ -162871,23 +165725,43 @@ static i64 readInt64(u8 *p){ ** 64 bit integer. The value returned is the number of bytes written ** to the argument buffer (always 2, 4 and 8 respectively). */ -static int writeInt16(u8 *p, int i){ +static void writeInt16(u8 *p, int i){ p[0] = (i>> 8)&0xFF; p[1] = (i>> 0)&0xFF; - return 2; } static int writeCoord(u8 *p, RtreeCoord *pCoord){ u32 i; + assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ assert( sizeof(RtreeCoord)==4 ); assert( sizeof(u32)==4 ); +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = __builtin_bswap32(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = _byteswap_ulong(pCoord->u); + memcpy(p, &i, 4); +#elif SQLITE_BYTEORDER==4321 + i = pCoord->u; + memcpy(p, &i, 4); +#else i = pCoord->u; p[0] = (i>>24)&0xFF; p[1] = (i>>16)&0xFF; p[2] = (i>> 8)&0xFF; p[3] = (i>> 0)&0xFF; +#endif return 4; } static int writeInt64(u8 *p, i64 i){ +#if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 + i = (i64)__builtin_bswap64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 + i = (i64)_byteswap_uint64((u64)i); + memcpy(p, &i, 8); +#elif SQLITE_BYTEORDER==4321 + memcpy(p, &i, 8); +#else p[0] = (i>>56)&0xFF; p[1] = (i>>48)&0xFF; p[2] = (i>>40)&0xFF; @@ -162896,6 +165770,7 @@ static int writeInt64(u8 *p, i64 i){ p[5] = (i>>16)&0xFF; p[6] = (i>> 8)&0xFF; p[7] = (i>> 0)&0xFF; +#endif return 8; } @@ -162978,6 +165853,17 @@ static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){ return pNode; } +/* +** Clear the Rtree.pNodeBlob object +*/ +static void nodeBlobReset(Rtree *pRtree){ + if( pRtree->pNodeBlob && pRtree->inWrTrans==0 && pRtree->nCursor==0 ){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + sqlite3_blob_close(pBlob); + } +} + /* ** Obtain a reference to an r-tree node. */ @@ -162987,9 +165873,8 @@ static int nodeAcquire( RtreeNode *pParent, /* Either the parent node or NULL */ RtreeNode **ppNode /* OUT: Acquired node */ ){ - int rc; - int rc2 = SQLITE_OK; - RtreeNode *pNode; + int rc = SQLITE_OK; + RtreeNode *pNode = 0; /* Check if the requested node is already in the hash table. If so, ** increase its reference count and return it. @@ -163005,28 +165890,45 @@ static int nodeAcquire( return SQLITE_OK; } - sqlite3_bind_int64(pRtree->pReadNode, 1, iNode); - rc = sqlite3_step(pRtree->pReadNode); - if( rc==SQLITE_ROW ){ - const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0); - if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){ - pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); - if( !pNode ){ - rc2 = SQLITE_NOMEM; - }else{ - pNode->pParent = pParent; - pNode->zData = (u8 *)&pNode[1]; - pNode->nRef = 1; - pNode->iNode = iNode; - pNode->isDirty = 0; - pNode->pNext = 0; - memcpy(pNode->zData, zBlob, pRtree->iNodeSize); - nodeReference(pParent); - } + if( pRtree->pNodeBlob ){ + sqlite3_blob *pBlob = pRtree->pNodeBlob; + pRtree->pNodeBlob = 0; + rc = sqlite3_blob_reopen(pBlob, iNode); + pRtree->pNodeBlob = pBlob; + if( rc ){ + nodeBlobReset(pRtree); + if( rc==SQLITE_NOMEM ) return SQLITE_NOMEM; + } + } + if( pRtree->pNodeBlob==0 ){ + char *zTab = sqlite3_mprintf("%s_node", pRtree->zName); + if( zTab==0 ) return SQLITE_NOMEM; + rc = sqlite3_blob_open(pRtree->db, pRtree->zDb, zTab, "data", iNode, 0, + &pRtree->pNodeBlob); + sqlite3_free(zTab); + } + if( rc ){ + nodeBlobReset(pRtree); + *ppNode = 0; + /* If unable to open an sqlite3_blob on the desired row, that can only + ** be because the shadow tables hold erroneous data. */ + if( rc==SQLITE_ERROR ) rc = SQLITE_CORRUPT_VTAB; + }else if( pRtree->iNodeSize==sqlite3_blob_bytes(pRtree->pNodeBlob) ){ + pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize); + if( !pNode ){ + rc = SQLITE_NOMEM; + }else{ + pNode->pParent = pParent; + pNode->zData = (u8 *)&pNode[1]; + pNode->nRef = 1; + pNode->iNode = iNode; + pNode->isDirty = 0; + pNode->pNext = 0; + rc = sqlite3_blob_read(pRtree->pNodeBlob, pNode->zData, + pRtree->iNodeSize, 0); + nodeReference(pParent); } } - rc = sqlite3_reset(pRtree->pReadNode); - if( rc==SQLITE_OK ) rc = rc2; /* If the root node was just loaded, set pRtree->iDepth to the height ** of the r-tree structure. A height of zero means all data is stored on @@ -163078,7 +165980,7 @@ static void nodeOverwriteCell( int ii; u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell]; p += writeInt64(p, pCell->iRowid); - for(ii=0; ii<(pRtree->nDim*2); ii++){ + for(ii=0; iinDim2; ii++){ p += writeCoord(p, &pCell->aCoord[ii]); } pNode->isDirty = 1; @@ -163212,13 +166114,16 @@ static void nodeGetCell( ){ u8 *pData; RtreeCoord *pCoord; - int ii; + int ii = 0; pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell); pData = pNode->zData + (12 + pRtree->nBytesPerCell*iCell); pCoord = pCell->aCoord; - for(ii=0; iinDim*2; ii++){ - readCoord(&pData[ii*4], &pCoord[ii]); - } + do{ + readCoord(pData, &pCoord[ii]); + readCoord(pData+4, &pCoord[ii+1]); + pData += 8; + ii += 2; + }while( iinDim2 ); } @@ -163269,7 +166174,9 @@ static void rtreeReference(Rtree *pRtree){ static void rtreeRelease(Rtree *pRtree){ pRtree->nBusy--; if( pRtree->nBusy==0 ){ - sqlite3_finalize(pRtree->pReadNode); + pRtree->inWrTrans = 0; + pRtree->nCursor = 0; + nodeBlobReset(pRtree); sqlite3_finalize(pRtree->pWriteNode); sqlite3_finalize(pRtree->pDeleteNode); sqlite3_finalize(pRtree->pReadRowid); @@ -163307,6 +166214,7 @@ static int rtreeDestroy(sqlite3_vtab *pVtab){ if( !zCreate ){ rc = SQLITE_NOMEM; }else{ + nodeBlobReset(pRtree); rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0); sqlite3_free(zCreate); } @@ -163322,6 +166230,7 @@ static int rtreeDestroy(sqlite3_vtab *pVtab){ */ static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ int rc = SQLITE_NOMEM; + Rtree *pRtree = (Rtree *)pVTab; RtreeCursor *pCsr; pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor)); @@ -163329,6 +166238,7 @@ static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ memset(pCsr, 0, sizeof(RtreeCursor)); pCsr->base.pVtab = pVTab; rc = SQLITE_OK; + pRtree->nCursor++; } *ppCursor = (sqlite3_vtab_cursor *)pCsr; @@ -163361,10 +166271,13 @@ static int rtreeClose(sqlite3_vtab_cursor *cur){ Rtree *pRtree = (Rtree *)(cur->pVtab); int ii; RtreeCursor *pCsr = (RtreeCursor *)cur; + assert( pRtree->nCursor>0 ); freeCursorConstraints(pCsr); sqlite3_free(pCsr->aPoint); for(ii=0; iiaNode[ii]); sqlite3_free(pCsr); + pRtree->nCursor--; + nodeBlobReset(pRtree); return SQLITE_OK; } @@ -163387,15 +166300,22 @@ static int rtreeEof(sqlite3_vtab_cursor *cur){ ** false. a[] is the four bytes of the on-disk record to be decoded. ** Store the results in "r". ** -** There are three versions of this macro, one each for little-endian and -** big-endian processors and a third generic implementation. The endian- -** specific implementations are much faster and are preferred if the -** processor endianness is known at compile-time. The SQLITE_BYTEORDER -** macro is part of sqliteInt.h and hence the endian-specific -** implementation will only be used if this module is compiled as part -** of the amalgamation. +** There are five versions of this macro. The last one is generic. The +** other four are various architectures-specific optimizations. */ -#if defined(SQLITE_BYTEORDER) && SQLITE_BYTEORDER==1234 +#if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = _byteswap_ulong(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 +#define RTREE_DECODE_COORD(eInt, a, r) { \ + RtreeCoord c; /* Coordinate decoded */ \ + c.u = __builtin_bswap32(*(u32*)a); \ + r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ +} +#elif SQLITE_BYTEORDER==1234 #define RTREE_DECODE_COORD(eInt, a, r) { \ RtreeCoord c; /* Coordinate decoded */ \ memcpy(&c.u,a,4); \ @@ -163403,7 +166323,7 @@ static int rtreeEof(sqlite3_vtab_cursor *cur){ ((c.u&0xff)<<24)|((c.u&0xff00)<<8); \ r = eInt ? (sqlite3_rtree_dbl)c.i : (sqlite3_rtree_dbl)c.f; \ } -#elif defined(SQLITE_BYTEORDER) && SQLITE_BYTEORDER==4321 +#elif SQLITE_BYTEORDER==4321 #define RTREE_DECODE_COORD(eInt, a, r) { \ RtreeCoord c; /* Coordinate decoded */ \ memcpy(&c.u,a,4); \ @@ -163430,10 +166350,10 @@ static int rtreeCallbackConstraint( sqlite3_rtree_dbl *prScore, /* OUT: score for the cell */ int *peWithin /* OUT: visibility of the cell */ ){ - int i; /* Loop counter */ sqlite3_rtree_query_info *pInfo = pConstraint->pInfo; /* Callback info */ int nCoord = pInfo->nCoord; /* No. of coordinates */ int rc; /* Callback return code */ + RtreeCoord c; /* Translator union */ sqlite3_rtree_dbl aCoord[RTREE_MAX_DIMENSIONS*2]; /* Decoded coordinates */ assert( pConstraint->op==RTREE_MATCH || pConstraint->op==RTREE_QUERY ); @@ -163443,13 +166363,41 @@ static int rtreeCallbackConstraint( pInfo->iRowid = readInt64(pCellData); } pCellData += 8; - for(i=0; iop==RTREE_MATCH ){ + int eWithin = 0; rc = pConstraint->u.xGeom((sqlite3_rtree_geometry*)pInfo, - nCoord, aCoord, &i); - if( i==0 ) *peWithin = NOT_WITHIN; + nCoord, aCoord, &eWithin); + if( eWithin==0 ) *peWithin = NOT_WITHIN; *prScore = RTREE_ZERO; }else{ pInfo->aCoord = aCoord; @@ -163485,6 +166433,7 @@ static void rtreeNonleafConstraint( assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE || p->op==RTREE_GT || p->op==RTREE_EQ ); + assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ switch( p->op ){ case RTREE_LE: case RTREE_LT: @@ -163525,6 +166474,7 @@ static void rtreeLeafConstraint( assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE || p->op==RTREE_GT || p->op==RTREE_EQ ); pCellData += 8 + p->iCoord*4; + assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ RTREE_DECODE_COORD(eInt, pCellData, xN); switch( p->op ){ case RTREE_LE: if( xN <= p->u.rValue ) return; break; @@ -163593,7 +166543,7 @@ static int rtreeSearchPointCompare( } /* -** Interchange to search points in a cursor. +** Interchange two search points in a cursor. */ static void rtreeSearchPointSwap(RtreeCursor *p, int i, int j){ RtreeSearchPoint t = p->aPoint[i]; @@ -163841,7 +166791,7 @@ static int rtreeStepToLeaf(RtreeCursor *pCur){ if( rScoreeWithin = eWithin; + p->eWithin = (u8)eWithin; p->id = x.id; p->iCell = x.iCell; RTREE_QUEUE_TRACE(pCur, "PUSH-S:"); @@ -163900,7 +166850,6 @@ static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ if( i==0 ){ sqlite3_result_int64(ctx, nodeGetRowid(pRtree, pNode, p->iCell)); }else{ - if( rc ) return rc; nodeGetCoord(pRtree, pNode, p->iCell, i-1, &c); #ifndef SQLITE_RTREE_INT_ONLY if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ @@ -163949,33 +166898,17 @@ static int findLeafNode( ** operator. */ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){ - RtreeMatchArg *pBlob; /* BLOB returned by geometry function */ + RtreeMatchArg *pBlob, *pSrc; /* BLOB returned by geometry function */ sqlite3_rtree_query_info *pInfo; /* Callback information */ - int nBlob; /* Size of the geometry function blob */ - int nExpected; /* Expected size of the BLOB */ - /* Check that value is actually a blob. */ - if( sqlite3_value_type(pValue)!=SQLITE_BLOB ) return SQLITE_ERROR; - - /* Check that the blob is roughly the right size. */ - nBlob = sqlite3_value_bytes(pValue); - if( nBlob<(int)sizeof(RtreeMatchArg) ){ - return SQLITE_ERROR; - } - - pInfo = (sqlite3_rtree_query_info*)sqlite3_malloc( sizeof(*pInfo)+nBlob ); + pSrc = sqlite3_value_pointer(pValue, "RtreeMatchArg"); + if( pSrc==0 ) return SQLITE_ERROR; + pInfo = (sqlite3_rtree_query_info*) + sqlite3_malloc64( sizeof(*pInfo)+pSrc->iSize ); if( !pInfo ) return SQLITE_NOMEM; memset(pInfo, 0, sizeof(*pInfo)); pBlob = (RtreeMatchArg*)&pInfo[1]; - - memcpy(pBlob, sqlite3_value_blob(pValue), nBlob); - nExpected = (int)(sizeof(RtreeMatchArg) + - pBlob->nParam*sizeof(sqlite3_value*) + - (pBlob->nParam-1)*sizeof(RtreeDValue)); - if( pBlob->magic!=RTREE_GEOMETRY_MAGIC || nBlob!=nExpected ){ - sqlite3_free(pInfo); - return SQLITE_ERROR; - } + memcpy(pBlob, pSrc, pSrc->iSize); pInfo->pContext = pBlob->cb.pContext; pInfo->nParam = pBlob->nParam; pInfo->aParam = pBlob->aParam; @@ -164029,7 +166962,7 @@ static int rtreeFilter( p->id = iNode; p->eWithin = PARTLY_WITHIN; rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &iCell); - p->iCell = iCell; + p->iCell = (u8)iCell; RTREE_QUEUE_TRACE(pCsr, "PUSH-F1:"); }else{ pCsr->atEOF = 1; @@ -164062,7 +166995,7 @@ static int rtreeFilter( if( rc!=SQLITE_OK ){ break; } - p->pInfo->nCoord = pRtree->nDim*2; + p->pInfo->nCoord = pRtree->nDim2; p->pInfo->anQueue = pCsr->anQueue; p->pInfo->mxLevel = pRtree->iDepth + 1; }else{ @@ -164077,7 +167010,7 @@ static int rtreeFilter( } if( rc==SQLITE_OK ){ RtreeSearchPoint *pNew; - pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, pRtree->iDepth+1); + pNew = rtreeSearchPointNew(pCsr, RTREE_ZERO, (u8)(pRtree->iDepth+1)); if( pNew==0 ) return SQLITE_NOMEM; pNew->id = 1; pNew->iCell = 0; @@ -164095,19 +167028,6 @@ static int rtreeFilter( return rc; } -/* -** Set the pIdxInfo->estimatedRows variable to nRow. Unless this -** extension is currently being used by a version of SQLite too old to -** support estimatedRows. In that case this function is a no-op. -*/ -static void setEstimatedRows(sqlite3_index_info *pIdxInfo, i64 nRow){ -#if SQLITE_VERSION_NUMBER>=3008002 - if( sqlite3_libversion_number()>=3008002 ){ - pIdxInfo->estimatedRows = nRow; - } -#endif -} - /* ** Rtree virtual table module xBestIndex method. There are three ** table scan strategies to choose from (in order from most to @@ -164187,7 +167107,7 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ ** a single row. */ pIdxInfo->estimatedCost = 30.0; - setEstimatedRows(pIdxInfo, 1); + pIdxInfo->estimatedRows = 1; return SQLITE_OK; } @@ -164205,7 +167125,7 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ break; } zIdxStr[iIdx++] = op; - zIdxStr[iIdx++] = p->iColumn - 1 + '0'; + zIdxStr[iIdx++] = (char)(p->iColumn - 1 + '0'); pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); pIdxInfo->aConstraintUsage[ii].omit = 1; } @@ -164219,7 +167139,7 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ nRow = pRtree->nRowEst >> (iIdx/2); pIdxInfo->estimatedCost = (double)6.0 * (double)nRow; - setEstimatedRows(pIdxInfo, nRow); + pIdxInfo->estimatedRows = nRow; return rc; } @@ -164229,9 +167149,26 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ */ static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ RtreeDValue area = (RtreeDValue)1; - int ii; - for(ii=0; ii<(pRtree->nDim*2); ii+=2){ - area = (area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]))); + assert( pRtree->nDim>=1 && pRtree->nDim<=5 ); +#ifndef SQLITE_RTREE_INT_ONLY + if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ + switch( pRtree->nDim ){ + case 5: area = p->aCoord[9].f - p->aCoord[8].f; + case 4: area *= p->aCoord[7].f - p->aCoord[6].f; + case 3: area *= p->aCoord[5].f - p->aCoord[4].f; + case 2: area *= p->aCoord[3].f - p->aCoord[2].f; + default: area *= p->aCoord[1].f - p->aCoord[0].f; + } + }else +#endif + { + switch( pRtree->nDim ){ + case 5: area = p->aCoord[9].i - p->aCoord[8].i; + case 4: area *= p->aCoord[7].i - p->aCoord[6].i; + case 3: area *= p->aCoord[5].i - p->aCoord[4].i; + case 2: area *= p->aCoord[3].i - p->aCoord[2].i; + default: area *= p->aCoord[1].i - p->aCoord[0].i; + } } return area; } @@ -164241,11 +167178,12 @@ static RtreeDValue cellArea(Rtree *pRtree, RtreeCell *p){ ** of the objects size in each dimension. */ static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ - RtreeDValue margin = (RtreeDValue)0; - int ii; - for(ii=0; ii<(pRtree->nDim*2); ii+=2){ + RtreeDValue margin = 0; + int ii = pRtree->nDim2 - 2; + do{ margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])); - } + ii -= 2; + }while( ii>=0 ); return margin; } @@ -164253,17 +167191,19 @@ static RtreeDValue cellMargin(Rtree *pRtree, RtreeCell *p){ ** Store the union of cells p1 and p2 in p1. */ static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ - int ii; + int ii = 0; if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ - for(ii=0; ii<(pRtree->nDim*2); ii+=2){ + do{ p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f); p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f); - } + ii += 2; + }while( iinDim2 ); }else{ - for(ii=0; ii<(pRtree->nDim*2); ii+=2){ + do{ p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i); p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i); - } + ii += 2; + }while( iinDim2 ); } } @@ -164274,7 +167214,7 @@ static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){ int ii; int isInt = (pRtree->eCoordType==RTREE_COORD_INT32); - for(ii=0; ii<(pRtree->nDim*2); ii+=2){ + for(ii=0; iinDim2; ii+=2){ RtreeCoord *a1 = &p1->aCoord[ii]; RtreeCoord *a2 = &p2->aCoord[ii]; if( (!isInt && (a2[0].fa1[1].f)) @@ -164309,7 +167249,7 @@ static RtreeDValue cellOverlap( for(ii=0; iinDim*2); jj+=2){ + for(jj=0; jjnDim2; jj+=2){ RtreeDValue x1, x2; x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj])); x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1])); @@ -165365,7 +168305,7 @@ static int rtreeUpdate( ** This problem was discovered after years of use, so we silently ignore ** these kinds of misdeclared tables to avoid breaking any legacy. */ - assert( nData<=(pRtree->nDim*2 + 3) ); + assert( nData<=(pRtree->nDim2 + 3) ); #ifndef SQLITE_RTREE_INT_ONLY if( pRtree->eCoordType==RTREE_COORD_REAL32 ){ @@ -165455,6 +168395,27 @@ constraint: return rc; } +/* +** Called when a transaction starts. +*/ +static int rtreeBeginTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + assert( pRtree->inWrTrans==0 ); + pRtree->inWrTrans++; + return SQLITE_OK; +} + +/* +** Called when a transaction completes (either by COMMIT or ROLLBACK). +** The sqlite3_blob object should be released at this point. +*/ +static int rtreeEndTransaction(sqlite3_vtab *pVtab){ + Rtree *pRtree = (Rtree *)pVtab; + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + return SQLITE_OK; +} + /* ** The xRename method for rtree module virtual tables. */ @@ -165470,12 +168431,37 @@ static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){ , pRtree->zDb, pRtree->zName, zNewName ); if( zSql ){ + nodeBlobReset(pRtree); rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0); sqlite3_free(zSql); } return rc; } +/* +** The xSavepoint method. +** +** This module does not need to do anything to support savepoints. However, +** it uses this hook to close any open blob handle. This is done because a +** DROP TABLE command - which fortunately always opens a savepoint - cannot +** succeed if there are any open blob handles. i.e. if the blob handle were +** not closed here, the following would fail: +** +** BEGIN; +** INSERT INTO rtree... +** DROP TABLE ; -- Would fail with SQLITE_LOCKED +** COMMIT; +*/ +static int rtreeSavepoint(sqlite3_vtab *pVtab, int iSavepoint){ + Rtree *pRtree = (Rtree *)pVtab; + int iwt = pRtree->inWrTrans; + UNUSED_PARAMETER(iSavepoint); + pRtree->inWrTrans = 0; + nodeBlobReset(pRtree); + pRtree->inWrTrans = iwt; + return SQLITE_OK; +} + /* ** This function populates the pRtree->nRowEst variable with an estimate ** of the number of rows in the virtual table. If possible, this is based @@ -165521,7 +168507,7 @@ static int rtreeQueryStat1(sqlite3 *db, Rtree *pRtree){ } static sqlite3_module rtreeModule = { - 0, /* iVersion */ + 2, /* iVersion */ rtreeCreate, /* xCreate - create a table */ rtreeConnect, /* xConnect - connect to an existing table */ rtreeBestIndex, /* xBestIndex - Determine search strategy */ @@ -165535,15 +168521,15 @@ static sqlite3_module rtreeModule = { rtreeColumn, /* xColumn - read data */ rtreeRowid, /* xRowid - read data */ rtreeUpdate, /* xUpdate - write data */ - 0, /* xBegin - begin transaction */ - 0, /* xSync - sync transaction */ - 0, /* xCommit - commit transaction */ - 0, /* xRollback - rollback transaction */ + rtreeBeginTransaction, /* xBegin - begin transaction */ + rtreeEndTransaction, /* xSync - sync transaction */ + rtreeEndTransaction, /* xCommit - commit transaction */ + rtreeEndTransaction, /* xRollback - rollback transaction */ 0, /* xFindFunction - function overloading */ rtreeRename, /* xRename - rename the table */ - 0, /* xSavepoint */ + rtreeSavepoint, /* xSavepoint */ 0, /* xRelease */ - 0 /* xRollbackTo */ + 0, /* xRollbackTo */ }; static int rtreeSqlInit( @@ -165555,10 +168541,9 @@ static int rtreeSqlInit( ){ int rc = SQLITE_OK; - #define N_STATEMENT 9 + #define N_STATEMENT 8 static const char *azSql[N_STATEMENT] = { - /* Read and write the xxx_node table */ - "SELECT data FROM '%q'.'%q_node' WHERE nodeno = :1", + /* Write the xxx_node table */ "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(:1, :2)", "DELETE FROM '%q'.'%q_node' WHERE nodeno = :1", @@ -165596,21 +168581,21 @@ static int rtreeSqlInit( } } - appStmt[0] = &pRtree->pReadNode; - appStmt[1] = &pRtree->pWriteNode; - appStmt[2] = &pRtree->pDeleteNode; - appStmt[3] = &pRtree->pReadRowid; - appStmt[4] = &pRtree->pWriteRowid; - appStmt[5] = &pRtree->pDeleteRowid; - appStmt[6] = &pRtree->pReadParent; - appStmt[7] = &pRtree->pWriteParent; - appStmt[8] = &pRtree->pDeleteParent; + appStmt[0] = &pRtree->pWriteNode; + appStmt[1] = &pRtree->pDeleteNode; + appStmt[2] = &pRtree->pReadRowid; + appStmt[3] = &pRtree->pWriteRowid; + appStmt[4] = &pRtree->pDeleteRowid; + appStmt[5] = &pRtree->pReadParent; + appStmt[6] = &pRtree->pWriteParent; + appStmt[7] = &pRtree->pDeleteParent; rc = rtreeQueryStat1(db, pRtree); for(i=0; iiNodeSize); if( rc!=SQLITE_OK ){ *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db)); + }else if( pRtree->iNodeSize<(512-64) ){ + rc = SQLITE_CORRUPT; + *pzErr = sqlite3_mprintf("undersize RTree blobs in \"%q_node\"", + pRtree->zName); } } @@ -165742,9 +168731,10 @@ static int rtreeInit( pRtree->base.pModule = &rtreeModule; pRtree->zDb = (char *)&pRtree[1]; pRtree->zName = &pRtree->zDb[nDb+1]; - pRtree->nDim = (argc-4)/2; - pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2; - pRtree->eCoordType = eCoordType; + pRtree->nDim = (u8)((argc-4)/2); + pRtree->nDim2 = pRtree->nDim*2; + pRtree->nBytesPerCell = 8 + pRtree->nDim2*4; + pRtree->eCoordType = (u8)eCoordType; memcpy(pRtree->zDb, argv[1], nDb); memcpy(pRtree->zName, argv[2], nName); @@ -165817,7 +168807,8 @@ static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ UNUSED_PARAMETER(nArg); memset(&node, 0, sizeof(RtreeNode)); memset(&tree, 0, sizeof(Rtree)); - tree.nDim = sqlite3_value_int(apArg[0]); + tree.nDim = (u8)sqlite3_value_int(apArg[0]); + tree.nDim2 = tree.nDim*2; tree.nBytesPerCell = 8 + 8 * tree.nDim; node.zData = (u8 *)sqlite3_value_blob(apArg[1]); @@ -165830,7 +168821,7 @@ static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ nodeGetCell(&tree, &node, ii, &cell); sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid); nCell = (int)strlen(zCell); - for(jj=0; jjmagic = RTREE_GEOMETRY_MAGIC; + pBlob->iSize = nBlob; pBlob->cb = pGeomCtx[0]; pBlob->apSqlParam = (sqlite3_value**)&pBlob->aParam[nArg]; pBlob->nParam = nArg; @@ -165972,7 +168963,7 @@ static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){ sqlite3_result_error_nomem(ctx); rtreeMatchArgFree(pBlob); }else{ - sqlite3_result_blob(ctx, pBlob, nBlob, rtreeMatchArgFree); + sqlite3_result_pointer(ctx, pBlob, "RtreeMatchArg", rtreeMatchArgFree); } } } @@ -166538,38 +169529,36 @@ static void icuLoadCollation( ** Register the ICU extension functions with database db. */ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ - struct IcuScalar { + static const struct IcuScalar { const char *zName; /* Function name */ - int nArg; /* Number of arguments */ - int enc; /* Optimal text encoding */ - void *pContext; /* sqlite3_user_data() context */ + unsigned char nArg; /* Number of arguments */ + unsigned short enc; /* Optimal text encoding */ + unsigned char iContext; /* sqlite3_user_data() context */ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); } scalars[] = { - {"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc}, - - {"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"upper", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, (void*)1, icuCaseFunc16}, - {"upper", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, (void*)1, icuCaseFunc16}, - - {"lower", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"lower", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, - {"upper", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, (void*)1, icuCaseFunc16}, - {"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, (void*)1, icuCaseFunc16}, - - {"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, - {"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, - - {"icu_load_collation", 2, SQLITE_UTF8, (void*)db, icuLoadCollation}, + {"icu_load_collation", 2, SQLITE_UTF8, 1, icuLoadCollation}, + {"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc}, + {"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"upper", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"upper", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"lower", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"lower", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, + {"upper", 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, + {"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, + {"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, }; - int rc = SQLITE_OK; int i; + for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){ - struct IcuScalar *p = &scalars[i]; + const struct IcuScalar *p = &scalars[i]; rc = sqlite3_create_function( - db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0 + db, p->zName, p->nArg, p->enc, + p->iContext ? (void*)db : (void*)0, + p->xFunc, 0, 0 ); } @@ -167372,10 +170361,10 @@ SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *pRbu); ** ** If an error has already occurred as part of an sqlite3rbu_step() ** or sqlite3rbu_open() call, or if one occurs within this function, an -** SQLite error code is returned. Additionally, *pzErrmsg may be set to -** point to a buffer containing a utf-8 formatted English language error -** message. It is the responsibility of the caller to eventually free any -** such buffer using sqlite3_free(). +** SQLite error code is returned. Additionally, if pzErrmsg is not NULL, +** *pzErrmsg may be set to point to a buffer containing a utf-8 formatted +** English language error message. It is the responsibility of the caller to +** eventually free any such buffer using sqlite3_free(). ** ** Otherwise, if no error occurs, this function returns SQLITE_OK if the ** update has been partially applied, or SQLITE_DONE if it has been @@ -167800,6 +170789,7 @@ struct sqlite3rbu { RbuObjIter objiter; /* Iterator for skipping through tbl/idx */ const char *zVfsName; /* Name of automatically created rbu vfs */ rbu_file *pTargetFd; /* File handle open on target db */ + int nPagePerSector; /* Pages per sector for pTargetFd */ i64 iOalSz; i64 nPhaseOneStep; @@ -169777,7 +172767,7 @@ static RbuState *rbuLoadState(sqlite3rbu *p){ ** Open the database handle and attach the RBU database as "rbu". If an ** error occurs, leave an error code and message in the RBU handle. */ -static void rbuOpenDatabase(sqlite3rbu *p){ +static void rbuOpenDatabase(sqlite3rbu *p, int *pbRetry){ assert( p->rc || (p->dbMain==0 && p->dbRbu==0) ); assert( p->rc || rbuIsVacuum(p) || p->zTarget!=0 ); @@ -169852,7 +172842,7 @@ static void rbuOpenDatabase(sqlite3rbu *p){ }else{ RbuState *pState = rbuLoadState(p); if( pState ){ - bOpen = (pState->eStage>RBU_STAGE_MOVE); + bOpen = (pState->eStage>=RBU_STAGE_MOVE); rbuFreeState(pState); } } @@ -169864,6 +172854,15 @@ static void rbuOpenDatabase(sqlite3rbu *p){ if( !rbuIsVacuum(p) ){ p->dbMain = rbuOpenDbhandle(p, p->zTarget, 1); }else if( p->pRbuFd->pWalFd ){ + if( pbRetry ){ + p->pRbuFd->bNolock = 0; + sqlite3_close(p->dbRbu); + sqlite3_close(p->dbMain); + p->dbMain = 0; + p->dbRbu = 0; + *pbRetry = 1; + return; + } p->rc = SQLITE_ERROR; p->zErrmsg = sqlite3_mprintf("cannot vacuum wal mode database"); }else{ @@ -170044,16 +173043,35 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){ if( rc2!=SQLITE_INTERNAL ) p->rc = rc2; } - if( p->rc==SQLITE_OK ){ + if( p->rc==SQLITE_OK && p->nFrame>0 ){ p->eStage = RBU_STAGE_CKPT; p->nStep = (pState ? pState->nRow : 0); p->aBuf = rbuMalloc(p, p->pgsz); p->iWalCksum = rbuShmChecksum(p); } - if( p->rc==SQLITE_OK && pState && pState->iWalCksum!=p->iWalCksum ){ - p->rc = SQLITE_DONE; - p->eStage = RBU_STAGE_DONE; + if( p->rc==SQLITE_OK ){ + if( p->nFrame==0 || (pState && pState->iWalCksum!=p->iWalCksum) ){ + p->rc = SQLITE_DONE; + p->eStage = RBU_STAGE_DONE; + }else{ + int nSectorSize; + sqlite3_file *pDb = p->pTargetFd->pReal; + sqlite3_file *pWal = p->pTargetFd->pWalFd->pReal; + assert( p->nPagePerSector==0 ); + nSectorSize = pDb->pMethods->xSectorSize(pDb); + if( nSectorSize>p->pgsz ){ + p->nPagePerSector = nSectorSize / p->pgsz; + }else{ + p->nPagePerSector = 1; + } + + /* Call xSync() on the wal file. This causes SQLite to sync the + ** directory in which the target database and the wal file reside, in + ** case it has not been synced since the rename() call in + ** rbuMoveOalFile(). */ + p->rc = pWal->pMethods->xSync(pWal, SQLITE_SYNC_NORMAL); + } } } @@ -170226,7 +173244,7 @@ static void rbuMoveOalFile(sqlite3rbu *p){ #endif if( p->rc==SQLITE_OK ){ - rbuOpenDatabase(p); + rbuOpenDatabase(p, 0); rbuSetupCheckpoint(p, 0); } } @@ -170708,9 +173726,26 @@ SQLITE_API int sqlite3rbu_step(sqlite3rbu *p){ p->rc = SQLITE_DONE; } }else{ - RbuFrame *pFrame = &p->aFrame[p->nStep]; - rbuCheckpointFrame(p, pFrame); - p->nStep++; + /* At one point the following block copied a single frame from the + ** wal file to the database file. So that one call to sqlite3rbu_step() + ** checkpointed a single frame. + ** + ** However, if the sector-size is larger than the page-size, and the + ** application calls sqlite3rbu_savestate() or close() immediately + ** after this step, then rbu_step() again, then a power failure occurs, + ** then the database page written here may be damaged. Work around + ** this by checkpointing frames until the next page in the aFrame[] + ** lies on a different disk sector to the current one. */ + u32 iSector; + do{ + RbuFrame *pFrame = &p->aFrame[p->nStep]; + iSector = (pFrame->iDbPage-1) / p->nPagePerSector; + rbuCheckpointFrame(p, pFrame); + p->nStep++; + }while( p->nStepnFrame + && iSector==((p->aFrame[p->nStep].iDbPage-1) / p->nPagePerSector) + && p->rc==SQLITE_OK + ); } p->nProgress++; } @@ -170937,6 +173972,7 @@ static sqlite3rbu *openRbuHandle( /* Open the target, RBU and state databases */ if( p->rc==SQLITE_OK ){ char *pCsr = (char*)&p[1]; + int bRetry = 0; if( zTarget ){ p->zTarget = pCsr; memcpy(p->zTarget, zTarget, nTarget+1); @@ -170948,7 +173984,18 @@ static sqlite3rbu *openRbuHandle( if( zState ){ p->zState = rbuMPrintf(p, "%s", zState); } - rbuOpenDatabase(p); + + /* If the first attempt to open the database file fails and the bRetry + ** flag it set, this means that the db was not opened because it seemed + ** to be a wal-mode db. But, this may have happened due to an earlier + ** RBU vacuum operation leaving an old wal file in the directory. + ** If this is the case, it will have been checkpointed and deleted + ** when the handle was closed and a second attempt to open the + ** database may succeed. */ + rbuOpenDatabase(p, &bRetry); + if( bRetry ){ + rbuOpenDatabase(p, 0); + } } if( p->rc==SQLITE_OK ){ @@ -171139,6 +174186,12 @@ SQLITE_API int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){ p->rc = sqlite3_exec(p->dbMain, "COMMIT", 0, 0, &p->zErrmsg); } + /* Sync the db file if currently doing an incremental checkpoint */ + if( p->rc==SQLITE_OK && p->eStage==RBU_STAGE_CKPT ){ + sqlite3_file *pDb = p->pTargetFd->pReal; + p->rc = pDb->pMethods->xSync(pDb, SQLITE_SYNC_NORMAL); + } + rbuSaveState(p, p->eStage); if( p->rc==SQLITE_OK && p->eStage==RBU_STAGE_OAL ){ @@ -171167,7 +174220,11 @@ SQLITE_API int sqlite3rbu_close(sqlite3rbu *p, char **pzErrmsg){ rbuEditErrmsg(p); rc = p->rc; - *pzErrmsg = p->zErrmsg; + if( pzErrmsg ){ + *pzErrmsg = p->zErrmsg; + }else{ + sqlite3_free(p->zErrmsg); + } sqlite3_free(p->zState); sqlite3_free(p); }else{ @@ -171263,6 +174320,12 @@ SQLITE_API int sqlite3rbu_savestate(sqlite3rbu *p){ if( rc==SQLITE_OK ) rc = sqlite3_exec(p->dbMain, "COMMIT", 0, 0, 0); } + /* Sync the db file */ + if( rc==SQLITE_OK && p->eStage==RBU_STAGE_CKPT ){ + sqlite3_file *pDb = p->pTargetFd->pReal; + rc = pDb->pMethods->xSync(pDb, SQLITE_SYNC_NORMAL); + } + p->rc = rc; rbuSaveState(p, p->eStage); rc = p->rc; @@ -172872,6 +175935,9 @@ SQLITE_PRIVATE int sqlite3DbstatRegister(sqlite3 *db){ 0, /* xRollback */ 0, /* xFindMethod */ 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ }; return sqlite3_create_module(db, "dbstat", &dbstat_module, 0); } @@ -175719,11 +178785,12 @@ static int sessionChangesetNext( p->in.iCurrent = p->in.iNext; op = p->in.aData[p->in.iNext++]; - if( op=='T' || op=='P' ){ + while( op=='T' || op=='P' ){ p->bPatchset = (op=='P'); if( sessionChangesetReadTblhdr(p) ) return p->rc; if( (p->rc = sessionInputBuffer(&p->in, 2)) ) return p->rc; p->in.iCurrent = p->in.iNext; + if( p->in.iNext>=p->in.nData ) return SQLITE_DONE; op = p->in.aData[p->in.iNext++]; } @@ -175911,7 +178978,7 @@ SQLITE_API int sqlite3changeset_conflict( if( !pIter->pConflict ){ return SQLITE_MISUSE; } - if( iVal<0 || iVal>=sqlite3_column_count(pIter->pConflict) ){ + if( iVal<0 || iVal>=pIter->nCol ){ return SQLITE_RANGE; } *ppValue = sqlite3_column_value(pIter->pConflict, iVal); @@ -176378,7 +179445,13 @@ static int sessionInsertRow( sessionAppendStr(&buf, "INSERT INTO main.", &rc); sessionAppendIdent(&buf, zTab, &rc); - sessionAppendStr(&buf, " VALUES(?", &rc); + sessionAppendStr(&buf, "(", &rc); + for(i=0; inCol; i++){ + if( i!=0 ) sessionAppendStr(&buf, ", ", &rc); + sessionAppendIdent(&buf, p->azCol[i], &rc); + } + + sessionAppendStr(&buf, ") VALUES(?", &rc); for(i=1; inCol; i++){ sessionAppendStr(&buf, ", ?", &rc); } @@ -176924,11 +179997,17 @@ static int sessionChangesetApply( nTab = (int)strlen(zTab); sApply.azCol = (const char **)zTab; }else{ + int nMinCol = 0; + int i; + sqlite3changeset_pk(pIter, &abPK, 0); rc = sessionTableInfo( db, "main", zNew, &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK ); if( rc!=SQLITE_OK ) break; + for(i=0; iaUp = 0; } +/* +** Free a JsonParse object that was obtained from sqlite3_malloc(). +*/ +static void jsonParseFree(JsonParse *pParse){ + jsonParseReset(pParse); + sqlite3_free(pParse); +} + /* ** Convert the JsonNode pNode into a pure JSON string and ** append to pOut. Subsubstructure is also included. Return @@ -177935,6 +181039,13 @@ static void jsonRenderNode( JsonString *pOut, /* Write JSON here */ sqlite3_value **aReplace /* Replacement values */ ){ + if( pNode->jnFlags & (JNODE_REPLACE|JNODE_PATCH) ){ + if( pNode->jnFlags & JNODE_REPLACE ){ + jsonAppendValue(pOut, aReplace[pNode->u.iReplace]); + return; + } + pNode = pNode->u.pPatch; + } switch( pNode->eType ){ default: { assert( pNode->eType==JSON_NULL ); @@ -177966,12 +181077,7 @@ static void jsonRenderNode( jsonAppendChar(pOut, '['); for(;;){ while( j<=pNode->n ){ - if( pNode[j].jnFlags & (JNODE_REMOVE|JNODE_REPLACE) ){ - if( pNode[j].jnFlags & JNODE_REPLACE ){ - jsonAppendSeparator(pOut); - jsonAppendValue(pOut, aReplace[pNode[j].iVal]); - } - }else{ + if( (pNode[j].jnFlags & JNODE_REMOVE)==0 ){ jsonAppendSeparator(pOut); jsonRenderNode(&pNode[j], pOut, aReplace); } @@ -177993,11 +181099,7 @@ static void jsonRenderNode( jsonAppendSeparator(pOut); jsonRenderNode(&pNode[j], pOut, aReplace); jsonAppendChar(pOut, ':'); - if( pNode[j+1].jnFlags & JNODE_REPLACE ){ - jsonAppendValue(pOut, aReplace[pNode[j+1].iVal]); - }else{ - jsonRenderNode(&pNode[j+1], pOut, aReplace); - } + jsonRenderNode(&pNode[j+1], pOut, aReplace); } j += 1 + jsonNodeSize(&pNode[j+1]); } @@ -178224,7 +181326,6 @@ static int jsonParseAddNode( p = &pParse->aNode[pParse->nNode]; p->eType = (u8)eType; p->jnFlags = 0; - p->iVal = 0; p->n = n; p->u.zJContent = zContent; return pParse->nNode++; @@ -178253,15 +181354,18 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ int iThis; int x; JsonNode *pNode; - while( safe_isspace(pParse->zJson[i]) ){ i++; } - if( (c = pParse->zJson[i])=='{' ){ + const char *z = pParse->zJson; + while( safe_isspace(z[i]) ){ i++; } + if( (c = z[i])=='{' ){ /* Parse object */ iThis = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); if( iThis<0 ) return -1; for(j=i+1;;j++){ - while( safe_isspace(pParse->zJson[j]) ){ j++; } + while( safe_isspace(z[j]) ){ j++; } + if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; x = jsonParseValue(pParse, j); if( x<0 ){ + pParse->iDepth--; if( x==(-2) && pParse->nNode==(u32)iThis+1 ) return j+1; return -1; } @@ -178270,14 +181374,15 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ if( pNode->eType!=JSON_STRING ) return -1; pNode->jnFlags |= JNODE_LABEL; j = x; - while( safe_isspace(pParse->zJson[j]) ){ j++; } - if( pParse->zJson[j]!=':' ) return -1; + while( safe_isspace(z[j]) ){ j++; } + if( z[j]!=':' ) return -1; j++; x = jsonParseValue(pParse, j); + pParse->iDepth--; if( x<0 ) return -1; j = x; - while( safe_isspace(pParse->zJson[j]) ){ j++; } - c = pParse->zJson[j]; + while( safe_isspace(z[j]) ){ j++; } + c = z[j]; if( c==',' ) continue; if( c!='}' ) return -1; break; @@ -178289,15 +181394,17 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ iThis = jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); if( iThis<0 ) return -1; for(j=i+1;;j++){ - while( safe_isspace(pParse->zJson[j]) ){ j++; } + while( safe_isspace(z[j]) ){ j++; } + if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; x = jsonParseValue(pParse, j); + pParse->iDepth--; if( x<0 ){ if( x==(-3) && pParse->nNode==(u32)iThis+1 ) return j+1; return -1; } j = x; - while( safe_isspace(pParse->zJson[j]) ){ j++; } - c = pParse->zJson[j]; + while( safe_isspace(z[j]) ){ j++; } + c = z[j]; if( c==',' ) continue; if( c!=']' ) return -1; break; @@ -178309,13 +181416,16 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ u8 jnFlags = 0; j = i+1; for(;;){ - c = pParse->zJson[j]; - if( c==0 ) return -1; + c = z[j]; + if( (c & ~0x1f)==0 ){ + /* Control characters are not allowed in strings */ + return -1; + } if( c=='\\' ){ - c = pParse->zJson[++j]; + c = z[++j]; if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' || c=='n' || c=='r' || c=='t' - || (c=='u' && jsonIs4Hex(pParse->zJson+j+1)) ){ + || (c=='u' && jsonIs4Hex(z+j+1)) ){ jnFlags = JNODE_ESCAPE; }else{ return -1; @@ -178325,55 +181435,60 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ } j++; } - jsonParseAddNode(pParse, JSON_STRING, j+1-i, &pParse->zJson[i]); + jsonParseAddNode(pParse, JSON_STRING, j+1-i, &z[i]); if( !pParse->oom ) pParse->aNode[pParse->nNode-1].jnFlags = jnFlags; return j+1; }else if( c=='n' - && strncmp(pParse->zJson+i,"null",4)==0 - && !safe_isalnum(pParse->zJson[i+4]) ){ + && strncmp(z+i,"null",4)==0 + && !safe_isalnum(z[i+4]) ){ jsonParseAddNode(pParse, JSON_NULL, 0, 0); return i+4; }else if( c=='t' - && strncmp(pParse->zJson+i,"true",4)==0 - && !safe_isalnum(pParse->zJson[i+4]) ){ + && strncmp(z+i,"true",4)==0 + && !safe_isalnum(z[i+4]) ){ jsonParseAddNode(pParse, JSON_TRUE, 0, 0); return i+4; }else if( c=='f' - && strncmp(pParse->zJson+i,"false",5)==0 - && !safe_isalnum(pParse->zJson[i+5]) ){ + && strncmp(z+i,"false",5)==0 + && !safe_isalnum(z[i+5]) ){ jsonParseAddNode(pParse, JSON_FALSE, 0, 0); return i+5; }else if( c=='-' || (c>='0' && c<='9') ){ /* Parse number */ u8 seenDP = 0; u8 seenE = 0; + assert( '-' < '0' ); + if( c<='0' ){ + j = c=='-' ? i+1 : i; + if( z[j]=='0' && z[j+1]>='0' && z[j+1]<='9' ) return -1; + } j = i+1; for(;; j++){ - c = pParse->zJson[j]; + c = z[j]; if( c>='0' && c<='9' ) continue; if( c=='.' ){ - if( pParse->zJson[j-1]=='-' ) return -1; + if( z[j-1]=='-' ) return -1; if( seenDP ) return -1; seenDP = 1; continue; } if( c=='e' || c=='E' ){ - if( pParse->zJson[j-1]<'0' ) return -1; + if( z[j-1]<'0' ) return -1; if( seenE ) return -1; seenDP = seenE = 1; - c = pParse->zJson[j+1]; + c = z[j+1]; if( c=='+' || c=='-' ){ j++; - c = pParse->zJson[j+1]; + c = z[j+1]; } if( c<'0' || c>'9' ) return -1; continue; } break; } - if( pParse->zJson[j-1]<'0' ) return -1; + if( z[j-1]<'0' ) return -1; jsonParseAddNode(pParse, seenDP ? JSON_REAL : JSON_INT, - j - i, &pParse->zJson[i]); + j - i, &z[i]); return j; }else if( c=='}' ){ return -2; /* End of {...} */ @@ -178405,6 +181520,7 @@ static int jsonParse( i = jsonParseValue(pParse, 0); if( pParse->oom ) i = -1; if( i>0 ){ + assert( pParse->iDepth==0 ); while( safe_isspace(zJson[i]) ) i++; if( zJson[i] ) i = -1; } @@ -178464,6 +181580,49 @@ static int jsonParseFindParents(JsonParse *pParse){ return SQLITE_OK; } +/* +** Magic number used for the JSON parse cache in sqlite3_get_auxdata() +*/ +#define JSON_CACHE_ID (-429938) + +/* +** Obtain a complete parse of the JSON found in the first argument +** of the argv array. Use the sqlite3_get_auxdata() cache for this +** parse if it is available. If the cache is not available or if it +** is no longer valid, parse the JSON again and return the new parse, +** and also register the new parse so that it will be available for +** future sqlite3_get_auxdata() calls. +*/ +static JsonParse *jsonParseCached( + sqlite3_context *pCtx, + sqlite3_value **argv +){ + const char *zJson = (const char*)sqlite3_value_text(argv[0]); + int nJson = sqlite3_value_bytes(argv[0]); + JsonParse *p; + if( zJson==0 ) return 0; + p = (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID); + if( p && p->nJson==nJson && memcmp(p->zJson,zJson,nJson)==0 ){ + p->nErr = 0; + return p; /* The cached entry matches, so return it */ + } + p = sqlite3_malloc( sizeof(*p) + nJson + 1 ); + if( p==0 ){ + sqlite3_result_error_nomem(pCtx); + return 0; + } + memset(p, 0, sizeof(*p)); + p->zJson = (char*)&p[1]; + memcpy((char*)p->zJson, zJson, nJson+1); + if( jsonParse(p, pCtx, p->zJson) ){ + sqlite3_free(p); + return 0; + } + p->nJson = nJson; + sqlite3_set_auxdata(pCtx, JSON_CACHE_ID, p, (void(*)(void*))jsonParseFree); + return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID); +} + /* ** Compare the OBJECT label at pNode against zKey,nKey. Return true on ** a match. @@ -178690,6 +181849,25 @@ static void jsonWrongNumArgs( sqlite3_free(zMsg); } +/* +** Mark all NULL entries in the Object passed in as JNODE_REMOVE. +*/ +static void jsonRemoveAllNulls(JsonNode *pNode){ + int i, n; + assert( pNode->eType==JSON_OBJECT ); + n = pNode->n; + for(i=2; i<=n; i += jsonNodeSize(&pNode[i])+1){ + switch( pNode[i].eType ){ + case JSON_NULL: + pNode[i].jnFlags |= JNODE_REMOVE; + break; + case JSON_OBJECT: + jsonRemoveAllNulls(&pNode[i]); + break; + } + } +} + /**************************************************************************** ** SQL functions used for testing and debugging @@ -178810,29 +181988,30 @@ static void jsonArrayLengthFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *p; /* The parse */ sqlite3_int64 n = 0; u32 i; JsonNode *pNode; - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - assert( x.nNode ); + p = jsonParseCached(ctx, argv); + if( p==0 ) return; + assert( p->nNode ); if( argc==2 ){ const char *zPath = (const char*)sqlite3_value_text(argv[1]); - pNode = jsonLookup(&x, zPath, 0, ctx); + pNode = jsonLookup(p, zPath, 0, ctx); }else{ - pNode = x.aNode; + pNode = p->aNode; } if( pNode==0 ){ - x.nErr = 1; - }else if( pNode->eType==JSON_ARRAY ){ + return; + } + if( pNode->eType==JSON_ARRAY ){ assert( (pNode->jnFlags & JNODE_APPEND)==0 ); for(i=1; i<=pNode->n; n++){ i += jsonNodeSize(&pNode[i]); } } - if( x.nErr==0 ) sqlite3_result_int64(ctx, n); - jsonParseReset(&x); + sqlite3_result_int64(ctx, n); } /* @@ -178848,20 +182027,21 @@ static void jsonExtractFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *p; /* The parse */ JsonNode *pNode; const char *zPath; JsonString jx; int i; if( argc<2 ) return; - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + p = jsonParseCached(ctx, argv); + if( p==0 ) return; jsonInit(&jx, ctx); jsonAppendChar(&jx, '['); for(i=1; inErr ) break; if( argc>2 ){ jsonAppendSeparator(&jx); if( pNode ){ @@ -178879,9 +182059,107 @@ static void jsonExtractFunc( sqlite3_result_subtype(ctx, JSON_SUBTYPE); } jsonReset(&jx); - jsonParseReset(&x); } +/* This is the RFC 7396 MergePatch algorithm. +*/ +static JsonNode *jsonMergePatch( + JsonParse *pParse, /* The JSON parser that contains the TARGET */ + u32 iTarget, /* Node of the TARGET in pParse */ + JsonNode *pPatch /* The PATCH */ +){ + u32 i, j; + u32 iRoot; + JsonNode *pTarget; + if( pPatch->eType!=JSON_OBJECT ){ + return pPatch; + } + assert( iTarget>=0 && iTargetnNode ); + pTarget = &pParse->aNode[iTarget]; + assert( (pPatch->jnFlags & JNODE_APPEND)==0 ); + if( pTarget->eType!=JSON_OBJECT ){ + jsonRemoveAllNulls(pPatch); + return pPatch; + } + iRoot = iTarget; + for(i=1; in; i += jsonNodeSize(&pPatch[i+1])+1){ + u32 nKey; + const char *zKey; + assert( pPatch[i].eType==JSON_STRING ); + assert( pPatch[i].jnFlags & JNODE_LABEL ); + nKey = pPatch[i].n; + zKey = pPatch[i].u.zJContent; + assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); + for(j=1; jn; j += jsonNodeSize(&pTarget[j+1])+1 ){ + assert( pTarget[j].eType==JSON_STRING ); + assert( pTarget[j].jnFlags & JNODE_LABEL ); + assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); + if( pTarget[j].n==nKey && strncmp(pTarget[j].u.zJContent,zKey,nKey)==0 ){ + if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_PATCH) ) break; + if( pPatch[i+1].eType==JSON_NULL ){ + pTarget[j+1].jnFlags |= JNODE_REMOVE; + }else{ + JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]); + if( pNew==0 ) return 0; + pTarget = &pParse->aNode[iTarget]; + if( pNew!=&pTarget[j+1] ){ + pTarget[j+1].u.pPatch = pNew; + pTarget[j+1].jnFlags |= JNODE_PATCH; + } + } + break; + } + } + if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){ + int iStart, iPatch; + iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); + jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); + iPatch = jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + if( pParse->oom ) return 0; + jsonRemoveAllNulls(pPatch); + pTarget = &pParse->aNode[iTarget]; + pParse->aNode[iRoot].jnFlags |= JNODE_APPEND; + pParse->aNode[iRoot].u.iAppend = iStart - iRoot; + iRoot = iStart; + pParse->aNode[iPatch].jnFlags |= JNODE_PATCH; + pParse->aNode[iPatch].u.pPatch = &pPatch[i+1]; + } + } + return pTarget; +} + +/* +** Implementation of the json_mergepatch(JSON1,JSON2) function. Return a JSON +** object that is the result of running the RFC 7396 MergePatch() algorithm +** on the two arguments. +*/ +static void jsonPatchFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse x; /* The JSON that is being patched */ + JsonParse y; /* The patch */ + JsonNode *pResult; /* The result of the merge */ + + UNUSED_PARAM(argc); + if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; + if( jsonParse(&y, ctx, (const char*)sqlite3_value_text(argv[1])) ){ + jsonParseReset(&x); + return; + } + pResult = jsonMergePatch(&x, 0, y.aNode); + assert( pResult!=0 || x.oom ); + if( pResult ){ + jsonReturnJson(pResult, ctx, 0); + }else{ + sqlite3_result_error_nomem(ctx); + } + jsonParseReset(&x); + jsonParseReset(&y); +} + + /* ** Implementation of the json_object(NAME,VALUE,...) function. Return a JSON ** object that contains all name/value given in arguments. Or if any name @@ -178985,11 +182263,11 @@ static void jsonReplaceFunc( if( x.nErr ) goto replace_err; if( pNode ){ pNode->jnFlags |= (u8)JNODE_REPLACE; - pNode->iVal = (u8)(i+1); + pNode->u.iReplace = i + 1; } } if( x.aNode[0].jnFlags & JNODE_REPLACE ){ - sqlite3_result_value(ctx, argv[x.aNode[0].iVal]); + sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); }else{ jsonReturnJson(x.aNode, ctx, argv); } @@ -179039,11 +182317,11 @@ static void jsonSetFunc( goto jsonSetDone; }else if( pNode && (bApnd || bIsSet) ){ pNode->jnFlags |= (u8)JNODE_REPLACE; - pNode->iVal = (u8)(i+1); + pNode->u.iReplace = i + 1; } } if( x.aNode[0].jnFlags & JNODE_REPLACE ){ - sqlite3_result_value(ctx, argv[x.aNode[0].iVal]); + sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); }else{ jsonReturnJson(x.aNode, ctx, argv); } @@ -179686,6 +182964,7 @@ SQLITE_PRIVATE int sqlite3Json1Init(sqlite3 *db){ { "json_extract", -1, 0, jsonExtractFunc }, { "json_insert", -1, 0, jsonSetFunc }, { "json_object", -1, 0, jsonObjectFunc }, + { "json_patch", 2, 0, jsonPatchFunc }, { "json_quote", 1, 0, jsonQuoteFunc }, { "json_remove", -1, 0, jsonRemoveFunc }, { "json_replace", -1, 0, jsonReplaceFunc }, @@ -180379,7 +183658,9 @@ typedef short i16; typedef sqlite3_int64 i64; typedef sqlite3_uint64 u64; -#define ArraySize(x) ((int)(sizeof(x) / sizeof(x[0]))) +#ifndef ArraySize +# define ArraySize(x) ((int)(sizeof(x) / sizeof(x[0]))) +#endif #define testcase(x) #define ALWAYS(x) 1 @@ -180793,9 +184074,9 @@ static int sqlite3Fts5IndexBeginWrite( /* ** Flush any data stored in the in-memory hash tables to the database. -** If the bCommit flag is true, also close any open blob handles. +** Also close any open blob handles. */ -static int sqlite3Fts5IndexSync(Fts5Index *p, int bCommit); +static int sqlite3Fts5IndexSync(Fts5Index *p); /* ** Discard any data stored in the in-memory hash tables. Do not write it @@ -180965,7 +184246,7 @@ static int sqlite3Fts5StorageDocsize(Fts5Storage *p, i64 iRowid, int *aCol); static int sqlite3Fts5StorageSize(Fts5Storage *p, int iCol, i64 *pnAvg); static int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow); -static int sqlite3Fts5StorageSync(Fts5Storage *p, int bCommit); +static int sqlite3Fts5StorageSync(Fts5Storage *p); static int sqlite3Fts5StorageRollback(Fts5Storage *p); static int sqlite3Fts5StorageConfigValue( @@ -181001,6 +184282,7 @@ struct Fts5Token { /* Parse a MATCH expression. */ static int sqlite3Fts5ExprNew( Fts5Config *pConfig, + int iCol, /* Column on LHS of MATCH operator */ const char *zExpr, Fts5Expr **ppNew, char **pzErr @@ -181085,7 +184367,7 @@ static void sqlite3Fts5ParseNearsetFree(Fts5ExprNearset*); static void sqlite3Fts5ParseNodeFree(Fts5ExprNode*); static void sqlite3Fts5ParseSetDistance(Fts5Parse*, Fts5ExprNearset*, Fts5Token*); -static void sqlite3Fts5ParseSetColset(Fts5Parse*, Fts5ExprNearset*, Fts5Colset*); +static void sqlite3Fts5ParseSetColset(Fts5Parse*, Fts5ExprNode*, Fts5Colset*); static Fts5Colset *sqlite3Fts5ParseColsetInvert(Fts5Parse*, Fts5Colset*); static void sqlite3Fts5ParseFinished(Fts5Parse *pParse, Fts5ExprNode *p); static void sqlite3Fts5ParseNear(Fts5Parse *pParse, Fts5Token*); @@ -181142,12 +184424,12 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic); #define FTS5_NOT 3 #define FTS5_TERM 4 #define FTS5_COLON 5 -#define FTS5_LP 6 -#define FTS5_RP 7 -#define FTS5_MINUS 8 -#define FTS5_LCP 9 -#define FTS5_RCP 10 -#define FTS5_STRING 11 +#define FTS5_MINUS 6 +#define FTS5_LCP 7 +#define FTS5_RCP 8 +#define FTS5_STRING 9 +#define FTS5_LP 10 +#define FTS5_RP 11 #define FTS5_COMMA 12 #define FTS5_PLUS 13 #define FTS5_STAR 14 @@ -181283,16 +184565,16 @@ typedef union { #define sqlite3Fts5ParserARG_PDECL ,Fts5Parse *pParse #define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse = fts5yypParser->pParse #define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse = pParse -#define fts5YYNSTATE 29 -#define fts5YYNRULE 26 -#define fts5YY_MAX_SHIFT 28 -#define fts5YY_MIN_SHIFTREDUCE 45 -#define fts5YY_MAX_SHIFTREDUCE 70 -#define fts5YY_MIN_REDUCE 71 -#define fts5YY_MAX_REDUCE 96 -#define fts5YY_ERROR_ACTION 97 -#define fts5YY_ACCEPT_ACTION 98 -#define fts5YY_NO_ACTION 99 +#define fts5YYNSTATE 33 +#define fts5YYNRULE 27 +#define fts5YY_MAX_SHIFT 32 +#define fts5YY_MIN_SHIFTREDUCE 50 +#define fts5YY_MAX_SHIFTREDUCE 76 +#define fts5YY_MIN_REDUCE 77 +#define fts5YY_MAX_REDUCE 103 +#define fts5YY_ERROR_ACTION 104 +#define fts5YY_ACCEPT_ACTION 105 +#define fts5YY_NO_ACTION 106 /************* End control #defines *******************************************/ /* Define the fts5yytestcase() macro to be a no-op if is not already defined @@ -181364,50 +184646,54 @@ typedef union { ** fts5yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define fts5YY_ACTTAB_COUNT (85) +#define fts5YY_ACTTAB_COUNT (98) static const fts5YYACTIONTYPE fts5yy_action[] = { - /* 0 */ 98, 16, 51, 5, 53, 27, 83, 7, 26, 15, - /* 10 */ 51, 5, 53, 27, 13, 69, 26, 48, 51, 5, - /* 20 */ 53, 27, 19, 11, 26, 9, 20, 51, 5, 53, - /* 30 */ 27, 13, 22, 26, 28, 51, 5, 53, 27, 68, - /* 40 */ 1, 26, 19, 11, 17, 9, 52, 10, 53, 27, - /* 50 */ 23, 24, 26, 54, 3, 4, 2, 26, 6, 21, - /* 60 */ 49, 71, 3, 4, 2, 7, 56, 59, 55, 59, - /* 70 */ 4, 2, 12, 69, 58, 60, 18, 67, 62, 69, - /* 80 */ 25, 66, 8, 14, 2, + /* 0 */ 105, 19, 90, 6, 26, 93, 92, 24, 24, 17, + /* 10 */ 90, 6, 26, 16, 92, 54, 24, 18, 90, 6, + /* 20 */ 26, 10, 92, 12, 24, 75, 86, 90, 6, 26, + /* 30 */ 13, 92, 75, 24, 20, 90, 6, 26, 101, 92, + /* 40 */ 56, 24, 27, 90, 6, 26, 100, 92, 21, 24, + /* 50 */ 23, 15, 30, 11, 1, 91, 22, 25, 9, 92, + /* 60 */ 7, 24, 3, 4, 5, 3, 4, 5, 3, 77, + /* 70 */ 4, 5, 3, 61, 23, 15, 60, 11, 80, 12, + /* 80 */ 2, 13, 68, 10, 29, 52, 55, 75, 31, 32, + /* 90 */ 8, 28, 5, 3, 51, 55, 72, 14, }; static const fts5YYCODETYPE fts5yy_lookahead[] = { - /* 0 */ 16, 17, 18, 19, 20, 21, 5, 6, 24, 17, - /* 10 */ 18, 19, 20, 21, 11, 14, 24, 17, 18, 19, - /* 20 */ 20, 21, 8, 9, 24, 11, 17, 18, 19, 20, - /* 30 */ 21, 11, 12, 24, 17, 18, 19, 20, 21, 26, - /* 40 */ 6, 24, 8, 9, 22, 11, 18, 11, 20, 21, - /* 50 */ 24, 25, 24, 20, 1, 2, 3, 24, 23, 24, - /* 60 */ 7, 0, 1, 2, 3, 6, 10, 11, 10, 11, - /* 70 */ 2, 3, 9, 14, 11, 11, 22, 26, 7, 14, - /* 80 */ 13, 11, 5, 11, 3, + /* 0 */ 16, 17, 18, 19, 20, 22, 22, 24, 24, 17, + /* 10 */ 18, 19, 20, 7, 22, 9, 24, 17, 18, 19, + /* 20 */ 20, 10, 22, 9, 24, 14, 17, 18, 19, 20, + /* 30 */ 9, 22, 14, 24, 17, 18, 19, 20, 26, 22, + /* 40 */ 9, 24, 17, 18, 19, 20, 26, 22, 21, 24, + /* 50 */ 6, 7, 13, 9, 10, 18, 21, 20, 5, 22, + /* 60 */ 5, 24, 3, 1, 2, 3, 1, 2, 3, 0, + /* 70 */ 1, 2, 3, 11, 6, 7, 11, 9, 5, 9, + /* 80 */ 10, 9, 11, 10, 12, 8, 9, 14, 24, 25, + /* 90 */ 23, 24, 2, 3, 8, 9, 9, 9, }; -#define fts5YY_SHIFT_USE_DFLT (85) -#define fts5YY_SHIFT_COUNT (28) +#define fts5YY_SHIFT_USE_DFLT (98) +#define fts5YY_SHIFT_COUNT (32) #define fts5YY_SHIFT_MIN (0) -#define fts5YY_SHIFT_MAX (81) +#define fts5YY_SHIFT_MAX (90) static const unsigned char fts5yy_shift_ofst[] = { - /* 0 */ 34, 34, 34, 34, 34, 14, 20, 3, 36, 1, - /* 10 */ 59, 64, 64, 65, 65, 53, 61, 56, 58, 63, - /* 20 */ 68, 67, 70, 67, 71, 72, 67, 77, 81, + /* 0 */ 44, 44, 44, 44, 44, 44, 68, 70, 72, 14, + /* 10 */ 21, 73, 11, 18, 18, 31, 31, 62, 65, 69, + /* 20 */ 90, 77, 86, 6, 39, 53, 55, 59, 39, 87, + /* 30 */ 88, 39, 71, }; -#define fts5YY_REDUCE_USE_DFLT (-17) -#define fts5YY_REDUCE_COUNT (14) -#define fts5YY_REDUCE_MIN (-16) -#define fts5YY_REDUCE_MAX (54) +#define fts5YY_REDUCE_USE_DFLT (-18) +#define fts5YY_REDUCE_COUNT (16) +#define fts5YY_REDUCE_MIN (-17) +#define fts5YY_REDUCE_MAX (67) static const signed char fts5yy_reduce_ofst[] = { - /* 0 */ -16, -8, 0, 9, 17, 28, 26, 35, 33, 13, - /* 10 */ 13, 22, 54, 13, 51, + /* 0 */ -16, -8, 0, 9, 17, 25, 37, -17, 64, -17, + /* 10 */ 67, 12, 12, 12, 20, 27, 35, }; static const fts5YYACTIONTYPE fts5yy_default[] = { - /* 0 */ 97, 97, 97, 97, 97, 76, 91, 97, 97, 96, - /* 10 */ 96, 97, 97, 96, 96, 97, 97, 97, 97, 97, - /* 20 */ 73, 89, 97, 90, 97, 97, 87, 97, 72, + /* 0 */ 104, 104, 104, 104, 104, 104, 89, 104, 98, 104, + /* 10 */ 104, 103, 103, 103, 103, 104, 104, 104, 104, 104, + /* 20 */ 85, 104, 104, 104, 94, 104, 104, 84, 96, 104, + /* 30 */ 104, 97, 104, }; /********** End of lemon-generated parsing tables *****************************/ @@ -181472,6 +184758,7 @@ struct fts5yyParser { fts5yyStackEntry fts5yystk0; /* First stack entry */ #else fts5yyStackEntry fts5yystack[fts5YYSTACKDEPTH]; /* The parser's stack */ + fts5yyStackEntry *fts5yystackEnd; /* Last entry in the stack */ #endif }; typedef struct fts5yyParser fts5yyParser; @@ -181513,11 +184800,11 @@ static void sqlite3Fts5ParserTrace(FILE *TraceFILE, char *zTracePrompt){ ** are required. The following table supplies these names */ static const char *const fts5yyTokenName[] = { "$", "OR", "AND", "NOT", - "TERM", "COLON", "LP", "RP", - "MINUS", "LCP", "RCP", "STRING", + "TERM", "COLON", "MINUS", "LCP", + "RCP", "STRING", "LP", "RP", "COMMA", "PLUS", "STAR", "error", "input", "expr", "cnearset", "exprlist", - "nearset", "colset", "colsetlist", "nearphrases", + "colset", "colsetlist", "nearset", "nearphrases", "phrase", "neardist_opt", "star_opt", }; #endif /* NDEBUG */ @@ -181527,31 +184814,32 @@ static const char *const fts5yyTokenName[] = { */ static const char *const fts5yyRuleName[] = { /* 0 */ "input ::= expr", - /* 1 */ "expr ::= expr AND expr", - /* 2 */ "expr ::= expr OR expr", - /* 3 */ "expr ::= expr NOT expr", - /* 4 */ "expr ::= LP expr RP", - /* 5 */ "expr ::= exprlist", - /* 6 */ "exprlist ::= cnearset", - /* 7 */ "exprlist ::= exprlist cnearset", - /* 8 */ "cnearset ::= nearset", - /* 9 */ "cnearset ::= colset COLON nearset", - /* 10 */ "colset ::= MINUS LCP colsetlist RCP", - /* 11 */ "colset ::= LCP colsetlist RCP", - /* 12 */ "colset ::= STRING", - /* 13 */ "colset ::= MINUS STRING", - /* 14 */ "colsetlist ::= colsetlist STRING", - /* 15 */ "colsetlist ::= STRING", - /* 16 */ "nearset ::= phrase", - /* 17 */ "nearset ::= STRING LP nearphrases neardist_opt RP", - /* 18 */ "nearphrases ::= phrase", - /* 19 */ "nearphrases ::= nearphrases phrase", - /* 20 */ "neardist_opt ::=", - /* 21 */ "neardist_opt ::= COMMA STRING", - /* 22 */ "phrase ::= phrase PLUS STRING star_opt", - /* 23 */ "phrase ::= STRING star_opt", - /* 24 */ "star_opt ::= STAR", - /* 25 */ "star_opt ::=", + /* 1 */ "colset ::= MINUS LCP colsetlist RCP", + /* 2 */ "colset ::= LCP colsetlist RCP", + /* 3 */ "colset ::= STRING", + /* 4 */ "colset ::= MINUS STRING", + /* 5 */ "colsetlist ::= colsetlist STRING", + /* 6 */ "colsetlist ::= STRING", + /* 7 */ "expr ::= expr AND expr", + /* 8 */ "expr ::= expr OR expr", + /* 9 */ "expr ::= expr NOT expr", + /* 10 */ "expr ::= colset COLON LP expr RP", + /* 11 */ "expr ::= LP expr RP", + /* 12 */ "expr ::= exprlist", + /* 13 */ "exprlist ::= cnearset", + /* 14 */ "exprlist ::= exprlist cnearset", + /* 15 */ "cnearset ::= nearset", + /* 16 */ "cnearset ::= colset COLON nearset", + /* 17 */ "nearset ::= phrase", + /* 18 */ "nearset ::= STRING LP nearphrases neardist_opt RP", + /* 19 */ "nearphrases ::= phrase", + /* 20 */ "nearphrases ::= nearphrases phrase", + /* 21 */ "neardist_opt ::=", + /* 22 */ "neardist_opt ::= COMMA STRING", + /* 23 */ "phrase ::= phrase PLUS STRING star_opt", + /* 24 */ "phrase ::= STRING star_opt", + /* 25 */ "star_opt ::= STAR", + /* 26 */ "star_opt ::=", }; #endif /* NDEBUG */ @@ -181598,6 +184886,34 @@ static int fts5yyGrowStack(fts5yyParser *p){ # define fts5YYMALLOCARGTYPE size_t #endif +/* Initialize a new parser that has already been allocated. +*/ +static void sqlite3Fts5ParserInit(void *fts5yypParser){ + fts5yyParser *pParser = (fts5yyParser*)fts5yypParser; +#ifdef fts5YYTRACKMAXSTACKDEPTH + pParser->fts5yyhwm = 0; +#endif +#if fts5YYSTACKDEPTH<=0 + pParser->fts5yytos = NULL; + pParser->fts5yystack = NULL; + pParser->fts5yystksz = 0; + if( fts5yyGrowStack(pParser) ){ + pParser->fts5yystack = &pParser->fts5yystk0; + pParser->fts5yystksz = 1; + } +#endif +#ifndef fts5YYNOERRORRECOVERY + pParser->fts5yyerrcnt = -1; +#endif + pParser->fts5yytos = pParser->fts5yystack; + pParser->fts5yystack[0].stateno = 0; + pParser->fts5yystack[0].major = 0; +#if fts5YYSTACKDEPTH>0 + pParser->fts5yystackEnd = &pParser->fts5yystack[fts5YYSTACKDEPTH-1]; +#endif +} + +#ifndef sqlite3Fts5Parser_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like @@ -181613,28 +184929,11 @@ static int fts5yyGrowStack(fts5yyParser *p){ static void *sqlite3Fts5ParserAlloc(void *(*mallocProc)(fts5YYMALLOCARGTYPE)){ fts5yyParser *pParser; pParser = (fts5yyParser*)(*mallocProc)( (fts5YYMALLOCARGTYPE)sizeof(fts5yyParser) ); - if( pParser ){ -#ifdef fts5YYTRACKMAXSTACKDEPTH - pParser->fts5yyhwm = 0; -#endif -#if fts5YYSTACKDEPTH<=0 - pParser->fts5yytos = NULL; - pParser->fts5yystack = NULL; - pParser->fts5yystksz = 0; - if( fts5yyGrowStack(pParser) ){ - pParser->fts5yystack = &pParser->fts5yystk0; - pParser->fts5yystksz = 1; - } -#endif -#ifndef fts5YYNOERRORRECOVERY - pParser->fts5yyerrcnt = -1; -#endif - pParser->fts5yytos = pParser->fts5yystack; - pParser->fts5yystack[0].stateno = 0; - pParser->fts5yystack[0].major = 0; - } + if( pParser ) sqlite3Fts5ParserInit(pParser); return pParser; } +#endif /* sqlite3Fts5Parser_ENGINEALWAYSONSTACK */ + /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal @@ -181673,16 +184972,16 @@ static void fts5yy_destructor( sqlite3Fts5ParseNodeFree((fts5yypminor->fts5yy24)); } break; - case 20: /* nearset */ + case 20: /* colset */ + case 21: /* colsetlist */ +{ + sqlite3_free((fts5yypminor->fts5yy11)); +} + break; + case 22: /* nearset */ case 23: /* nearphrases */ { sqlite3Fts5ParseNearsetFree((fts5yypminor->fts5yy46)); -} - break; - case 21: /* colset */ - case 22: /* colsetlist */ -{ - sqlite3_free((fts5yypminor->fts5yy11)); } break; case 24: /* phrase */ @@ -181716,6 +185015,18 @@ static void fts5yy_pop_parser_stack(fts5yyParser *pParser){ fts5yy_destructor(pParser, fts5yytos->major, &fts5yytos->minor); } +/* +** Clear all secondary memory allocations from the parser +*/ +static void sqlite3Fts5ParserFinalize(void *p){ + fts5yyParser *pParser = (fts5yyParser*)p; + while( pParser->fts5yytos>pParser->fts5yystack ) fts5yy_pop_parser_stack(pParser); +#if fts5YYSTACKDEPTH<=0 + if( pParser->fts5yystack!=&pParser->fts5yystk0 ) free(pParser->fts5yystack); +#endif +} + +#ifndef sqlite3Fts5Parser_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. @@ -181728,16 +185039,13 @@ static void sqlite3Fts5ParserFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ - fts5yyParser *pParser = (fts5yyParser*)p; #ifndef fts5YYPARSEFREENEVERNULL - if( pParser==0 ) return; + if( p==0 ) return; #endif - while( pParser->fts5yytos>pParser->fts5yystack ) fts5yy_pop_parser_stack(pParser); -#if fts5YYSTACKDEPTH<=0 - if( pParser->fts5yystack!=&pParser->fts5yystk0 ) free(pParser->fts5yystack); -#endif - (*freeProc)((void*)pParser); + sqlite3Fts5ParserFinalize(p); + (*freeProc)(p); } +#endif /* sqlite3Fts5Parser_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. @@ -181901,7 +185209,7 @@ static void fts5yy_shift( } #endif #if fts5YYSTACKDEPTH>0 - if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5YYSTACKDEPTH] ){ + if( fts5yypParser->fts5yytos>fts5yypParser->fts5yystackEnd ){ fts5yypParser->fts5yytos--; fts5yyStackOverflow(fts5yypParser); return; @@ -181929,34 +185237,35 @@ static void fts5yy_shift( ** is used during the reduce. */ static const struct { - fts5YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ - unsigned char nrhs; /* Number of right-hand side symbols in the rule */ + fts5YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ + signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } fts5yyRuleInfo[] = { - { 16, 1 }, - { 17, 3 }, - { 17, 3 }, - { 17, 3 }, - { 17, 3 }, - { 17, 1 }, - { 19, 1 }, - { 19, 2 }, - { 18, 1 }, - { 18, 3 }, - { 21, 4 }, - { 21, 3 }, - { 21, 1 }, - { 21, 2 }, - { 22, 2 }, - { 22, 1 }, - { 20, 1 }, - { 20, 5 }, - { 23, 1 }, - { 23, 2 }, + { 16, -1 }, + { 20, -4 }, + { 20, -3 }, + { 20, -1 }, + { 20, -2 }, + { 21, -2 }, + { 21, -1 }, + { 17, -3 }, + { 17, -3 }, + { 17, -3 }, + { 17, -5 }, + { 17, -3 }, + { 17, -1 }, + { 19, -1 }, + { 19, -2 }, + { 18, -1 }, + { 18, -3 }, + { 22, -1 }, + { 22, -5 }, + { 23, -1 }, + { 23, -2 }, { 25, 0 }, - { 25, 2 }, - { 24, 4 }, - { 24, 2 }, - { 26, 1 }, + { 25, -2 }, + { 24, -4 }, + { 24, -2 }, + { 26, -1 }, { 26, 0 }, }; @@ -181980,7 +185289,7 @@ static void fts5yy_reduce( if( fts5yyTraceFILE && fts5yyruleno<(int)(sizeof(fts5yyRuleName)/sizeof(fts5yyRuleName[0])) ){ fts5yysize = fts5yyRuleInfo[fts5yyruleno].nrhs; fprintf(fts5yyTraceFILE, "%sReduce [%s], go to state %d.\n", fts5yyTracePrompt, - fts5yyRuleName[fts5yyruleno], fts5yymsp[-fts5yysize].stateno); + fts5yyRuleName[fts5yyruleno], fts5yymsp[fts5yysize].stateno); } #endif /* NDEBUG */ @@ -181995,7 +185304,7 @@ static void fts5yy_reduce( } #endif #if fts5YYSTACKDEPTH>0 - if( fts5yypParser->fts5yytos>=&fts5yypParser->fts5yystack[fts5YYSTACKDEPTH-1] ){ + if( fts5yypParser->fts5yytos>=fts5yypParser->fts5yystackEnd ){ fts5yyStackOverflow(fts5yypParser); return; } @@ -182024,87 +185333,94 @@ static void fts5yy_reduce( case 0: /* input ::= expr */ { sqlite3Fts5ParseFinished(pParse, fts5yymsp[0].minor.fts5yy24); } break; - case 1: /* expr ::= expr AND expr */ -{ - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); -} - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 2: /* expr ::= expr OR expr */ -{ - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); -} - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 3: /* expr ::= expr NOT expr */ -{ - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); -} - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 4: /* expr ::= LP expr RP */ -{fts5yymsp[-2].minor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24;} - break; - case 5: /* expr ::= exprlist */ - case 6: /* exprlist ::= cnearset */ fts5yytestcase(fts5yyruleno==6); -{fts5yylhsminor.fts5yy24 = fts5yymsp[0].minor.fts5yy24;} - fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 7: /* exprlist ::= exprlist cnearset */ -{ - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24); -} - fts5yymsp[-1].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 8: /* cnearset ::= nearset */ -{ - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); -} - fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 9: /* cnearset ::= colset COLON nearset */ -{ - sqlite3Fts5ParseSetColset(pParse, fts5yymsp[0].minor.fts5yy46, fts5yymsp[-2].minor.fts5yy11); - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); -} - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; - break; - case 10: /* colset ::= MINUS LCP colsetlist RCP */ + case 1: /* colset ::= MINUS LCP colsetlist RCP */ { fts5yymsp[-3].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11); } break; - case 11: /* colset ::= LCP colsetlist RCP */ + case 2: /* colset ::= LCP colsetlist RCP */ { fts5yymsp[-2].minor.fts5yy11 = fts5yymsp[-1].minor.fts5yy11; } break; - case 12: /* colset ::= STRING */ + case 3: /* colset ::= STRING */ { fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); } fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11; break; - case 13: /* colset ::= MINUS STRING */ + case 4: /* colset ::= MINUS STRING */ { fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11); } break; - case 14: /* colsetlist ::= colsetlist STRING */ + case 5: /* colsetlist ::= colsetlist STRING */ { fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, fts5yymsp[-1].minor.fts5yy11, &fts5yymsp[0].minor.fts5yy0); } fts5yymsp[-1].minor.fts5yy11 = fts5yylhsminor.fts5yy11; break; - case 15: /* colsetlist ::= STRING */ + case 6: /* colsetlist ::= STRING */ { fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); } fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11; break; - case 16: /* nearset ::= phrase */ + case 7: /* expr ::= expr AND expr */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); +} + fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 8: /* expr ::= expr OR expr */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); +} + fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 9: /* expr ::= expr NOT expr */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); +} + fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 10: /* expr ::= colset COLON LP expr RP */ +{ + sqlite3Fts5ParseSetColset(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[-4].minor.fts5yy11); + fts5yylhsminor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24; +} + fts5yymsp[-4].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 11: /* expr ::= LP expr RP */ +{fts5yymsp[-2].minor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24;} + break; + case 12: /* expr ::= exprlist */ + case 13: /* exprlist ::= cnearset */ fts5yytestcase(fts5yyruleno==13); +{fts5yylhsminor.fts5yy24 = fts5yymsp[0].minor.fts5yy24;} + fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 14: /* exprlist ::= exprlist cnearset */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24); +} + fts5yymsp[-1].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 15: /* cnearset ::= nearset */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); +} + fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 16: /* cnearset ::= colset COLON nearset */ +{ + fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); + sqlite3Fts5ParseSetColset(pParse, fts5yylhsminor.fts5yy24, fts5yymsp[-2].minor.fts5yy11); +} + fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + break; + case 17: /* nearset ::= phrase */ { fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53); } fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46; break; - case 17: /* nearset ::= STRING LP nearphrases neardist_opt RP */ + case 18: /* nearset ::= STRING LP nearphrases neardist_opt RP */ { sqlite3Fts5ParseNear(pParse, &fts5yymsp[-4].minor.fts5yy0); sqlite3Fts5ParseSetDistance(pParse, fts5yymsp[-2].minor.fts5yy46, &fts5yymsp[-1].minor.fts5yy0); @@ -182112,40 +185428,40 @@ static void fts5yy_reduce( } fts5yymsp[-4].minor.fts5yy46 = fts5yylhsminor.fts5yy46; break; - case 18: /* nearphrases ::= phrase */ + case 19: /* nearphrases ::= phrase */ { fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53); } fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46; break; - case 19: /* nearphrases ::= nearphrases phrase */ + case 20: /* nearphrases ::= nearphrases phrase */ { fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, fts5yymsp[-1].minor.fts5yy46, fts5yymsp[0].minor.fts5yy53); } fts5yymsp[-1].minor.fts5yy46 = fts5yylhsminor.fts5yy46; break; - case 20: /* neardist_opt ::= */ + case 21: /* neardist_opt ::= */ { fts5yymsp[1].minor.fts5yy0.p = 0; fts5yymsp[1].minor.fts5yy0.n = 0; } break; - case 21: /* neardist_opt ::= COMMA STRING */ + case 22: /* neardist_opt ::= COMMA STRING */ { fts5yymsp[-1].minor.fts5yy0 = fts5yymsp[0].minor.fts5yy0; } break; - case 22: /* phrase ::= phrase PLUS STRING star_opt */ + case 23: /* phrase ::= phrase PLUS STRING star_opt */ { fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, fts5yymsp[-3].minor.fts5yy53, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); } fts5yymsp[-3].minor.fts5yy53 = fts5yylhsminor.fts5yy53; break; - case 23: /* phrase ::= STRING star_opt */ + case 24: /* phrase ::= STRING star_opt */ { fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, 0, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); } fts5yymsp[-1].minor.fts5yy53 = fts5yylhsminor.fts5yy53; break; - case 24: /* star_opt ::= STAR */ + case 25: /* star_opt ::= STAR */ { fts5yymsp[0].minor.fts5yy4 = 1; } break; - case 25: /* star_opt ::= */ + case 26: /* star_opt ::= */ { fts5yymsp[1].minor.fts5yy4 = 0; } break; default: @@ -182155,20 +185471,24 @@ static void fts5yy_reduce( assert( fts5yyrulenofts5YY_MAX_SHIFT ){ - fts5yyact += fts5YY_MIN_REDUCE - fts5YY_MIN_SHIFTREDUCE; - } - fts5yymsp -= fts5yysize-1; + fts5yyact = fts5yy_find_reduce_action(fts5yymsp[fts5yysize].stateno,(fts5YYCODETYPE)fts5yygoto); + + /* There are no SHIFTREDUCE actions on nonterminals because the table + ** generator has simplified them to pure REDUCE actions. */ + assert( !(fts5yyact>fts5YY_MAX_SHIFT && fts5yyact<=fts5YY_MAX_SHIFTREDUCE) ); + + /* It is not possible for a REDUCE to be followed by an error */ + assert( fts5yyact!=fts5YY_ERROR_ACTION ); + + if( fts5yyact==fts5YY_ACCEPT_ACTION ){ + fts5yypParser->fts5yytos += fts5yysize; + fts5yy_accept(fts5yypParser); + }else{ + fts5yymsp += fts5yysize+1; fts5yypParser->fts5yytos = fts5yymsp; fts5yymsp->stateno = (fts5YYACTIONTYPE)fts5yyact; fts5yymsp->major = (fts5YYCODETYPE)fts5yygoto; fts5yyTraceShift(fts5yypParser, fts5yyact); - }else{ - assert( fts5yyact == fts5YY_ACCEPT_ACTION ); - fts5yypParser->fts5yytos -= fts5yysize; - fts5yy_accept(fts5yypParser); } } @@ -183187,9 +186507,11 @@ static void sqlite3Fts5BufferAppendBlob( const u8 *pData ){ assert_nc( *pRc || nData>=0 ); - if( fts5BufferGrow(pRc, pBuf, nData) ) return; - memcpy(&pBuf->p[pBuf->n], pData, nData); - pBuf->n += nData; + if( nData ){ + if( fts5BufferGrow(pRc, pBuf, nData) ) return; + memcpy(&pBuf->p[pBuf->n], pData, nData); + pBuf->n += nData; + } } /* @@ -183366,8 +186688,8 @@ static void *sqlite3Fts5MallocZero(int *pRc, int nByte){ void *pRet = 0; if( *pRc==SQLITE_OK ){ pRet = sqlite3_malloc(nByte); - if( pRet==0 && nByte>0 ){ - *pRc = SQLITE_NOMEM; + if( pRet==0 ){ + if( nByte>0 ) *pRc = SQLITE_NOMEM; }else{ memset(pRet, 0, nByte); } @@ -184688,6 +188010,7 @@ static void fts5ParseFree(void *p){ sqlite3_free(p); } static int sqlite3Fts5ExprNew( Fts5Config *pConfig, /* FTS5 Configuration */ + int iCol, const char *zExpr, /* Expression text */ Fts5Expr **ppNew, char **pzErr @@ -184712,6 +188035,18 @@ static int sqlite3Fts5ExprNew( }while( sParse.rc==SQLITE_OK && t!=FTS5_EOF ); sqlite3Fts5ParserFree(pEngine, fts5ParseFree); + /* If the LHS of the MATCH expression was a user column, apply the + ** implicit column-filter. */ + if( iColnCol && sParse.pExpr && sParse.rc==SQLITE_OK ){ + int n = sizeof(Fts5Colset); + Fts5Colset *pColset = (Fts5Colset*)sqlite3Fts5MallocZero(&sParse.rc, n); + if( pColset ){ + pColset->nCol = 1; + pColset->aiCol[0] = iCol; + sqlite3Fts5ParseSetColset(&sParse, sParse.pExpr, pColset); + } + } + assert( sParse.rc!=SQLITE_OK || sParse.zErr==0 ); if( sParse.rc==SQLITE_OK ){ *ppNew = pNew = sqlite3_malloc(sizeof(Fts5Expr)); @@ -185585,7 +188920,10 @@ static int fts5ExprNodeNext_OR( || (bFromValid && fts5RowidCmp(pExpr, p1->iRowid, iFrom)<0) ){ int rc = fts5ExprNodeNext(pExpr, p1, bFromValid, iFrom); - if( rc!=SQLITE_OK ) return rc; + if( rc!=SQLITE_OK ){ + pNode->bNomatch = 0; + return rc; + } } } } @@ -185616,7 +188954,10 @@ static int fts5ExprNodeTest_AND( if( cmp>0 ){ /* Advance pChild until it points to iLast or laster */ rc = fts5ExprNodeNext(pExpr, pChild, 1, iLast); - if( rc!=SQLITE_OK ) return rc; + if( rc!=SQLITE_OK ){ + pAnd->bNomatch = 0; + return rc; + } } /* If the child node is now at EOF, so is the parent AND node. Otherwise, @@ -185655,6 +188996,8 @@ static int fts5ExprNodeNext_AND( int rc = fts5ExprNodeNext(pExpr, pNode->apChild[0], bFromValid, iFrom); if( rc==SQLITE_OK ){ rc = fts5ExprNodeTest_AND(pExpr, pNode); + }else{ + pNode->bNomatch = 0; } return rc; } @@ -185697,6 +189040,9 @@ static int fts5ExprNodeNext_NOT( if( rc==SQLITE_OK ){ rc = fts5ExprNodeTest_NOT(pExpr, pNode); } + if( rc!=SQLITE_OK ){ + pNode->bNomatch = 0; + } return rc; } @@ -186076,7 +189422,7 @@ static Fts5ExprPhrase *sqlite3Fts5ParseTerm( rc = fts5ParseStringFromToken(pToken, &z); if( rc==SQLITE_OK ){ - int flags = FTS5_TOKENIZE_QUERY | (bPrefix ? FTS5_TOKENIZE_QUERY : 0); + int flags = FTS5_TOKENIZE_QUERY | (bPrefix ? FTS5_TOKENIZE_PREFIX : 0); int n; sqlite3Fts5Dequote(z); n = (int)strlen(z); @@ -186350,25 +189696,110 @@ static Fts5Colset *sqlite3Fts5ParseColset( return pRet; } +/* +** If argument pOrig is NULL, or if (*pRc) is set to anything other than +** SQLITE_OK when this function is called, NULL is returned. +** +** Otherwise, a copy of (*pOrig) is made into memory obtained from +** sqlite3Fts5MallocZero() and a pointer to it returned. If the allocation +** fails, (*pRc) is set to SQLITE_NOMEM and NULL is returned. +*/ +static Fts5Colset *fts5CloneColset(int *pRc, Fts5Colset *pOrig){ + Fts5Colset *pRet; + if( pOrig ){ + int nByte = sizeof(Fts5Colset) + (pOrig->nCol-1) * sizeof(int); + pRet = (Fts5Colset*)sqlite3Fts5MallocZero(pRc, nByte); + if( pRet ){ + memcpy(pRet, pOrig, nByte); + } + }else{ + pRet = 0; + } + return pRet; +} + +/* +** Remove from colset pColset any columns that are not also in colset pMerge. +*/ +static void fts5MergeColset(Fts5Colset *pColset, Fts5Colset *pMerge){ + int iIn = 0; /* Next input in pColset */ + int iMerge = 0; /* Next input in pMerge */ + int iOut = 0; /* Next output slot in pColset */ + + while( iInnCol && iMergenCol ){ + int iDiff = pColset->aiCol[iIn] - pMerge->aiCol[iMerge]; + if( iDiff==0 ){ + pColset->aiCol[iOut++] = pMerge->aiCol[iMerge]; + iMerge++; + iIn++; + }else if( iDiff>0 ){ + iMerge++; + }else{ + iIn++; + } + } + pColset->nCol = iOut; +} + +/* +** Recursively apply colset pColset to expression node pNode and all of +** its decendents. If (*ppFree) is not NULL, it contains a spare copy +** of pColset. This function may use the spare copy and set (*ppFree) to +** zero, or it may create copies of pColset using fts5CloneColset(). +*/ +static void fts5ParseSetColset( + Fts5Parse *pParse, + Fts5ExprNode *pNode, + Fts5Colset *pColset, + Fts5Colset **ppFree +){ + if( pParse->rc==SQLITE_OK ){ + assert( pNode->eType==FTS5_TERM || pNode->eType==FTS5_STRING + || pNode->eType==FTS5_AND || pNode->eType==FTS5_OR + || pNode->eType==FTS5_NOT || pNode->eType==FTS5_EOF + ); + if( pNode->eType==FTS5_STRING || pNode->eType==FTS5_TERM ){ + Fts5ExprNearset *pNear = pNode->pNear; + if( pNear->pColset ){ + fts5MergeColset(pNear->pColset, pColset); + if( pNear->pColset->nCol==0 ){ + pNode->eType = FTS5_EOF; + pNode->xNext = 0; + } + }else if( *ppFree ){ + pNear->pColset = pColset; + *ppFree = 0; + }else{ + pNear->pColset = fts5CloneColset(&pParse->rc, pColset); + } + }else{ + int i; + assert( pNode->eType!=FTS5_EOF || pNode->nChild==0 ); + for(i=0; inChild; i++){ + fts5ParseSetColset(pParse, pNode->apChild[i], pColset, ppFree); + } + } + } +} + +/* +** Apply colset pColset to expression node pExpr and all of its descendents. +*/ static void sqlite3Fts5ParseSetColset( Fts5Parse *pParse, - Fts5ExprNearset *pNear, + Fts5ExprNode *pExpr, Fts5Colset *pColset ){ + Fts5Colset *pFree = pColset; if( pParse->pConfig->eDetail==FTS5_DETAIL_NONE ){ pParse->rc = SQLITE_ERROR; pParse->zErr = sqlite3_mprintf( "fts5: column queries are not supported (detail=none)" ); - sqlite3_free(pColset); - return; - } - - if( pNear ){ - pNear->pColset = pColset; }else{ - sqlite3_free(pColset); + fts5ParseSetColset(pParse, pExpr, pColset, &pFree); } + sqlite3_free(pFree); } static void fts5ExprAssignXNext(Fts5ExprNode *pNode){ @@ -186822,7 +190253,7 @@ static void fts5ExprFunction( rc = sqlite3Fts5ConfigParse(pGlobal, db, nConfig, azConfig, &pConfig, &zErr); if( rc==SQLITE_OK ){ - rc = sqlite3Fts5ExprNew(pConfig, zExpr, &pExpr, &zErr); + rc = sqlite3Fts5ExprNew(pConfig, pConfig->nCol, zExpr, &pExpr, &zErr); } if( rc==SQLITE_OK ){ char *zText; @@ -187219,9 +190650,10 @@ struct Fts5Hash { /* ** Each entry in the hash table is represented by an object of the -** following type. Each object, its key (zKey[]) and its current data -** are stored in a single memory allocation. The position list data -** immediately follows the key data in memory. +** following type. Each object, its key (a nul-terminated string) and +** its current data are stored in a single memory allocation. The +** key immediately follows the object in memory. The position list +** data immediately follows the key data in memory. ** ** The data that follows the key is in a similar, but not identical format ** to the doclist data stored in the database. It is: @@ -187245,20 +190677,20 @@ struct Fts5HashEntry { int nAlloc; /* Total size of allocation */ int iSzPoslist; /* Offset of space for 4-byte poslist size */ int nData; /* Total bytes of data (incl. structure) */ - int nKey; /* Length of zKey[] in bytes */ + int nKey; /* Length of key in bytes */ u8 bDel; /* Set delete-flag @ iSzPoslist */ u8 bContent; /* Set content-flag (detail=none mode) */ i16 iCol; /* Column of last value written */ int iPos; /* Position of last value written */ i64 iRowid; /* Rowid of last value written */ - char zKey[8]; /* Nul-terminated entry key */ }; /* -** Size of Fts5HashEntry without the zKey[] array. +** Eqivalent to: +** +** char *fts5EntryKey(Fts5HashEntry *pEntry){ return zKey; } */ -#define FTS5_HASHENTRYSIZE (sizeof(Fts5HashEntry)-8) - +#define fts5EntryKey(p) ( ((char *)(&(p)[1])) ) /* @@ -187353,10 +190785,11 @@ static int fts5HashResize(Fts5Hash *pHash){ for(i=0; inSlot; i++){ while( apOld[i] ){ - int iHash; + unsigned int iHash; Fts5HashEntry *p = apOld[i]; apOld[i] = p->pHashNext; - iHash = fts5HashKey(nNew, (u8*)p->zKey, (int)strlen(p->zKey)); + iHash = fts5HashKey(nNew, (u8*)fts5EntryKey(p), + (int)strlen(fts5EntryKey(p))); p->pHashNext = apNew[iHash]; apNew[iHash] = p; } @@ -187427,9 +190860,10 @@ static int sqlite3Fts5HashWrite( /* Attempt to locate an existing hash entry */ iHash = fts5HashKey2(pHash->nSlot, (u8)bByte, (const u8*)pToken, nToken); for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){ - if( p->zKey[0]==bByte + char *zKey = fts5EntryKey(p); + if( zKey[0]==bByte && p->nKey==nToken - && memcmp(&p->zKey[1], pToken, nToken)==0 + && memcmp(&zKey[1], pToken, nToken)==0 ){ break; } @@ -187438,7 +190872,8 @@ static int sqlite3Fts5HashWrite( /* If an existing hash entry cannot be found, create a new one. */ if( p==0 ){ /* Figure out how much space to allocate */ - int nByte = FTS5_HASHENTRYSIZE + (nToken+1) + 1 + 64; + char *zKey; + int nByte = sizeof(Fts5HashEntry) + (nToken+1) + 1 + 64; if( nByte<128 ) nByte = 128; /* Grow the Fts5Hash.aSlot[] array if necessary. */ @@ -187451,14 +190886,15 @@ static int sqlite3Fts5HashWrite( /* Allocate new Fts5HashEntry and add it to the hash table. */ p = (Fts5HashEntry*)sqlite3_malloc(nByte); if( !p ) return SQLITE_NOMEM; - memset(p, 0, FTS5_HASHENTRYSIZE); + memset(p, 0, sizeof(Fts5HashEntry)); p->nAlloc = nByte; - p->zKey[0] = bByte; - memcpy(&p->zKey[1], pToken, nToken); - assert( iHash==fts5HashKey(pHash->nSlot, (u8*)p->zKey, nToken+1) ); + zKey = fts5EntryKey(p); + zKey[0] = bByte; + memcpy(&zKey[1], pToken, nToken); + assert( iHash==fts5HashKey(pHash->nSlot, (u8*)zKey, nToken+1) ); p->nKey = nToken; - p->zKey[nToken+1] = '\0'; - p->nData = nToken+1 + 1 + FTS5_HASHENTRYSIZE; + zKey[nToken+1] = '\0'; + p->nData = nToken+1 + 1 + sizeof(Fts5HashEntry); p->pHashNext = pHash->aSlot[iHash]; pHash->aSlot[iHash] = p; pHash->nEntry++; @@ -187576,9 +191012,11 @@ static Fts5HashEntry *fts5HashEntryMerge( p1 = 0; }else{ int i = 0; - while( p1->zKey[i]==p2->zKey[i] ) i++; + char *zKey1 = fts5EntryKey(p1); + char *zKey2 = fts5EntryKey(p2); + while( zKey1[i]==zKey2[i] ) i++; - if( ((u8)p1->zKey[i])>((u8)p2->zKey[i]) ){ + if( ((u8)zKey1[i])>((u8)zKey2[i]) ){ /* p2 is smaller */ *ppOut = p2; ppOut = &p2->pScanNext; @@ -187621,7 +191059,7 @@ static int fts5HashEntrySort( for(iSlot=0; iSlotnSlot; iSlot++){ Fts5HashEntry *pIter; for(pIter=pHash->aSlot[iSlot]; pIter; pIter=pIter->pHashNext){ - if( pTerm==0 || 0==memcmp(pIter->zKey, pTerm, nTerm) ){ + if( pTerm==0 || 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm) ){ Fts5HashEntry *pEntry = pIter; pEntry->pScanNext = 0; for(i=0; ap[i]; i++){ @@ -187654,16 +191092,18 @@ static int sqlite3Fts5HashQuery( int *pnDoclist /* OUT: Size of doclist in bytes */ ){ unsigned int iHash = fts5HashKey(pHash->nSlot, (const u8*)pTerm, nTerm); + char *zKey = 0; Fts5HashEntry *p; for(p=pHash->aSlot[iHash]; p; p=p->pHashNext){ - if( memcmp(p->zKey, pTerm, nTerm)==0 && p->zKey[nTerm]==0 ) break; + zKey = fts5EntryKey(p); + if( memcmp(zKey, pTerm, nTerm)==0 && zKey[nTerm]==0 ) break; } if( p ){ fts5HashAddPoslistSize(pHash, p); - *ppDoclist = (const u8*)&p->zKey[nTerm+1]; - *pnDoclist = p->nData - (FTS5_HASHENTRYSIZE + nTerm + 1); + *ppDoclist = (const u8*)&zKey[nTerm+1]; + *pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1); }else{ *ppDoclist = 0; *pnDoclist = 0; @@ -187696,11 +191136,12 @@ static void sqlite3Fts5HashScanEntry( ){ Fts5HashEntry *p; if( (p = pHash->pScan) ){ - int nTerm = (int)strlen(p->zKey); + char *zKey = fts5EntryKey(p); + int nTerm = (int)strlen(zKey); fts5HashAddPoslistSize(pHash, p); - *pzTerm = p->zKey; - *ppDoclist = (const u8*)&p->zKey[nTerm+1]; - *pnDoclist = p->nData - (FTS5_HASHENTRYSIZE + nTerm + 1); + *pzTerm = zKey; + *ppDoclist = (const u8*)&zKey[nTerm+1]; + *pnDoclist = p->nData - (sizeof(Fts5HashEntry) + nTerm + 1); }else{ *pzTerm = 0; *ppDoclist = 0; @@ -188339,7 +191780,6 @@ static void fts5CloseReader(Fts5Index *p){ } } - /* ** Retrieve a record from the %_data table. ** @@ -188440,7 +191880,8 @@ static int fts5IndexPrepareStmt( ){ if( p->rc==SQLITE_OK ){ if( zSql ){ - p->rc = sqlite3_prepare_v2(p->pConfig->db, zSql, -1, ppStmt, 0); + p->rc = sqlite3_prepare_v3(p->pConfig->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT, ppStmt, 0); }else{ p->rc = SQLITE_NOMEM; } @@ -188489,7 +191930,8 @@ static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){ if( zSql==0 ){ rc = SQLITE_NOMEM; }else{ - rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &p->pDeleter, 0); + rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT, &p->pDeleter, 0); sqlite3_free(zSql); } if( rc!=SQLITE_OK ){ @@ -189750,7 +193192,7 @@ static void fts5SegIterNext( else if( pLeaf->nn>pLeaf->szLeaf ){ pIter->iPgidxOff = pLeaf->szLeaf + fts5GetVarint32( &pLeaf->p[pLeaf->szLeaf], iOff - ); + ); pIter->iLeafOffset = iOff; pIter->iEndofDoclist = iOff; bNewTerm = 1; @@ -189784,6 +193226,7 @@ static void fts5SegIterNext( */ int nSz; assert( p->rc==SQLITE_OK ); + assert( pIter->iLeafOffset<=pIter->pLeaf->nn ); fts5FastGetVarint32(pIter->pLeaf->p, pIter->iLeafOffset, nSz); pIter->bDel = (nSz & 0x0001); pIter->nPos = nSz>>1; @@ -190589,7 +194032,8 @@ static void fts5MultiIterNext2( ){ assert( pIter->bSkipEmpty ); if( p->rc==SQLITE_OK ){ - do { + *pbNewTerm = 0; + do{ int iFirst = pIter->aFirst[1].iFirst; Fts5SegIter *pSeg = &pIter->aSeg[iFirst]; int bNewTerm = 0; @@ -190602,8 +194046,6 @@ static void fts5MultiIterNext2( fts5MultiIterAdvanced(p, pIter, iFirst, 1); fts5MultiIterSetEof(pIter); *pbNewTerm = 1; - }else{ - *pbNewTerm = 0; } fts5AssertMultiIterSetup(p, pIter); @@ -190778,7 +194220,7 @@ static void fts5ChunkIterate( break; }else{ pgno++; - pData = fts5DataRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno)); + pData = fts5LeafRead(p, FTS5_SEGMENT_ROWID(pSeg->pSeg->iSegid, pgno)); if( pData==0 ) break; pChunk = &pData->p[4]; nChunk = MIN(nRem, pData->szLeaf - 4); @@ -190869,23 +194311,23 @@ static int fts5IndexExtractCol( return p - (*pa); } -static int fts5IndexExtractColset ( +static void fts5IndexExtractColset( + int *pRc, Fts5Colset *pColset, /* Colset to filter on */ const u8 *pPos, int nPos, /* Position list */ Fts5Buffer *pBuf /* Output buffer */ ){ - int rc = SQLITE_OK; - int i; - - fts5BufferZero(pBuf); - for(i=0; inCol; i++){ - const u8 *pSub = pPos; - int nSub = fts5IndexExtractCol(&pSub, nPos, pColset->aiCol[i]); - if( nSub ){ - fts5BufferAppendBlob(&rc, pBuf, nSub, pSub); + if( *pRc==SQLITE_OK ){ + int i; + fts5BufferZero(pBuf); + for(i=0; inCol; i++){ + const u8 *pSub = pPos; + int nSub = fts5IndexExtractCol(&pSub, nPos, pColset->aiCol[i]); + if( nSub ){ + fts5BufferAppendBlob(pRc, pBuf, nSub, pSub); + } } } - return rc; } /* @@ -191009,8 +194451,9 @@ static void fts5IterSetOutputs_Full(Fts5Iter *pIter, Fts5SegIter *pSeg){ pIter->base.nData = fts5IndexExtractCol(&a, pSeg->nPos,pColset->aiCol[0]); pIter->base.pData = a; }else{ + int *pRc = &pIter->pIndex->rc; fts5BufferZero(&pIter->poslist); - fts5IndexExtractColset(pColset, a, pSeg->nPos, &pIter->poslist); + fts5IndexExtractColset(pRc, pColset, a, pSeg->nPos, &pIter->poslist); pIter->base.pData = pIter->poslist.p; pIter->base.nData = pIter->poslist.n; } @@ -191555,9 +194998,6 @@ static void fts5WriteFlushLeaf(Fts5Index *p, Fts5SegWriter *pWriter){ Fts5PageWriter *pPage = &pWriter->writer; i64 iRowid; -static int nCall = 0; -nCall++; - assert( (pPage->pgidx.n==0)==(pWriter->bFirstTermInPage) ); /* Set the szLeaf header field. */ @@ -191906,6 +195346,7 @@ static void fts5IndexMergeLevel( int bOldest; /* True if the output segment is the oldest */ int eDetail = p->pConfig->eDetail; const int flags = FTS5INDEX_QUERY_NOOUTPUT; + int bTermWritten = 0; /* True if current term already output */ assert( iLvlnLevel ); assert( pLvl->nMerge<=pLvl->nSeg ); @@ -191959,18 +195400,22 @@ static void fts5IndexMergeLevel( int nTerm; const u8 *pTerm; - /* Check for key annihilation. */ - if( pSegIter->nPos==0 && (bOldest || pSegIter->bDel==0) ) continue; - pTerm = fts5MultiIterTerm(pIter, &nTerm); if( nTerm!=term.n || memcmp(pTerm, term.p, nTerm) ){ if( pnRem && writer.nLeafWritten>nRem ){ break; } + fts5BufferSet(&p->rc, &term, nTerm, pTerm); + bTermWritten =0; + } + /* Check for key annihilation. */ + if( pSegIter->nPos==0 && (bOldest || pSegIter->bDel==0) ) continue; + + if( p->rc==SQLITE_OK && bTermWritten==0 ){ /* This is a new term. Append a term to the output segment. */ fts5WriteAppendTerm(p, &writer, nTerm, pTerm); - fts5BufferSet(&p->rc, &term, nTerm, pTerm); + bTermWritten = 1; } /* Append the rowid to the output */ @@ -192802,7 +196247,7 @@ static void fts5SetupPrefixIter( if( pData ){ pData->p = (u8*)&pData[1]; pData->nn = pData->szLeaf = doclist.n; - memcpy(pData->p, doclist.p, doclist.n); + if( doclist.n ) memcpy(pData->p, doclist.p, doclist.n); fts5MultiIterNew2(p, pData, bDesc, ppIter); } fts5BufferFree(&doclist); @@ -192841,10 +196286,10 @@ static int sqlite3Fts5IndexBeginWrite(Fts5Index *p, int bDelete, i64 iRowid){ /* ** Commit data to disk. */ -static int sqlite3Fts5IndexSync(Fts5Index *p, int bCommit){ +static int sqlite3Fts5IndexSync(Fts5Index *p){ assert( p->rc==SQLITE_OK ); fts5IndexFlush(p); - if( bCommit ) fts5CloseReader(p); + fts5CloseReader(p); return fts5IndexReturn(p); } @@ -193041,7 +196486,7 @@ static int sqlite3Fts5IndexQuery( if( sqlite3Fts5BufferSize(&p->rc, &buf, nToken+1)==0 ){ int iIdx = 0; /* Index to search */ - memcpy(&buf.p[1], pToken, nToken); + if( nToken ) memcpy(&buf.p[1], pToken, nToken); /* Figure out which index to search and set iIdx accordingly. If this ** is a prefix query for which there is no prefix index, set iIdx to @@ -193090,7 +196535,7 @@ static int sqlite3Fts5IndexQuery( } if( p->rc ){ - sqlite3Fts5IterClose(&pRet->base); + sqlite3Fts5IterClose((Fts5IndexIter*)pRet); pRet = 0; fts5CloseReader(p); } @@ -193540,7 +196985,7 @@ static void fts5IndexIntegrityCheckSegment( ** ignore this b-tree entry. Otherwise, load it into memory. */ if( iIdxLeafpgnoFirst ) continue; iRow = FTS5_SEGMENT_ROWID(pSeg->iSegid, iIdxLeaf); - pLeaf = fts5DataRead(p, iRow); + pLeaf = fts5LeafRead(p, iRow); if( pLeaf==0 ) break; /* Check that the leaf contains at least one term, and that it is equal @@ -194708,6 +198153,7 @@ static void fts5SetUniqueFlag(sqlite3_index_info *pIdxInfo){ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ Fts5Table *pTab = (Fts5Table*)pVTab; Fts5Config *pConfig = pTab->pConfig; + const int nCol = pConfig->nCol; int idxFlags = 0; /* Parameter passed through to xFilter() */ int bHasMatch; int iNext; @@ -194733,24 +198179,34 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ int aColMap[3]; aColMap[0] = -1; - aColMap[1] = pConfig->nCol; - aColMap[2] = pConfig->nCol+1; + aColMap[1] = nCol; + aColMap[2] = nCol+1; /* Set idxFlags flags for all WHERE clause terms that will be used. */ for(i=0; inConstraint; i++){ struct sqlite3_index_constraint *p = &pInfo->aConstraint[i]; - int j; - for(j=0; jiColumn==aColMap[pC->iCol] && p->op & pC->op ){ - if( p->usable ){ + int iCol = p->iColumn; + + if( (p->op==SQLITE_INDEX_CONSTRAINT_MATCH && iCol>=0 && iCol<=nCol) + || (p->op==SQLITE_INDEX_CONSTRAINT_EQ && iCol==nCol) + ){ + /* A MATCH operator or equivalent */ + if( p->usable ){ + idxFlags = (idxFlags & 0xFFFF) | FTS5_BI_MATCH | (iCol << 16); + aConstraint[0].iConsIndex = i; + }else{ + /* As there exists an unusable MATCH constraint this is an + ** unusable plan. Set a prohibitively high cost. */ + pInfo->estimatedCost = 1e50; + return SQLITE_OK; + } + }else{ + int j; + for(j=1; jiCol] && p->op & pC->op && p->usable ){ pC->iConsIndex = i; idxFlags |= pC->fts5op; - }else if( j==0 ){ - /* As there exists an unusable MATCH constraint this is an - ** unusable plan. Set a prohibitively high cost. */ - pInfo->estimatedCost = 1e50; - return SQLITE_OK; } } } @@ -195074,7 +198530,8 @@ static int fts5PrepareStatement( if( zSql==0 ){ rc = SQLITE_NOMEM; }else{ - rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pRet, 0); + rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT, &pRet, 0); if( rc!=SQLITE_OK ){ *pConfig->pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(pConfig->db)); } @@ -195210,7 +198667,8 @@ static int fts5FindRankFunction(Fts5Cursor *pCsr){ char *zSql = sqlite3Fts5Mprintf(&rc, "SELECT %s", zRankArgs); if( zSql ){ sqlite3_stmt *pStmt = 0; - rc = sqlite3_prepare_v2(pConfig->db, zSql, -1, &pStmt, 0); + rc = sqlite3_prepare_v3(pConfig->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT, &pStmt, 0); sqlite3_free(zSql); assert( rc==SQLITE_OK || pCsr->pRankArgStmt==0 ); if( rc==SQLITE_OK ){ @@ -195325,6 +198783,7 @@ static int fts5FilterMethod( sqlite3_value *pRowidEq = 0; /* rowid = ? expression (or NULL) */ sqlite3_value *pRowidLe = 0; /* rowid <= ? expression (or NULL) */ sqlite3_value *pRowidGe = 0; /* rowid >= ? expression (or NULL) */ + int iCol; /* Column on LHS of MATCH operator */ char **pzErrmsg = pConfig->pzErrmsg; UNUSED_PARAM(zUnused); @@ -195355,6 +198814,8 @@ static int fts5FilterMethod( if( BitFlagTest(idxNum, FTS5_BI_ROWID_EQ) ) pRowidEq = apVal[iVal++]; if( BitFlagTest(idxNum, FTS5_BI_ROWID_LE) ) pRowidLe = apVal[iVal++]; if( BitFlagTest(idxNum, FTS5_BI_ROWID_GE) ) pRowidGe = apVal[iVal++]; + iCol = (idxNum>>16); + assert( iCol>=0 && iCol<=pConfig->nCol ); assert( iVal==nVal ); bOrderByRank = ((idxNum & FTS5_BI_ORDER_RANK) ? 1 : 0); pCsr->bDesc = bDesc = ((idxNum & FTS5_BI_ORDER_DESC) ? 1 : 0); @@ -195401,7 +198862,7 @@ static int fts5FilterMethod( rc = fts5SpecialMatch(pTab, pCsr, &zExpr[1]); }else{ char **pzErr = &pTab->base.zErrMsg; - rc = sqlite3Fts5ExprNew(pConfig, zExpr, &pCsr->pExpr, pzErr); + rc = sqlite3Fts5ExprNew(pConfig, iCol, zExpr, &pCsr->pExpr, pzErr); if( rc==SQLITE_OK ){ if( bOrderByRank ){ pCsr->ePlan = FTS5_PLAN_SORTED_MATCH; @@ -195781,7 +199242,7 @@ static int fts5SyncMethod(sqlite3_vtab *pVtab){ fts5CheckTransactionState(pTab, FTS5_SYNC, 0); pTab->pConfig->pzErrmsg = &pTab->base.zErrMsg; fts5TripCursors(pTab); - rc = sqlite3Fts5StorageSync(pTab->pStorage, 1); + rc = sqlite3Fts5StorageSync(pTab->pStorage); pTab->pConfig->pzErrmsg = 0; return rc; } @@ -196592,7 +200053,7 @@ static int fts5SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){ UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ fts5CheckTransactionState(pTab, FTS5_SAVEPOINT, iSavepoint); fts5TripCursors(pTab); - return sqlite3Fts5StorageSync(pTab->pStorage, 0); + return sqlite3Fts5StorageSync(pTab->pStorage); } /* @@ -196605,7 +200066,7 @@ static int fts5ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){ UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ fts5CheckTransactionState(pTab, FTS5_RELEASE, iSavepoint); fts5TripCursors(pTab); - return sqlite3Fts5StorageSync(pTab->pStorage, 0); + return sqlite3Fts5StorageSync(pTab->pStorage); } /* @@ -196795,15 +200256,14 @@ static void fts5ModuleDestroy(void *pCtx){ static void fts5Fts5Func( sqlite3_context *pCtx, /* Function call context */ int nArg, /* Number of args */ - sqlite3_value **apUnused /* Function arguments */ + sqlite3_value **apArg /* Function arguments */ ){ Fts5Global *pGlobal = (Fts5Global*)sqlite3_user_data(pCtx); - char buf[8]; - UNUSED_PARAM2(nArg, apUnused); - assert( nArg==0 ); - assert( sizeof(buf)>=sizeof(pGlobal) ); - memcpy(buf, (void*)&pGlobal, sizeof(pGlobal)); - sqlite3_result_blob(pCtx, buf, sizeof(pGlobal), SQLITE_TRANSIENT); + fts5_api **ppApi; + UNUSED_PARAM(nArg); + assert( nArg==1 ); + ppApi = (fts5_api**)sqlite3_value_pointer(apArg[0], "fts5_api_ptr"); + if( ppApi ) *ppApi = &pGlobal->api; } /* @@ -196816,7 +200276,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34", -1, SQLITE_TRANSIENT); } static int fts5Init(sqlite3 *db){ @@ -196868,7 +200328,7 @@ static int fts5Init(sqlite3 *db){ if( rc==SQLITE_OK ) rc = sqlite3Fts5VocabInit(pGlobal, db); if( rc==SQLITE_OK ){ rc = sqlite3_create_function( - db, "fts5", 0, SQLITE_UTF8, p, fts5Fts5Func, 0, 0 + db, "fts5", 1, SQLITE_UTF8, p, fts5Fts5Func, 0, 0 ); } if( rc==SQLITE_OK ){ @@ -197070,7 +200530,8 @@ static int fts5StorageGetStmt( if( zSql==0 ){ rc = SQLITE_NOMEM; }else{ - rc = sqlite3_prepare_v2(pC->db, zSql, -1, &p->aStmt[eStmt], 0); + rc = sqlite3_prepare_v3(pC->db, zSql, -1, + SQLITE_PREPARE_PERSISTENT, &p->aStmt[eStmt], 0); sqlite3_free(zSql); if( rc!=SQLITE_OK && pzErrMsg ){ *pzErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pC->db)); @@ -197152,7 +200613,7 @@ static void fts5StorageRenameOne( static int sqlite3Fts5StorageRename(Fts5Storage *pStorage, const char *zName){ Fts5Config *pConfig = pStorage->pConfig; - int rc = sqlite3Fts5StorageSync(pStorage, 1); + int rc = sqlite3Fts5StorageSync(pStorage); fts5StorageRenameOne(pConfig, &rc, "data", zName); fts5StorageRenameOne(pConfig, &rc, "idx", zName); @@ -197479,11 +200940,6 @@ static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel, sqlite3_value **ap } } - /* Write the averages record */ - if( rc==SQLITE_OK ){ - rc = fts5StorageSaveTotals(p); - } - return rc; } @@ -197687,11 +201143,6 @@ static int sqlite3Fts5StorageIndexInsert( } sqlite3_free(buf.p); - /* Write the averages record */ - if( rc==SQLITE_OK ){ - rc = fts5StorageSaveTotals(p); - } - return rc; } @@ -198025,13 +201476,18 @@ static int sqlite3Fts5StorageRowCount(Fts5Storage *p, i64 *pnRow){ /* ** Flush any data currently held in-memory to disk. */ -static int sqlite3Fts5StorageSync(Fts5Storage *p, int bCommit){ - if( bCommit && p->bTotalsValid ){ - int rc = fts5StorageSaveTotals(p); +static int sqlite3Fts5StorageSync(Fts5Storage *p){ + int rc = SQLITE_OK; + i64 iLastRowid = sqlite3_last_insert_rowid(p->pConfig->db); + if( p->bTotalsValid ){ + rc = fts5StorageSaveTotals(p); p->bTotalsValid = 0; - if( rc!=SQLITE_OK ) return rc; } - return sqlite3Fts5IndexSync(p->pIndex, bCommit); + if( rc==SQLITE_OK ){ + rc = sqlite3Fts5IndexSync(p->pIndex); + } + sqlite3_set_last_insert_rowid(p->pConfig->db, iLastRowid); + return rc; } static int sqlite3Fts5StorageRollback(Fts5Storage *p){ @@ -200675,3 +204131,304 @@ static int sqlite3Fts5VocabInit(Fts5Global *pGlobal, sqlite3 *db){ #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS5) */ /************** End of fts5.c ************************************************/ +/************** Begin file stmt.c ********************************************/ +/* +** 2017-05-31 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file demonstrates an eponymous virtual table that returns information +** about all prepared statements for the database connection. +** +** Usage example: +** +** .load ./stmt +** .mode line +** .header on +** SELECT * FROM stmt; +*/ +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) +#if !defined(SQLITEINT_H) +/* #include "sqlite3ext.h" */ +#endif +SQLITE_EXTENSION_INIT1 +/* #include */ +/* #include */ + +#ifndef SQLITE_OMIT_VIRTUALTABLE + +/* stmt_vtab is a subclass of sqlite3_vtab which will +** serve as the underlying representation of a stmt virtual table +*/ +typedef struct stmt_vtab stmt_vtab; +struct stmt_vtab { + sqlite3_vtab base; /* Base class - must be first */ + sqlite3 *db; /* Database connection for this stmt vtab */ +}; + +/* stmt_cursor is a subclass of sqlite3_vtab_cursor which will +** serve as the underlying representation of a cursor that scans +** over rows of the result +*/ +typedef struct stmt_cursor stmt_cursor; +struct stmt_cursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + sqlite3 *db; /* Database connection for this cursor */ + sqlite3_stmt *pStmt; /* Statement cursor is currently pointing at */ + sqlite3_int64 iRowid; /* The rowid */ +}; + +/* +** The stmtConnect() method is invoked to create a new +** stmt_vtab that describes the stmt virtual table. +** +** Think of this routine as the constructor for stmt_vtab objects. +** +** All this routine needs to do is: +** +** (1) Allocate the stmt_vtab object and initialize all fields. +** +** (2) Tell SQLite (via the sqlite3_declare_vtab() interface) what the +** result set of queries against stmt will look like. +*/ +static int stmtConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + stmt_vtab *pNew; + int rc; + +/* Column numbers */ +#define STMT_COLUMN_SQL 0 /* SQL for the statement */ +#define STMT_COLUMN_NCOL 1 /* Number of result columns */ +#define STMT_COLUMN_RO 2 /* True if read-only */ +#define STMT_COLUMN_BUSY 3 /* True if currently busy */ +#define STMT_COLUMN_NSCAN 4 /* SQLITE_STMTSTATUS_FULLSCAN_STEP */ +#define STMT_COLUMN_NSORT 5 /* SQLITE_STMTSTATUS_SORT */ +#define STMT_COLUMN_NAIDX 6 /* SQLITE_STMTSTATUS_AUTOINDEX */ +#define STMT_COLUMN_NSTEP 7 /* SQLITE_STMTSTATUS_VM_STEP */ +#define STMT_COLUMN_REPREP 8 /* SQLITE_STMTSTATUS_REPREPARE */ +#define STMT_COLUMN_RUN 9 /* SQLITE_STMTSTATUS_RUN */ +#define STMT_COLUMN_MEM 10 /* SQLITE_STMTSTATUS_MEMUSED */ + + + rc = sqlite3_declare_vtab(db, + "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep," + "reprep,run,mem)"); + if( rc==SQLITE_OK ){ + pNew = sqlite3_malloc( sizeof(*pNew) ); + *ppVtab = (sqlite3_vtab*)pNew; + if( pNew==0 ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(*pNew)); + pNew->db = db; + } + return rc; +} + +/* +** This method is the destructor for stmt_cursor objects. +*/ +static int stmtDisconnect(sqlite3_vtab *pVtab){ + sqlite3_free(pVtab); + return SQLITE_OK; +} + +/* +** Constructor for a new stmt_cursor object. +*/ +static int stmtOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + stmt_cursor *pCur; + pCur = sqlite3_malloc( sizeof(*pCur) ); + if( pCur==0 ) return SQLITE_NOMEM; + memset(pCur, 0, sizeof(*pCur)); + pCur->db = ((stmt_vtab*)p)->db; + *ppCursor = &pCur->base; + return SQLITE_OK; +} + +/* +** Destructor for a stmt_cursor. +*/ +static int stmtClose(sqlite3_vtab_cursor *cur){ + sqlite3_free(cur); + return SQLITE_OK; +} + + +/* +** Advance a stmt_cursor to its next row of output. +*/ +static int stmtNext(sqlite3_vtab_cursor *cur){ + stmt_cursor *pCur = (stmt_cursor*)cur; + pCur->iRowid++; + pCur->pStmt = sqlite3_next_stmt(pCur->db, pCur->pStmt); + return SQLITE_OK; +} + +/* +** Return values of columns for the row at which the stmt_cursor +** is currently pointing. +*/ +static int stmtColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + stmt_cursor *pCur = (stmt_cursor*)cur; + switch( i ){ + case STMT_COLUMN_SQL: { + sqlite3_result_text(ctx, sqlite3_sql(pCur->pStmt), -1, SQLITE_TRANSIENT); + break; + } + case STMT_COLUMN_NCOL: { + sqlite3_result_int(ctx, sqlite3_column_count(pCur->pStmt)); + break; + } + case STMT_COLUMN_RO: { + sqlite3_result_int(ctx, sqlite3_stmt_readonly(pCur->pStmt)); + break; + } + case STMT_COLUMN_BUSY: { + sqlite3_result_int(ctx, sqlite3_stmt_busy(pCur->pStmt)); + break; + } + case STMT_COLUMN_MEM: { + i = SQLITE_STMTSTATUS_MEMUSED + + STMT_COLUMN_NSCAN - SQLITE_STMTSTATUS_FULLSCAN_STEP; + /* Fall thru */ + } + case STMT_COLUMN_NSCAN: + case STMT_COLUMN_NSORT: + case STMT_COLUMN_NAIDX: + case STMT_COLUMN_NSTEP: + case STMT_COLUMN_REPREP: + case STMT_COLUMN_RUN: { + sqlite3_result_int(ctx, sqlite3_stmt_status(pCur->pStmt, + i-STMT_COLUMN_NSCAN+SQLITE_STMTSTATUS_FULLSCAN_STEP, 0)); + break; + } + } + return SQLITE_OK; +} + +/* +** Return the rowid for the current row. In this implementation, the +** rowid is the same as the output value. +*/ +static int stmtRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + stmt_cursor *pCur = (stmt_cursor*)cur; + *pRowid = pCur->iRowid; + return SQLITE_OK; +} + +/* +** Return TRUE if the cursor has been moved off of the last +** row of output. +*/ +static int stmtEof(sqlite3_vtab_cursor *cur){ + stmt_cursor *pCur = (stmt_cursor*)cur; + return pCur->pStmt==0; +} + +/* +** This method is called to "rewind" the stmt_cursor object back +** to the first row of output. This method is always called at least +** once prior to any call to stmtColumn() or stmtRowid() or +** stmtEof(). +*/ +static int stmtFilter( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + stmt_cursor *pCur = (stmt_cursor *)pVtabCursor; + pCur->pStmt = 0; + pCur->iRowid = 0; + return stmtNext(pVtabCursor); +} + +/* +** SQLite will invoke this method one or more times while planning a query +** that uses the stmt virtual table. This routine needs to create +** a query plan for each invocation and compute an estimated cost for that +** plan. +*/ +static int stmtBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + pIdxInfo->estimatedCost = (double)500; + pIdxInfo->estimatedRows = 500; + return SQLITE_OK; +} + +/* +** This following structure defines all the methods for the +** stmt virtual table. +*/ +static sqlite3_module stmtModule = { + 0, /* iVersion */ + 0, /* xCreate */ + stmtConnect, /* xConnect */ + stmtBestIndex, /* xBestIndex */ + stmtDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + stmtOpen, /* xOpen - open a cursor */ + stmtClose, /* xClose - close a cursor */ + stmtFilter, /* xFilter - configure scan constraints */ + stmtNext, /* xNext - advance a cursor */ + stmtEof, /* xEof - check for end of scan */ + stmtColumn, /* xColumn - read data */ + stmtRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ +}; + +#endif /* SQLITE_OMIT_VIRTUALTABLE */ + +SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3 *db){ + int rc = SQLITE_OK; +#ifndef SQLITE_OMIT_VIRTUALTABLE + rc = sqlite3_create_module(db, "sqlite_stmt", &stmtModule, 0); +#endif + return rc; +} + +#ifndef SQLITE_CORE +#ifdef _WIN32 +__declspec(dllexport) +#endif +SQLITE_API int sqlite3_stmt_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + int rc = SQLITE_OK; + SQLITE_EXTENSION_INIT2(pApi); +#ifndef SQLITE_OMIT_VIRTUALTABLE + rc = sqlite3StmtVtabInit(db); +#endif + return rc; +} +#endif /* SQLITE_CORE */ +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ + +/************** End of stmt.c ************************************************/ diff --git a/src/3rdparty/sqlite3/sqlite3.h b/src/3rdparty/sqlite3/sqlite3.h index 33910e068..41ccc2198 100644 --- a/src/3rdparty/sqlite3/sqlite3.h +++ b/src/3rdparty/sqlite3/sqlite3.h @@ -1,5 +1,5 @@ /* -** 2001 September 15 +** 2001-09-15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -114,16 +114,16 @@ extern "C" { ** system. ^The SQLITE_SOURCE_ID macro evaluates to ** a string which identifies a particular check-in of SQLite ** within its configuration management system. ^The SQLITE_SOURCE_ID -** string contains the date and time of the check-in (UTC) and an SHA1 -** hash of the entire source tree. +** string contains the date and time of the check-in (UTC) and a SHA1 +** or SHA3-256 hash of the entire source tree. ** ** See also: [sqlite3_libversion()], ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.16.1" -#define SQLITE_VERSION_NUMBER 3016001 -#define SQLITE_SOURCE_ID "2017-01-03 18:27:03 979f04392853b8053817a3eea2fc679947b437fd" +#define SQLITE_VERSION "3.20.1" +#define SQLITE_VERSION_NUMBER 3020001 +#define SQLITE_SOURCE_ID "2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -259,7 +259,11 @@ typedef struct sqlite3 sqlite3; */ #ifdef SQLITE_INT64_TYPE typedef SQLITE_INT64_TYPE sqlite_int64; - typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; +# ifdef SQLITE_UINT64_TYPE + typedef SQLITE_UINT64_TYPE sqlite_uint64; +# else + typedef unsigned SQLITE_INT64_TYPE sqlite_uint64; +# endif #elif defined(_MSC_VER) || defined(__BORLANDC__) typedef __int64 sqlite_int64; typedef unsigned __int64 sqlite_uint64; @@ -413,7 +417,7 @@ SQLITE_API int sqlite3_exec( */ #define SQLITE_OK 0 /* Successful result */ /* beginning-of-error-codes */ -#define SQLITE_ERROR 1 /* SQL error or missing database */ +#define SQLITE_ERROR 1 /* Generic error */ #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */ #define SQLITE_PERM 3 /* Access permission denied */ #define SQLITE_ABORT 4 /* Callback routine requested an abort */ @@ -428,7 +432,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_FULL 13 /* Insertion failed because database is full */ #define SQLITE_CANTOPEN 14 /* Unable to open the database file */ #define SQLITE_PROTOCOL 15 /* Database lock protocol error */ -#define SQLITE_EMPTY 16 /* Database is empty */ +#define SQLITE_EMPTY 16 /* Not used */ #define SQLITE_SCHEMA 17 /* The database schema changed */ #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */ #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */ @@ -436,7 +440,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_MISUSE 21 /* Library used incorrectly */ #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */ #define SQLITE_AUTH 23 /* Authorization denied */ -#define SQLITE_FORMAT 24 /* Auxiliary database format error */ +#define SQLITE_FORMAT 24 /* Not used */ #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */ #define SQLITE_NOTADB 26 /* File opened that is not a database file */ #define SQLITE_NOTICE 27 /* Notifications from sqlite3_log() */ @@ -572,7 +576,7 @@ SQLITE_API int sqlite3_exec( ** file that were written at the application level might have changed ** and that adjacent bytes, even bytes within the same sector are ** guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN -** flag indicate that a file cannot be deleted when open. The +** flag indicates that a file cannot be deleted when open. The ** SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on ** read-only media and cannot be changed even by processes with ** elevated privileges. @@ -722,6 +726,9 @@ struct sqlite3_file { **
    • [SQLITE_IOCAP_ATOMIC64K] **
    • [SQLITE_IOCAP_SAFE_APPEND] **
    • [SQLITE_IOCAP_SEQUENTIAL] +**
    • [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN] +**
    • [SQLITE_IOCAP_POWERSAFE_OVERWRITE] +**
    • [SQLITE_IOCAP_IMMUTABLE] **
    ** ** The SQLITE_IOCAP_ATOMIC property means that all writes of @@ -850,7 +857,7 @@ struct sqlite3_io_methods { ** opcode allows these two values (10 retries and 25 milliseconds of delay) ** to be adjusted. The values are changed for all database connections ** within the same process. The argument is a pointer to an array of two -** integers where the first integer i the new retry count and the second +** integers where the first integer is the new retry count and the second ** integer is the delay. If either integer is negative, then the setting ** is not changed but instead the prior value of that setting is written ** into the array entry, allowing the current retry settings to be @@ -2000,6 +2007,17 @@ struct sqlite3_mem_methods { ** have been disabled - 0 if they are not disabled, 1 if they are. ** ** +**
    SQLITE_DBCONFIG_ENABLE_QPSG
    +**
    ^(The SQLITE_DBCONFIG_ENABLE_QPSG option activates or deactivates +** the [query planner stability guarantee] (QPSG). When the QPSG is active, +** a single SQL query statement will always use the same algorithm regardless +** of values of [bound parameters].)^ The QPSG disables some query optimizations +** that look at the values of bound parameters, which can make some queries +** slower. But the QPSG has the advantage of more predictable behavior. With +** the QPSG active, SQLite will always use the same query plan in the field as +** was used during testing in the lab. +**
    +** ** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -2009,6 +2027,7 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER 1004 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ #define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ +#define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ /* @@ -2033,20 +2052,30 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); ** the table has a column of type [INTEGER PRIMARY KEY] then that column ** is another alias for the rowid. ** -** ^The sqlite3_last_insert_rowid(D) interface returns the [rowid] of the -** most recent successful [INSERT] into a rowid table or [virtual table] -** on database connection D. -** ^Inserts into [WITHOUT ROWID] tables are not recorded. -** ^If no successful [INSERT]s into rowid tables -** have ever occurred on the database connection D, -** then sqlite3_last_insert_rowid(D) returns zero. +** ^The sqlite3_last_insert_rowid(D) interface usually returns the [rowid] of +** the most recent successful [INSERT] into a rowid table or [virtual table] +** on database connection D. ^Inserts into [WITHOUT ROWID] tables are not +** recorded. ^If no successful [INSERT]s into rowid tables have ever occurred +** on the database connection D, then sqlite3_last_insert_rowid(D) returns +** zero. ** -** ^(If an [INSERT] occurs within a trigger or within a [virtual table] -** method, then this routine will return the [rowid] of the inserted -** row as long as the trigger or virtual table method is running. -** But once the trigger or virtual table method ends, the value returned -** by this routine reverts to what it was before the trigger or virtual -** table method began.)^ +** As well as being set automatically as rows are inserted into database +** tables, the value returned by this function may be set explicitly by +** [sqlite3_set_last_insert_rowid()] +** +** Some virtual table implementations may INSERT rows into rowid tables as +** part of committing a transaction (e.g. to flush data accumulated in memory +** to disk). In this case subsequent calls to this function return the rowid +** associated with these internal INSERT operations, which leads to +** unintuitive results. Virtual table implementations that do write to rowid +** tables in this way can avoid this problem by restoring the original +** rowid value using [sqlite3_set_last_insert_rowid()] before returning +** control to the user. +** +** ^(If an [INSERT] occurs within a trigger then this routine will +** return the [rowid] of the inserted row as long as the trigger is +** running. Once the trigger program ends, the value returned +** by this routine reverts to what it was before the trigger was fired.)^ ** ** ^An [INSERT] that fails due to a constraint violation is not a ** successful [INSERT] and does not change the value returned by this @@ -2073,6 +2102,16 @@ SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff); */ SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); +/* +** CAPI3REF: Set the Last Insert Rowid value. +** METHOD: sqlite3 +** +** The sqlite3_set_last_insert_rowid(D, R) method allows the application to +** set the value returned by calling sqlite3_last_insert_rowid(D) to R +** without inserting a row into the database. +*/ +SQLITE_API void sqlite3_set_last_insert_rowid(sqlite3*,sqlite3_int64); + /* ** CAPI3REF: Count The Number Of Rows Modified ** METHOD: sqlite3 @@ -2184,9 +2223,6 @@ SQLITE_API int sqlite3_total_changes(sqlite3*); ** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. -** -** If the database connection closes while [sqlite3_interrupt()] -** is running then bad things will likely happen. */ SQLITE_API void sqlite3_interrupt(sqlite3*); @@ -2649,12 +2685,14 @@ SQLITE_API void sqlite3_randomness(int N, void *P); /* ** CAPI3REF: Compile-Time Authorization Callbacks ** METHOD: sqlite3 +** KEYWORDS: {authorizer callback} ** ** ^This routine registers an authorizer callback with a particular ** [database connection], supplied in the first argument. ** ^The authorizer callback is invoked as SQL statements are being compiled ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()], -** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. ^At various +** [sqlite3_prepare_v3()], [sqlite3_prepare16()], [sqlite3_prepare16_v2()], +** and [sqlite3_prepare16_v3()]. ^At various ** points during the compilation process, as logic is being created ** to perform various actions, the authorizer callback is invoked to ** see if those actions are allowed. ^The authorizer callback should @@ -2676,8 +2714,10 @@ SQLITE_API void sqlite3_randomness(int N, void *P); ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter ** to the callback is an integer [SQLITE_COPY | action code] that specifies ** the particular action to be authorized. ^The third through sixth parameters -** to the callback are zero-terminated strings that contain additional -** details about the action to be authorized. +** to the callback are either NULL pointers or zero-terminated strings +** that contain additional details about the action to be authorized. +** Applications must always be prepared to encounter a NULL pointer in any +** of the third through the sixth parameters of the authorization callback. ** ** ^If the action code is [SQLITE_READ] ** and the callback returns [SQLITE_IGNORE] then the @@ -2686,6 +2726,10 @@ SQLITE_API void sqlite3_randomness(int N, void *P); ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE] ** return can be used to deny an untrusted user access to individual ** columns of a table. +** ^When a table is referenced by a [SELECT] but no column values are +** extracted from that table (for example in a query like +** "SELECT count(*) FROM tab") then the [SQLITE_READ] authorizer callback +** is invoked once for that table with a column name that is an empty string. ** ^If the action code is [SQLITE_DELETE] and the callback returns ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the ** [truncate optimization] is disabled and all rows are deleted individually. @@ -3397,9 +3441,9 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ** [[SQLITE_LIMIT_VDBE_OP]] ^(
    SQLITE_LIMIT_VDBE_OP
    **
    The maximum number of instructions in a virtual machine program -** used to implement an SQL statement. This limit is not currently -** enforced, though that might be added in some future release of -** SQLite.
    )^ +** used to implement an SQL statement. If [sqlite3_prepare_v2()] or +** the equivalent tries to allocate space for more than this many opcodes +** in a single prepared statement, an SQLITE_NOMEM error is returned.)^ ** ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(
    SQLITE_LIMIT_FUNCTION_ARG
    **
    The maximum number of arguments on a function.
    )^ @@ -3437,23 +3481,59 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); #define SQLITE_LIMIT_TRIGGER_DEPTH 10 #define SQLITE_LIMIT_WORKER_THREADS 11 +/* +** CAPI3REF: Prepare Flags +** +** These constants define various flags that can be passed into +** "prepFlags" parameter of the [sqlite3_prepare_v3()] and +** [sqlite3_prepare16_v3()] interfaces. +** +** New flags may be added in future releases of SQLite. +** +**
    +** [[SQLITE_PREPARE_PERSISTENT]] ^(
    SQLITE_PREPARE_PERSISTENT
    +**
    The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner +** that the prepared statement will be retained for a long time and +** probably reused many times.)^ ^Without this flag, [sqlite3_prepare_v3()] +** and [sqlite3_prepare16_v3()] assume that the prepared statement will +** be used just once or at most a few times and then destroyed using +** [sqlite3_finalize()] relatively soon. The current implementation acts +** on this hint by avoiding the use of [lookaside memory] so as not to +** deplete the limited store of lookaside memory. Future versions of +** SQLite may act on this hint differently. +**
    +*/ +#define SQLITE_PREPARE_PERSISTENT 0x01 + /* ** CAPI3REF: Compiling An SQL Statement ** KEYWORDS: {SQL statement compiler} ** METHOD: sqlite3 ** CONSTRUCTOR: sqlite3_stmt ** -** To execute an SQL query, it must first be compiled into a byte-code -** program using one of these routines. +** To execute an SQL statement, it must first be compiled into a byte-code +** program using one of these routines. Or, in other words, these routines +** are constructors for the [prepared statement] object. +** +** The preferred routine to use is [sqlite3_prepare_v2()]. The +** [sqlite3_prepare()] interface is legacy and should be avoided. +** [sqlite3_prepare_v3()] has an extra "prepFlags" option that is used +** for special purposes. +** +** The use of the UTF-8 interfaces is preferred, as SQLite currently +** does all parsing using UTF-8. The UTF-16 interfaces are provided +** as a convenience. The UTF-16 interfaces work by converting the +** input text into UTF-8, then invoking the corresponding UTF-8 interface. ** ** The first argument, "db", is a [database connection] obtained from a ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or ** [sqlite3_open16()]. The database connection must not have been closed. ** ** The second argument, "zSql", is the statement to be compiled, encoded -** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2() -** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2() -** use UTF-16. +** as either UTF-8 or UTF-16. The sqlite3_prepare(), sqlite3_prepare_v2(), +** and sqlite3_prepare_v3() +** interfaces use UTF-8, and sqlite3_prepare16(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() use UTF-16. ** ** ^If the nByte argument is negative, then zSql is read up to the ** first zero terminator. ^If nByte is positive, then it is the @@ -3480,10 +3560,11 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK]; ** otherwise an [error code] is returned. ** -** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are -** recommended for all new programs. The two older interfaces are retained -** for backwards compatibility, but their use is discouraged. -** ^In the "v2" interfaces, the prepared statement +** The sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), +** and sqlite3_prepare16_v3() interfaces are recommended for all new programs. +** The older interfaces (sqlite3_prepare() and sqlite3_prepare16()) +** are retained for backwards compatibility, but their use is discouraged. +** ^In the "vX" interfaces, the prepared statement ** that is returned (the [sqlite3_stmt] object) contains a copy of the ** original SQL text. This causes the [sqlite3_step()] interface to ** behave differently in three ways: @@ -3516,6 +3597,12 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. **
  • +** +**

    ^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having +** the extra prepFlags parameter, which is a bit array consisting of zero or +** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The +** sqlite3_prepare_v2() interface works exactly the same as +** sqlite3_prepare_v3() with a zero prepFlags parameter. ** */ SQLITE_API int sqlite3_prepare( @@ -3532,6 +3619,14 @@ SQLITE_API int sqlite3_prepare_v2( sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const char **pzTail /* OUT: Pointer to unused portion of zSql */ ); +SQLITE_API int sqlite3_prepare_v3( + sqlite3 *db, /* Database handle */ + const char *zSql, /* SQL statement, UTF-8 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const char **pzTail /* OUT: Pointer to unused portion of zSql */ +); SQLITE_API int sqlite3_prepare16( sqlite3 *db, /* Database handle */ const void *zSql, /* SQL statement, UTF-16 encoded */ @@ -3546,6 +3641,14 @@ SQLITE_API int sqlite3_prepare16_v2( sqlite3_stmt **ppStmt, /* OUT: Statement handle */ const void **pzTail /* OUT: Pointer to unused portion of zSql */ ); +SQLITE_API int sqlite3_prepare16_v3( + sqlite3 *db, /* Database handle */ + const void *zSql, /* SQL statement, UTF-16 encoded */ + int nByte, /* Maximum length of zSql in bytes. */ + unsigned int prepFlags, /* Zero or more SQLITE_PREPARE_ flags */ + sqlite3_stmt **ppStmt, /* OUT: Statement handle */ + const void **pzTail /* OUT: Pointer to unused portion of zSql */ +); /* ** CAPI3REF: Retrieving Statement SQL @@ -3553,7 +3656,8 @@ SQLITE_API int sqlite3_prepare16_v2( ** ** ^The sqlite3_sql(P) interface returns a pointer to a copy of the UTF-8 ** SQL text used to create [prepared statement] P if P was -** created by either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()]. +** created by [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. ** ^The sqlite3_expanded_sql(P) interface returns a pointer to a UTF-8 ** string containing the SQL text of prepared statement P with ** [bound parameters] expanded. @@ -3677,7 +3781,7 @@ SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*); ** The [sqlite3_value_blob | sqlite3_value_type()] family of ** interfaces require protected sqlite3_value objects. */ -typedef struct Mem sqlite3_value; +typedef struct sqlite3_value sqlite3_value; /* ** CAPI3REF: SQL Function Context Object @@ -3779,6 +3883,15 @@ typedef struct sqlite3_context sqlite3_context; ** [sqlite3_blob_open | incremental BLOB I/O] routines. ** ^A negative value for the zeroblob results in a zero-length BLOB. ** +** ^The sqlite3_bind_pointer(S,I,P,T,D) routine causes the I-th parameter in +** [prepared statement] S to have an SQL value of NULL, but to also be +** associated with the pointer P of type T. ^D is either a NULL pointer or +** a pointer to a destructor function for P. ^SQLite will invoke the +** destructor D with a single argument of P when it is finished using +** P. The T parameter should be a static string, preferably a string +** literal. The sqlite3_bind_pointer() routine is part of the +** [pointer passing interface] added for SQLite 3.20.0. +** ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer ** for the [prepared statement] or with a prepared statement for which ** [sqlite3_step()] has been called more recently than [sqlite3_reset()], @@ -3812,6 +3925,7 @@ SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*) SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64, void(*)(void*), unsigned char encoding); SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); +SQLITE_API int sqlite3_bind_pointer(sqlite3_stmt*, int, void*, const char*,void(*)(void*)); SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); SQLITE_API int sqlite3_bind_zeroblob64(sqlite3_stmt*, int, sqlite3_uint64); @@ -3855,8 +3969,8 @@ SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*); ** ^If the value N is out of range or if the N-th parameter is ** nameless, then NULL is returned. ^The returned string is ** always in UTF-8 encoding even if the named parameter was -** originally specified as UTF-16 in [sqlite3_prepare16()] or -** [sqlite3_prepare16_v2()]. +** originally specified as UTF-16 in [sqlite3_prepare16()], +** [sqlite3_prepare16_v2()], or [sqlite3_prepare16_v3()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and @@ -3873,7 +3987,8 @@ SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int); ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero ** is returned if no matching parameter is found. ^The parameter ** name must be given in UTF-8 even if the original statement -** was prepared from UTF-16 text using [sqlite3_prepare16_v2()]. +** was prepared from UTF-16 text using [sqlite3_prepare16_v2()] or +** [sqlite3_prepare16_v3()]. ** ** See also: [sqlite3_bind_blob|sqlite3_bind()], ** [sqlite3_bind_parameter_count()], and @@ -3896,8 +4011,12 @@ SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*); ** METHOD: sqlite3_stmt ** ** ^Return the number of columns in the result set returned by the -** [prepared statement]. ^This routine returns 0 if pStmt is an SQL -** statement that does not return data (for example an [UPDATE]). +** [prepared statement]. ^If this routine returns 0, that means the +** [prepared statement] returns no data (for example an [UPDATE]). +** ^However, just because this routine returns a positive number does not +** mean that one or more rows of data will be returned. ^A SELECT statement +** will always have a positive sqlite3_column_count() but depending on the +** WHERE clause constraints and the table content, it might return no rows. ** ** See also: [sqlite3_data_count()] */ @@ -4023,16 +4142,18 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** CAPI3REF: Evaluate An SQL Statement ** METHOD: sqlite3_stmt ** -** After a [prepared statement] has been prepared using either -** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy +** After a [prepared statement] has been prepared using any of +** [sqlite3_prepare_v2()], [sqlite3_prepare_v3()], [sqlite3_prepare16_v2()], +** or [sqlite3_prepare16_v3()] or one of the legacy ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function ** must be called one or more times to evaluate the statement. ** ** The details of the behavior of the sqlite3_step() interface depend -** on whether the statement was prepared using the newer "v2" interface -** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy -** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the -** new "v2" interface is recommended for new applications but the legacy +** on whether the statement was prepared using the newer "vX" interfaces +** [sqlite3_prepare_v3()], [sqlite3_prepare_v2()], [sqlite3_prepare16_v3()], +** [sqlite3_prepare16_v2()] or the older legacy +** interfaces [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the +** new "vX" interface is recommended for new applications but the legacy ** interface will continue to be supported. ** ** ^In the legacy interface, the return value will be either [SQLITE_BUSY], @@ -4078,7 +4199,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** other than [SQLITE_ROW] before any subsequent invocation of ** sqlite3_step(). Failure to reset the prepared statement using ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from -** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1], +** sqlite3_step(). But after [version 3.6.23.1] ([dateof:3.6.23.1]), ** sqlite3_step() began ** calling [sqlite3_reset()] automatically in this circumstance rather ** than returning [SQLITE_MISUSE]. This is not considered a compatibility @@ -4093,10 +4214,11 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int); ** specific [error codes] that better describes the error. ** We admit that this is a goofy design. The problem has been fixed ** with the "v2" interface. If you prepare all of your SQL statements -** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead +** using [sqlite3_prepare_v3()] or [sqlite3_prepare_v2()] +** or [sqlite3_prepare16_v2()] or [sqlite3_prepare16_v3()] instead ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces, ** then the more specific [error codes] are returned directly -** by sqlite3_step(). The use of the "v2" interface is recommended. +** by sqlite3_step(). The use of the "vX" interfaces is recommended. */ SQLITE_API int sqlite3_step(sqlite3_stmt*); @@ -4158,6 +4280,28 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** KEYWORDS: {column access functions} ** METHOD: sqlite3_stmt ** +** Summary: +**

    +**
    sqlite3_column_blobBLOB result +**
    sqlite3_column_doubleREAL result +**
    sqlite3_column_int32-bit INTEGER result +**
    sqlite3_column_int6464-bit INTEGER result +**
    sqlite3_column_textUTF-8 TEXT result +**
    sqlite3_column_text16UTF-16 TEXT result +**
    sqlite3_column_valueThe result as an +** [sqlite3_value|unprotected sqlite3_value] object. +**
        +**
    sqlite3_column_bytesSize of a BLOB +** or a UTF-8 TEXT result in bytes +**
    sqlite3_column_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
    sqlite3_column_typeDefault +** datatype of the result +**
    +** +** Details: +** ** ^These routines return information about a single column of the current ** result row of a query. ^In every case the first argument is a pointer ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*] @@ -4179,16 +4323,29 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** are called from a different thread while any of these routines ** are pending, then the results are undefined. ** +** The first six interfaces (_blob, _double, _int, _int64, _text, and _text16) +** each return the value of a result column in a specific data format. If +** the result column is not initially in the requested format (for example, +** if the query returns an integer but the sqlite3_column_text() interface +** is used to extract the value) then an automatic type conversion is performed. +** ** ^The sqlite3_column_type() routine returns the ** [SQLITE_INTEGER | datatype code] for the initial data type ** of the result column. ^The returned value is one of [SQLITE_INTEGER], -** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value -** returned by sqlite3_column_type() is only meaningful if no type -** conversions have occurred as described below. After a type conversion, -** the value returned by sqlite3_column_type() is undefined. Future +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. +** The return value of sqlite3_column_type() can be used to decide which +** of the first six interface should be used to extract the column value. +** The value returned by sqlite3_column_type() is only meaningful if no +** automatic type conversions have occurred for the value in question. +** After a type conversion, the result of calling sqlite3_column_type() +** is undefined, though harmless. Future ** versions of SQLite may change the behavior of sqlite3_column_type() ** following a type conversion. ** +** If the result is a BLOB or a TEXT string, then the sqlite3_column_bytes() +** or sqlite3_column_bytes16() interfaces can be used to determine the size +** of that BLOB or string. +** ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes() ** routine returns the number of bytes in that BLOB or string. ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts @@ -4225,9 +4382,13 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** [sqlite3_column_value()] is used in any other way, including calls ** to routines like [sqlite3_value_int()], [sqlite3_value_text()], ** or [sqlite3_value_bytes()], the behavior is not threadsafe. +** Hence, the sqlite3_column_value() interface +** is normally only useful within the implementation of +** [application-defined SQL functions] or [virtual tables], not within +** top-level application code. ** -** These routines attempt to convert the value where appropriate. ^For -** example, if the internal representation is FLOAT and a text result +** The these routines may attempt to convert the datatype of the result. +** ^For example, if the internal representation is FLOAT and a text result ** is requested, [sqlite3_snprintf()] is used internally to perform the ** conversion automatically. ^(The following table details the conversions ** that are applied: @@ -4299,7 +4460,7 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** ^The pointers returned are valid until a type conversion occurs as ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or ** [sqlite3_finalize()] is called. ^The memory space used to hold strings -** and BLOBs is freed automatically. Do not pass the pointers returned +** and BLOBs is freed automatically. Do not pass the pointers returned ** from [sqlite3_column_blob()], [sqlite3_column_text()], etc. into ** [sqlite3_free()]. ** @@ -4310,15 +4471,15 @@ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt); ** [SQLITE_NOMEM].)^ */ SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol); SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol); -SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol); +SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol); /* ** CAPI3REF: Destroy A Prepared Statement Object @@ -4552,21 +4713,40 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** CAPI3REF: Obtaining SQL Values ** METHOD: sqlite3_value ** -** The C-language implementation of SQL functions and aggregates uses -** this set of interface routines to access the parameter values on -** the function or aggregate. +** Summary: +**
    +**
    sqlite3_value_blobBLOB value +**
    sqlite3_value_doubleREAL value +**
    sqlite3_value_int32-bit INTEGER value +**
    sqlite3_value_int6464-bit INTEGER value +**
    sqlite3_value_pointerPointer value +**
    sqlite3_value_textUTF-8 TEXT value +**
    sqlite3_value_text16UTF-16 TEXT value in +** the native byteorder +**
    sqlite3_value_text16beUTF-16be TEXT value +**
    sqlite3_value_text16leUTF-16le TEXT value +**
        +**
    sqlite3_value_bytesSize of a BLOB +** or a UTF-8 TEXT in bytes +**
    sqlite3_value_bytes16   +** →  Size of UTF-16 +** TEXT in bytes +**
    sqlite3_value_typeDefault +** datatype of the value +**
    sqlite3_value_numeric_type   +** →  Best numeric datatype of the value +**
    ** -** The xFunc (for scalar functions) or xStep (for aggregates) parameters -** to [sqlite3_create_function()] and [sqlite3_create_function16()] -** define callbacks that implement the SQL functions and aggregates. -** The 3rd parameter to these callbacks is an array of pointers to -** [protected sqlite3_value] objects. There is one [sqlite3_value] object for -** each parameter to the SQL function. These routines are used to -** extract values from the [sqlite3_value] objects. +** Details: +** +** These routines extract type, size, and content information from +** [protected sqlite3_value] objects. Protected sqlite3_value objects +** are used to pass parameter information into implementation of +** [application-defined SQL functions] and [virtual tables]. ** ** These routines work only with [protected sqlite3_value] objects. ** Any attempt to use these routines on an [unprotected sqlite3_value] -** object results in undefined behavior. +** is not threadsafe. ** ** ^These routines work just like the corresponding [column access functions] ** except that these routines take a single [protected sqlite3_value] object @@ -4577,6 +4757,24 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces ** extract UTF-16 strings as big-endian and little-endian respectively. ** +** ^If [sqlite3_value] object V was initialized +** using [sqlite3_bind_pointer(S,I,P,X,D)] or [sqlite3_result_pointer(C,P,X,D)] +** and if X and Y are strings that compare equal according to strcmp(X,Y), +** then sqlite3_value_pointer(V,Y) will return the pointer P. ^Otherwise, +** sqlite3_value_pointer(V,Y) returns a NULL. The sqlite3_bind_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** +** ^(The sqlite3_value_type(V) interface returns the +** [SQLITE_INTEGER | datatype code] for the initial datatype of the +** [sqlite3_value] object V. The returned value is one of [SQLITE_INTEGER], +** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL].)^ +** Other interfaces might change the datatype for an sqlite3_value object. +** For example, if the datatype is initially SQLITE_INTEGER and +** sqlite3_value_text(V) is called to extract a text value for that +** integer, then subsequent calls to sqlite3_value_type(V) might return +** SQLITE_TEXT. Whether or not a persistent internal datatype conversion +** occurs is undefined and may change from one release of SQLite to the next. +** ** ^(The sqlite3_value_numeric_type() interface attempts to apply ** numeric affinity to the value. This means that an attempt is ** made to convert the value to an integer or floating point. If @@ -4595,15 +4793,16 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** the SQL function that supplied the [sqlite3_value*] parameters. */ SQLITE_API const void *sqlite3_value_blob(sqlite3_value*); -SQLITE_API int sqlite3_value_bytes(sqlite3_value*); -SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API double sqlite3_value_double(sqlite3_value*); SQLITE_API int sqlite3_value_int(sqlite3_value*); SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*); +SQLITE_API void *sqlite3_value_pointer(sqlite3_value*, const char*); SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*); SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes(sqlite3_value*); +SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); @@ -4616,10 +4815,6 @@ SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); ** information can be used to pass a limited amount of context from ** one SQL function to another. Use the [sqlite3_result_subtype()] ** routine to set the subtype for the return value of an SQL function. -** -** SQLite makes no use of subtype itself. It merely passes the subtype -** from the result of one [application-defined SQL function] into the -** input of another. */ SQLITE_API unsigned int sqlite3_value_subtype(sqlite3_value*); @@ -4727,10 +4922,11 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** the compiled regular expression can be reused on multiple ** invocations of the same function. ** -** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata -** associated by the sqlite3_set_auxdata() function with the Nth argument -** value to the application-defined function. ^If there is no metadata -** associated with the function argument, this sqlite3_get_auxdata() interface +** ^The sqlite3_get_auxdata(C,N) interface returns a pointer to the metadata +** associated by the sqlite3_set_auxdata(C,N,P,X) function with the Nth argument +** value to the application-defined function. ^N is zero for the left-most +** function argument. ^If there is no metadata +** associated with the function argument, the sqlite3_get_auxdata(C,N) interface ** returns a NULL pointer. ** ** ^The sqlite3_set_auxdata(C,N,P,X) interface saves P as metadata for the N-th @@ -4761,6 +4957,10 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*); ** function parameters that are compile-time constants, including literal ** values and [parameters] and expressions composed from the same.)^ ** +** The value of the N parameter to these interfaces should be non-negative. +** Future enhancements may make use of negative N values to define new +** kinds of function caching behavior. +** ** These routines must be called from the same thread in which ** the SQL function is running. */ @@ -4884,7 +5084,7 @@ typedef void (*sqlite3_destructor_type)(void*); ** when it has finished using that result. ** ^If the 4th parameter to the sqlite3_result_text* interfaces ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT -** then SQLite makes a copy of the result into space obtained from +** then SQLite makes a copy of the result into space obtained ** from [sqlite3_malloc()] before it returns. ** ** ^The sqlite3_result_value() interface sets the result of @@ -4897,6 +5097,17 @@ typedef void (*sqlite3_destructor_type)(void*); ** [unprotected sqlite3_value] object is required, so either ** kind of [sqlite3_value] object can be used with this interface. ** +** ^The sqlite3_result_pointer(C,P,T,D) interface sets the result to an +** SQL NULL value, just like [sqlite3_result_null(C)], except that it +** also associates the host-language pointer P or type T with that +** NULL value such that the pointer can be retrieved within an +** [application-defined SQL function] using [sqlite3_value_pointer()]. +** ^If the D parameter is not NULL, then it is a pointer to a destructor +** for the P parameter. ^SQLite invokes D with P as its only argument +** when SQLite is finished with P. The T parameter should be a static +** string and preferably a string literal. The sqlite3_result_pointer() +** routine is part of the [pointer passing interface] added for SQLite 3.20.0. +** ** If these routines are called from within the different thread ** than the one containing the application-defined function that received ** the [sqlite3_context] pointer, the results are undefined. @@ -4920,6 +5131,7 @@ SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(* SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*)); SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*); +SQLITE_API void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*)); SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n); SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context*, sqlite3_uint64 n); @@ -5406,7 +5618,7 @@ SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*); ** ^The update hook is not invoked when [WITHOUT ROWID] tables are modified. ** ** ^In the current implementation, the update hook -** is not invoked when duplication rows are deleted because of an +** is not invoked when conflicting rows are deleted because of an ** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook ** invoked when rows are deleted using the [truncate optimization]. ** The exceptions defined in this paragraph might change in a future @@ -5579,7 +5791,9 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N); ** ^If the column-name parameter to sqlite3_table_column_metadata() is a ** NULL pointer, then this routine simply checks for the existence of the ** table and returns SQLITE_OK if the table exists and SQLITE_ERROR if it -** does not. +** does not. If the table name parameter T in a call to +** sqlite3_table_column_metadata(X,D,T,C,...) is NULL then the result is +** undefined behavior. ** ** ^The column is identified by the second, third and fourth parameters to ** this function. ^(The second parameter is either the name of the database @@ -6188,6 +6402,12 @@ typedef struct sqlite3_blob sqlite3_blob; ** [database connection] error code and message accessible via ** [sqlite3_errcode()] and [sqlite3_errmsg()] and related functions. ** +** A BLOB referenced by sqlite3_blob_open() may be read using the +** [sqlite3_blob_read()] interface and modified by using +** [sqlite3_blob_write()]. The [BLOB handle] can be moved to a +** different row of the same table using the [sqlite3_blob_reopen()] +** interface. However, the column, table, or database of a [BLOB handle] +** cannot be changed after the [BLOB handle] is opened. ** ** ^(If the row that a BLOB handle points to is modified by an ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects @@ -6211,6 +6431,10 @@ typedef struct sqlite3_blob sqlite3_blob; ** ** To avoid a resource leak, every open [BLOB handle] should eventually ** be released by a call to [sqlite3_blob_close()]. +** +** See also: [sqlite3_blob_close()], +** [sqlite3_blob_reopen()], [sqlite3_blob_read()], +** [sqlite3_blob_bytes()], [sqlite3_blob_write()]. */ SQLITE_API int sqlite3_blob_open( sqlite3*, @@ -6226,11 +6450,11 @@ SQLITE_API int sqlite3_blob_open( ** CAPI3REF: Move a BLOB Handle to a New Row ** METHOD: sqlite3_blob ** -** ^This function is used to move an existing blob handle so that it points +** ^This function is used to move an existing [BLOB handle] so that it points ** to a different row of the same database table. ^The new row is identified ** by the rowid value passed as the second argument. Only the row can be ** changed. ^The database, table and column on which the blob handle is open -** remain the same. Moving an existing blob handle to a new row can be +** remain the same. Moving an existing [BLOB handle] to a new row is ** faster than closing the existing handle and opening a new one. ** ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] - @@ -7082,6 +7306,24 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); ** used as a proxy for the total work done by the prepared statement. ** If the number of virtual machine operations exceeds 2147483647 ** then the value returned by this statement status code is undefined. +** +** [[SQLITE_STMTSTATUS_REPREPARE]]
    SQLITE_STMTSTATUS_REPREPARE
    +**
    ^This is the number of times that the prepare statement has been +** automatically regenerated due to schema changes or change to +** [bound parameters] that might affect the query plan. +** +** [[SQLITE_STMTSTATUS_RUN]]
    SQLITE_STMTSTATUS_RUN
    +**
    ^This is the number of times that the prepared statement has +** been run. A single "run" for the purposes of this counter is one +** or more calls to [sqlite3_step()] followed by a call to [sqlite3_reset()]. +** The counter is incremented on the first [sqlite3_step()] call of each +** cycle. +** +** [[SQLITE_STMTSTATUS_MEMUSED]]
    SQLITE_STMTSTATUS_MEMUSED
    +**
    ^This is the approximate number of bytes of heap memory +** used to store the prepared statement. ^This value is not actually +** a counter, and so the resetFlg parameter to sqlite3_stmt_status() +** is ignored when the opcode is SQLITE_STMTSTATUS_MEMUSED. **
    ** */ @@ -7089,6 +7331,9 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg); #define SQLITE_STMTSTATUS_SORT 2 #define SQLITE_STMTSTATUS_AUTOINDEX 3 #define SQLITE_STMTSTATUS_VM_STEP 4 +#define SQLITE_STMTSTATUS_REPREPARE 5 +#define SQLITE_STMTSTATUS_RUN 6 +#define SQLITE_STMTSTATUS_MEMUSED 99 /* ** CAPI3REF: Custom Page Cache Object @@ -8159,7 +8404,7 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** ** ^The [sqlite3_preupdate_hook()] interface registers a callback function ** that is invoked prior to each [INSERT], [UPDATE], and [DELETE] operation -** on a [rowid table]. +** on a database table. ** ^At most one preupdate hook may be registered at a time on a single ** [database connection]; each call to [sqlite3_preupdate_hook()] overrides ** the previous setting. @@ -8168,9 +8413,9 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** ^The third parameter to [sqlite3_preupdate_hook()] is passed through as ** the first parameter to callbacks. ** -** ^The preupdate hook only fires for changes to [rowid tables]; the preupdate -** hook is not invoked for changes to [virtual tables] or [WITHOUT ROWID] -** tables. +** ^The preupdate hook only fires for changes to real database tables; the +** preupdate hook is not invoked for changes to [virtual tables] or to +** system tables like sqlite_master or sqlite_stat1. ** ** ^The second parameter to the preupdate callback is a pointer to ** the [database connection] that registered the preupdate hook. @@ -8184,12 +8429,16 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** databases.)^ ** ^The fifth parameter to the preupdate callback is the name of the ** table that is being modified. -** ^The sixth parameter to the preupdate callback is the initial [rowid] of the -** row being changes for SQLITE_UPDATE and SQLITE_DELETE changes and is -** undefined for SQLITE_INSERT changes. -** ^The seventh parameter to the preupdate callback is the final [rowid] of -** the row being changed for SQLITE_UPDATE and SQLITE_INSERT changes and is -** undefined for SQLITE_DELETE changes. +** +** For an UPDATE or DELETE operation on a [rowid table], the sixth +** parameter passed to the preupdate callback is the initial [rowid] of the +** row being modified or deleted. For an INSERT operation on a rowid table, +** or any operation on a WITHOUT ROWID table, the value of the sixth +** parameter is undefined. For an INSERT or UPDATE on a rowid table the +** seventh parameter is the final rowid value of the row being inserted +** or updated. The value of the seventh parameter passed to the callback +** function is not defined for operations on WITHOUT ROWID tables, or for +** INSERT operations on rowid tables. ** ** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], ** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces @@ -8625,7 +8874,7 @@ typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; ** attached database. It is not an error if database zDb is not attached ** to the database when the session object is created. */ -int sqlite3session_create( +SQLITE_API int sqlite3session_create( sqlite3 *db, /* Database handle */ const char *zDb, /* Name of db (e.g. "main") */ sqlite3_session **ppSession /* OUT: New session object */ @@ -8643,7 +8892,7 @@ int sqlite3session_create( ** are attached is closed. Refer to the documentation for ** [sqlite3session_create()] for details. */ -void sqlite3session_delete(sqlite3_session *pSession); +SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* @@ -8663,7 +8912,7 @@ void sqlite3session_delete(sqlite3_session *pSession); ** The return value indicates the final state of the session object: 0 if ** the session is disabled, or 1 if it is enabled. */ -int sqlite3session_enable(sqlite3_session *pSession, int bEnable); +SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); /* ** CAPI3REF: Set Or Clear the Indirect Change Flag @@ -8692,7 +8941,7 @@ int sqlite3session_enable(sqlite3_session *pSession, int bEnable); ** The return value indicates the final state of the indirect flag: 0 if ** it is clear, or 1 if it is set. */ -int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); +SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); /* ** CAPI3REF: Attach A Table To A Session Object @@ -8722,7 +8971,7 @@ int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect); ** SQLITE_OK is returned if the call completes without error. Or, if an error ** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. */ -int sqlite3session_attach( +SQLITE_API int sqlite3session_attach( sqlite3_session *pSession, /* Session object */ const char *zTab /* Table name */ ); @@ -8736,7 +8985,7 @@ int sqlite3session_attach( ** If xFilter returns 0, changes is not tracked. Note that once a table is ** attached, xFilter will not be called again. */ -void sqlite3session_table_filter( +SQLITE_API void sqlite3session_table_filter( sqlite3_session *pSession, /* Session object */ int(*xFilter)( void *pCtx, /* Copy of third arg to _filter_table() */ @@ -8849,7 +9098,7 @@ void sqlite3session_table_filter( ** another field of the same row is updated while the session is enabled, the ** resulting changeset will contain an UPDATE change that updates both fields. */ -int sqlite3session_changeset( +SQLITE_API int sqlite3session_changeset( sqlite3_session *pSession, /* Session object */ int *pnChangeset, /* OUT: Size of buffer at *ppChangeset */ void **ppChangeset /* OUT: Buffer containing changeset */ @@ -8893,7 +9142,8 @@ int sqlite3session_changeset( ** the from-table, a DELETE record is added to the session object. ** **
  • For each row (primary key) that exists in both tables, but features -** different in each, an UPDATE record is added to the session. +** different non-PK values in each, an UPDATE record is added to the +** session. ** ** ** To clarify, if this function is called and then a changeset constructed @@ -8910,7 +9160,7 @@ int sqlite3session_changeset( ** message. It is the responsibility of the caller to free this buffer using ** sqlite3_free(). */ -int sqlite3session_diff( +SQLITE_API int sqlite3session_diff( sqlite3_session *pSession, const char *zFromDb, const char *zTbl, @@ -8946,7 +9196,7 @@ int sqlite3session_diff( ** a single table are grouped together, tables appear in the order in which ** they were attached to the session object). */ -int sqlite3session_patchset( +SQLITE_API int sqlite3session_patchset( sqlite3_session *pSession, /* Session object */ int *pnPatchset, /* OUT: Size of buffer at *ppChangeset */ void **ppPatchset /* OUT: Buffer containing changeset */ @@ -8967,7 +9217,7 @@ int sqlite3session_patchset( ** guaranteed that a call to sqlite3session_changeset() will return a ** changeset containing zero changes. */ -int sqlite3session_isempty(sqlite3_session *pSession); +SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); /* ** CAPI3REF: Create An Iterator To Traverse A Changeset @@ -9002,7 +9252,7 @@ int sqlite3session_isempty(sqlite3_session *pSession); ** the applies to table X, then one for table Y, and then later on visit ** another change for table X. */ -int sqlite3changeset_start( +SQLITE_API int sqlite3changeset_start( sqlite3_changeset_iter **pp, /* OUT: New changeset iterator handle */ int nChangeset, /* Size of changeset blob in bytes */ void *pChangeset /* Pointer to blob containing changeset */ @@ -9031,7 +9281,7 @@ int sqlite3changeset_start( ** codes include SQLITE_CORRUPT (if the changeset buffer is corrupt) or ** SQLITE_NOMEM. */ -int sqlite3changeset_next(sqlite3_changeset_iter *pIter); +SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Obtain The Current Operation From A Changeset Iterator @@ -9059,7 +9309,7 @@ int sqlite3changeset_next(sqlite3_changeset_iter *pIter); ** SQLite error code is returned. The values of the output variables may not ** be trusted in this case. */ -int sqlite3changeset_op( +SQLITE_API int sqlite3changeset_op( sqlite3_changeset_iter *pIter, /* Iterator object */ const char **pzTab, /* OUT: Pointer to table name */ int *pnCol, /* OUT: Number of columns in table */ @@ -9092,7 +9342,7 @@ int sqlite3changeset_op( ** SQLITE_OK is returned and the output variables populated as described ** above. */ -int sqlite3changeset_pk( +SQLITE_API int sqlite3changeset_pk( sqlite3_changeset_iter *pIter, /* Iterator object */ unsigned char **pabPK, /* OUT: Array of boolean - true for PK cols */ int *pnCol /* OUT: Number of entries in output array */ @@ -9122,7 +9372,7 @@ int sqlite3changeset_pk( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_old( +SQLITE_API int sqlite3changeset_old( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: Old value (or NULL pointer) */ @@ -9155,7 +9405,7 @@ int sqlite3changeset_old( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_new( +SQLITE_API int sqlite3changeset_new( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: New value (or NULL pointer) */ @@ -9182,7 +9432,7 @@ int sqlite3changeset_new( ** If some other error occurs (e.g. an OOM condition), an SQLite error code ** is returned and *ppValue is set to NULL. */ -int sqlite3changeset_conflict( +SQLITE_API int sqlite3changeset_conflict( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int iVal, /* Column number */ sqlite3_value **ppValue /* OUT: Value from conflicting row */ @@ -9198,7 +9448,7 @@ int sqlite3changeset_conflict( ** ** In all other cases this function returns SQLITE_MISUSE. */ -int sqlite3changeset_fk_conflicts( +SQLITE_API int sqlite3changeset_fk_conflicts( sqlite3_changeset_iter *pIter, /* Changeset iterator */ int *pnOut /* OUT: Number of FK violations */ ); @@ -9231,7 +9481,7 @@ int sqlite3changeset_fk_conflicts( ** // An error has occurred ** } */ -int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); +SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Invert A Changeset @@ -9261,7 +9511,7 @@ int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); ** WARNING/TODO: This function currently assumes that the input is a valid ** changeset. If it is not, the results are undefined. */ -int sqlite3changeset_invert( +SQLITE_API int sqlite3changeset_invert( int nIn, const void *pIn, /* Input changeset */ int *pnOut, void **ppOut /* OUT: Inverse of input */ ); @@ -9290,7 +9540,7 @@ int sqlite3changeset_invert( ** ** Refer to the sqlite3_changegroup documentation below for details. */ -int sqlite3changeset_concat( +SQLITE_API int sqlite3changeset_concat( int nA, /* Number of bytes in buffer pA */ void *pA, /* Pointer to buffer containing changeset A */ int nB, /* Number of bytes in buffer pB */ @@ -9340,7 +9590,7 @@ typedef struct sqlite3_changegroup sqlite3_changegroup; ** sqlite3changegroup_output() functions, also available are the streaming ** versions sqlite3changegroup_add_strm() and sqlite3changegroup_output_strm(). */ -int sqlite3changegroup_new(sqlite3_changegroup **pp); +SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); /* ** CAPI3REF: Add A Changeset To A Changegroup @@ -9417,7 +9667,7 @@ int sqlite3changegroup_new(sqlite3_changegroup **pp); ** ** If no error occurs, SQLITE_OK is returned. */ -int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); +SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup @@ -9443,7 +9693,7 @@ int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData); ** responsibility of the caller to eventually free the buffer using a ** call to sqlite3_free(). */ -int sqlite3changegroup_output( +SQLITE_API int sqlite3changegroup_output( sqlite3_changegroup*, int *pnData, /* OUT: Size of output buffer in bytes */ void **ppData /* OUT: Pointer to output buffer */ @@ -9452,7 +9702,7 @@ int sqlite3changegroup_output( /* ** CAPI3REF: Delete A Changegroup Object */ -void sqlite3changegroup_delete(sqlite3_changegroup*); +SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); /* ** CAPI3REF: Apply A Changeset To A Database @@ -9478,7 +9728,7 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); **
      **
    • The table has the same name as the name recorded in the ** changeset, and -**
    • The table has the same number of columns as recorded in the +**
    • The table has at least as many columns as recorded in the ** changeset, and **
    • The table has primary key columns in the same position as ** recorded in the changeset. @@ -9523,7 +9773,11 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** If a row with matching primary key values is found, but one or more of ** the non-primary key fields contains a value different from the original ** row value stored in the changeset, the conflict-handler function is -** invoked with [SQLITE_CHANGESET_DATA] as the second argument. +** invoked with [SQLITE_CHANGESET_DATA] as the second argument. If the +** database table has more columns than are recorded in the changeset, +** only the values of those non-primary key fields are compared against +** the current database contents - any trailing database table columns +** are ignored. ** ** If no row with matching primary key values is found in the database, ** the conflict-handler function is invoked with [SQLITE_CHANGESET_NOTFOUND] @@ -9538,7 +9792,9 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** **
      INSERT Changes
      ** For each INSERT change, an attempt is made to insert the new row into -** the database. +** the database. If the changeset row contains fewer fields than the +** database table, the trailing fields are populated with their default +** values. ** ** If the attempt to insert the row fails because the database already ** contains a row with the same primary key values, the conflict handler @@ -9556,13 +9812,13 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** For each UPDATE change, this function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values -** stored in all non-primary key columns also match the values stored in -** the changeset the row is updated within the target database. +** stored in all modified non-primary key columns also match the values +** stored in the changeset the row is updated within the target database. ** ** If a row with matching primary key values is found, but one or more of -** the non-primary key fields contains a value different from an original -** row value stored in the changeset, the conflict-handler function is -** invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since +** the modified non-primary key fields contains a value different from an +** original row value stored in the changeset, the conflict-handler function +** is invoked with [SQLITE_CHANGESET_DATA] as the second argument. Since ** UPDATE changes only contain values for non-primary key fields that are ** to be modified, only those fields need to match the original values to ** avoid the SQLITE_CHANGESET_DATA conflict-handler callback. @@ -9590,7 +9846,7 @@ void sqlite3changegroup_delete(sqlite3_changegroup*); ** rolled back, restoring the target database to its original state, and an ** SQLite error code returned. */ -int sqlite3changeset_apply( +SQLITE_API int sqlite3changeset_apply( sqlite3 *db, /* Apply change to "main" db of this handle */ int nChangeset, /* Size of changeset in bytes */ void *pChangeset, /* Changeset blob */ @@ -9791,7 +10047,7 @@ int sqlite3changeset_apply( ** parameter set to a value less than or equal to zero. Other than this, ** no guarantees are made as to the size of the chunks of data returned. */ -int sqlite3changeset_apply_strm( +SQLITE_API int sqlite3changeset_apply_strm( sqlite3 *db, /* Apply change to "main" db of this handle */ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ void *pIn, /* First arg for xInput */ @@ -9806,7 +10062,7 @@ int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ); -int sqlite3changeset_concat_strm( +SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, int (*xInputB)(void *pIn, void *pData, int *pnData), @@ -9814,32 +10070,32 @@ int sqlite3changeset_concat_strm( int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changeset_invert_strm( +SQLITE_API int sqlite3changeset_invert_strm( int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changeset_start_strm( +SQLITE_API int sqlite3changeset_start_strm( sqlite3_changeset_iter **pp, int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn ); -int sqlite3session_changeset_strm( +SQLITE_API int sqlite3session_changeset_strm( sqlite3_session *pSession, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3session_patchset_strm( +SQLITE_API int sqlite3session_patchset_strm( sqlite3_session *pSession, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); -int sqlite3changegroup_add_strm(sqlite3_changegroup*, +SQLITE_API int sqlite3changegroup_add_strm(sqlite3_changegroup*, int (*xInput)(void *pIn, void *pData, int *pnData), void *pIn ); -int sqlite3changegroup_output_strm(sqlite3_changegroup*, +SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); From 57cbba81e70c81f1afb714f063c2455c46650fd2 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 5 Oct 2017 02:18:35 +0200 Subject: [PATCH 142/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_fr.ts | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 632c96d83..616c04c15 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -180,6 +180,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 54bc735c2..33bf8fc5f 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + Le serveur %1 est en cours de maintenance. @@ -253,7 +253,7 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + En attente d'autorisation du navigateur. <a href='%1'>Cliquer ici</a> pour recharger le navigateur. @@ -1399,7 +1399,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp List of issues - + Liste des anomalies @@ -1421,17 +1421,17 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Show warnings - + Voir les avertissements Show ignored files - + Voir les fichiers ignorés Copy the issues list to the clipboard. - + Copier la liste des anomalies dans le presse-papier. From 3a1a56c7ad7f93462902da28a3cb7a2678a5518a Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Sep 2017 12:28:12 +0200 Subject: [PATCH 143/166] Excludes: During directory traversal, use QRegularExpression On Mac, this halves the time spent in csync_excluded_traversal when using check_csync_excluded_performance. A similar performance increase is seen on linux. --- src/csync/csync_exclude.cpp | 130 ++++++++++-- src/csync/csync_exclude.h | 14 +- src/csync/csync_private.h | 17 +- src/csync/csync_update.cpp | 4 +- src/libsync/discoveryphase.cpp | 3 + src/libsync/excludedfiles.cpp | 1 + .../csync/csync_tests/check_csync_exclude.cpp | 191 ++++++++++++++++-- 7 files changed, 316 insertions(+), 44 deletions(-) diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index dbc54f2bb..8b5bd4b88 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -39,6 +39,8 @@ #include "common/utility.h" +#include + #ifdef _WIN32 #include #else @@ -234,20 +236,28 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch } blen = strlen(bname); - rc = csync_fnmatch("._sync_*.db*", bname, 0); - if (rc == 0) { - match = CSYNC_FILE_SILENTLY_EXCLUDED; - goto out; - } - rc = csync_fnmatch(".sync_*.db*", bname, 0); - if (rc == 0) { - match = CSYNC_FILE_SILENTLY_EXCLUDED; - goto out; - } - rc = csync_fnmatch(".csync_journal.db*", bname, 0); - if (rc == 0) { - match = CSYNC_FILE_SILENTLY_EXCLUDED; - goto out; + // 9 = strlen(".sync_.db") + if (blen >= 9 && bname[0] == '.') { + rc = csync_fnmatch("._sync_*.db*", bname, 0); + if (rc == 0) { + match = CSYNC_FILE_SILENTLY_EXCLUDED; + goto out; + } + rc = csync_fnmatch(".sync_*.db*", bname, 0); + if (rc == 0) { + match = CSYNC_FILE_SILENTLY_EXCLUDED; + goto out; + } + rc = csync_fnmatch(".csync_journal.db*", bname, 0); + if (rc == 0) { + match = CSYNC_FILE_SILENTLY_EXCLUDED; + goto out; + } + rc = csync_fnmatch(".owncloudsync.log*", bname, 0); + if (rc == 0) { + match = CSYNC_FILE_SILENTLY_EXCLUDED; + goto out; + } } // check the strlen and ignore the file if its name is longer than 254 chars. @@ -303,12 +313,6 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch goto out; } - rc = csync_fnmatch(".owncloudsync.log*", bname, 0); - if (rc == 0) { - match = CSYNC_FILE_SILENTLY_EXCLUDED; - goto out; - } - if (!OCC::Utility::shouldUploadConflictFiles()) { if (OCC::Utility::isConflictFile(bname)) { match = CSYNC_FILE_EXCLUDE_CONFLICT; @@ -415,8 +419,90 @@ static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const ch return match; } -CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype) { - return _csync_excluded_common(excludes, path, filetype, false); +/* Only for bnames (not paths) */ +static QString convertToBnameRegexpSyntax(QString exclude) +{ + QString s = QRegularExpression::escape(exclude).replace("\\*", ".*").replace("\\?", "."); + return s; +} + +void csync_exclude_traversal_prepare(CSYNC *ctx) +{ + ctx->parsed_traversal_excludes.prepare(ctx->excludes); +} + +void csync_s::TraversalExcludes::prepare(c_strlist_t *excludes) +{ + c_strlist_destroy(list_patterns_fnmatch); + list_patterns_fnmatch = nullptr; + + // Start out with regexes that would match nothing + QString exclude_only = "a^"; + QString exclude_and_remove = "a^"; + + size_t exclude_count = excludes ? excludes->count : 0; + for (unsigned int i = 0; i < exclude_count; i++) { + char *exclude = excludes->vector[i]; + QString *builderToUse = & exclude_only; + if (exclude[0] == '\n') continue; // empty line + if (exclude[0] == '\r') continue; // empty line + + /* If an exclude entry contains some fnmatch-ish characters, we use the C-style codepath without QRegularEpression */ + if (strchr(exclude, '/') || strchr(exclude, '[') || strchr(exclude, '{')) { + _csync_exclude_add(&list_patterns_fnmatch, exclude); + continue; + } + + /* Those will attempt to use QRegularExpression */ + if (exclude[0] == ']'){ + exclude++; + builderToUse = &exclude_and_remove; + } + if (builderToUse->size() > 0) { + builderToUse->append("|"); + } + builderToUse->append(convertToBnameRegexpSyntax(exclude)); + } + + QString pattern = "^(" + exclude_only + ")$|^(" + exclude_and_remove + ")$"; + regexp_exclude.setPattern(pattern); + QRegularExpression::PatternOptions patternOptions = QRegularExpression::OptimizeOnFirstUsageOption; + if (OCC::Utility::fsCasePreserving()) + patternOptions |= QRegularExpression::CaseInsensitiveOption; + regexp_exclude.setPatternOptions(patternOptions); + regexp_exclude.optimize(); +} + +CSYNC_EXCLUDE_TYPE csync_excluded_traversal(CSYNC *ctx, const char *path, int filetype) { + CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED; + + /* Check only static patterns and only with the reduced list which is empty usually */ + match = _csync_excluded_common(ctx->parsed_traversal_excludes.list_patterns_fnmatch, path, filetype, false); + if (match != CSYNC_NOT_EXCLUDED) { + return match; + } + + if (ctx->excludes) { + /* Now check with our optimized regexps */ + const char *bname = NULL; + /* split up the path */ + bname = strrchr(path, '/'); + if (bname) { + bname += 1; // don't include the / + } else { + bname = path; + } + QString p = QString::fromUtf8(bname); + auto m = ctx->parsed_traversal_excludes.regexp_exclude.match(p); + if (m.hasMatch()) { + if (!m.captured(1).isEmpty()) { + match = CSYNC_FILE_EXCLUDE_LIST; + } else if (!m.captured(2).isEmpty()) { + match = CSYNC_FILE_EXCLUDE_AND_REMOVE; + } + } + } + return match; } CSYNC_EXCLUDE_TYPE csync_excluded_no_ctx(c_strlist_t *excludes, const char *path, int filetype) { diff --git a/src/csync/csync_exclude.h b/src/csync/csync_exclude.h index 722d27cac..f55e70583 100644 --- a/src/csync/csync_exclude.h +++ b/src/csync/csync_exclude.h @@ -51,6 +51,15 @@ int OCSYNC_EXPORT _csync_exclude_add(c_strlist_t **inList, const char *string); */ int OCSYNC_EXPORT csync_exclude_load(const char *fname, c_strlist_t **list); +/** + * @brief When all list loads and list are done + * + * Used to initialize internal data structures that build upon the loaded excludes. + * + * @param ctx + */ +void OCSYNC_EXPORT csync_exclude_traversal_prepare(CSYNC *ctx); + /** * @brief Check if the given path should be excluded in a traversal situation. * @@ -66,10 +75,11 @@ int OCSYNC_EXPORT csync_exclude_load(const char *fname, c_strlist_t **list); * * @return 2 if excluded and needs cleanup, 1 if excluded, 0 if not. */ -CSYNC_EXCLUDE_TYPE csync_excluded_traversal(c_strlist_t *excludes, const char *path, int filetype); +CSYNC_EXCLUDE_TYPE OCSYNC_EXPORT csync_excluded_traversal(CSYNC *ctx, const char *path, int filetype); /** - * @brief csync_excluded_no_ctx + * @brief Checks all path components if the whole path should be excluded + * * @param excludes * @param path * @param filetype diff --git a/src/csync/csync_private.h b/src/csync/csync_private.h index 09d627b2c..2c29ece70 100644 --- a/src/csync/csync_private.h +++ b/src/csync/csync_private.h @@ -48,6 +48,8 @@ #include "csync_macros.h" +#include + /** * How deep to scan directories. */ @@ -137,10 +139,21 @@ struct OCSYNC_EXPORT csync_s { void *checksum_userdata = nullptr; } callbacks; - c_strlist_t *excludes = nullptr; - + OCC::SyncJournalDb *statedb; + c_strlist_t *excludes = nullptr; /* list of individual patterns collected from all exclude files */ + struct TraversalExcludes { + ~TraversalExcludes() { + c_strlist_destroy(list_patterns_fnmatch); + } + void prepare(c_strlist_t *excludes); + + QRegularExpression regexp_exclude; + c_strlist_t *list_patterns_fnmatch = nullptr; + + } parsed_traversal_excludes; + struct { std::unordered_map folder_renamed_to; // map from->to std::unordered_map folder_renamed_from; // map to->from diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 8f88c324b..9412d5185 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -119,7 +119,7 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f excluded =CSYNC_FILE_EXCLUDE_STAT_FAILED; } else { /* Check if file is excluded */ - excluded = csync_excluded_traversal(ctx->excludes, fs->path, fs->type); + excluded = csync_excluded_traversal(ctx, fs->path, fs->type); } if( excluded == CSYNC_NOT_EXCLUDED ) { @@ -464,7 +464,7 @@ static bool fill_tree_from_db(CSYNC *ctx, const char *uri) /* Check for exclusion from the tree. * Note that this is only a safety net in case the ignore list changes * without a full remote discovery being triggered. */ - CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx->excludes, st->path, st->type); + CSYNC_EXCLUDE_TYPE excluded = csync_excluded_traversal(ctx, st->path, st->type); if (excluded != CSYNC_NOT_EXCLUDED) { qDebug(lcUpdate, "%s excluded (%d)", st->path.constData(), excluded); diff --git a/src/libsync/discoveryphase.cpp b/src/libsync/discoveryphase.cpp index e5283f131..fb4ef6896 100644 --- a/src/libsync/discoveryphase.cpp +++ b/src/libsync/discoveryphase.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -718,6 +719,8 @@ void DiscoveryJob::start() _csync_ctx->callbacks.remote_closedir_hook = remote_vio_closedir_hook; _csync_ctx->callbacks.vio_userdata = this; + csync_exclude_traversal_prepare(_csync_ctx); // Converts the flat exclude list to optimized regexps + csync_set_log_callback(_log_callback); csync_set_log_level(_log_level); _lastUpdateProgressCallbackCall.invalidate(); diff --git a/src/libsync/excludedfiles.cpp b/src/libsync/excludedfiles.cpp index 62c4711ad..728cbb7fd 100644 --- a/src/libsync/excludedfiles.cpp +++ b/src/libsync/excludedfiles.cpp @@ -63,6 +63,7 @@ bool ExcludedFiles::reloadExcludes() if (csync_exclude_load(file.toUtf8(), _excludesPtr) < 0) success = false; } + // The csync_exclude_traversal_prepare is called implicitely at sync start. return success; } diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 3f0180e42..c02b30ff5 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -59,6 +59,8 @@ static int setup_init(void **state) { rc = _csync_exclude_add(&(csync->excludes), "latex/*/*.tex.tmp"); assert_int_equal(rc, 0); + csync_exclude_traversal_prepare(csync); + *state = csync; return 0; } @@ -98,6 +100,10 @@ static void check_csync_exclude_load(void **state) assert_string_equal(csync->excludes->vector[0], "*~"); assert_int_not_equal(csync->excludes->count, 0); + + assert_true(csync->parsed_traversal_excludes.regexp_exclude.pattern().isEmpty()); + csync_exclude_traversal_prepare(csync); /* parse into regular expression */ + assert_false(csync->parsed_traversal_excludes.regexp_exclude.pattern().isEmpty()); } static void check_csync_excluded(void **state) @@ -110,6 +116,9 @@ static void check_csync_excluded(void **state) rc = csync_excluded_no_ctx(csync->excludes, "/", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "A", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "krawel_krawel", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); rc = csync_excluded_no_ctx(csync->excludes, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE); @@ -218,6 +227,16 @@ static void check_csync_excluded(void **state) rc = csync_excluded_no_ctx(csync->excludes, "file_invalid_char<", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_INVALID_CHAR); #endif + + /* ? character */ + _csync_exclude_add( &(csync->excludes), "bond00?" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_no_ctx(csync->excludes, "bond00", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "bond007", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_no_ctx(csync->excludes, "bond0071", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); } static void check_csync_excluded_traversal(void **state) @@ -225,49 +244,188 @@ static void check_csync_excluded_traversal(void **state) CSYNC *csync = (CSYNC*)*state; int rc; - _csync_exclude_add( &(csync->excludes), "/exclude" ); + rc = csync_excluded_traversal(csync, "", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "/", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); - /* Check toplevel dir, the pattern only works for toplevel dir. */ - rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_DIR); + rc = csync_excluded_traversal(csync, "A", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + rc = csync_excluded_traversal(csync, "krawel_krawel", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, ".kde/share/config/kwin.eventsrc", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "mozilla/.directory", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_DIR); + /* + * Test for patterns in subdirs. '.beagle' is defined as a pattern and has + * to be found in top dir as well as in directories underneath. + */ + rc = csync_excluded_traversal(csync, ".apdisk", CSYNC_FTW_TYPE_DIR); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "foo/.apdisk", CSYNC_FTW_TYPE_DIR); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "foo/bar/.apdisk", CSYNC_FTW_TYPE_DIR); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + rc = csync_excluded_traversal(csync, ".java", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + /* csync-journal is ignored in general silently. */ + rc = csync_excluded_traversal(csync, ".csync_journal.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, ".csync_journal.db.ctmp", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "subdir/.csync_journal.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "/two/subdir/.csync_journal.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + + /* also the new form of the database name */ + rc = csync_excluded_traversal(csync, "._sync_5bdd60bdfcfa.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "._sync_5bdd60bdfcfa.db.ctmp", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "._sync_5bdd60bdfcfa.db-shm", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "subdir/._sync_5bdd60bdfcfa.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + + rc = csync_excluded_traversal(csync, ".sync_5bdd60bdfcfa.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, ".sync_5bdd60bdfcfa.db.ctmp", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, ".sync_5bdd60bdfcfa.db-shm", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + rc = csync_excluded_traversal(csync, "subdir/.sync_5bdd60bdfcfa.db", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_SILENTLY_EXCLUDED); + + + /* pattern ]*.directory - ignore and remove */ + rc = csync_excluded_traversal(csync, "my.~directory", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_AND_REMOVE); + + rc = csync_excluded_traversal(csync, "/a_folder/my.~directory", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_AND_REMOVE); + + /* Not excluded because the pattern .netscape/cache requires directory. */ + rc = csync_excluded_traversal(csync, ".netscape/cache", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + /* Not excluded */ + rc = csync_excluded_traversal(csync, "unicode/中文.hé", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + /* excluded */ + rc = csync_excluded_traversal(csync, "unicode/пятницы.txt", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "unicode/中文.💩", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + /* path wildcards */ + rc = csync_excluded_traversal(csync, "foobar/my_manuscript.out", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + rc = csync_excluded_traversal(csync, "latex_tmp/my_manuscript.run.xml", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + rc = csync_excluded_traversal(csync, "word_tmp/my_manuscript.run.xml", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + rc = csync_excluded_traversal(csync, "latex/my_manuscript.tex.tmp", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + rc = csync_excluded_traversal(csync, "latex/songbook/my_manuscript.tex.tmp", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + +#ifdef _WIN32 + rc = csync_excluded_traversal(csync, "file_trailing_space ", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_TRAILING_SPACE); + + rc = csync_excluded_traversal(csync, "file_trailing_dot.", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_INVALID_CHAR); + + rc = csync_excluded_traversal(csync, "AUX", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_INVALID_CHAR); + + rc = csync_excluded_traversal(csync, "file_invalid_char<", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_INVALID_CHAR); +#endif + + + /* From here the actual traversal tests */ + + _csync_exclude_add( &(csync->excludes), "/exclude" ); + csync_exclude_traversal_prepare(csync); + + /* Check toplevel dir, the pattern only works for toplevel dir. */ + rc = csync_excluded_traversal(csync, "/exclude", CSYNC_FTW_TYPE_DIR); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + rc = csync_excluded_traversal(csync, "/foo/exclude", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); /* check for a file called exclude. Must still work */ - rc = csync_excluded_traversal(csync->excludes, "/exclude", CSYNC_FTW_TYPE_FILE); + rc = csync_excluded_traversal(csync, "/exclude", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "/foo/exclude", CSYNC_FTW_TYPE_FILE); + rc = csync_excluded_traversal(csync, "/foo/exclude", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); /* Add an exclude for directories only: excl/ */ _csync_exclude_add( &(csync->excludes), "excl/" ); - rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_DIR); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_traversal(csync, "/excl", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "meep/excl", CSYNC_FTW_TYPE_DIR); + rc = csync_excluded_traversal(csync, "meep/excl", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "meep/excl/file", CSYNC_FTW_TYPE_FILE); + rc = csync_excluded_traversal(csync, "meep/excl/file", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked! - rc = csync_excluded_traversal(csync->excludes, "/excl", CSYNC_FTW_TYPE_FILE); + rc = csync_excluded_traversal(csync, "/excl", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); _csync_exclude_add(&csync->excludes, "/excludepath/withsubdir"); + csync_exclude_traversal_prepare(csync); - rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR); + rc = csync_excluded_traversal(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE); + rc = csync_excluded_traversal(csync, "/excludepath/withsubdir", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); - rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR); + rc = csync_excluded_traversal(csync, "/excludepath/withsubdir2", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); - rc = csync_excluded_traversal(csync->excludes, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR); + rc = csync_excluded_traversal(csync, "/excludepath/withsubdir/foo", CSYNC_FTW_TYPE_DIR); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); // because leading dirs aren't checked! + + /* Check ending of pattern */ + rc = csync_excluded_traversal(csync, "/exclude", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "/excludeX", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "exclude", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + + _csync_exclude_add( &(csync->excludes), "exclude" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_traversal(csync, "exclude", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + + /* ? character */ + _csync_exclude_add( &(csync->excludes), "bond00?" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_traversal(csync, "bond00", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "bond007", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "bond0071", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + } static void check_csync_pathes(void **state) @@ -338,6 +496,7 @@ static void check_csync_is_windows_reserved_word(void **) { assert_true(csync_is_windows_reserved_word("m:")); } +/* QT_ENABLE_REGEXP_JIT=0 to get slower results :-) */ static void check_csync_excluded_performance(void **state) { CSYNC *csync = (CSYNC*)*state; @@ -370,8 +529,8 @@ static void check_csync_excluded_performance(void **state) gettimeofday(&before, 0); for (i = 0; i < N; ++i) { - totalRc += csync_excluded_traversal(csync->excludes, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR); - totalRc += csync_excluded_traversal(csync->excludes, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE); + totalRc += csync_excluded_traversal(csync, "/this/is/quite/a/long/path/with/many/components", CSYNC_FTW_TYPE_DIR); + totalRc += csync_excluded_traversal(csync, "/1/2/3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/29", CSYNC_FTW_TYPE_FILE); } assert_int_equal(totalRc, CSYNC_NOT_EXCLUDED); // mainly to avoid optimization From 99d406072f90617adae3a9b125b71f5faadc374c Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 28 Sep 2017 10:54:58 +0200 Subject: [PATCH 144/166] Excludes: optimize csync_is_windows_reserved_word --- src/csync/csync_exclude.cpp | 47 ++++++++++++------- .../csync/csync_tests/check_csync_exclude.cpp | 16 +++++++ 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 8b5bd4b88..8419f96eb 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -186,18 +186,18 @@ out: // See http://support.microsoft.com/kb/74496 and // https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx // Additionally, we ignore '$Recycle.Bin', see https://github.com/owncloud/client/issues/2955 -static const char* win_reserved_words[] = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", - "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", - "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "CLOCK$", "$Recycle.Bin" }; +static const char *win_reserved_words_3[] = { "CON", "PRN", "AUX", "NUL" }; +static const char *win_reserved_words_4[] = { + "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", + "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" +}; +static const char *win_reserved_words_n[] = { "CLOCK$", "$Recycle.Bin" }; -bool csync_is_windows_reserved_word(const char* filename) { +bool csync_is_windows_reserved_word(const char *filename) +{ + size_t len_filename = strlen(filename); - size_t win_reserve_words_len = sizeof(win_reserved_words) / sizeof(char*); - size_t j; - - for (j = 0; j < win_reserve_words_len; j++) { - int len_reserved_word = strlen(win_reserved_words[j]); - int len_filename = strlen(filename); + // Drive letters if (len_filename == 2 && filename[1] == ':') { if (filename[0] >= 'a' && filename[0] <= 'z') { return true; @@ -206,16 +206,31 @@ bool csync_is_windows_reserved_word(const char* filename) { return true; } } - if (c_strncasecmp(filename, win_reserved_words[j], len_reserved_word) == 0) { - if (len_filename == len_reserved_word) { - return true; + + if (len_filename == 3 || (len_filename > 3 && filename[3] == '.')) { + for (const char *word : win_reserved_words_3) { + if (c_strncasecmp(filename, word, 3) == 0) { + return true; + } } - if ((len_filename > len_reserved_word) && (filename[len_reserved_word] == '.')) { + } + + if (len_filename == 4 || (len_filename > 4 && filename[4] == '.')) { + for (const char *word : win_reserved_words_4) { + if (c_strncasecmp(filename, word, 4) == 0) { + return true; + } + } + } + + for (const char *word : win_reserved_words_n) { + size_t len_word = strlen(word); + if (len_word == len_filename && c_strncasecmp(filename, word, len_word) == 0) { return true; } } - } - return false; + + return false; } static CSYNC_EXCLUDE_TYPE _csync_excluded_common(c_strlist_t *excludes, const char *path, int filetype, bool check_leading_dirs) { diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index c02b30ff5..53391d7eb 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -488,6 +488,22 @@ static void check_csync_is_windows_reserved_word(void **) { assert_false(csync_is_windows_reserved_word("conference")); assert_false(csync_is_windows_reserved_word("conf.erence")); assert_false(csync_is_windows_reserved_word("co")); + + assert_true(csync_is_windows_reserved_word("COM2")); + assert_true(csync_is_windows_reserved_word("com2")); + assert_true(csync_is_windows_reserved_word("COM2.")); + assert_true(csync_is_windows_reserved_word("com2.")); + assert_true(csync_is_windows_reserved_word("COM2.ference")); + assert_false(csync_is_windows_reserved_word("COM2ference")); + assert_false(csync_is_windows_reserved_word("com2ference")); + assert_false(csync_is_windows_reserved_word("com2f.erence")); + assert_false(csync_is_windows_reserved_word("com")); + + assert_true(csync_is_windows_reserved_word("CLOCK$")); + assert_true(csync_is_windows_reserved_word("$Recycle.Bin")); + assert_true(csync_is_windows_reserved_word("ClocK$")); + assert_true(csync_is_windows_reserved_word("$recycle.bin")); + assert_true(csync_is_windows_reserved_word("A:")); assert_true(csync_is_windows_reserved_word("a:")); assert_true(csync_is_windows_reserved_word("z:")); From 43a26eb50a87c48b59d09f39f7e880fc6cc6b04d Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 5 Oct 2017 10:37:50 +0200 Subject: [PATCH 145/166] Excludes: Fix bug with escapes in the regex, add tests --- src/csync/csync_exclude.cpp | 2 +- .../csync/csync_tests/check_csync_exclude.cpp | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/csync/csync_exclude.cpp b/src/csync/csync_exclude.cpp index 8419f96eb..6ba643fc7 100644 --- a/src/csync/csync_exclude.cpp +++ b/src/csync/csync_exclude.cpp @@ -463,7 +463,7 @@ void csync_s::TraversalExcludes::prepare(c_strlist_t *excludes) if (exclude[0] == '\r') continue; // empty line /* If an exclude entry contains some fnmatch-ish characters, we use the C-style codepath without QRegularEpression */ - if (strchr(exclude, '/') || strchr(exclude, '[') || strchr(exclude, '{')) { + if (strchr(exclude, '/') || strchr(exclude, '[') || strchr(exclude, '{') || strchr(exclude, '\\')) { _csync_exclude_add(&list_patterns_fnmatch, exclude); continue; } diff --git a/test/csync/csync_tests/check_csync_exclude.cpp b/test/csync/csync_tests/check_csync_exclude.cpp index 53391d7eb..d7e9f402f 100644 --- a/test/csync/csync_tests/check_csync_exclude.cpp +++ b/test/csync/csync_tests/check_csync_exclude.cpp @@ -237,6 +237,30 @@ static void check_csync_excluded(void **state) assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); rc = csync_excluded_no_ctx(csync->excludes, "bond0071", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + +#ifndef _WIN32 + /* brackets */ + _csync_exclude_add( &(csync->excludes), "a [bc] d" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_no_ctx(csync->excludes, "a d d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "a d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "a b d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_no_ctx(csync->excludes, "a c d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); +#endif + + /* escapes */ + _csync_exclude_add( &(csync->excludes), "\\a \\* \\?" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_no_ctx(csync->excludes, "\\a \\* \\?", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "a b c", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_no_ctx(csync->excludes, "a * ?", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); } static void check_csync_excluded_traversal(void **state) @@ -426,6 +450,29 @@ static void check_csync_excluded_traversal(void **state) rc = csync_excluded_traversal(csync, "bond0071", CSYNC_FTW_TYPE_FILE); assert_int_equal(rc, CSYNC_NOT_EXCLUDED); +#ifndef _WIN32 + /* brackets */ + _csync_exclude_add( &(csync->excludes), "a [bc] d" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_traversal(csync, "a d d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "a d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "a b d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); + rc = csync_excluded_traversal(csync, "a c d", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); +#endif + + /* escapes */ + _csync_exclude_add( &(csync->excludes), "\\a \\* \\?" ); + csync_exclude_traversal_prepare(csync); + rc = csync_excluded_traversal(csync, "\\a \\* \\?", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "a b c", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_NOT_EXCLUDED); + rc = csync_excluded_traversal(csync, "a * ?", CSYNC_FTW_TYPE_FILE); + assert_int_equal(rc, CSYNC_FILE_EXCLUDE_LIST); } static void check_csync_pathes(void **state) From 971f2391cf5da743ecebef7649f2b924520d8b55 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 5 Oct 2017 12:52:50 +0200 Subject: [PATCH 146/166] ChangeLog: More 2.4.0 changes --- ChangeLog | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 146c49bf6..2d8489938 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,8 +10,9 @@ version 2.4.0 (2017-0X-XX) * Sharing: Show warning that links are public * Sharing: Many UI improvements * Sharing: Make "can edit" partially checked sometimes (#5642) -* Wizards: Never propose an existing folder for syncing (#5597) +* Wizard: Never propose an existing folder for syncing (#5597) * Wizard: Don't show last page anymore, go to settings directly (#5726) +* Wizard: Handle url-shortener redirects #5954 * Settings Dialog: Display the user server avatar * Gui: Allow to add multiple sync folder connection of the same folder * Selective Sync: Open sub folder context menu (#5596) @@ -20,13 +21,17 @@ version 2.4.0 (2017-0X-XX) * Excludes: remove .htaccess form list of excluded files * Excludes: Hardcode desktop.ini * Excludes: Allow escaping "#" (#6012) +* Excludes: Use faster matching via QRegularExpression * Sync Issues: More functional error view including filters and conflicts (#5516) * Discovery: Increase the MAX_DEPTH and show deep folders as ignored +* Discovery: General speed improvements * Downloads: Remove empty temporary if disk space full (#5746) * Downloads: Re-trigger folder discovery on 404 +* Quota: PropagateUpload: Model of remote quota, avoid some uploads #5537 * When creating explorer favorite use more specific windows functions (#5690) * Create favorite also in folder wizard (#455) -* Use the application icon for the sidebar favorite (#2446) +* Windows: Use the application icon for the Windows 8 sidebar favorite (#2446) +* macOS: Finder sidebar icon #296 * AccountSettings: Triggering log in re-ask about previously rejected certificates #5819 * Added owncloudcmd bandwidth limit parameter (#5707) * AccountSettings: Sync with clean discovery on Ctrl-F6 (#5666) @@ -36,15 +41,13 @@ version 2.4.0 (2017-0X-XX) * Sync: Create conflicts by comparing the hash of files with identical mtime/size #5589 * Sync: Blacklist: Don't let errors become warnings #5516 * Sync: Check etag again after active sync (#4116) -* macOS: Finder sidebar icon #296 -* Reduce memory usage * Fix at least one memory leak * Documentation improvements * Logging improvements (with Qt logging categories), new --logdebug parameter * Harmonize source code style with clang-format +* Switch over to Qt 5 function pointer signal/slot syntax * Crash fixes * Test improvements -* Windows Overlays: Potential hang fixes * Small UI layout fixes * Maintenance Mode: Detect maintenance mode (#4485) * Maintenance Mode: Add a 1 to 5 min reconnection delay #5872 @@ -53,6 +56,7 @@ version 2.4.0 (2017-0X-XX) * owncloudcmd: Don't start if connection or auth fails #5692 * Overlays: Consider also the "shared by me" as shared (#4788) * Overlays: Fix different case paths not matching (#5257) +* Windows Overlays: Potential hang fixes * Switch 3rdparty/json usage to Qt5's QJson (#5710) * OpenSSL: Don't require directly, only via Qt * Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) @@ -60,13 +64,12 @@ version 2.4.0 (2017-0X-XX) * csync: Switch build from C to C++ * csync: Refactor a lot to use common data structures to save memory and memory copying * csync: Switch some data structures to Qt data structures +* csync: Switch to using upper layer SyncJournalDB * Http credentials: Fix behavior for bad password #5989 * Credentials: Use per-account keychain entries #5830 -* Compliation: Enable DEP & ASLR on Windows * SyncJournalDB: Fall back to DELETE journal mode if WAL mode does not seem to work (#5723) * Compilation: Remove Qt 4 code -* Quota: PropagateUpload: Model of remote quota, avoid some uploads #5537 -* Wizard: Handle url-shortener redirects #5954 +* Updater: Rudimentary support for beta channel version 2.3.3 (2017-08-29) * Chunking NG: Don't use old chunking on new DAV endpoint (#5855) @@ -194,7 +197,6 @@ version 2.2.0 (release 2016-05-12) * Documentation Improvements, ie. about overlay icons * Translation fixes * Countless other bugfixes - * Sqlite Update to recent version * Update of QtKeyChain to support Windows credential store * Packaging of dolphin overlay icon module for bleeding edge distros @@ -265,7 +267,6 @@ version 2.1 (release 2015-12-03) * Fixed getting size for selective sync (#3986) * Re-added close button in the settings window (#3713) * Added abililty to handle storage limitations gracefully (#3736) - * Updated 3rdparty dependencies: sqlite version 3.9.1 * Organized patches to our base Qt version into admin/qt/patches * Plus: A lot of unmentioned improvements and fixes From 0931f2574750f22390e04832259b683a84b9fba1 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 5 Oct 2017 13:07:42 +0200 Subject: [PATCH 147/166] ChangeLog: Re-format and re-order --- ChangeLog | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d8489938..d078fd9c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,9 @@ ChangeLog ========= -version 2.4.0 (2017-0X-XX) -* OAuth2 authentication support -* Server URL: Update configuration in case of permanent redirection (#5972) +version 2.4.0 (2017-1X-XX) +* OAuth2 authentication support by opening external browser +* Sync Issues: More functional error view including filters and conflicts (#5516) * Sharing: Add support for multiple public link shares (#5655) * Sharing: Add option to copy/email private links (#5627, #5023) * Sharing: Add option "show file listing" (#5837) @@ -13,7 +13,8 @@ version 2.4.0 (2017-0X-XX) * Wizard: Never propose an existing folder for syncing (#5597) * Wizard: Don't show last page anymore, go to settings directly (#5726) * Wizard: Handle url-shortener redirects #5954 -* Settings Dialog: Display the user server avatar +* Gui: Display the user server avatar +* Server URL: Update configuration in case of permanent redirection (#5972) * Gui: Allow to add multiple sync folder connection of the same folder * Selective Sync: Open sub folder context menu (#5596) * Selective Sync: Skip excluded folders when reading db @@ -22,53 +23,52 @@ version 2.4.0 (2017-0X-XX) * Excludes: Hardcode desktop.ini * Excludes: Allow escaping "#" (#6012) * Excludes: Use faster matching via QRegularExpression -* Sync Issues: More functional error view including filters and conflicts (#5516) * Discovery: Increase the MAX_DEPTH and show deep folders as ignored * Discovery: General speed improvements * Downloads: Remove empty temporary if disk space full (#5746) * Downloads: Re-trigger folder discovery on 404 -* Quota: PropagateUpload: Model of remote quota, avoid some uploads #5537 +* Quota: PropagateUpload: Model of remote quota, avoid some uploads (#5537) * When creating explorer favorite use more specific windows functions (#5690) * Create favorite also in folder wizard (#455) * Windows: Use the application icon for the Windows 8 sidebar favorite (#2446) -* macOS: Finder sidebar icon #296 -* AccountSettings: Triggering log in re-ask about previously rejected certificates #5819 +* macOS: Finder sidebar icon (#296) +* Overlay Icons: Consider also the "shared by me" as shared (#4788) +* Overlay Icons: Fix different case paths not matching (#5257) +* Windows Overlay Icons: Potential hang fixes +* Linux Overlay Icons: fix branded nemo and caja shell integration (#5966) +* Http credentials: Fix behavior for bad password (#5989) +* Credentials: Use per-account keychain entries (#5830) +* AccountSettings: Triggering log in re-ask about previously rejected certificates (#5819) * Added owncloudcmd bandwidth limit parameter (#5707) * AccountSettings: Sync with clean discovery on Ctrl-F6 (#5666) * Sync: Dynamic sizing of chunks in chunked uploads for improved big file upload performance * Sync: Introduce overall errors that are not tied to a file (#5746) -* Sync: Better messaging for 507 Insufficient Storage #5537 -* Sync: Create conflicts by comparing the hash of files with identical mtime/size #5589 -* Sync: Blacklist: Don't let errors become warnings #5516 +* Sync: Better messaging for 507 Insufficient Storage (#5537) +* Sync: Create conflicts by comparing the hash of files with identical mtime/size (#5589) +* Sync: Blacklist: Don't let errors become warnings (#5516) * Sync: Check etag again after active sync (#4116) +* SyncJournalDB: Fall back to DELETE journal mode if WAL mode does not seem to work (#5723) * Fix at least one memory leak * Documentation improvements * Logging improvements (with Qt logging categories), new --logdebug parameter -* Harmonize source code style with clang-format -* Switch over to Qt 5 function pointer signal/slot syntax * Crash fixes * Test improvements * Small UI layout fixes * Maintenance Mode: Detect maintenance mode (#4485) -* Maintenance Mode: Add a 1 to 5 min reconnection delay #5872 -* HTTP: Send a unique X-Request-ID with each request #5853 +* Maintenance Mode: Add a 1 to 5 min reconnection delay (#5872) +* HTTP: Send a unique X-Request-ID with each request (#5853) * HTTP: Support HTTP2 when built and running with Qt 5.9.x (Official packages still on Qt 5.6.x) -* owncloudcmd: Don't start if connection or auth fails #5692 -* Overlays: Consider also the "shared by me" as shared (#4788) -* Overlays: Fix different case paths not matching (#5257) -* Windows Overlays: Potential hang fixes -* Switch 3rdparty/json usage to Qt5's QJson (#5710) -* OpenSSL: Don't require directly, only via Qt -* Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) -* Linux Overlay Icons: fix branded nemo and caja shell integration (#5966) +* owncloudcmd: Don't start if connection or auth fails (#5692) * csync: Switch build from C to C++ * csync: Refactor a lot to use common data structures to save memory and memory copying * csync: Switch some data structures to Qt data structures * csync: Switch to using upper layer SyncJournalDB -* Http credentials: Fix behavior for bad password #5989 -* Credentials: Use per-account keychain entries #5830 -* SyncJournalDB: Fall back to DELETE journal mode if WAL mode does not seem to work (#5723) +* Switch 3rdparty/json usage to Qt5's QJson (#5710) +* OpenSSL: Don't require directly, only via Qt +* Remove iconv dependency, use Qt for file system locale encoding/decoding (emoji filename support on macOS) * Compilation: Remove Qt 4 code +* Harmonize source code style with clang-format +* Switch over to Qt 5 function pointer signal/slot syntax * Updater: Rudimentary support for beta channel version 2.3.3 (2017-08-29) From 22f71ce17e7c03e19db30e257e4c01c0b9960e76 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 5 Oct 2017 14:13:10 +0200 Subject: [PATCH 148/166] t9.pl: Make more reliable Sometimes the 'touch' didn't change the mtime since too little time had passed! --- test/scripts/txpl/t9.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/scripts/txpl/t9.pl b/test/scripts/txpl/t9.pl index 1fb738903..3f3781a43 100755 --- a/test/scripts/txpl/t9.pl +++ b/test/scripts/txpl/t9.pl @@ -48,6 +48,7 @@ assert($txtpropbefore); assert($emlpropbefore); printInfo( "Touch local files"); +system( "sleep 1" ); system( "touch $locDir/test.txt" ); system( "touch $locDir/test.eml" ); From 90befac9012943347f87ab7b6ba94fe9508a19d8 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 5 Oct 2017 11:39:35 +0200 Subject: [PATCH 149/166] Rename detection: File size must be equal Comparison of file sizes for potential conflicts was added in 0eb9401c624f20a128b46f8eb1fa5a984f9ef61e, but did not extend to checking the file size in case of potential local moves. This commit adds this check and adds tests for various move+change scenarios. --- src/csync/csync_update.cpp | 4 +- test/testsyncengine.cpp | 78 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/src/csync/csync_update.cpp b/src/csync/csync_update.cpp index 9412d5185..0271b1c56 100644 --- a/src/csync/csync_update.cpp +++ b/src/csync/csync_update.cpp @@ -265,8 +265,8 @@ static int _csync_detect_update(CSYNC *ctx, std::unique_ptr f fs->instruction = CSYNC_INSTRUCTION_NEW; bool isRename = - base.isValid() && base._inode == fs->inode && base._type == fs->type - && (base._modtime == fs->modtime || fs->type == CSYNC_FTW_TYPE_DIR) + base.isValid() && base._type == fs->type + && ((base._modtime == fs->modtime && base._fileSize == fs->size) || fs->type == CSYNC_FTW_TYPE_DIR) #ifdef NO_RENAME_EXTENSION && _csync_sameextension(base._path, fs->path) #endif diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 169c2e6fb..9c1b7a2c0 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -535,6 +535,84 @@ private slots: QCOMPARE(nPUT, 6); QCOMPARE(n507, 3); } + + void testLocalMove() + { + FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() }; + + int nPUT = 0; + int nDELETE = 0; + fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &) { + if (op == QNetworkAccessManager::PutOperation) + ++nPUT; + if (op == QNetworkAccessManager::DeleteOperation) + ++nDELETE; + return nullptr; + }); + + // For directly editing the remote checksum + FileInfo &remoteInfo = fakeFolder.remoteModifier(); + + // Simple move causing a remote rename + fakeFolder.localModifier().rename("A/a1", "A/a1m"); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + QCOMPARE(nPUT, 0); + + // Move-and-change, causing a upload and delete + fakeFolder.localModifier().rename("A/a2", "A/a2m"); + fakeFolder.localModifier().appendByte("A/a2m"); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + QCOMPARE(nPUT, 1); + QCOMPARE(nDELETE, 1); + + // Move-and-change, mtime+content only + fakeFolder.localModifier().rename("B/b1", "B/b1m"); + fakeFolder.localModifier().setContents("B/b1m", 'C'); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + QCOMPARE(nPUT, 2); + QCOMPARE(nDELETE, 2); + + // Move-and-change, size+content only + auto mtime = fakeFolder.remoteModifier().find("B/b2")->lastModified; + fakeFolder.localModifier().rename("B/b2", "B/b2m"); + fakeFolder.localModifier().appendByte("B/b2m"); + fakeFolder.localModifier().setModTime("B/b2m", mtime); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + QCOMPARE(nPUT, 3); + QCOMPARE(nDELETE, 3); + + // Move-and-change, content only -- c1 has no checksum, so we fail to detect this! + mtime = fakeFolder.remoteModifier().find("C/c1")->lastModified; + fakeFolder.localModifier().rename("C/c1", "C/c1m"); + fakeFolder.localModifier().setContents("C/c1m", 'C'); + fakeFolder.localModifier().setModTime("C/c1m", mtime); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(nPUT, 3); + QCOMPARE(nDELETE, 3); + QVERIFY(!(fakeFolder.currentLocalState() == remoteInfo)); + + // cleanup, and upload a file that will have a checksum in the db + fakeFolder.localModifier().remove("C/c1m"); + fakeFolder.localModifier().insert("C/c3"); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + QCOMPARE(nPUT, 4); + QCOMPARE(nDELETE, 4); + + // Move-and-change, content only, this time while having a checksum + mtime = fakeFolder.remoteModifier().find("C/c3")->lastModified; + fakeFolder.localModifier().rename("C/c3", "C/c3m"); + fakeFolder.localModifier().setContents("C/c3m", 'C'); + fakeFolder.localModifier().setModTime("C/c3m", mtime); + QVERIFY(fakeFolder.syncOnce()); + QCOMPARE(nPUT, 5); + QCOMPARE(nDELETE, 5); + QCOMPARE(fakeFolder.currentLocalState(), remoteInfo); + } }; QTEST_GUILESS_MAIN(TestSyncEngine) From 95b90271b659a4a3b8da9cc2a1e8dad46becac80 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 6 Oct 2017 02:18:35 +0200 Subject: [PATCH 150/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 2 +- translations/client_cs.ts | 2 +- translations/client_de.ts | 2 +- translations/client_el.ts | 2 +- translations/client_en.ts | 2 +- translations/client_es.ts | 2 +- translations/client_es_AR.ts | 2 +- translations/client_et.ts | 2 +- translations/client_eu.ts | 2 +- translations/client_fa.ts | 2 +- translations/client_fi.ts | 2 +- translations/client_fr.ts | 2 +- translations/client_gl.ts | 2 +- translations/client_hu.ts | 2 +- translations/client_it.ts | 2 +- translations/client_ja.ts | 2 +- translations/client_nb_NO.ts | 2 +- translations/client_nl.ts | 2 +- translations/client_pl.ts | 2 +- translations/client_pt.ts | 2 +- translations/client_pt_BR.ts | 2 +- translations/client_ru.ts | 2 +- translations/client_sk.ts | 2 +- translations/client_sl.ts | 2 +- translations/client_sr.ts | 2 +- translations/client_sv.ts | 148 ++++++++++++++++++----------------- translations/client_th.ts | 2 +- translations/client_tr.ts | 2 +- translations/client_uk.ts | 2 +- translations/client_zh_CN.ts | 2 +- translations/client_zh_TW.ts | 2 +- 32 files changed, 108 insertions(+), 103 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 616c04c15..72a4b4315 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -183,6 +183,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 39212fd74..f3beb1ed0 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Aturat per l'usuari diff --git a/translations/client_cs.ts b/translations/client_cs.ts index a94723418..c069fd3b3 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušeno uživatelem diff --git a/translations/client_de.ts b/translations/client_de.ts index cbcebd1dc..5757d8c05 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abbruch durch den Benutzer diff --git a/translations/client_el.ts b/translations/client_el.ts index c884f96a9..e059875e6 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Ματαιώθηκε από το χρήστη diff --git a/translations/client_en.ts b/translations/client_en.ts index 751601f3f..3238aa1e9 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -645,7 +645,7 @@ OCC::DiscoveryMainThread - + Aborted by the user diff --git a/translations/client_es.ts b/translations/client_es.ts index 4af54ee37..c6fb2b31c 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 506c5a5f4..904cf1197 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrumpido por el usuario diff --git a/translations/client_et.ts b/translations/client_et.ts index 54c632319..9853b0a7d 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kasutaja poolt tühistatud diff --git a/translations/client_eu.ts b/translations/client_eu.ts index c019423f0..4d8dd2276 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Erabiltzaileak bertan behera utzita diff --git a/translations/client_fa.ts b/translations/client_fa.ts index be59bfc19..a4fc98d61 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user متوقف شده توسط کاربر diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 7326169f0..809e27df3 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Keskeytetty käyttäjän toimesta diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 33bf8fc5f..642d0bae9 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompu par l'utilisateur diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 3d659225a..546d93e6c 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrompido polo usuario diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 1a2bf3426..4ee2b6916 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Felhasználó megszakította diff --git a/translations/client_it.ts b/translations/client_it.ts index 1a2792522..36671d989 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Interrotto dall'utente diff --git a/translations/client_ja.ts b/translations/client_ja.ts index c0ffa838f..2eaa2ff9c 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ユーザーによって中止されました diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index b529bdaf9..6616cdbcf 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbrutt av brukeren diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 39b403dde..9a94af4b5 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Afgebroken door de gebruiker diff --git a/translations/client_pl.ts b/translations/client_pl.ts index b64d42151..4b3ecfd65 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Anulowane przez użytkownika diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 793c95ea0..33fb6f518 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo utilizador diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 9db1540a4..f98f278d0 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Abortado pelo usuário diff --git a/translations/client_ru.ts b/translations/client_ru.ts index a80de79bc..7698a850e 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прервано пользов diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 5e49a46fb..a5250879a 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Zrušené používateľom diff --git a/translations/client_sl.ts b/translations/client_sl.ts index b0193f302..43c628bd0 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Opravilo je bilo prekinjeno s strani uporabnika diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 3e9d39243..edb53c923 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Прекинуо корисник diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 8088a09ba..deed265b6 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -83,12 +83,12 @@ Unknown error: network reply was deleted - + Okänt fel: nätverkssvaret raderades Server replied "%1 %2" to "%3 %4" - + Servern svarade "%1 %2" på "%3 %4" @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + Servern %1 är för närvarande i underhållsläge. @@ -253,12 +253,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Anskaffar autentisering från webbläsaren. <a href='%1'>Klicka här </a> för att öppna webbläsaren igen. Connecting to %1... - + Ansluter till %1... @@ -273,17 +273,17 @@ There are folders that were not synchronized because they are too big: - + Dessa mappar har inte synkroniserats för att de är för stora: There are folders that were not synchronized because they are external storages: - + Det finns mappar som inte synkroniserats för att de är externa lagringsytor: There are folders that were not synchronized because they are too big or external storages: - + Det finns mappar som inte blivit synkroniserade på grund av att de är för stora eller är externa lagringsytor: @@ -373,7 +373,7 @@ Maintenance mode - + Underhållsläge @@ -446,7 +446,7 @@ The list of unsynced items has been copied to the clipboard. - + Listan över ej synkroniserat har kopierats till klippbordet. @@ -562,7 +562,7 @@ There was an error while accessing the configuration file at %1. - + Ett fel uppstod vid läsning av konfigurationsfil vid %1. @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Avbruten av användare @@ -747,18 +747,20 @@ A new folder larger than %1 MB has been added: %2. - + En ny mapp större än %1 MB har lagts till: %2. + A folder from an external storage has been added. - + En mapp från en extern lagringsyta har lagts till. + Please go in the settings to select it if you wish to download it. - + Vänligen gå till inställningar och välj den om du önskar att ladda ner den. @@ -905,12 +907,12 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre The local folder %1 contains a symbolic link. The link target contains an already synced folder Please pick another one! - + Den lokala mappen %1 innehåller en symbolisk länk. Länkens mål innehåller en redan synkroniserad mapp. Vänligen välj en annan! There is already a sync from the server to this local folder. Please pick another local folder! - + Det pågår redan en synkronisering från servern till denna lokala mappen. Vänligen välj en annan lokal mapp. @@ -983,7 +985,7 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre There are unresolved conflicts. Click for details. - + Det finns olösta konflikter. Klicka för detaljer. @@ -1226,7 +1228,7 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Ask for confirmation before synchronizing folders larger than - + Fråga innan synkronisering av mappar större än @@ -1237,7 +1239,7 @@ Om du fortsätter synkningen kommer alla dina filer återställas med en äldre Ask for confirmation before synchronizing external storages - + Fråga innan synkronisering av externa lagringsytor @@ -1391,7 +1393,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas List of issues - + Lista över fel @@ -1402,7 +1404,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas <no filter> - + <no filter> @@ -1413,17 +1415,17 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Show warnings - + Visa varningar Show ignored files - + Visa ignorerade filer Copy the issues list to the clipboard. - + Kopiera fellistan till klippbordet. @@ -1443,7 +1445,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Issue - + Fel @@ -1466,7 +1468,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas &Capture debug messages - + &Fånga felsökningsmeddelanden @@ -1683,7 +1685,7 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Error returned from the server: <em>%1</em> - + Fel returnerat från server: <em>%1</em> @@ -1693,22 +1695,22 @@ Objekt som tillåter radering kommer tas bort om de förhindrar en mapp att tas Could not parse the JSON returned from the server: <br><em>%1</em> - + Kunde inte para JSON som returnerades från servern: <br><em>%1</em> The reply from the server did not contain all expected fields - + Svaret från servern innehöll inte alla förväntade fält <h1>Login Error</h1><p>%1</p> - + <h1>Inloggningsfel</h1><p>%1</p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + Fel användare</h1><p> Du har loggat in med fel användare <em>%1</em>, men måste logga in med <em>%2</em>.<br>Vänligen logga ut från %3 i en annan flik, sen <a href='%4'>klicka här </a> och logga in som användare %2</p> @@ -1876,7 +1878,7 @@ ytterligare rättigheter under processen. Login in your browser - + Logga in i din webbläsare @@ -2111,7 +2113,7 @@ Det är inte lämpligt använda den. The download would reduce free local disk space below the limit - + Nedladdningen skulle reducera det fria diskutrymmet under gränsen @@ -2298,7 +2300,7 @@ Det är inte lämpligt använda den. Upload of %1 exceeds the quota for the folder - + Uppladdningen av %1 överstiger kvoten för mappen @@ -2321,7 +2323,7 @@ Det är inte lämpligt använda den. Unexpected return code from server (%1) - + Oväntad svarskod från servern (%1) @@ -2466,7 +2468,7 @@ Det är inte lämpligt använda den. Deselect remote folders you do not wish to synchronize. - + Avmarkera mappar du inte vill synkronisera. @@ -2629,12 +2631,12 @@ Det är inte lämpligt använda den. Enter a name to create a new public link... - + Ange ett namn för skapa en ny publik länk... &Create new - + &Skapa ny @@ -2649,7 +2651,7 @@ Det är inte lämpligt använda den. Link properties: - + Länkegenskaper: @@ -2685,32 +2687,32 @@ Det är inte lämpligt använda den. %1 link - + %1 länk Link shares have been disabled - + Delningslänkar har inaktiverats Create public link share - + Skapa publik delningslänk Open link in browser - + Öppna länk i webbläsare Copy link to clipboard - + Kopiera länk till urklipp Copy link to clipboard (direct download) - + Kopiera länk till urklipp (direktnedladdning) @@ -2720,12 +2722,12 @@ Det är inte lämpligt använda den. Send link by email (direct download) - + Skicka länk med e-post (direktnedladdning) Public link - + Publik länk @@ -2763,12 +2765,12 @@ Det är inte lämpligt använda den. Open link in browser - + Öppna länk i webbläsaren Copy link to clipboard - + Kopiera länk till urklipp @@ -2783,7 +2785,7 @@ Det är inte lämpligt använda den. I shared something with you - + Jag delade något med dig @@ -2876,22 +2878,22 @@ Det är inte lämpligt använda den. I shared something with you - + Jag delade något med dig Share... - + Dela... Copy private link to clipboard - + Kopiera privat länk till urklipp Send private link by email... - + Skicka privat länk med e-post... @@ -3169,7 +3171,7 @@ Det är inte lämpligt använda den. %1 (skipped due to earlier error, trying again in %2) - + %1 (skippad på grund av ett tidigare fel, försök igen om %2) @@ -3179,12 +3181,12 @@ Det är inte lämpligt använda den. Folder hierarchy is too deep - + Folder hierarkin är för djup Conflict: Server version downloaded, local copy renamed and not uploaded. - + Konflikt: Serverversion nedladdad, lokal kopia omdöpt och ej uppladdad. @@ -3195,7 +3197,7 @@ Det är inte lämpligt använda den. Unable to open or create the local sync database. Make sure you have write access in the sync folder. - + Kunde inte öppna eller återskapa den lokala synkroniseringsdatabasen. Säkerställ att du har skrivrättigheter till synkroniseringsmappen. @@ -3210,12 +3212,12 @@ Det är inte lämpligt använda den. Disk space is low: Downloads that would reduce free space below %1 were skipped. - + Diskutrymmet är lågt: Nedladdningar som reduceringar det fria utrymmet under %1 skippades. There is insufficient space available on the server for some uploads. - + Det finns inte tillräckligt med utrymme på servern för vissa uppladdningar. @@ -3280,17 +3282,17 @@ Det är inte lämpligt använda den. File names ending with a period are not supported on this file system. - + Filnamn som slutar med punkt stöds inte i det här filsystemet. File names containing the character '%1' are not supported on this file system. - + Filnamn som innehåller tecknet '%1' stöds inte i det här filsystemet. The file name is a reserved name on this file system. - + Filnamnet är ett reserverat namn i detta filsystemet. @@ -3305,7 +3307,7 @@ Det är inte lämpligt använda den. Unresolved conflict. - + Olöst konflikt. @@ -3655,7 +3657,7 @@ Det är inte lämpligt använda den. <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> - + <p>Version %2. För mer information besök <a href="%3">https://%4</a></p><p>Fär kända fel och hjälp, vänligen besök: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>Av Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, och andra.</small></p><p>Copyright ownCloud GmbH</p><p>Licensierad under GNU General Public License (GPL) Version 2.0<br/>ownCloud och ownCloud Logo är registrerade varumärken till ownCloud GmbH i USA, andra länder, eller båda.</p> @@ -3694,7 +3696,7 @@ Det är inte lämpligt använda den. Ask for confirmation before synchroni&zing folders larger than - + Fråga innan synkronise&ring av mappar större än @@ -3705,7 +3707,7 @@ Det är inte lämpligt använda den. Ask for confirmation before synchronizing e&xternal storages - + Fråga innan synkronisering av e&xterna lagringsytor @@ -3766,17 +3768,17 @@ Det är inte lämpligt använda den. Please switch to your browser to proceed. - + Vänligen växla till webbläsaren för att fortsätta. An error occured while connecting. Please try again. - + Ett fel inträffade vid anslutningen. Vänligen försök igen. Re-open Browser - + Återöppna webbläsaren @@ -4103,12 +4105,12 @@ Det är inte lämpligt använda den. Could not open browser - + Kunde inte öppna webbläsaren There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + Det uppstod ett fel när webbläsaren öppnades för URL %1. Kanske det inte finns någon standard webbläsare vald? diff --git a/translations/client_th.ts b/translations/client_th.ts index 36fa8de35..1f4314f17 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user ยกเลิกโดยผู้ใช้ diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 53e108b59..d733c9602 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Kullanıcı tarafından iptal edildi diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 59a62a168..90047bb42 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user Скасовано користувачем diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index df129d295..12a55d3cf 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 用户撤销 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 53a96dfb4..5bbcebcb7 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -637,7 +637,7 @@ OCC::DiscoveryMainThread - + Aborted by the user 使用者中斷 From 315e38e814bc0ac8c32cb32f9a00ec84716587fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Thu, 5 Oct 2017 21:08:38 +0200 Subject: [PATCH 151/166] Use display-name from the ocs call in the settings dialog --- src/gui/accountsettings.cpp | 6 ++++- src/gui/accountstate.cpp | 19 --------------- src/gui/accountstate.h | 5 ---- src/gui/settingsdialog.cpp | 38 ++++++++++++++++++++++++++++- src/gui/settingsdialog.h | 6 +++++ src/libsync/account.cpp | 13 +++++++++- src/libsync/account.h | 7 +++++- src/libsync/connectionvalidator.cpp | 4 +++ 8 files changed, 70 insertions(+), 28 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 8183d4b8f..23b287244 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -638,7 +638,11 @@ void AccountSettings::slotAccountStateChanged() Utility::escape(safeUrl.toString())); QString serverWithUser = server; if (AbstractCredentials *cred = account->credentials()) { - serverWithUser = tr("%1 as %2").arg(server, Utility::escape(cred->user())); + QString user = account->davDisplayName(); + if (user.isEmpty()) { + user = cred->user(); + } + serverWithUser = tr("%1 as %2").arg(server, Utility::escape(user)); } if (state == AccountState::Connected) { diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp index 580f3b31e..0b19f3f88 100644 --- a/src/gui/accountstate.cpp +++ b/src/gui/accountstate.cpp @@ -361,23 +361,4 @@ std::unique_ptr AccountState::settings() return s; } -QString AccountState::shortDisplayNameForSettings(int width) const -{ - QString user = account()->credentials()->user(); - QString host = account()->url().host(); - int port = account()->url().port(); - if (port > 0 && port != 80 && port != 443) { - host.append(QLatin1Char(':')); - host.append(QString::number(port)); - } - if (width > 0) { - QFont f; - QFontMetrics fm(f); - host = fm.elidedText(host, Qt::ElideMiddle, width); - user = fm.elidedText(user, Qt::ElideRight, width); - } - return user + QLatin1String("\n") + host; -} - - } // namespace OCC diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h index 03f17795f..3256424af 100644 --- a/src/gui/accountstate.h +++ b/src/gui/accountstate.h @@ -113,11 +113,6 @@ public: /** Returns a new settings object for this account, already in the right groups. */ std::unique_ptr settings(); - /** display name with two lines that is displayed in the settings - * If width is bigger than 0, the string will be ellided so it does not exceed that width - */ - QString shortDisplayNameForSettings(int width = 0) const; - /** Mark the timestamp when the last successful ETag check happened for * this account. * The checkConnectivity() method uses the timestamp to save a call to diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index a266157db..fc50dd120 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -236,7 +236,7 @@ void SettingsDialog::accountAdded(AccountState *s) if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); - accountAction->setIconText(s->shortDisplayNameForSettings(height * buttonSizeRatio)); + accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), height * buttonSizeRatio)); } _toolBar->insertAction(_toolBar->actions().at(0), accountAction); auto accountSettings = new AccountSettings(s, this); @@ -250,6 +250,7 @@ void SettingsDialog::accountAdded(AccountState *s) _gui, &ownCloudGui::slotFolderOpenAction); connect(accountSettings, &AccountSettings::showIssuesList, this, &SettingsDialog::showIssuesList); connect(s->account().data(), &Account::accountChangedAvatar, this, &SettingsDialog::slotAccountAvatarChanged); + connect(s->account().data(), &Account::accountChangedDisplayName, this, &SettingsDialog::slotAccountDisplayNameChanged); slotRefreshActivity(s); } @@ -268,6 +269,41 @@ void SettingsDialog::slotAccountAvatarChanged() } } +void SettingsDialog::slotAccountDisplayNameChanged() +{ + Account *account = static_cast(sender()); + if (account && _actionForAccount.contains(account)) { + QAction *action = _actionForAccount[account]; + if (action) { + QString displayName = account->displayName(); + action->setText(displayName); + auto height = _toolBar->sizeHint().height(); + action->setIconText(shortDisplayNameForSettings(account, height * buttonSizeRatio)); + } + } +} + +QString SettingsDialog::shortDisplayNameForSettings(Account* account, int width) const +{ + QString user = account->davDisplayName(); + if (user.isEmpty()) { + user = account->credentials()->user(); + } + QString host = account->url().host(); + int port = account->url().port(); + if (port > 0 && port != 80 && port != 443) { + host.append(QLatin1Char(':')); + host.append(QString::number(port)); + } + if (width > 0) { + QFont f; + QFontMetrics fm(f); + host = fm.elidedText(host, Qt::ElideMiddle, width); + user = fm.elidedText(user, Qt::ElideRight, width); + } + return user + QLatin1String("\n") + host; +} + void SettingsDialog::accountRemoved(AccountState *s) { for (auto it = _actionGroupWidgets.begin(); it != _actionGroupWidgets.end(); ++it) { diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h index 15596a00f..7c2ffcc03 100644 --- a/src/gui/settingsdialog.h +++ b/src/gui/settingsdialog.h @@ -60,6 +60,7 @@ public slots: void slotSwitchPage(QAction *action); void slotRefreshActivity(AccountState *accountState); void slotAccountAvatarChanged(); + void slotAccountDisplayNameChanged(); protected: void reject() Q_DECL_OVERRIDE; @@ -77,6 +78,11 @@ private: QAction *createColorAwareAction(const QString &iconName, const QString &fileName); QAction *createActionWithIcon(const QIcon &icon, const QString &text, const QString &iconPath = QString()); + /** display name with two lines that is displayed in the settings + * If width is bigger than 0, the string will be ellided so it does not exceed that width + */ + QString shortDisplayNameForSettings(Account* account, int width = 0) const; + Ui::SettingsDialog *const _ui; QActionGroup *_actionGroup; diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 4c5f8a411..0c2e44dbe 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -105,7 +105,7 @@ void Account::setAvatar(const QImage &img) QString Account::displayName() const { - QString dn = QString("%1@%2").arg(_credentials->user(), _url.host()); + QString dn = QString("%1@%2").arg(davUser(), _url.host()); int port = url().port(); if (port > 0 && port != 80 && port != 443) { dn.append(QLatin1Char(':')); @@ -114,6 +114,17 @@ QString Account::displayName() const return dn; } +QString Account::davDisplayName() const +{ + return _displayName; +} + +void Account::setDavDisplayName(const QString &newDisplayName) +{ + _displayName = newDisplayName; + emit accountChangedDisplayName(); +} + QString Account::id() const { return _id; diff --git a/src/libsync/account.h b/src/libsync/account.h index 249ff403d..aa1009287 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -83,6 +83,9 @@ public: QString davUser() const; void setDavUser(const QString &newDavUser); + QString davDisplayName() const; + void setDavDisplayName(const QString &newDisplayName); + QImage avatar() const; void setAvatar(const QImage &img); @@ -209,7 +212,7 @@ public: /** True when the server supports HTTP2 */ bool isHttp2Supported() { return _http2Supported; } - void setHttp2Supported(bool value) { _http2Supported = value; }; + void setHttp2Supported(bool value) { _http2Supported = value; } void clearCookieJar(); void lendCookieJarTo(QNetworkAccessManager *guest); @@ -246,6 +249,7 @@ signals: void serverVersionChanged(Account *account, const QString &newVersion, const QString &oldVersion); void accountChangedAvatar(); + void accountChangedDisplayName(); protected Q_SLOTS: void slotCredentialsFetched(); @@ -258,6 +262,7 @@ private: QWeakPointer _sharedThis; QString _id; QString _davUser; + QString _displayName; QImage _avatarImg; QMap _settingsMap; QUrl _url; diff --git a/src/libsync/connectionvalidator.cpp b/src/libsync/connectionvalidator.cpp index fd454e68f..2acbf74f1 100644 --- a/src/libsync/connectionvalidator.cpp +++ b/src/libsync/connectionvalidator.cpp @@ -316,6 +316,10 @@ void ConnectionValidator::slotUserFetched(const QJsonDocument &json) job->start(); } + QString displayName = json.object().value("ocs").toObject().value("data").toObject().value("display-name").toString(); + if (!displayName.isEmpty()) { + _account->setDavDisplayName(displayName); + } } void ConnectionValidator::slotAvatarImage(const QImage &img) From cd07865da6b205dfdccc50d6566c1b575be69f7c Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 6 Oct 2017 12:01:10 +0200 Subject: [PATCH 152/166] Settings Dialog: Fix display name compilation for macOS #6078 --- src/gui/CMakeLists.txt | 1 + src/gui/settingsdialog.cpp | 27 ++++----------------------- src/gui/settingsdialog.h | 5 ----- src/gui/settingsdialogcommon.cpp | 28 ++++++++++++++++++++++++++++ src/gui/settingsdialogmac.cpp | 5 ++++- 5 files changed, 37 insertions(+), 29 deletions(-) create mode 100644 src/gui/settingsdialogcommon.cpp diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 03d7e0f0b..0aa132a1e 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -129,6 +129,7 @@ set(updater_SRCS IF( APPLE ) list(APPEND client_SRCS cocoainitializer_mac.mm) list(APPEND client_SRCS settingsdialogmac.cpp) + list(REMOVE_ITEM client_SRCS settingsdialog.cpp) list(APPEND client_SRCS socketapisocket_mac.mm) list(APPEND client_SRCS systray.mm) diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp index fc50dd120..d4b9c3eda 100644 --- a/src/gui/settingsdialog.cpp +++ b/src/gui/settingsdialog.cpp @@ -55,6 +55,8 @@ static const float buttonSizeRatio = 1.618; // golden ratio namespace OCC { +#include "settingsdialogcommon.cpp" + static QIcon circleMask(const QImage &avatar) { int dim = avatar.width(); @@ -236,7 +238,7 @@ void SettingsDialog::accountAdded(AccountState *s) if (!brandingSingleAccount) { accountAction->setToolTip(s->account()->displayName()); - accountAction->setIconText(shortDisplayNameForSettings(s->account().data(), height * buttonSizeRatio)); + accountAction->setIconText(SettingsDialogCommon::shortDisplayNameForSettings(s->account().data(), height * buttonSizeRatio)); } _toolBar->insertAction(_toolBar->actions().at(0), accountAction); auto accountSettings = new AccountSettings(s, this); @@ -278,32 +280,11 @@ void SettingsDialog::slotAccountDisplayNameChanged() QString displayName = account->displayName(); action->setText(displayName); auto height = _toolBar->sizeHint().height(); - action->setIconText(shortDisplayNameForSettings(account, height * buttonSizeRatio)); + action->setIconText(SettingsDialogCommon::shortDisplayNameForSettings(account, height * buttonSizeRatio)); } } } -QString SettingsDialog::shortDisplayNameForSettings(Account* account, int width) const -{ - QString user = account->davDisplayName(); - if (user.isEmpty()) { - user = account->credentials()->user(); - } - QString host = account->url().host(); - int port = account->url().port(); - if (port > 0 && port != 80 && port != 443) { - host.append(QLatin1Char(':')); - host.append(QString::number(port)); - } - if (width > 0) { - QFont f; - QFontMetrics fm(f); - host = fm.elidedText(host, Qt::ElideMiddle, width); - user = fm.elidedText(user, Qt::ElideRight, width); - } - return user + QLatin1String("\n") + host; -} - void SettingsDialog::accountRemoved(AccountState *s) { for (auto it = _actionGroupWidgets.begin(); it != _actionGroupWidgets.end(); ++it) { diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h index 7c2ffcc03..60c72dec7 100644 --- a/src/gui/settingsdialog.h +++ b/src/gui/settingsdialog.h @@ -78,11 +78,6 @@ private: QAction *createColorAwareAction(const QString &iconName, const QString &fileName); QAction *createActionWithIcon(const QIcon &icon, const QString &text, const QString &iconPath = QString()); - /** display name with two lines that is displayed in the settings - * If width is bigger than 0, the string will be ellided so it does not exceed that width - */ - QString shortDisplayNameForSettings(Account* account, int width = 0) const; - Ui::SettingsDialog *const _ui; QActionGroup *_actionGroup; diff --git a/src/gui/settingsdialogcommon.cpp b/src/gui/settingsdialogcommon.cpp new file mode 100644 index 000000000..de6f820c8 --- /dev/null +++ b/src/gui/settingsdialogcommon.cpp @@ -0,0 +1,28 @@ +namespace SettingsDialogCommon +{ + +/** display name with two lines that is displayed in the settings + * If width is bigger than 0, the string will be ellided so it does not exceed that width + */ +QString shortDisplayNameForSettings(Account* account, int width) +{ + QString user = account->davDisplayName(); + if (user.isEmpty()) { + user = account->credentials()->user(); + } + QString host = account->url().host(); + int port = account->url().port(); + if (port > 0 && port != 80 && port != 443) { + host.append(QLatin1Char(':')); + host.append(QString::number(port)); + } + if (width > 0) { + QFont f; + QFontMetrics fm(f); + host = fm.elidedText(host, Qt::ElideMiddle, width); + user = fm.elidedText(user, Qt::ElideRight, width); + } + return user + QLatin1String("\n") + host; +} + +} \ No newline at end of file diff --git a/src/gui/settingsdialogmac.cpp b/src/gui/settingsdialogmac.cpp index db4fad95f..9124c8288 100644 --- a/src/gui/settingsdialogmac.cpp +++ b/src/gui/settingsdialogmac.cpp @@ -38,6 +38,9 @@ namespace OCC { +#include "settingsdialogcommon.cpp" + + // Duplicate in settingsdialog.cpp static QIcon circleMask(const QImage &avatar) { @@ -146,7 +149,7 @@ void SettingsDialogMac::accountAdded(AccountState *s) QIcon accountIcon = MacStandardIcon::icon(MacStandardIcon::UserAccounts); auto accountSettings = new AccountSettings(s, this); - QString displayName = Theme::instance()->multiAccount() ? s->shortDisplayNameForSettings() : tr("Account"); + QString displayName = Theme::instance()->multiAccount() ? SettingsDialogCommon::shortDisplayNameForSettings(s->account().data(), 0) : tr("Account"); insertPreferencesPanel(0, accountIcon, displayName, accountSettings); From b8f7c6daae335f1fa620bcb8eb9c0125dbe5da31 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 6 Oct 2017 14:34:22 +0200 Subject: [PATCH 153/166] CMakeLists.txt: Put -pie as a linker flag were it belongs Fixes warning introduced by PR #6040 --- src/cmd/CMakeLists.txt | 5 +++-- src/gui/CMakeLists.txt | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cmd/CMakeLists.txt b/src/cmd/CMakeLists.txt index 9cdd6cf32..89464ca38 100644 --- a/src/cmd/CMakeLists.txt +++ b/src/cmd/CMakeLists.txt @@ -20,8 +20,9 @@ include_directories(${CMAKE_SOURCE_DIR}/src/csync include_directories(${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer) if(UNIX AND NOT APPLE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie -fPIE") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") endif() if(NOT BUILD_LIBRARIES_ONLY) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 0aa132a1e..2ae957355 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -243,8 +243,9 @@ if (NOT NO_SHIBBOLETH) endif() if(UNIX AND NOT APPLE) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie -fPIE") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") endif() if(NOT BUILD_OWNCLOUD_OSX_BUNDLE) From cffc1fd1c41627b72613d48ba78d285db20a3ede Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 7 Oct 2017 02:18:37 +0200 Subject: [PATCH 154/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 ++ translations/client_ca.ts | 56 +++++++++++----------- translations/client_cs.ts | 56 +++++++++++----------- translations/client_de.ts | 56 +++++++++++----------- translations/client_el.ts | 56 +++++++++++----------- translations/client_en.ts | 56 +++++++++++----------- translations/client_es.ts | 56 +++++++++++----------- translations/client_es_AR.ts | 56 +++++++++++----------- translations/client_et.ts | 56 +++++++++++----------- translations/client_eu.ts | 56 +++++++++++----------- translations/client_fa.ts | 56 +++++++++++----------- translations/client_fi.ts | 56 +++++++++++----------- translations/client_fr.ts | 56 +++++++++++----------- translations/client_gl.ts | 56 +++++++++++----------- translations/client_hu.ts | 56 +++++++++++----------- translations/client_it.ts | 56 +++++++++++----------- translations/client_ja.ts | 56 +++++++++++----------- translations/client_nb_NO.ts | 56 +++++++++++----------- translations/client_nl.ts | 56 +++++++++++----------- translations/client_pl.ts | 56 +++++++++++----------- translations/client_pt.ts | 56 +++++++++++----------- translations/client_pt_BR.ts | 56 +++++++++++----------- translations/client_ru.ts | 56 +++++++++++----------- translations/client_sk.ts | 56 +++++++++++----------- translations/client_sl.ts | 56 +++++++++++----------- translations/client_sr.ts | 56 +++++++++++----------- translations/client_sv.ts | 56 +++++++++++----------- translations/client_th.ts | 56 +++++++++++----------- translations/client_tr.ts | 56 +++++++++++----------- translations/client_uk.ts | 56 +++++++++++----------- translations/client_zh_CN.ts | 92 ++++++++++++++++++------------------ translations/client_zh_TW.ts | 56 +++++++++++----------- 32 files changed, 889 insertions(+), 886 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 72a4b4315..bee95fe17 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -186,6 +186,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index f3beb1ed0..00756d389 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -136,7 +136,7 @@ - + Cancel Cancel·la @@ -221,82 +221,82 @@ %1 en ús - + %1 as <i>%2</i> %1 com a <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versió del servidor %1 és antiga i fora de suport! Continua sota la teva responsabilitat. - + Connected to %1. Connectat a %1 - + Server %1 is temporarily unavailable. El servidor %1 no està disponible temporalment - + Server %1 is currently in maintenance mode. - + Signed out from %1. S'ha desconnectat de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. No hi ha connexió amb %1 a %2. - + Log in Inici de sessió - + There are folders that were not synchronized because they are too big: Hi ha carpetes que no s'han sincronitzat perquè són massa grans: - + There are folders that were not synchronized because they are external storages: Hi ha carpetes que no s'han sincronitzat perquè són fonts d'emmagatzematge externes: - + There are folders that were not synchronized because they are too big or external storages: Hi ha carpetes que no s'han sincronitzat perquè són massa grans o són fonts d'emmagatzematge externes: - + Confirm Account Removal Confirmeu l'eliminació del compte - + <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> <p>Segur que voleu eliminar la connexió al compte <i>%1</i>?</p><p><b>Nota:</b> això <b>no</b> esborrarà cap fitxer.</p> - + Remove connection Elimina la connexió @@ -308,7 +308,7 @@ - + Log out Surt @@ -343,7 +343,7 @@ Actualment no hi ha informació disponible de l'ús d'emmagatzemament. - + No %1 connection configured. La connexió %1 no està configurada. @@ -2500,22 +2500,22 @@ No és aconsellada usar-la. Arranjament - + Activity Activitat - + General General - + Network Xarxa - + Account Compte @@ -2523,27 +2523,27 @@ No és aconsellada usar-la. OCC::SettingsDialogMac - + %1 %1 - + Activity Activitat - + General General - + Network Xarxa - + Account Compte diff --git a/translations/client_cs.ts b/translations/client_cs.ts index c069fd3b3..31fcc55e5 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -136,7 +136,7 @@ - + Cancel Zrušit @@ -221,82 +221,82 @@ %1 používaný - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server verze %1 je zastaralý a nepodporovaný! Pokračujte na vlastní riziko. - + Connected to %1. Připojeno k %1. - + Server %1 is temporarily unavailable. Server %1 je dočasně nedostupný. - + Server %1 is currently in maintenance mode. server %1 je v režimu údržby. - + Signed out from %1. Odhlášeno z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... Připojeno k %1... - + No connection to %1 at %2. Bez připojení k %1 na %2. - + Log in Přihlásit - + There are folders that were not synchronized because they are too big: Tyto složky nebyly synchronizovány, protože jsou příšliš velké: - + There are folders that were not synchronized because they are external storages: Tyto složky nebyly synchronizovány, protože se nachází na externím úložišti: - + There are folders that were not synchronized because they are too big or external storages: Tyto složky nebyly synchronizovány, protože jsou příliš velké, nebo se nachází na externím úložišti: - + Confirm Account Removal Potvrdit odstranění účtu - + <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> <p>Opravdu chcete odstranit připojení k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Toto <b>neodstraní</b> žádné soubory.</p> - + Remove connection Odstranit připojení @@ -308,7 +308,7 @@ - + Log out Odhlásit se @@ -343,7 +343,7 @@ Momentálně nejsou k dispozici žádné informace o využití úložiště. - + No %1 connection configured. Žádné spojení s %1 nenastaveno. @@ -2503,22 +2503,22 @@ Nedoporučuje se jí používat. Nastavení - + Activity Aktivita - + General Hlavní - + Network Síť - + Account Účet @@ -2526,27 +2526,27 @@ Nedoporučuje se jí používat. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivita - + General Hlavní - + Network Síť - + Account Účet diff --git a/translations/client_de.ts b/translations/client_de.ts index 5757d8c05..e0889bfad 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -136,7 +136,7 @@ - + Cancel Abbrechen @@ -221,82 +221,82 @@ %1 wird verwendet - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Die Serververision %1 ist alt und nicht unterstützt! Fortfahren auf eigenes Risiko. - + Connected to %1. Verbunden mit %1. - + Server %1 is temporarily unavailable. Server %1 ist derzeit nicht verfügbar. - + Server %1 is currently in maintenance mode. Server %1 befindet sich im Wartungsmodus. - + Signed out from %1. Abgemeldet von %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Berechtigung vom Browser einholen. <a href='%1'> Hier klicken </a> zum nochmaligen Öffnen des Browsers. - + Connecting to %1... Verbinde mit %1... - + No connection to %1 at %2. Keine Verbindung zu %1 auf %2 - + Log in Einloggen - + There are folders that were not synchronized because they are too big: Einige Verzeichnisse konnten nicht synchronisiert werden, da sie zu groß sind: - + There are folders that were not synchronized because they are external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese externe Speicher sind: - + There are folders that were not synchronized because they are too big or external storages: Es gibt Verzeichnisse, die nicht synchronisiert werden konnten, da diese zu groß oder externe Speicher sind: - + Confirm Account Removal Konto wirklich entfernen? - + <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> <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> - + Remove connection Verbindung entfernen @@ -308,7 +308,7 @@ - + Log out Abmelden @@ -343,7 +343,7 @@ Derzeit sind keine Speichernutzungsinformationen verfügbar. - + No %1 connection configured. Keine %1-Verbindung konfiguriert. @@ -2504,22 +2504,22 @@ Es ist nicht ratsam, diese zu benutzen. Einstellungen - + Activity Aktivität - + General Allgemein - + Network Netzwerk - + Account Benutzerkonto @@ -2527,27 +2527,27 @@ Es ist nicht ratsam, diese zu benutzen. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivität - + General Allgemein - + Network Netzwerk - + Account Benutzerkonto diff --git a/translations/client_el.ts b/translations/client_el.ts index e059875e6..86a9254bc 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -136,7 +136,7 @@ - + Cancel Άκυρο @@ -221,82 +221,82 @@ %1 σε χρήση - + %1 as <i>%2</i> %1 ως <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Η έκδοση του διακομιστή %1 είναι παλιά και δεν υποστηρίζεται! Προχωρείστε με δική σας ευθύνη. - + Connected to %1. Συνδεδεμένο με %1. - + Server %1 is temporarily unavailable. Ο διακομιστής %1 δεν είναι διαθέσιμος προσωρινά. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Αποσυνδέθηκε από %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Δεν υπάρχει σύνδεση με το %1 στο %2. - + Log in Είσοδος - + There are folders that were not synchronized because they are too big: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι: - + There are folders that were not synchronized because they are external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι εξωτερικοί αποθηκευτικοί χώροι: - + There are folders that were not synchronized because they are too big or external storages: Υπάρχουν φάκελοι που δεν συγχρονίστηκαν επειδή είναι πολύ μεγάλοι ή αποθηκευτικοί χώροι: - + Confirm Account Removal Επιβεβαίωση Αφαίρεσης Λογαριασμού - + <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> <p>Θέλετε πραγματικά να αφαιρέσετε τη σύνδεση με το λογαριασμό <i>%1</i>;</p><p><b>Σημείωση:</b> Αυτό <b>δεν</b> θα διαγράψει κανένα αρχείο.</p> - + Remove connection Αφαίρεση σύνδεσης @@ -308,7 +308,7 @@ - + Log out Αποσύνδεση @@ -343,7 +343,7 @@ Προς το παρόν δεν υπάρχουν πληροφορίες χρήσης χώρου αποθήκευσης διαθέσιμες. - + No %1 connection configured. Δεν έχει ρυθμιστεί σύνδεση με το %1. @@ -2505,22 +2505,22 @@ It is not advisable to use it. Ρυθμίσεις - + Activity Δραστηριότητα - + General Γενικά - + Network Δίκτυο - + Account Λογαριασμός @@ -2528,27 +2528,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Δραστηριότητα - + General Γενικά - + Network Δίκτυο - + Account Λογαριασμός diff --git a/translations/client_en.ts b/translations/client_en.ts index 3238aa1e9..036612149 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -138,7 +138,7 @@ - + Cancel @@ -223,82 +223,82 @@ - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. - + Server %1 is temporarily unavailable. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal - + <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> - + Remove connection @@ -310,7 +310,7 @@ - + Log out @@ -345,7 +345,7 @@ - + No %1 connection configured. @@ -2524,22 +2524,22 @@ It is not advisable to use it. - + Activity - + General - + Network - + Account @@ -2547,27 +2547,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 - + Activity - + General - + Network - + Account diff --git a/translations/client_es.ts b/translations/client_es.ts index c6fb2b31c..c60854898 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -136,7 +136,7 @@ - + Cancel Cancelar @@ -221,82 +221,82 @@ %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versión del servidor %1 es antigua, ¡y no está soportada! Si continúas, lo haces bajo tu propio riesgo. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. Servidor %1 no está disponible temporalmente. - + Server %1 is currently in maintenance mode. El servidor %1 está actualmente en modo mantenimiento. - + Signed out from %1. Cerró sesión desde %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obteniendo autorización desde el navegador. <a href='%1'>Haga click aqui</a> para re-abrir el navegador . - + Connecting to %1... Conectando a %1... - + No connection to %1 at %2. Sin conexión a %1 en %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: Hay carpetas que no fueron sincronizadas porque son demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hay carpetas que no fueron sincronizadas porque residen en almacenamiento externo: - + There are folders that were not synchronized because they are too big or external storages: Hay carpetas que no fueron sincronizadas porque son demasiado grandes o residen en almacenes externos: - + Confirm Account Removal Confirmar eliminación de cuenta - + <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> <p>¿De verdad quiere eliminar la conexión a la cuenta <i>%1</i>?</p><p><b>Nota:</b> Esto <b>no</b> eliminará los archivos.</p> - + Remove connection Eliminar conexión @@ -308,7 +308,7 @@ - + Log out Cerrar sesión @@ -343,7 +343,7 @@ Actualmente no hay información disponible sobre el uso de almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -2504,22 +2504,22 @@ No se recomienda usarla. Ajustes - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2527,27 +2527,27 @@ No se recomienda usarla. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividad - + General General - + Network Red - + Account Cuenta diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 904cf1197..2f3dcf759 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -136,7 +136,7 @@ - + Cancel Cancelar @@ -221,82 +221,82 @@ %1 en uso - + %1 as <i>%2</i> %1 de <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. ¡La versión del servidor% 1 es antigua y no está soportada! Proceda bajo su propio riesgo. - + Connected to %1. Conectado a %1 - + Server %1 is temporarily unavailable. El servidor %1 esta temporalmente sin conexión - + Server %1 is currently in maintenance mode. Servidor %1 actualmente en modo mantenimiento. - + Signed out from %1. Registrado desde %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obteniendo autorización del navegador. <a href='%1'>Click aquí</a> para volver a abrir el navegador. - + Connecting to %1... Conectando a %1... - + No connection to %1 at %2. Sin conexión a %1 desde %2. - + Log in Iniciar sesión - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Confirmar la eliminación de la cuenta - + <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> - + Remove connection Eliminar conexión @@ -308,7 +308,7 @@ - + Log out Cerrar la sesión @@ -343,7 +343,7 @@ Actualmente no hay información disponible acerca del uso del almacenamiento. - + No %1 connection configured. No hay ninguna conexión de %1 configurada. @@ -2492,22 +2492,22 @@ It is not advisable to use it. Configuración - + Activity Actividad - + General General - + Network Red - + Account Cuenta @@ -2515,27 +2515,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividad - + General General - + Network Red - + Account Cuenta diff --git a/translations/client_et.ts b/translations/client_et.ts index 9853b0a7d..206a9f9a3 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -136,7 +136,7 @@ - + Cancel Loobu @@ -221,82 +221,82 @@ %1 kasutusel - + %1 as <i>%2</i> %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Ühendatud %1 - + Server %1 is temporarily unavailable. Server %1 pole ajutiselt saadaval. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Logi sisse - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Kinnita konto eemaldamine - + <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> - + Remove connection Eemalda ühendus @@ -308,7 +308,7 @@ - + Log out Logi välja @@ -343,7 +343,7 @@ Hetkel pole mahu kasutuse info saadaval. - + No %1 connection configured. Ühtegi %1 ühendust pole seadistatud. @@ -2493,22 +2493,22 @@ Selle kasutamine pole soovitatav. Seaded - + Activity Toimingud - + General Üldine - + Network Võrk - + Account Konto @@ -2516,27 +2516,27 @@ Selle kasutamine pole soovitatav. OCC::SettingsDialogMac - + %1 %1 - + Activity Toimingud - + General Üldine - + Network Võrk - + Account Konto diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 4d8dd2276..3d1584287 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -136,7 +136,7 @@ - + Cancel Ezeztatu @@ -221,82 +221,82 @@ %1 erabiltzen - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Zerbitzariaren bertsioa %1 zaharra eta euskarririk gabekoa da! Zure ardurapean aritu. - + Connected to %1. %1ra konektatuta. - + Server %1 is temporarily unavailable. %1 zerbitzaria ez dago orain eskuragarri - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1etik saioa itxita. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Konexiorik ez %1-ekin %2-etan - + Log in Hasi saioa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Baieztatu Kontuaren Ezabatzea - + <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> - + Remove connection Ezabatu konexioa @@ -308,7 +308,7 @@ - + Log out Saioa bukatu @@ -343,7 +343,7 @@ Orain ez dago eskuragarri biltegiratze erabileraren informazioa. - + No %1 connection configured. Ez dago %1 konexiorik konfiguratuta. @@ -2495,22 +2495,22 @@ Ez da gomendagarria erabltzea. Ezarpenak - + Activity Jarduera - + General Orokorra - + Network Sarea - + Account Kontua @@ -2518,27 +2518,27 @@ Ez da gomendagarria erabltzea. OCC::SettingsDialogMac - + %1 %1 - + Activity Jarduera - + General Orokorra - + Network Sarea - + Account Kontua diff --git a/translations/client_fa.ts b/translations/client_fa.ts index a4fc98d61..a1b55f6ee 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -136,7 +136,7 @@ - + Cancel منصرف شدن @@ -221,82 +221,82 @@ - + %1 as <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. متصل به %1. - + Server %1 is temporarily unavailable. سرور %1 بصورت موقت خارج از دسترس است. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... اتصال به %1... - + No connection to %1 at %2. - + Log in ورود - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal تائید حذف حساب‌کاربری - + <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> - + Remove connection حذف ارتباط @@ -308,7 +308,7 @@ - + Log out خروج @@ -343,7 +343,7 @@ - + No %1 connection configured. بدون %1 اتصال پیکربندی شده. @@ -2492,22 +2492,22 @@ It is not advisable to use it. تنظیمات - + Activity فعالیت - + General عمومی - + Network شبکه - + Account حساب کاربری @@ -2515,27 +2515,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity فعالیت - + General عمومی - + Network شبکه - + Account حساب کاربری diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 809e27df3..4d7fa5e99 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -136,7 +136,7 @@ - + Cancel Peruuta @@ -221,82 +221,82 @@ %1 käytössä - + %1 as <i>%2</i> %1 käyttäjänä <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Palvelimen versio %1 on vanha ja sen tuki on loppunut! Jatka omalla vastuulla. - + Connected to %1. Yhteys muodostettu kohteeseen %1. - + Server %1 is temporarily unavailable. Palvelin %1 ei ole juuri nyt saatavilla. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Kirjauduttu ulos kohteesta %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ei yhteyttä kohteeseen %1 osoitteessa %2. - + Log in Kirjaudu sisään - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Vahvista tilin poistaminen - + <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> <p>Haluatko varmasti poistaa tilin <i>%1</i>?</p><p><b>Huomio:</b> Tämä toimenpide <b>ei</b> poista mitään tiedostoja.</p> - + Remove connection Poista yhteys @@ -308,7 +308,7 @@ - + Log out Kirjaudu ulos @@ -343,7 +343,7 @@ Tallennustilan käyttötietoja ei ole juuri nyt saatavilla. - + No %1 connection configured. %1-yhteyttä ei ole määritelty. @@ -2495,22 +2495,22 @@ Osoitteen käyttäminen ei ole suositeltavaa. Asetukset - + Activity Toimet - + General Yleiset - + Network Verkko - + Account Tili @@ -2518,27 +2518,27 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::SettingsDialogMac - + %1 %1 - + Activity Toimet - + General Yleiset - + Network Verkko - + Account Tili diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 642d0bae9..bd1d90c64 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -136,7 +136,7 @@ - + Cancel Annuler @@ -221,82 +221,82 @@ %1 utilisés - + %1 as <i>%2</i> %1 avec le compte <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La version %1 du serveur est ancienne et n'est pas prise en charge. Continuez à vos risques et périls. - + Connected to %1. Connecté au serveur %1. - + Server %1 is temporarily unavailable. Le serveur %1 est temporairement indisponible. - + Server %1 is currently in maintenance mode. Le serveur %1 est en cours de maintenance. - + Signed out from %1. Session sur %1 fermée. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. En attente d'autorisation du navigateur. <a href='%1'>Cliquer ici</a> pour recharger le navigateur. - + Connecting to %1... - + No connection to %1 at %2. Aucune connexion au serveur %1 à l'adresse %2. - + Log in Se connecter - + There are folders that were not synchronized because they are too big: Certains dossiers n'ont pas été synchronisés parce qu'ils sont de taille trop importante : - + There are folders that were not synchronized because they are external storages: Certains dossiers n'ont pas été synchronisés parce qu'ils sont localisés sur un stockage externe : - + There are folders that were not synchronized because they are too big or external storages: Certains dossiers n'ont pas été synchronisés par qu'ils sont localisés sur un stockage externe ou qu'ils sont de taille trop importante : - + Confirm Account Removal Confirmation de retrait du compte - + <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> <p>Êtes-vous certain de vouloir retirer <i>%1</i> des comptes synchronisés avec le serveur ?</p><p><b>Remarque :</b> cela ne supprimera pas votre compte sur le serveur et aucun fichier ne sera supprimé ni localement ni en ligne.</p> - + Remove connection Retirer le compte @@ -308,7 +308,7 @@ - + Log out Se déconnecter @@ -343,7 +343,7 @@ Actuellement aucune information d'utilisation de stockage n'est disponible. - + No %1 connection configured. Aucune connexion à %1 configurée @@ -2506,22 +2506,22 @@ Il est déconseillé de l'utiliser. Paramètres - + Activity Activité - + General Paramètres - + Network Réseau - + Account Compte @@ -2529,27 +2529,27 @@ Il est déconseillé de l'utiliser. OCC::SettingsDialogMac - + %1 %1 - + Activity Activité - + General Paramètres - + Network Réseau - + Account Compte diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 546d93e6c..7aed96a72 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -136,7 +136,7 @@ - + Cancel Cancelar @@ -221,82 +221,82 @@ %1 en uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Este servidor da versión %1 é vello e non ten soporte! Vostede verá o que fai. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O servidor %1 non está dispoñíbel temporalmente. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Desconectado de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Non hai conexión con %1 en %2. - + Log in Acceder - + There are folders that were not synchronized because they are too big: Hai cartafoles que non se sincronizaron por ser demasiado grandes: - + There are folders that were not synchronized because they are external storages: Hai cartafoles que non se sincronizaron porque son almacenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Hai cartafoles que non se sincronizaron porque son demasiado grandes ou almacenamentos externos: - + Confirm Account Removal Confirme a retirada da conta - + <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> <p>De verdade quere retirar a conexión a conta <i>%1</i>?</p><p><b>Aviso:</b> Esto <b>non</b> eliminará ningún ficheiro.</p> - + Remove connection Retirar conexión @@ -308,7 +308,7 @@ - + Log out Desconectar @@ -343,7 +343,7 @@ Actualmente non hai dispoñíbel ningunha información sobre o uso do almacenamento. - + No %1 connection configured. Non se configurou a conexión %1. @@ -2494,22 +2494,22 @@ Recomendámoslle que non o use. Axustes - + Activity Actividade - + General Xeral - + Network Rede - + Account Conta @@ -2517,27 +2517,27 @@ Recomendámoslle que non o use. OCC::SettingsDialogMac - + %1 %1 - + Activity Actividade - + General Xeral - + Network Rede - + Account Conta diff --git a/translations/client_hu.ts b/translations/client_hu.ts index 4ee2b6916..f40409ffb 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -136,7 +136,7 @@ - + Cancel Mégsem @@ -221,82 +221,82 @@ %1 használatban - + %1 as <i>%2</i> %1, mint <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. %1 szerver verzió régi és már nem támogatott! Folytatás saját felelősségre. - + Connected to %1. Csatlakozva: %1. - + Server %1 is temporarily unavailable. %1 szerver jelenleg nem elérhető. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Kijelentkezve innen: %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Nincs kapcsolat ehhez: %1 ekkor: %2. - + Log in Bejelentkezés - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Fiók törlésének megerősítése - + <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> <p>Tényleg törölni szeretné a kapcsolatot <i>%1</i> fiókkal?</p><p><b>Megjegyzés:</b> Ez <b>nem</b> töröl fájlokat.</p> - + Remove connection Kapcsolat törlése @@ -308,7 +308,7 @@ - + Log out Kilépés @@ -343,7 +343,7 @@ Jelenleg nem érhető el tárhelyhasználati információ. - + No %1 connection configured. Nincs beállított kapcsolat: %1. @@ -2492,22 +2492,22 @@ It is not advisable to use it. Beállítások - + Activity Aktivitás - + General Általános - + Network Hálózat - + Account Fiók @@ -2515,27 +2515,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitás - + General Általános - + Network Hálózat - + Account Fiók diff --git a/translations/client_it.ts b/translations/client_it.ts index 36671d989..1b9aa808d 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -136,7 +136,7 @@ - + Cancel Annulla @@ -221,82 +221,82 @@ %1 in uso - + %1 as <i>%2</i> %1 come <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. La versione %1 del server è datata e non supportata! Continua a tuo rischio. - + Connected to %1. Connesso a %1. - + Server %1 is temporarily unavailable. Il server %1 è temporaneamente non disponibile. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Disconnesso da %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Nessuna connessione a %1 su %2. - + Log in Accedi - + There are folders that were not synchronized because they are too big: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi: - + There are folders that were not synchronized because they are external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono archiviazioni esterne: - + There are folders that were not synchronized because they are too big or external storages: Ci sono nuove cartelle che non sono state sincronizzate poiché sono troppo grandi o archiviazioni esterne: - + Confirm Account Removal Conferma rimozione account - + <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> <p>Vuoi davvero eliminare la connessione all'account <i>%1</i>?</p><p><b>Nota:</b> ciò <b>non</b> eliminerà alcun file.</p> - + Remove connection Rimuovi connessione @@ -308,7 +308,7 @@ - + Log out Esci @@ -343,7 +343,7 @@ Non ci sono informazioni disponibili sull'utilizzo dello spazio di archiviazione. - + No %1 connection configured. Nessuna connessione di %1 configurata. @@ -2500,22 +2500,22 @@ Non è consigliabile utilizzarlo. Impostazioni - + Activity Attività - + General Generale - + Network Rete - + Account Account @@ -2523,27 +2523,27 @@ Non è consigliabile utilizzarlo. OCC::SettingsDialogMac - + %1 %1 - + Activity Attività - + General Generale - + Network Rete - + Account Account diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 2eaa2ff9c..024ce0fd8 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -136,7 +136,7 @@ - + Cancel キャンセル @@ -221,82 +221,82 @@ %1 を使用中 - + %1 as <i>%2</i> <i>%2</i> の %1 - + The server version %1 is old and unsupported! Proceed at your own risk. サーバーバージョン %1 は古くサポートされていません!自己責任で進んでください。 - + Connected to %1. %1 に接続 - + Server %1 is temporarily unavailable. サーバー %1 は一時的に利用できません - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1 からサインアウトしました。 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. %2 の %1 への接続がありません。 - + Log in ログイン - + There are folders that were not synchronized because they are too big: 大きすぎるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are external storages: 外部ストレージにあるため同期されなかったフォルダーがあります: - + There are folders that were not synchronized because they are too big or external storages: 大きすぎたか、外部ストレージにあるため同期されなかったフォルダーがあります: - + Confirm Account Removal アカウント削除確認 - + <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> <p> アカウント <i>%1</i> を本当に削除しますか?</p><p><b>注意:</b> これによりファイルが一切削除されることはありません。</p> - + Remove connection 接続削除 @@ -308,7 +308,7 @@ - + Log out ログアウト @@ -343,7 +343,7 @@ 現在、利用できるストレージ利用状況はありません。 - + No %1 connection configured. %1 の接続は設定されていません。 @@ -2501,22 +2501,22 @@ It is not advisable to use it. 設定 - + Activity アクティビティ - + General 一般 - + Network ネットワーク - + Account アカウント @@ -2524,27 +2524,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity アクティビティ - + General 一般 - + Network ネットワーク - + Account アカウント diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 6616cdbcf..e48d19d94 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -136,7 +136,7 @@ - + Cancel Avbryt @@ -221,82 +221,82 @@ %1 i bruk - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Server-versjonen %1 er gammel og støttes ikke! Fortsett på egen risiko. - + Connected to %1. Tilkoblet %1. - + Server %1 is temporarily unavailable. Server %1 er midlertidig utilgjengelig. - + Server %1 is currently in maintenance mode. Server %1 er for øyeblikket i vedlikeholdsmodus. - + Signed out from %1. Logget ut fra %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... Kobler til %1... - + No connection to %1 at %2. Ingen tilkobling til %1 på %2. - + Log in Logg inn - + There are folders that were not synchronized because they are too big: Noen mapper ble ikke synkronisert fordi de er for store - + There are folders that were not synchronized because they are external storages: Noen mapper ble ikke synkronisert fordi de er eksterne lagringsplasser: - + There are folders that were not synchronized because they are too big or external storages: Noen mapper ble ikke synkronisert fordi de er for store eller de er eksterne lagringsplasser: - + Confirm Account Removal Bekreft fjerning av konto - + <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> <p>Vil du virkelig fjerne tilkoblingen til kontoen <i>%1</i>?</p><p><b>Merk:</b> Dette vil <b>ikke</b> slette noen filer.</p> - + Remove connection Fjern tilkobling @@ -308,7 +308,7 @@ - + Log out Logg ut @@ -343,7 +343,7 @@ Ingen informasjon om bruk av lagringsplass tilgjengelig for øyeblikket. - + No %1 connection configured. Ingen %1-forbindelse konfigurert. @@ -2504,22 +2504,22 @@ Det er ikke tilrådelig å bruke den. Innstillinger - + Activity Aktivitet - + General Generelt - + Network Nettverk - + Account Konto @@ -2527,27 +2527,27 @@ Det er ikke tilrådelig å bruke den. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitet - + General Generelt - + Network Nettverk - + Account Konto diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 9a94af4b5..87dbff01c 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -136,7 +136,7 @@ - + Cancel Annuleren @@ -221,82 +221,82 @@ %1 in gebruik - + %1 as <i>%2</i> %1 als <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. De serverversie %1 is oud en wordt niet meer ondersteund. Verdergaan is op eigen risico. - + Connected to %1. Verbonden met %1. - + Server %1 is temporarily unavailable. Server %1 is tijdelijk niet beschikbaar - + Server %1 is currently in maintenance mode. - + Signed out from %1. Uitgelogd van %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Geen verbinding met %1 op %2. - + Log in Meld u aan - + There are folders that were not synchronized because they are too big: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn: - + There are folders that were not synchronized because they are external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze op externe opslag staan: - + There are folders that were not synchronized because they are too big or external storages: Er zijn mappen die niet gesynchroniseerd werden, omdat ze te groot zijn of op externe opslag staan: - + Confirm Account Removal Bevestig verwijderen account - + <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> <p>Wilt u echt de verbinding met het account <i>%1</i> verbreken?</p><p><b>Let op:</b> Hierdoor verwijdert u <b>geen</b> bestanden.</p> - + Remove connection Verwijderen verbinding @@ -308,7 +308,7 @@ - + Log out Afmelden @@ -343,7 +343,7 @@ Er is nu geen informatie over het gebruik van de opslagruimte beschikbaar. - + No %1 connection configured. Geen %1 connectie geconfigureerd. @@ -2509,22 +2509,22 @@ We adviseren deze site niet te gebruiken. Instellingen - + Activity Activiteit - + General Algemeen - + Network Netwerk - + Account Account @@ -2532,27 +2532,27 @@ We adviseren deze site niet te gebruiken. OCC::SettingsDialogMac - + %1 %1 - + Activity Activiteit - + General Algemeen - + Network Netwerk - + Account Account diff --git a/translations/client_pl.ts b/translations/client_pl.ts index 4b3ecfd65..d2cdd9058 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -136,7 +136,7 @@ - + Cancel Anuluj @@ -221,82 +221,82 @@ %1 w użyciu - + %1 as <i>%2</i> %1 jako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Wersja serwera %1 jest przestarzała i nie jest już wspierana. Kontynuujesz na własne ryzyko. - + Connected to %1. Podłączony do %1. - + Server %1 is temporarily unavailable. Serwer %1 jest tymczasowo niedostępny. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Wylogowano z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Brak połączenia do %1 z %2. - + Log in Zaloguj - + There are folders that were not synchronized because they are too big: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duze: - + There are folders that were not synchronized because they are external storages: Te foldery nie zostały zsynchronizowane ponieważ znajdują się w pamięci zewnętrznej: - + There are folders that were not synchronized because they are too big or external storages: Te foldery nie zostały zsynchronizowane ponieważ są zbyt duże lub znajdują się w pamięci zewnętrznej: - + Confirm Account Removal Potwierdź usunięcie konta - + <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> <p>Czy na pewno chcesz usunąć połączenie z kontem <i>%1</i>?</p><p><b>Uwaga:</b> ta operacja <b>nie</b> usunie plików klienta.</p> - + Remove connection Usuwanie połączenia @@ -308,7 +308,7 @@ - + Log out Wyloguj @@ -343,7 +343,7 @@ Obecnie nie ma dostępnych informacji o wykorzystaniu pamięci masowej. - + No %1 connection configured. Połączenie %1 nie skonfigurowane. @@ -2498,22 +2498,22 @@ Niezalecane jest jego użycie. Ustawienia - + Activity Aktywność - + General Ogólne - + Network Sieć - + Account Konto @@ -2521,27 +2521,27 @@ Niezalecane jest jego użycie. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktywność - + General Ogólne - + Network Sieć - + Account Konto diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 33fb6f518..668590279 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -136,7 +136,7 @@ - + Cancel Cancelar @@ -221,82 +221,82 @@ %1 em utilização - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão %1 do servidor é antiga e não é suportada! Prossiga por sua conta e risco. - + Connected to %1. Ligado a %1. - + Server %1 is temporarily unavailable. O servidor %1 está temporariamente indisponível. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Terminou a sessão de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Sem ligação para %1 em %2. - + Log in Iniciar Sessão - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas por serem demasiado grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas por serem armazenamento externo: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas por serem demasiado grandes ou armazenamento externo: - + Confirm Account Removal Confirmar Remoção da Conta - + <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> <p>Deseja mesmo remover a ligação da conta <i>%1</i>?</p><p><b>Nota:</b> isto <b>não</b> irá eliminar quaisquer ficheiros.</p> - + Remove connection Remover ligação @@ -308,7 +308,7 @@ - + Log out Terminar sessão @@ -343,7 +343,7 @@ Atualmente não está disponível nenhuma informação da utilização do armazenamento. - + No %1 connection configured. %1 sem ligação configurada. @@ -2505,22 +2505,22 @@ Não é aconselhada a sua utilização. Definições - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2528,27 +2528,27 @@ Não é aconselhada a sua utilização. OCC::SettingsDialogMac - + %1 %1 - + Activity Atividade - + General Geral - + Network Rede - + Account Conta diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index f98f278d0..caa81d22a 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -136,7 +136,7 @@ - + Cancel Cancelar @@ -221,82 +221,82 @@ %1 em uso - + %1 as <i>%2</i> %1 como <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. A versão do servidor %1 é antiga e não suportada! Prossiga por conta própria. - + Connected to %1. Conectado a %1. - + Server %1 is temporarily unavailable. O Servidor %1 está temporariamente indisponível. - + Server %1 is currently in maintenance mode. Servidor %1 está atualmente em modo de manutenção. - + Signed out from %1. Desconectado de %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Obtendo autorização do navegador. <a href='%1'>Clique aqui</a> para reabrir o navegador. - + Connecting to %1... Conectando a %1... - + No connection to %1 at %2. Sem conexão para %1 em %2. - + Log in Entrar - + There are folders that were not synchronized because they are too big: Existem pastas que não foram sincronizadas porque são muito grandes: - + There are folders that were not synchronized because they are external storages: Existem pastas que não foram sincronizadas porque são armazenamentos externos: - + There are folders that were not synchronized because they are too big or external storages: Existem pastas que não foram sincronizadas porque são muito grandes ou armazenamentos externos: - + Confirm Account Removal Confirmar a Remoção da Conta - + <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> <p>Você realmente deseja remover a conexão desta conta<i>%1</i>?</p><p><b>Nota:</b> Isto <b>não</b> irá deletar nenhum arquivo.</p> - + Remove connection Remover conexão @@ -308,7 +308,7 @@ - + Log out Sair @@ -343,7 +343,7 @@ Atualmente, não há informações de uso de armazenamento disponível. - + No %1 connection configured. Nenhuma %1 conexão configurada. @@ -2502,22 +2502,22 @@ It is not advisable to use it. Configurações - + Activity Atividade - + General Geral - + Network Rede - + Account Conta @@ -2525,27 +2525,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Atividade - + General Geral - + Network Rede - + Account Conta diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 7698a850e..25fdda32d 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -136,7 +136,7 @@ - + Cancel Отмена @@ -221,82 +221,82 @@ %1 используется - + %1 as <i>%2</i> %1 как <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Сервер версии %1 устарел и не поддерживается! Продолжайте на свой страх и риск. - + Connected to %1. Соединен с %1. - + Server %1 is temporarily unavailable. Сервер %1 временно недоступен. - + Server %1 is currently in maintenance mode. Сервер %1 в настоящее время находится в режиме технического обслуживания. - + Signed out from %1. Успешно вышли из %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Получение авторизации из браузера. <a href='%1'>Нажмите здесь</a>, чтобы повторно открыть браузер. - + Connecting to %1... Соединение с %1... - + No connection to %1 at %2. Нет соединения с %1 в %2. - + Log in Войти - + There are folders that were not synchronized because they are too big: Есть каталоги, которые не были синхронизированы, так как они слишком большие: - + There are folders that were not synchronized because they are external storages: Есть каталоги, которые не были синхронизированы, так как они являются внешними хранилищами: - + There are folders that were not synchronized because they are too big or external storages: Есть каталоги, которые не были синхронизированы, так как они слишком велики или являются внешними хранилищами: - + Confirm Account Removal Подтверждение удаления учетной записи - + <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> <p>Вы действительно желаете удалить подключение к учетной записи <i>%1</i>?</p><p><b>Примечание:</b> Это действие <b>НЕ</b> удалит ваши файлы.</p> - + Remove connection Удалить подключение @@ -308,7 +308,7 @@ - + Log out Выйти @@ -343,7 +343,7 @@ В данный момент информация о заполненности хранилища недоступна. - + No %1 connection configured. Нет настроенного подключения %1. @@ -2502,22 +2502,22 @@ It is not advisable to use it. Настройки - + Activity События - + General Основные - + Network Сеть - + Account Уч.запись @@ -2525,27 +2525,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity События - + General Основные - + Network Сеть - + Account Уч.запись diff --git a/translations/client_sk.ts b/translations/client_sk.ts index a5250879a..047be3298 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -136,7 +136,7 @@ - + Cancel Zrušiť @@ -221,82 +221,82 @@ %1 sa používa - + %1 as <i>%2</i> %1 ako <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Verzia servera %1 je stará a nepodporovaná. Pokračujte na vlastné nebezpečenstvo. - + Connected to %1. Pripojené k %1 - + Server %1 is temporarily unavailable. Server %1 je dočasne nedostupný. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Odhlásený z %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Žiadne pripojenie k %1 na %2. - + Log in Prihlásiť sa - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Potvrďte ostránenie účtu - + <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> <p>Naozaj chcete odstrániť pripojenie k účtu <i>%1</i>?</p><p><b>Poznámka:</b> Tým sa <b>nevymažú</b> žiadne súbory.</p> - + Remove connection Vymazať pripojenie @@ -308,7 +308,7 @@ - + Log out Odhlásiť @@ -343,7 +343,7 @@ Teraz nie sú k dispozícii žiadne informácie o využití úložiska. - + No %1 connection configured. Žiadne nakonfigurované %1 spojenie @@ -2494,22 +2494,22 @@ Nie je vhodné ju používať. Nastavenia - + Activity Aktivita - + General Všeobecné - + Network Sieť - + Account Účet @@ -2517,27 +2517,27 @@ Nie je vhodné ju používať. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivita - + General Všeobecné - + Network Sieť - + Account Účet diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 43c628bd0..85105ff31 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -136,7 +136,7 @@ - + Cancel Prekliči @@ -221,82 +221,82 @@ %1 v uporabi - + %1 as <i>%2</i> %1 kot <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Različica strežnika %1 je zastarela in ni več podprta! Nadaljujete na lastno odgovornost. - + Connected to %1. Povezano z %1. - + Server %1 is temporarily unavailable. Strežnik %1 trenutno ni dosegljiv. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Uspešno odjavljeno iz %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. Ni povezave z %1 pri %2. - + Log in Prijava - + There are folders that were not synchronized because they are too big: Zaznane so mape, ki zaradi omejitve velikosti niso bile usklajene: - + There are folders that were not synchronized because they are external storages: Zaznane so mape, ki zaradi pripadnosti zunanji shrambi niso bile usklajene: - + There are folders that were not synchronized because they are too big or external storages: Zaznane so mape, ki zaradi omejitve velikosti ali pripadnosti zunanji shrambi niso bile usklajene: - + Confirm Account Removal Potrdi odstranitev računa - + <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> <p>Ali res želite odstraniti povezavo z računom <i>%1</i>?</p><p><b>Opomba:</b> S tem <b>ne bo</b> izbrisana nobena datoteka.</p> - + Remove connection Odstrani povezavo @@ -308,7 +308,7 @@ - + Log out Odjava @@ -343,7 +343,7 @@ Trenutno ni na voljo nobenih podatkov o porabi prostora. - + No %1 connection configured. Ni nastavljene povezave %1. @@ -2505,22 +2505,22 @@ Uporaba ni priporočljiva. Nastavitve - + Activity Dejavnosti - + General Splošno - + Network Omrežje - + Account Račun @@ -2528,27 +2528,27 @@ Uporaba ni priporočljiva. OCC::SettingsDialogMac - + %1 %1 - + Activity Dejavnosti - + General Splošno - + Network Omrežje - + Account Račun diff --git a/translations/client_sr.ts b/translations/client_sr.ts index edb53c923..d32f92c17 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -136,7 +136,7 @@ - + Cancel Одустани @@ -221,82 +221,82 @@ %1 искоришћено - + %1 as <i>%2</i> %1 као <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Повезан са %1. - + Server %1 is temporarily unavailable. Сервер %1 је привремено недоступан. - + Server %1 is currently in maintenance mode. - + Signed out from %1. Одјављен са %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Пријава - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Потврда уклањања налога - + <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> - + Remove connection Уклони везу @@ -308,7 +308,7 @@ - + Log out Одјава @@ -343,7 +343,7 @@ Тренутно нема доступних података о заузећу складишта. - + No %1 connection configured. Нема подешене %1 везе. @@ -2494,22 +2494,22 @@ It is not advisable to use it. Поставке - + Activity Активност - + General Опште - + Network Мрежа - + Account Налог @@ -2517,27 +2517,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Активност - + General Опште - + Network Мрежа - + Account Налог diff --git a/translations/client_sv.ts b/translations/client_sv.ts index deed265b6..f4283869f 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -136,7 +136,7 @@ - + Cancel Avbryt @@ -221,82 +221,82 @@ %1 används - + %1 as <i>%2</i> %1 som <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Serverversion %1 är gammal och stöds inte längre! Fortsätt på egen risk. - + Connected to %1. Ansluten till %1. - + Server %1 is temporarily unavailable. Servern %1 är för tillfället inte tillgänglig. - + Server %1 is currently in maintenance mode. Servern %1 är för närvarande i underhållsläge. - + Signed out from %1. Utloggad från %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. Anskaffar autentisering från webbläsaren. <a href='%1'>Klicka här </a> för att öppna webbläsaren igen. - + Connecting to %1... Ansluter till %1... - + No connection to %1 at %2. Ingen anslutning till %1 vid %2. - + Log in Logga in - + There are folders that were not synchronized because they are too big: Dessa mappar har inte synkroniserats för att de är för stora: - + There are folders that were not synchronized because they are external storages: Det finns mappar som inte synkroniserats för att de är externa lagringsytor: - + There are folders that were not synchronized because they are too big or external storages: Det finns mappar som inte blivit synkroniserade på grund av att de är för stora eller är externa lagringsytor: - + Confirm Account Removal Bekräfta radering an kontot - + <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> <p>Vill du verkligen avsluta anslutningen till kontot <i>%1</i>?</p><p><b>Observera:</b> Detta kommer <b>inte</b> radera några filer.</p> - + Remove connection Radera anslutning @@ -308,7 +308,7 @@ - + Log out Logga ut @@ -343,7 +343,7 @@ Just nu finns ingen utrymmes information tillgänglig - + No %1 connection configured. Ingen %1 anslutning konfigurerad. @@ -2500,22 +2500,22 @@ Det är inte lämpligt använda den. Inställningar - + Activity Aktivitet - + General Allmänt - + Network Nätverk - + Account Konto @@ -2523,27 +2523,27 @@ Det är inte lämpligt använda den. OCC::SettingsDialogMac - + %1 %1 - + Activity Aktivitet - + General Allmänt - + Network Nätverk - + Account Konto diff --git a/translations/client_th.ts b/translations/client_th.ts index 1f4314f17..f3b2a6c28 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -136,7 +136,7 @@ - + Cancel ยกเลิก @@ -221,82 +221,82 @@ %1 กำลังถูกใช้งาน - + %1 as <i>%2</i> %1 เช่น <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. เซิร์ฟเวอร์เวอร์ชัน %1 เป็นรุ่นเก่าและไม่ได้รับการสนับสนุน! ดำเนินการความเสี่ยงด้วยคุณเอง - + Connected to %1. เชื่อมต่อกับ %1 - + Server %1 is temporarily unavailable. เซิร์ฟเวอร์ %1 ไม่สามารถใช้ได้ชั่วคราว - + Server %1 is currently in maintenance mode. เซิร์ฟเวอร์ %1 กำลังอยู่ในโหมดการบำรุงรักษา - + Signed out from %1. ลงชื่อออกจาก %1 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. กำลังได้รับอนุญาตจากเบราเซอร์ <a href='%1'>คลิกที่นี่</a> เพื่อเปิดเบราเซอร์อีกครั้ง - + Connecting to %1... กำลังเชื่อมต่อไปยัง %1... - + No connection to %1 at %2. ไม่มีการเชื่อมต่อไปยัง %1 ที่ %2 - + Log in เข้าสู่ระบบ - + There are folders that were not synchronized because they are too big: บางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะขนาดของมันใหญ่เกินไป: - + There are folders that were not synchronized because they are external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอก - + There are folders that were not synchronized because they are too big or external storages: มีบางโฟลเดอร์จะไม่ถูกประสานข้อมูลเพราะเป็นพื้นที่จัดเก็บข้อมูลภายนอกหรือมีขนาดที่ใหญ่เกินไป - + Confirm Account Removal ยืนยันการลบบัญชี - + <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> <p>คุณต้องการลบการเชื่อมต่อกับบัญชี<i>%1</i>?</p><p><b>หมายเหตุ:</b> นี้จะ <b>ไม่</b> ลบไฟล์ใดๆ</p> - + Remove connection ลบการเชื่อมต่อ @@ -308,7 +308,7 @@ - + Log out ออกจากระบบ @@ -343,7 +343,7 @@ ขณะนี้ไม่มีพื้นที่จัดเก็บข้อมูลที่ใช้งานได้ - + No %1 connection configured. ไม่มีการเชื่อมต่อ %1 ที่ถูกกำหนดค่า @@ -2506,22 +2506,22 @@ It is not advisable to use it. ตั้งค่า - + Activity กิจกรรม - + General ทั่วไป - + Network เครือข่าย - + Account บัญชี @@ -2529,27 +2529,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity กิจกรรม - + General ทั่วไป - + Network เครือข่าย - + Account บัญชี diff --git a/translations/client_tr.ts b/translations/client_tr.ts index d733c9602..c0e20beda 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -136,7 +136,7 @@ - + Cancel İptal @@ -221,82 +221,82 @@ %1 kullanımda - + %1 as <i>%2</i> %1 <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. Sunucu sürümü %1 eski ve desteklenmiyor! Kendi riskinizle devam edin. - + Connected to %1. %1 ile bağlı. - + Server %1 is temporarily unavailable. %1 sunucusu geçici olarak ulaşılamaz durumda. - + Server %1 is currently in maintenance mode. - + Signed out from %1. %1 oturumu sonlandırıldı. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. %1 ile %2 bağlantısı yok. - + Log in Giriş yap - + There are folders that were not synchronized because they are too big: Çok büyük oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are external storages: Harici depolama diskinde oldukları için eşitlenmeyen klasörler var: - + There are folders that were not synchronized because they are too big or external storages: Çok büyük oldukları için ya da harici depolama alanında oldukları için eşitlenmeyen klasörler var: - + Confirm Account Removal Hesap Silinmesini Onaylayın - + <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> <p><i>%1</i> hesabının bağlantısını kaldırmayı gerçekten istiyor musunuz?</p><p><b>Not:</b> Bu işlem herhangi bir dosyayı <b>silmeyecektir</b>.</p> - + Remove connection Bağlantıyı kaldır @@ -308,7 +308,7 @@ - + Log out Çıkış yap @@ -343,7 +343,7 @@ Şu anda depolama kullanım bilgisi mevcut değil. - + No %1 connection configured. Hiç %1 bağlantısı yapılandırılmamış. @@ -2495,22 +2495,22 @@ Kullanmanız önerilmez. Ayarlar - + Activity Etkinlik - + General Genel - + Network - + Account Hesap @@ -2518,27 +2518,27 @@ Kullanmanız önerilmez. OCC::SettingsDialogMac - + %1 %1 - + Activity Etkinlik - + General Genel - + Network - + Account Hesap diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 90047bb42..b7e17f44d 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -136,7 +136,7 @@ - + Cancel Скасувати @@ -221,82 +221,82 @@ %1 використовується - + %1 as <i>%2</i> %1 як <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. - + Connected to %1. Підключено до %1. - + Server %1 is temporarily unavailable. Сервер %1 тимчасово недоступний. - + Server %1 is currently in maintenance mode. - + Signed out from %1. - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. - + Log in Увійти - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal Підтвердіть видалення облікового запису - + <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> - + Remove connection @@ -308,7 +308,7 @@ - + Log out Вихід @@ -343,7 +343,7 @@ На даний час немає відомостей про наповнення сховища. - + No %1 connection configured. Жодного %1 підключення не налаштовано. @@ -2493,22 +2493,22 @@ It is not advisable to use it. Налаштування - + Activity Активність - + General Загалом - + Network Мережа - + Account Обліковий запис @@ -2516,27 +2516,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity Активність - + General Загалом - + Network Мережа - + Account Обліковий запис diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 12a55d3cf..f9f26a20e 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -83,7 +83,7 @@ Unknown error: network reply was deleted - + 未知错误:网络相应被删除 @@ -136,7 +136,7 @@ - + Cancel 取消 @@ -221,82 +221,82 @@ %1 使用中 - + %1 as <i>%2</i> %1, <i>%2</i> - + The server version %1 is old and unsupported! Proceed at your own risk. 服务器版本 %1 很旧且不支持,继续操作将自行承担风险。 - + Connected to %1. 连接到 %1。 - + Server %1 is temporarily unavailable. 远程服务器%1暂时不可用。 - + Server %1 is currently in maintenance mode. - + Signed out from %1. 从 %1 退出 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + 正在连接到 %1 - + No connection to %1 at %2. 没有到位于%2中的%1的连接 - + Log in 登录 - + There are folders that were not synchronized because they are too big: 以下目录由于太大而没有同步: - + There are folders that were not synchronized because they are external storages: 以下目录由于是外部存储而没有同步: - + There are folders that were not synchronized because they are too big or external storages: 以下目录由于太大或是外部存储而没有同步: - + Confirm Account Removal 确认删除账号 - + <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> <p>你确定要删除账号的连接? <i>%1</i>?</p><p><b>Note:</b> 这 <b>不会</b> 删除任何文件</p> - + Remove connection 删除连接 @@ -308,7 +308,7 @@ - + Log out 注销 @@ -343,7 +343,7 @@ 目前没有储存使用量信息可用。 - + No %1 connection configured. 没有 %1 连接配置。 @@ -373,7 +373,7 @@ Maintenance mode - + 维护模式 @@ -529,7 +529,7 @@ Certificate & Key (pkcs12) : - 证书与秘钥(pkcs12): + 证书与密匙 (pkcs12): @@ -1409,7 +1409,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from <no filter> - + <no filter> @@ -1420,7 +1420,7 @@ Items where deletion is allowed will be deleted if they prevent a directory from Show warnings - + 显示警告 @@ -1883,7 +1883,7 @@ for additional privileges during the process. Login in your browser - + 在浏览器中登录 @@ -2504,22 +2504,22 @@ It is not advisable to use it. 设置 - + Activity 动态 - + General 常规 - + Network 网络 - + Account 账户 @@ -2527,27 +2527,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity 动态 - + General 常规 - + Network 网络 - + Account 账户 @@ -2691,32 +2691,32 @@ It is not advisable to use it. %1 link - + %1 的链接 Link shares have been disabled - + 分享链接已被关闭 Create public link share - + 创建公共分享链接 Open link in browser - + 在浏览器中打来链接 Copy link to clipboard - + 复制链接到剪贴板 Copy link to clipboard (direct download) - + 复制链接到剪贴板 (直接下载) @@ -2731,7 +2731,7 @@ It is not advisable to use it. Public link - + 公开链接 @@ -2769,12 +2769,12 @@ It is not advisable to use it. Open link in browser - + 在浏览器中打来链接 Copy link to clipboard - + 复制链接到剪贴板 @@ -2887,7 +2887,7 @@ It is not advisable to use it. Share... - + 分享到... @@ -3782,7 +3782,7 @@ It is not advisable to use it. Re-open Browser - + 重新打开浏览器 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index 5bbcebcb7..a4df8bc86 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -136,7 +136,7 @@ - + Cancel 取消 @@ -221,82 +221,82 @@ %1 正在使用 - + %1 as <i>%2</i> %1 如 <i>%2<i> - + The server version %1 is old and unsupported! Proceed at your own risk. 伺服器版本%1過舊,已不支援。繼續的風險請自負。 - + Connected to %1. 已連線到 %1 - + Server %1 is temporarily unavailable. 伺服器 %1 暫時無法使用。 - + Server %1 is currently in maintenance mode. - + Signed out from %1. 從 %1 登出 - + Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Connecting to %1... - + No connection to %1 at %2. 沒有從 %2 連線到 %1 - + Log in 登入 - + There are folders that were not synchronized because they are too big: - + There are folders that were not synchronized because they are external storages: - + There are folders that were not synchronized because they are too big or external storages: - + Confirm Account Removal 確認移除帳號 - + <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> <p>您確定要中斷此帳號 <i>%1</i> 的連線?</p><p><b>注意:</b>此操作 <b>不會</b> 刪除任何的檔案。</p> - + Remove connection 移除連線 @@ -308,7 +308,7 @@ - + Log out 登出 @@ -343,7 +343,7 @@ 目前無法查詢儲存空間使用資訊。 - + No %1 connection configured. 沒有 %1 連線設置。 @@ -2496,22 +2496,22 @@ It is not advisable to use it. 設定 - + Activity 活動 - + General 一般 - + Network 網路 - + Account 帳號 @@ -2519,27 +2519,27 @@ It is not advisable to use it. OCC::SettingsDialogMac - + %1 %1 - + Activity 活動 - + General 一般 - + Network 網路 - + Account 帳號 From 99192a6dec45c3e69c211a31bfcb52dc3d1fd43b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 8 Oct 2017 02:18:36 +0200 Subject: [PATCH 155/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_hu.ts | 6 ++--- translations/client_sl.ts | 48 +++++++++++++++++++-------------------- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index bee95fe17..9176e233f 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -189,6 +189,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_hu.ts b/translations/client_hu.ts index f40409ffb..b8aa72664 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -2600,7 +2600,7 @@ It is not advisable to use it. Public Links - + Publikus Hivatkozások @@ -2648,7 +2648,7 @@ It is not advisable to use it. Show file listing - + Mutassa a fájl listázásokat @@ -2658,7 +2658,7 @@ It is not advisable to use it. Anyone with the link has access to the file/folder - + Bárki a hivatkozással hozzáférhet a fájlhoz/mappához diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 85105ff31..c3b1fa225 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -83,7 +83,7 @@ Unknown error: network reply was deleted - + Neznana napaka: odziv strežnika je bil izbrisan @@ -258,7 +258,7 @@ Connecting to %1... - + Poteka vzpostavljanje povezave s strežnikom %1 ... @@ -388,7 +388,7 @@ Asking Credentials - + Zahteva po poverilih @@ -1398,7 +1398,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n List of issues - + Seznam napak in neskladij @@ -1409,7 +1409,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n <no filter> - + <no filter> @@ -1420,17 +1420,17 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Show warnings - + Pokaži opozorila Show ignored files - + Pokaži prezrte datoteke Copy the issues list to the clipboard. - + Kopiraj seznam napak v odložišče. @@ -1450,7 +1450,7 @@ Predmeti na mestu, kjer je brisanje dovoljeno, bodo izbisani, v kolikor zaradi n Issue - + Napaka @@ -2608,7 +2608,7 @@ Uporaba ni priporočljiva. Users and Groups - Uporabnik in skupine + Uporabniki in skupine @@ -2641,7 +2641,7 @@ Uporaba ni priporočljiva. &Create new - + &Ustvari novo @@ -2656,12 +2656,12 @@ Uporaba ni priporočljiva. Link properties: - + Lastnosti povezave: Show file listing - Pokaži izpis datoteke + Pokaži seznam datotek @@ -2692,7 +2692,7 @@ Uporaba ni priporočljiva. %1 link - + Povezava %1 @@ -2707,12 +2707,12 @@ Uporaba ni priporočljiva. Open link in browser - + Odpri povezavo v brskalniku Copy link to clipboard - + Kopiraj povezavo v odložišče @@ -2770,12 +2770,12 @@ Uporaba ni priporočljiva. Open link in browser - + Odpri povezavo v brskalniku Copy link to clipboard - + Kopiraj povezavo v odložišče @@ -2888,7 +2888,7 @@ Uporaba ni priporočljiva. Share... - + Omogoči souporabo ... @@ -3312,7 +3312,7 @@ Uporaba ni priporočljiva. Unresolved conflict. - + Nerazrešen spor @@ -3773,17 +3773,17 @@ Uporaba ni priporočljiva. Please switch to your browser to proceed. - + Preklopite na brskalnik za nadaljevanje. An error occured while connecting. Please try again. - + Med vzpostavljanjem povezave je prišlo do napake. Poskusite znova. Re-open Browser - + Ponovno odpri brskalnik @@ -4110,7 +4110,7 @@ Uporaba ni priporočljiva. Could not open browser - + Brskalnika ni mogoče odpreti From 3eb2642b11028463905326e5bb6e700db79b242e Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 9 Oct 2017 02:18:35 +0200 Subject: [PATCH 156/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index 9176e233f..953dca49c 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -192,6 +192,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From 92e90f9c554a72b6fa88a47c9865af4a41dfc797 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 6 Oct 2017 11:54:16 +0200 Subject: [PATCH 157/166] Context menu: More detailed status messages Previously it could only display synchronization progress or "up to date". Now it also communicates the same overall state that the icon shows. See owncloud/enterprise#2134 --- src/gui/owncloudgui.cpp | 70 ++++++++++++++++++++++++++--------------- src/gui/owncloudgui.h | 1 - 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp index 76128a85e..b812f0864 100644 --- a/src/gui/owncloudgui.cpp +++ b/src/gui/owncloudgui.cpp @@ -207,13 +207,23 @@ void ownCloudGui::slotComputeOverallSyncStatus() { bool allSignedOut = true; bool allPaused = true; + bool allDisconnected = true; QVector problemAccounts; + auto setStatusText = [&](const QString &text) { + // Don't overwrite the status if we're currently syncing + if (FolderMan::instance()->currentSyncFolder()) + return; + _actionStatus->setText(text); + }; + foreach (auto a, AccountManager::instance()->accounts()) { if (!a->isSignedOut()) { allSignedOut = false; } if (!a->isConnected()) { problemAccounts.append(a); + } else { + allDisconnected = false; } } foreach (Folder *f, FolderMan::instance()->map()) { @@ -224,6 +234,11 @@ void ownCloudGui::slotComputeOverallSyncStatus() if (!problemAccounts.empty()) { _tray->setIcon(Theme::instance()->folderOfflineIcon(true, contextMenuVisible())); + if (allDisconnected) { + setStatusText(tr("Disconnected")); + } else { + setStatusText(tr("Disconnected from some accounts")); + } #ifdef Q_OS_WIN // Windows has a 128-char tray tooltip length limit. QStringList accountNames; @@ -250,10 +265,12 @@ void ownCloudGui::slotComputeOverallSyncStatus() if (allSignedOut) { _tray->setIcon(Theme::instance()->folderOfflineIcon(true, contextMenuVisible())); _tray->setToolTip(tr("Please sign in")); + setStatusText(tr("Signed out")); return; } else if (allPaused) { _tray->setIcon(Theme::instance()->syncStateIcon(SyncResult::Paused, true, contextMenuVisible())); _tray->setToolTip(tr("Account synchronization is disabled")); + setStatusText(tr("Synchronization is paused")); return; } @@ -261,34 +278,40 @@ void ownCloudGui::slotComputeOverallSyncStatus() QString trayMessage; FolderMan *folderMan = FolderMan::instance(); Folder::Map map = folderMan->map(); - SyncResult overallResult = FolderMan::accountStatus(map.values()); + SyncResult::Status overallResult = FolderMan::accountStatus(map.values()).status(); // create the tray blob message, check if we have an defined state - if (overallResult.status() != SyncResult::Undefined) { - if (map.count() > 0) { + if (overallResult != SyncResult::Undefined && map.count() > 0) { #ifdef Q_OS_WIN - // Windows has a 128-char tray tooltip length limit. - trayMessage = folderMan->statusToString(overallResult.status(), false); + // Windows has a 128-char tray tooltip length limit. + trayMessage = folderMan->statusToString(overallResult, false); #else - QStringList allStatusStrings; - foreach (Folder *folder, map.values()) { - QString folderMessage = folderMan->statusToString(folder->syncResult().status(), folder->syncPaused()); - allStatusStrings += tr("Folder %1: %2").arg(folder->shortGuiLocalPath(), folderMessage); - } - trayMessage = allStatusStrings.join(QLatin1String("\n")); -#endif - } else { - trayMessage = tr("No sync folders configured."); + QStringList allStatusStrings; + foreach (Folder *folder, map.values()) { + QString folderMessage = folderMan->statusToString(folder->syncResult().status(), folder->syncPaused()); + allStatusStrings += tr("Folder %1: %2").arg(folder->shortGuiLocalPath(), folderMessage); } + trayMessage = allStatusStrings.join(QLatin1String("\n")); +#endif - QIcon statusIcon = Theme::instance()->syncStateIcon(overallResult.status(), true, contextMenuVisible()); + QIcon statusIcon = Theme::instance()->syncStateIcon(overallResult, true, contextMenuVisible()); _tray->setIcon(statusIcon); _tray->setToolTip(trayMessage); + + if (overallResult == SyncResult::Success || overallResult == SyncResult::Problem) { + setStatusText(tr("Up to date")); + } else if (overallResult == SyncResult::Paused) { + setStatusText(tr("Synchronization is paused")); + } else { + setStatusText(tr("Error during synchronization")); + } } else { - // undefined because there are no folders. - QIcon icon = Theme::instance()->syncStateIcon(SyncResult::Problem, true, contextMenuVisible()); + if (overallResult == SyncResult::Undefined) + overallResult = SyncResult::Problem; + QIcon icon = Theme::instance()->syncStateIcon(overallResult, true, contextMenuVisible()); _tray->setIcon(icon); _tray->setToolTip(tr("There are no sync folders configured.")); + setStatusText(tr("No sync folders configured")); } } @@ -550,11 +573,13 @@ void ownCloudGui::updateContextMenu() _contextMenu->addSeparator(); + _contextMenu->addAction(_actionStatus); if (isConfigured && atLeastOneConnected) { - _contextMenu->addAction(_actionStatus); _contextMenu->addMenu(_recentActionsMenu); - _contextMenu->addSeparator(); } + + _contextMenu->addSeparator(); + if (accountList.isEmpty()) { _contextMenu->addAction(_actionNewAccountWizard); } @@ -742,7 +767,7 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo & .arg(progress._currentDiscoveredFolder)); } } else if (progress.status() == ProgressInfo::Done) { - QTimer::singleShot(2000, this, &ownCloudGui::slotDisplayIdle); + QTimer::singleShot(2000, this, &ownCloudGui::slotComputeOverallSyncStatus); } if (progress.status() != ProgressInfo::Propagation) { return; @@ -812,11 +837,6 @@ void ownCloudGui::slotUpdateProgress(const QString &folder, const ProgressInfo & } } -void ownCloudGui::slotDisplayIdle() -{ - _actionStatus->setText(tr("Up to date")); -} - void ownCloudGui::slotLogin() { if (auto account = qvariant_cast(sender()->property(propertyAccountC))) { diff --git a/src/gui/owncloudgui.h b/src/gui/owncloudgui.h index da4ae38a2..d1b60ae0e 100644 --- a/src/gui/owncloudgui.h +++ b/src/gui/owncloudgui.h @@ -98,7 +98,6 @@ public slots: void slotRemoveDestroyedShareDialogs(); private slots: - void slotDisplayIdle(); void slotLogin(); void slotLogout(); void slotUnpauseAllFolders(); From fe8d2b397ec056d153e26ff3b6e594af34ea6793 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 10 Oct 2017 02:18:44 +0200 Subject: [PATCH 158/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 + translations/client_ca.ts | 118 ++++++++++++++++++------------ translations/client_cs.ts | 118 ++++++++++++++++++------------ translations/client_de.ts | 118 ++++++++++++++++++------------ translations/client_el.ts | 118 ++++++++++++++++++------------ translations/client_en.ts | 118 ++++++++++++++++++------------ translations/client_es.ts | 118 ++++++++++++++++++------------ translations/client_es_AR.ts | 118 ++++++++++++++++++------------ translations/client_et.ts | 118 ++++++++++++++++++------------ translations/client_eu.ts | 118 ++++++++++++++++++------------ translations/client_fa.ts | 118 ++++++++++++++++++------------ translations/client_fi.ts | 118 ++++++++++++++++++------------ translations/client_fr.ts | 130 +++++++++++++++++++-------------- translations/client_gl.ts | 118 ++++++++++++++++++------------ translations/client_hu.ts | 118 ++++++++++++++++++------------ translations/client_it.ts | 136 +++++++++++++++++++++-------------- translations/client_ja.ts | 118 ++++++++++++++++++------------ translations/client_nb_NO.ts | 118 ++++++++++++++++++------------ translations/client_nl.ts | 118 ++++++++++++++++++------------ translations/client_pl.ts | 118 ++++++++++++++++++------------ translations/client_pt.ts | 118 ++++++++++++++++++------------ translations/client_pt_BR.ts | 118 ++++++++++++++++++------------ translations/client_ru.ts | 118 ++++++++++++++++++------------ translations/client_sk.ts | 118 ++++++++++++++++++------------ translations/client_sl.ts | 118 ++++++++++++++++++------------ translations/client_sr.ts | 118 ++++++++++++++++++------------ translations/client_sv.ts | 118 ++++++++++++++++++------------ translations/client_th.ts | 118 ++++++++++++++++++------------ translations/client_tr.ts | 118 ++++++++++++++++++------------ translations/client_uk.ts | 118 ++++++++++++++++++------------ translations/client_zh_CN.ts | 118 ++++++++++++++++++------------ translations/client_zh_TW.ts | 118 ++++++++++++++++++------------ 32 files changed, 2250 insertions(+), 1441 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 953dca49c..06a6a1438 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -195,6 +195,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index 00756d389..be422a538 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -3447,96 +3447,91 @@ No és aconsellada usar-la. OCC::ownCloudGui - + Please sign in Acrediteu-vos - + Folder %1: %2 Carpeta %1: %2 - - No sync folders configured. - No hi ha fitxers de sincronització configurats - - - + There are no sync folders configured. No hi han carpetes sincronitzades configurades. - + Open in browser Obre al navegador - - - + + + Log in... Inicia la sessió - - - + + + Log out Surt - + Recent Changes Canvis recents - + Checking for changes in '%1' S'està comprovant els canvis a '%1' - + Managed Folders: Fitxers gestionats: - + Open folder '%1' Obre carpeta '%1' - + Open %1 in browser Obre %1 en el navegador - + Unknown status Estat desconegut - + Settings... Arranjament... - + Details... Detalls... - + Help Ajuda - + Quit %1 Surt %1 - + Disconnected from %1 S'ha desconnectat de %1 @@ -3551,103 +3546,134 @@ No és aconsellada usar-la. El servidor del compte %1 utilitza la versió antiga %2 antiga i no és compatible. Usar aquest client amb versions no compatibles del servidor no s'ha provat i pot ser potencialment perillós. Procediu sota la vostra responsabilitat. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Desconnectat dels comptes: - + Account %1: %2 Compte %1: %2 - + + Signed out + + + + Account synchronization is disabled La sincronització del compte està deshabilitada - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Reprén totes les carpetes - + Pause all folders Pausa totes les carpetes - + Unpause all synchronization Reprèn totes les sincronitzacions - + Unpause synchronization Reprèn la sincronització - + Pause all synchronization Pausa totes les sincronitzacions - + Pause synchronization Pausa la sincronització - + Log out of all accounts Surt de tots els comptes - + Log in to all accounts... Connecta a tots els comptes... - + New account... Compte nou... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No hi ha elements sincronitzats recentment - + Syncing %1 of %2 (%3 left) Sincronitzant %1 de %2 (%3 pendents) - + Syncing %1 of %2 S'està sincronitzant %1 de %2 - + Syncing %1 (%2 left) Sincronitzant %1 (%2 pendents) - + Syncing %1 S'està sincronitzant %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualitzat diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 31fcc55e5..401822a68 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -3450,96 +3450,91 @@ Nedoporučuje se jí používat. OCC::ownCloudGui - + Please sign in Přihlašte se prosím - + Folder %1: %2 Adresář %1: %2 - - No sync folders configured. - Nejsou nastaveny žádné synchronizované adresáře. - - - + There are no sync folders configured. Nejsou nastaveny žádné adresáře pro synchronizaci. - + Open in browser Otevřít v prohlížeči - - - + + + Log in... Přihlásit... - - - + + + Log out Odhlásit se - + Recent Changes Poslední změny - + Checking for changes in '%1' Kontrola změn v '%1' - + Managed Folders: Spravované adresáře: - + Open folder '%1' Otevřít adresář '%1' - + Open %1 in browser Otevřít %1 v prohlížeči - + Unknown status Neznámý stav - + Settings... Nastavení... - + Details... Podrobnosti... - + Help Nápověda - + Quit %1 Ukončit %1 - + Disconnected from %1 Odpojeno od %1 @@ -3554,103 +3549,134 @@ Nedoporučuje se jí používat. Server na účtu %1 používá starou a nepodporovanou verzi %2. Používání tohoto klienta s nepodporovanými verzemi serveru není testováno a může být nebezpečné. Pokračujte na vlastní riziko. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Odpojeno od účtů: - + Account %1: %2 Účet %1: %2 - + + Signed out + + + + Account synchronization is disabled Synchronizace účtu je vypnuta - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Spustit všechny adresáře - + Pause all folders Pozastavit všechny adresáře - + Unpause all synchronization Spustit veškerou synchronizaci - + Unpause synchronization Spustit synchronizaci - + Pause all synchronization Pozastavit veškerou synchronizaci - + Pause synchronization Pozastavit synchronizaci - + Log out of all accounts Odhlásit ze všech účtů - + Log in to all accounts... Přihlásit ke všem účtům... - + New account... Nový účet... - + Crash now Only shows in debug mode to allow testing the crash handler Selhání - + No items synced recently Žádné položky nebyly nedávno synchronizovány - + Syncing %1 of %2 (%3 left) Synchronizuji %1 ze %2 (zbývá %3) - + Syncing %1 of %2 Synchronizace %1 z %2 - + Syncing %1 (%2 left) Synchronizuji %1 (zbývá %2) - + Syncing %1 Synchronizuji %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuální diff --git a/translations/client_de.ts b/translations/client_de.ts index e0889bfad..2e2a49872 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -3451,96 +3451,91 @@ Es ist nicht ratsam, diese zu benutzen. OCC::ownCloudGui - + Please sign in Bitte melden Sie sich an - + Folder %1: %2 Ordner %1: %2 - - No sync folders configured. - Keine Sync-Ordner konfiguriert. - - - + There are no sync folders configured. Es wurden keine Synchonisationsordner konfiguriert. - + Open in browser Im Browser öffnen - - - + + + Log in... Einloggen... - - - + + + Log out Abmelden - + Recent Changes Letzte Änderungen - + Checking for changes in '%1' Nach Änderungen suchen in '%1' - + Managed Folders: Verwaltete Ordner: - + Open folder '%1' Ordner »%1« öffnen - + Open %1 in browser %1 im Browser öffnen - + Unknown status Unbekannter Status - + Settings... Einstellungen … - + Details... Details … - + Help Hilfe - + Quit %1 %1 beenden - + Disconnected from %1 Von %1 trennen @@ -3555,103 +3550,134 @@ Es ist nicht ratsam, diese zu benutzen. Der Server mit Konto %1 läuft mit einer alten und nicht unterstützten Version %2. Die Verwendung dieses Clienten mit der nicht unterstützten Serverversion ist ungetestet und möglicherweiße gefährich. Fortfahren auf eigenes Risiko. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Getrennt von Konten: - + Account %1: %2 Konto %1: %2 - + + Signed out + + + + Account synchronization is disabled Account Synchronisation ist deaktiviert - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Setze alle Ordner fort - + Pause all folders Stoppe alle Ordner - + Unpause all synchronization Setze gesamte Synchronisation fort - + Unpause synchronization Setze Synchronisation fort - + Pause all synchronization Stoppe gesamte Synchronisation - + Pause synchronization Stoppe Synchronisation - + Log out of all accounts Bei allen Konten abmelden - + Log in to all accounts... Bei allen Konten anmelden... - + New account... Neues Konto... - + Crash now Only shows in debug mode to allow testing the crash handler Jetzt abstürzen lassen - + No items synced recently Keine kürzlich synchronisierten Elemente - + Syncing %1 of %2 (%3 left) Synchronisiere %1 von %2 (%3 übrig) - + Syncing %1 of %2 Synchronisiere %1 von %2 - + Syncing %1 (%2 left) Synchronisiere %1 (%2 übrig) - + Syncing %1 Synchronisiere %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell diff --git a/translations/client_el.ts b/translations/client_el.ts index 86a9254bc..e6ae97d77 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -3452,96 +3452,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Παρκαλώ συνδεθείτε - + Folder %1: %2 Φάκελος %1: %2 - - No sync folders configured. - Δεν έχουν οριστεί φάκελοι συγχρονισμού. - - - + There are no sync folders configured. Δεν έχουν ρυθμιστεί φάκελοι συγχρονισμού. - + Open in browser Άνοιγμα στον περιηγητή ιστού - - - + + + Log in... Σύνδεση... - - - + + + Log out Αποσύνδεση - + Recent Changes Πρόσφατες Αλλαγές - + Checking for changes in '%1' Έλεγχος αλλαγών στο '%1'. - + Managed Folders: Φάκελοι υπό Διαχείριση: - + Open folder '%1' Άνοιγμα φακέλου '%1' - + Open %1 in browser Άνοιγμα %1 στον περιηγητή - + Unknown status Άγνωστη κατάσταση - + Settings... Ρυθμίσεις... - + Details... Λεπτομέρειες... - + Help Βοήθεια - + Quit %1 Κλείσιμο %1 - + Disconnected from %1 Αποσυνδέθηκε από %1 @@ -3556,103 +3551,134 @@ It is not advisable to use it. Ο διακομιστής στο λογαριασμό% 1 εκτελεί μια παλιά και μη υποστηριζόμενη έκδοση% 2. Η χρήση αυτού του προγράμματος-πελάτη με μη υποστηριζόμενες εκδόσεις διακομιστών δεν είναι δοκιμασμένη και ενδεχομένως επικίνδυνη. Προχωρήστε με δική σας ευθύνη. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Αποσυνδέθηκε από τους λογαριασμούς: - + Account %1: %2 Λογαριασμός %1: %2 - + + Signed out + + + + Account synchronization is disabled Ο λογαριασμός συγχρονισμού έχει απενεργοποιηθεί - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Αναίρεση παύσης όλων των φακέλων - + Pause all folders Παύση όλων των φακέλων - + Unpause all synchronization Αναίρεση παύσης όλων των συγχρονισμών - + Unpause synchronization Αναίρεση παύσης συγχρονσμού - + Pause all synchronization Παύση όλων των συγχρονισμών - + Pause synchronization Παύση συγχρονισμού - + Log out of all accounts Έξοδος από όλους τους λογαριασμούς - + Log in to all accounts... Είσοδος σε όλους τους λογαριασμούς - + New account... Νέος λογαριασμός... - + Crash now Only shows in debug mode to allow testing the crash handler Κατάρρευση τώρα - + No items synced recently Κανένα στοιχείο δεν συγχρονίστηκε πρόσφατα - + Syncing %1 of %2 (%3 left) Συγχρονισμός %1 από %2 (%3 απομένουν) - + Syncing %1 of %2 Συγχρονισμός %1 από %2 - + Syncing %1 (%2 left) Συγχρονισμός %1 (%2 απομένουν) - + Syncing %1 Συγχρονισμός %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ενημερωμένο diff --git a/translations/client_en.ts b/translations/client_en.ts index 036612149..9c73b0e40 100644 --- a/translations/client_en.ts +++ b/translations/client_en.ts @@ -3469,96 +3469,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in - + Folder %1: %2 - - No sync folders configured. - - - - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out - + Recent Changes - + Checking for changes in '%1' - + Managed Folders: - + Open folder '%1' - + Open %1 in browser - + Unknown status - + Settings... - + Details... - + Help - + Quit %1 - + Disconnected from %1 @@ -3573,103 +3568,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: - + Account %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 - + %1 (%2, %3) - + Up to date diff --git a/translations/client_es.ts b/translations/client_es.ts index c60854898..87cdd54c7 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -3451,96 +3451,91 @@ No se recomienda usarla. OCC::ownCloudGui - + Please sign in Por favor, regístrese - + Folder %1: %2 Archivo %1: %2 - - No sync folders configured. - No hay carpetas de sincronización configuradas. - - - + There are no sync folders configured. No hay carpetas configuradas para sincronizar. - + Open in browser Abrir en navegador - - - + + + Log in... Inicio de sesión... - - - + + + Log out Cerrar sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' Buscando cambios en '%1' - + Managed Folders: Carpetas administradas: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Salir de %1 - + Disconnected from %1 Desconectado de %1 @@ -3555,103 +3550,134 @@ No se recomienda usarla. El servidor en la cuenta %1 usa una versión antigua y no soportada %2. Usando este cliente con las versiones de servidor no soportadas no está probado y es potencialmente peligroso. Procede bajo tu propio riesgo. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Desconectado desde cuentas: - + Account %1: %2 Cuenta %1: %2 - + + Signed out + + + + Account synchronization is disabled La sincronización está deshabilitada - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Despausar todas las carpetas - + Pause all folders Pausar todas las carpetas - + Unpause all synchronization Despausar todas las sincronizaciones - + Unpause synchronization Despausar la sincronización - + Pause all synchronization Pausar todas las sincronizaciones - + Pause synchronization Pausar la sincronización - + Log out of all accounts Terminar sessión en todas las cuentas - + Log in to all accounts... Iniciar sesión en todas las cuentas... - + New account... Nueva cuenta ... - + Crash now Only shows in debug mode to allow testing the crash handler Se ha producido un fallo - + No items synced recently No se han sincronizado elementos recientemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 de %2 (quedan %3) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (quedan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 2f3dcf759..4d3223062 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -3437,96 +3437,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Por favor, inicie sesión - + Folder %1: %2 Directorio %1: %2 - - No sync folders configured. - Los directorios de sincronización no están configurados. - - - + There are no sync folders configured. - + Open in browser - - - + + + Log in... - - - + + + Log out Cerrar la sesión - + Recent Changes Cambios recientes - + Checking for changes in '%1' - + Managed Folders: Directorios administrados: - + Open folder '%1' Abrir carpeta '%1' - + Open %1 in browser Abrir %1 en el navegador... - + Unknown status Estado desconocido - + Settings... Configuraciones... - + Details... Detalles... - + Help Ayuda - + Quit %1 Cancelar %1 - + Disconnected from %1 @@ -3541,103 +3536,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: - + Account %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently No se sincronizaron elementos recientemente - + Syncing %1 of %2 (%3 left) - + Syncing %1 of %2 - + Syncing %1 (%2 left) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date actualizado diff --git a/translations/client_et.ts b/translations/client_et.ts index 206a9f9a3..146ae4bf2 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -3440,96 +3440,91 @@ Selle kasutamine pole soovitatav. OCC::ownCloudGui - + Please sign in Palun logi sisse - + Folder %1: %2 Kaust %1: %2 - - No sync folders configured. - Sünkroniseeritavaid kaustasid pole seadistatud. - - - + There are no sync folders configured. Sünkroniseeritavaid kaustasid pole määratud. - + Open in browser Ava veebilehitsejas - - - + + + Log in... Logi sisse... - - - + + + Log out Logi välja - + Recent Changes Hiljutised muudatused - + Checking for changes in '%1' Kontrollitakse muudatusi kaustas '%1' - + Managed Folders: Hallatavad kaustad: - + Open folder '%1' Ava kaust '%1' - + Open %1 in browser Ava %1 veebilehitsejas - + Unknown status Tundmatu staatus - + Settings... Seaded... - + Details... Üksikasjad... - + Help Abiinfo - + Quit %1 Lõpeta %1 - + Disconnected from %1 @@ -3544,103 +3539,134 @@ Selle kasutamine pole soovitatav. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Kontodest lahtiühendatud - + Account %1: %2 Konto %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Logi välja kõikidelt kontodelt - + Log in to all accounts... Logi sisse kõikidesse kontodesse... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Jookse kokku - + No items synced recently Ühtegi üksust pole hiljuti sünkroniseeritud - + Syncing %1 of %2 (%3 left) Sünkroniseerin %1 %2-st (%3 veel) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sünkroniseerin %1 (%2 veel) - + Syncing %1 Sünkroniseerimine %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajakohane diff --git a/translations/client_eu.ts b/translations/client_eu.ts index 3d1584287..a28bee453 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -3440,96 +3440,91 @@ Ez da gomendagarria erabltzea. OCC::ownCloudGui - + Please sign in Mesedez saioa hasi - + Folder %1: %2 - - No sync folders configured. - Ez dago sinkronizazio karpetarik definituta. - - - + There are no sync folders configured. Ez dago sinkronizazio karpetarik definituta. - + Open in browser Ireki nabigatzailean - - - + + + Log in... Saioa hasi... - - - + + + Log out Saioa bukatu - + Recent Changes Azkenengo Aldaketak - + Checking for changes in '%1' - + Managed Folders: Kudeatutako karpetak: - + Open folder '%1' Ireki '%1' karpeta - + Open %1 in browser Ireki %1 arakatzailean - + Unknown status Egoera ezezaguna - + Settings... Ezarpenak... - + Details... Xehetasunak... - + Help Laguntza - + Quit %1 %1etik Irten - + Disconnected from %1 %1etik deskonektatuta @@ -3544,103 +3539,134 @@ Ez da gomendagarria erabltzea. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Kontuetatik deskonektatuta: - + Account %1: %2 %1 Kontua: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Saioa bukatu kontu guztietan - + Log in to all accounts... Saioa hasi kontu guztietan... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Ez da azken aldian ezer sinkronizatu - + Syncing %1 of %2 (%3 left) Sinkronizatzen %1 %2tik (%3 faltan) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sinkronizatzen %1 (%2faltan) - + Syncing %1 %1 Sinkronizatzen - + %1 (%2, %3) %1 (%2, %3) - + Up to date Eguneratua diff --git a/translations/client_fa.ts b/translations/client_fa.ts index a1b55f6ee..2f4f86451 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -3437,96 +3437,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in لطفا وارد شوید - + Folder %1: %2 پوشه %1: %2 - - No sync folders configured. - هیچ پوشه ای همگام سازی شده‌ای تنظیم نشده است - - - + There are no sync folders configured. هیچ پوشه‌ای برای همگام‌سازی تنظیم نشده است. - + Open in browser باز کردن در مرورگر - - - + + + Log in... ورود... - - - + + + Log out خروج - + Recent Changes تغییرات اخیر - + Checking for changes in '%1' - + Managed Folders: پوشه های مدیریت شده: - + Open folder '%1' بازکردن پوشه‌ی '%1' - + Open %1 in browser - + Unknown status وضعیت نامعلوم - + Settings... تنظیمات... - + Details... جزئیات... - + Help راه‌نما - + Quit %1 خروج %1 - + Disconnected from %1 قطع‌شده از %1 @@ -3541,103 +3536,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: - + Account %1: %2 حساب‌کاربری %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently هیچ موردی به تازگی همگام‌سازی نشده است - + Syncing %1 of %2 (%3 left) همگام‌سازی %1 از%2 (%3 باقیمانده) - + Syncing %1 of %2 - + Syncing %1 (%2 left) همگام‌سازی %1 (%2 باقیمانده) - + Syncing %1 همگام‌سازی %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date تا تاریخ diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 4d7fa5e99..03e7e0728 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -3442,96 +3442,91 @@ Osoitteen käyttäminen ei ole suositeltavaa. OCC::ownCloudGui - + Please sign in Kirjaudu sisään - + Folder %1: %2 Kansio %1: %2 - - No sync folders configured. - Synkronointikansioita ei ole määritetty. - - - + There are no sync folders configured. Synkronointikansioita ei ole määritelty. - + Open in browser Avaa selaimessa - - - + + + Log in... Kirjaudu sisään... - - - + + + Log out Kirjaudu ulos - + Recent Changes Viimeisimmät muutokset - + Checking for changes in '%1' - + Managed Folders: Hallitut kansiot: - + Open folder '%1' Avaa kansio '%1' - + Open %1 in browser Avaa %1 selaimeen - + Unknown status Tuntematon tila - + Settings... Asetukset... - + Details... Tiedot... - + Help Ohje - + Quit %1 Lopeta %1 - + Disconnected from %1 Katkaise yhteys kohteeseen %1 @@ -3546,103 +3541,134 @@ Osoitteen käyttäminen ei ole suositeltavaa. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Katkaistu yhteys tileihin: - + Account %1: %2 Tili %1: %2 - + + Signed out + + + + Account synchronization is disabled Tilin synkronointi on poistettu käytöstä - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders Keskeytä kaikki kansiot - + Unpause all synchronization Palauta kaikki synkronointi - + Unpause synchronization Palauta synkronointi - + Pause all synchronization Keskeytä kaikki synkronointi - + Pause synchronization Keskeytä synkronointi - + Log out of all accounts Kirjaudu ulos kaikista tileistä - + Log in to all accounts... Kirjaudu kaikille tileille... - + New account... Uusi tili... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Kohteita ei ole synkronoitu äskettäin - + Syncing %1 of %2 (%3 left) Synkronoidaan %1/%2 (%3 jäljellä) - + Syncing %1 of %2 Synkronoidaan %1/%2 - + Syncing %1 (%2 left) Synkronoidaan %1 (%2 jäljellä) - + Syncing %1 Synkronoidaan %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ajan tasalla diff --git a/translations/client_fr.ts b/translations/client_fr.ts index bd1d90c64..63ad68bb8 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -771,7 +771,7 @@ If you decide to keep the files, they will be re-synced with the server if you h If you decide to delete the files, they will be unavailable to you, unless you are the owner. Tous les fichiers contenus dans le dossier synchronisé '%1' ont été supprimés du serveur. Ces suppressions seront synchronisées sur vos dossiers locaux synchronisés, rendant ces fichiers inaccessibles, à moins que vous n'ayez le droit de les restaurer. -Si vous décidez de garder ces fichiers, ils seront synchronisés à nouveau avec le serveur si vous en avez le droit. +Si vous décidez de conserver ces fichiers, ils seront synchronisés à nouveau avec le serveur si vous en avez le droit. Si vous décidez de supprimer ces fichiers, ils vous seront inaccessibles, sauf si vous en êtes le propriétaire. @@ -781,7 +781,7 @@ Are you sure you want to sync those actions with the server? If this was an accident and you decide to keep your files, they will be re-synced from the server. Tous les fichiers contenus dans le dossier synchronisé '%1' ont été supprimés. Ces suppressions seront synchronisées avec votre serveur, rendant ces fichiers inaccessibles sauf s'ils sont restaures. Êtes-vous sûr de vouloir synchroniser ces actions avec le serveur ? -S'il s'agissait d'un accident et que vous choisissiez de garder vos fichiers, ils seront synchronisés à nouveau depuis le serveur. +S'il s'agissait d'un accident et que vous choisissiez de conserver vos fichiers, ils seront synchronisés à nouveau depuis le serveur. @@ -796,7 +796,7 @@ S'il s'agissait d'un accident et que vous choisissiez de garder v Keep files - Garder les fichiers + Conserver les fichiers @@ -805,7 +805,7 @@ 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? Cette synchronisation remettra une version précédente des fichiers dans le dossier de synchronisation '%1'. Cela peut être dû à une copie de sauvegarde restaurée sur le serveur. -Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous garder les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? +Continuer la synchronisation comme d'habitude fera en sorte que tous les fichiers soient remplacés par des fichiers plus vieux d'un état précédent. Voulez-vous conserver les versions les plus récentes de vos fichiers en tant que fichiers conflictuels ? @@ -820,7 +820,7 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi Keep Local Files as Conflict - Garder les fichiers locaux comme Conflits + Conserver les fichiers locaux comme Conflits @@ -3453,96 +3453,91 @@ Il est déconseillé de l'utiliser. OCC::ownCloudGui - + Please sign in Veuillez vous connecter - + Folder %1: %2 Dossier %1 : %2 - - No sync folders configured. - Aucun dossier synchronisé n'est configuré - - - + There are no sync folders configured. Aucun dossier à synchroniser n'est configuré - + Open in browser Ouvrir dans le navigateur web - - - + + + Log in... Connexion... - - - + + + Log out Se déconnecter - + Recent Changes Modifications récentes - + Checking for changes in '%1' Recherche de modifications dans '%1' - + Managed Folders: Dossiers configurés - + Open folder '%1' Ouvrir le dossier local '%1' - + Open %1 in browser Ouvrir %1 dans le navigateur - + Unknown status Statut inconnu - + Settings... Paramètres... - + Details... Toutes les modifications... - + Help Aide... - + Quit %1 Quitter %1 - + Disconnected from %1 Déconnecté de %1 @@ -3557,103 +3552,134 @@ Il est déconseillé de l'utiliser. Le serveur sur le compte %1 fonctionne avec une version ancienne et non-supportée %2. Utiliser ce client avec des versions non-supportées du serveur n'est pas testé et est potentiellement dangereux. Procédez à vos risques et périls. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Déconnecté des comptes : - + Account %1: %2 Compte %1 : %2 - + + Signed out + + + + Account synchronization is disabled La synchronisation est en pause - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Relancer tous les dossiers - + Pause all folders Mettre en pause tous les dossiers - + Unpause all synchronization Relancer toutes les synchronisations - + Unpause synchronization Relancer la synchronisation - + Pause all synchronization Mettre en pause toutes les synchronisations - + Pause synchronization Mettre en pause la synchronisation - + Log out of all accounts Se déconnecter de tous les comptes - + Log in to all accounts... Se connecter à tous les comptes... - + New account... Nouveau compte… - + Crash now Only shows in debug mode to allow testing the crash handler Plantage maintenant - + No items synced recently Aucun élément synchronisé récemment - + Syncing %1 of %2 (%3 left) Synchronisation de %1 sur %2 (%3 restantes) - + Syncing %1 of %2 Synchronisation %1 sur %2 - + Syncing %1 (%2 left) Synchronisation de %1 (%2 restantes) - + Syncing %1 Synchronisation de %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date À jour @@ -3733,7 +3759,7 @@ Il est déconseillé de l'utiliser. &Keep local data - &Garder les données locales + &Conserver les données locales diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 7aed96a72..3815c3a86 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -3441,96 +3441,91 @@ Recomendámoslle que non o use. OCC::ownCloudGui - + Please sign in Ten que rexistrarse - + Folder %1: %2 Cartafol %1: %2 - - No sync folders configured. - Non se configuraron cartafoles de sincronización. - - - + There are no sync folders configured. Non existen cartafoles de sincronización configurados. - + Open in browser Abrir no navegador - - - + + + Log in... - - - + + + Log out Desconectar - + Recent Changes Cambios recentes - + Checking for changes in '%1' - + Managed Folders: Cartafoles xestionados: - + Open folder '%1' Abrir o cartafol «%1» - + Open %1 in browser Abrir %1 nun navegador - + Unknown status Estado descoñecido - + Settings... Axustes... - + Details... Detalles... - + Help Axuda - + Quit %1 Saír de %1 - + Disconnected from %1 Desconectado de %1 @@ -3545,103 +3540,134 @@ Recomendámoslle que non o use. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Desconectado das contas: - + Account %1: %2 Conta %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrou agora - + No items synced recently Non hai elementos sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizando %1 of %2 (restan %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Sincronizando %1 (restan %2) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Actualizado diff --git a/translations/client_hu.ts b/translations/client_hu.ts index b8aa72664..e2c4bb7d6 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -3438,96 +3438,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Belépés szükséges - + Folder %1: %2 Mappa %1: %2 - - No sync folders configured. - Nincsenek megadva szinkronizálandó mappák. - - - + There are no sync folders configured. Nincsenek megadva szinkronizálandó mappák. - + Open in browser Megnyitás böngészőben - - - + + + Log in... Bejelentkezés... - - - + + + Log out Kilépés - + Recent Changes Legutóbbi változások - + Checking for changes in '%1' - + Managed Folders: Kezelt mappák: - + Open folder '%1' „%1” könyvtár megnyitása - + Open %1 in browser %1 megnyitása böngészőben - + Unknown status Ismeretlen állapot - + Settings... Beállítások... - + Details... Részletek... - + Help Súgó - + Quit %1 %1 kilépés - + Disconnected from %1 Szétcsatlakozva innen: %1 @@ -3542,103 +3537,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Szétcsatlakozva a fiókokból: ó - + Account %1: %2 %1 fiók: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts - + Log in to all accounts... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Mostanában nincs szinkronizált elem - + Syncing %1 of %2 (%3 left) %1/%2 szinkronizálása (%3 maradt) - + Syncing %1 of %2 - + Syncing %1 (%2 left) %1 szinkronizálása (%2 maradt) - + Syncing %1 %1 szinkronizálása - + %1 (%2, %3) %1 (%2, %3) - + Up to date Naprakész diff --git a/translations/client_it.ts b/translations/client_it.ts index 1b9aa808d..f45cfb7fd 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + Il Server %1 è attualmente in manutenzione @@ -373,7 +373,7 @@ Maintenance mode - + Modalità Manutenzione @@ -986,7 +986,7 @@ Se continui normalmente la sincronizzazione provocherai la sovrascrittura di tut There are unresolved conflicts. Click for details. - + Ci sono conflitti irrisolti. Clicca per ulteriori dettagli. @@ -1394,7 +1394,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se List of issues - + Lista dei problemi @@ -1421,12 +1421,12 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Show ignored files - + Mostra i file ignorati Copy the issues list to the clipboard. - + Copia la lista dei problemi negli appunti. @@ -1446,7 +1446,7 @@ Gli elementi per i quali è consentita l'eliminazione, saranno eliminati se Issue - + Problema @@ -1878,7 +1878,7 @@ for additional privileges during the process. Login in your browser - + Accedi tramite il tuo browser @@ -2631,7 +2631,7 @@ Non è consigliabile utilizzarlo. Enter a name to create a new public link... - + Inserisci un nome per creare un nuovo collegamento pubblico... @@ -3447,96 +3447,91 @@ Non è consigliabile utilizzarlo. OCC::ownCloudGui - + Please sign in Accedi - + Folder %1: %2 Cartella %1: %2 - - No sync folders configured. - Nessuna cartella configurata per la sincronizzazione. - - - + There are no sync folders configured. Non è stata configurata alcuna cartella per la sincronizzazione. - + Open in browser Apri nel browser - - - + + + Log in... Accedi... - - - + + + Log out Esci - + Recent Changes Modifiche recenti - + Checking for changes in '%1' Controllo delle modifiche in '%1' - + Managed Folders: Cartelle gestite: - + Open folder '%1' Apri la cartella '%1' - + Open %1 in browser Apri %1 nel browser... - + Unknown status Stato sconosciuto - + Settings... Impostazioni... - + Details... Dettagli... - + Help Aiuto - + Quit %1 Esci da %1 - + Disconnected from %1 Disconnesso dal %1 @@ -3551,103 +3546,134 @@ Non è consigliabile utilizzarlo. Il server dell'account %1 esegue una versione %2 datata e non supportata. L'utilizzo del client con versioni non supportate non è sperimentato ed è potenzialmente pericoloso. Continua a tuo rischio. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Disconnesso dagli account: - + Account %1: %2 Account %1: %2 - + + Signed out + + + + Account synchronization is disabled La sincronizzazione dell'account è disabilitata - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Riprendi tutte le cartelle - + Pause all folders Sospendi tutte le cartelle - + Unpause all synchronization Riprendi tutte le sincronizzazioni - + Unpause synchronization Riprendi la sincronizzazione - + Pause all synchronization Sospendi tutte le sincronizzazioni - + Pause synchronization Sospendi la sincronizzazione - + Log out of all accounts Disconnetti tutti gli account - + Log in to all accounts... Accedi a tutti gli account... - + New account... Nuovo account... - + Crash now Only shows in debug mode to allow testing the crash handler Chiusura immediata - + No items synced recently Nessun elemento sincronizzato di recente - + Syncing %1 of %2 (%3 left) Sincronizzazione di %1 di %2 (%3 rimanenti) - + Syncing %1 of %2 Sincronizzazione di %1 di %2 - + Syncing %1 (%2 left) Sincronizzazione di %1 (%2 rimanenti) - + Syncing %1 Sincronizzazione di %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aggiornato diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 024ce0fd8..79bb53d34 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -3448,96 +3448,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in サインインしてください - + Folder %1: %2 フォルダー %1: %2 - - No sync folders configured. - 同期フォルダーが設定されていません。 - - - + There are no sync folders configured. 同期するフォルダーがありません。 - + Open in browser ブラウザーで開く - - - + + + Log in... ログイン... - - - + + + Log out ログアウト - + Recent Changes 最近変更されたファイル - + Checking for changes in '%1' '%1' の更新を確認しています - + Managed Folders: 管理フォルダー: - + Open folder '%1' フォルダー ’%1’ を開く - + Open %1 in browser %1をブラウザーで開く - + Unknown status 不明な状態 - + Settings... 設定... - + Details... 詳細... - + Help ヘルプ - + Quit %1 %1 を終了 - + Disconnected from %1 %1 から切断されました @@ -3552,103 +3547,134 @@ It is not advisable to use it. %1 アカウントのサーバーのバージョン %2 は古く、未サポートです。この未サポートのサーバーバージョンとこのクライアントでの組み合わせは、未テストで潜在的な危険があります。ご利用は自己責任でお願いいたします。 - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: アカウントから切断: - + Account %1: %2 アカウント %1: %2 - + + Signed out + + + + Account synchronization is disabled アカウントの同期は無効になっています - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders すべてのフォルダーの同期を再開 - + Pause all folders すべてのフォルダーの同期を一時停止 - + Unpause all synchronization すべての同期を再開 - + Unpause synchronization 同期を再開 - + Pause all synchronization すべての同期を一時停止 - + Pause synchronization 同期を一時停止 - + Log out of all accounts 全てのアカウントからログアウト - + Log in to all accounts... 全てのアカウントにログイン - + New account... 新規アカウント... - + Crash now Only shows in debug mode to allow testing the crash handler クラッシュしました。 - + No items synced recently 最近同期されたアイテムはありません。 - + Syncing %1 of %2 (%3 left) 同期中 %2 中 %1 (残り %3) - + Syncing %1 of %2 %2 の %1 を同期しています - + Syncing %1 (%2 left) 同期中 %1 (残り %2) - + Syncing %1 同期中 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新です diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index e48d19d94..1aea69e52 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -3451,96 +3451,91 @@ Det er ikke tilrådelig å bruke den. OCC::ownCloudGui - + Please sign in Vennligst logg inn - + Folder %1: %2 Mappe %1: %2 - - No sync folders configured. - Ingen synkronisering-mapper konfigurert. - - - + There are no sync folders configured. Ingen synkroniseringsmapper er konfigurert. - + Open in browser Åpne i nettleser - - - + + + Log in... Logg inn.. - - - + + + Log out Logg ut - + Recent Changes Siste endringer - + Checking for changes in '%1' Ser etter endringer i '%1' - + Managed Folders: Administrerte mapper: - + Open folder '%1' Åpne mappe '%1' - + Open %1 in browser Åpne %1 i nettleser - + Unknown status Ukjent status - + Settings... Innstillinger... - + Details... Detaljer... - + Help Hjelp - + Quit %1 Avslutt %1 - + Disconnected from %1 Koble fra %1 @@ -3555,103 +3550,134 @@ Det er ikke tilrådelig å bruke den. Serveren på konto %1 kjører en gammel %2 som ikke støttes. Bruk av denne klienten med ikke-støttede server-versjoner er ikke testet og kan være farlig. Fortsett på egen risiko. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Koblet fra kontoer: - + Account %1: %2 Konto %1: %2 - + + Signed out + + + + Account synchronization is disabled Kontosynkronisering er deaktivert - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Fortsett alle mapper - + Pause all folders Sett alle mapper på pause - + Unpause all synchronization Fortsett all synkronisering - + Unpause synchronization Fortsett synkronisering - + Pause all synchronization Sett all synkronisering på pause - + Pause synchronization Sett synkronisering på pause - + Log out of all accounts Logg ut av alle kontoer - + Log in to all accounts... Logg inn på alle kontoer... - + New account... Ny konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krasj nå - + No items synced recently Ingenting synkronisert nylig - + Syncing %1 of %2 (%3 left) Synkroniserer %1 av %2 (%3 gjenstår) - + Syncing %1 of %2 Synkroniserer %1 av %2 - + Syncing %1 (%2 left) Synkroniserer %1 (%2 gjenstår) - + Syncing %1 Synkroniserer %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Oppdatert diff --git a/translations/client_nl.ts b/translations/client_nl.ts index 87dbff01c..a772826fa 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -3456,96 +3456,91 @@ We adviseren deze site niet te gebruiken. OCC::ownCloudGui - + Please sign in Log alstublieft in - + Folder %1: %2 Map %1: %2 - - No sync folders configured. - Geen synchronisatie-mappen geconfigureerd. - - - + There are no sync folders configured. Er zijn geen synchronisatie-mappen geconfigureerd. - + Open in browser Open in browser - - - + + + Log in... Inloggen... - - - + + + Log out Afmelden - + Recent Changes Recente wijzigingen - + Checking for changes in '%1' Controleren op wijzigingen in '%1' - + Managed Folders: Beheerde mappen: - + Open folder '%1' Open map '%1' - + Open %1 in browser Open %1 in browser - + Unknown status Onbekende status - + Settings... Instellingen... - + Details... Details ... - + Help Help - + Quit %1 %1 afsluiten - + Disconnected from %1 Losgekoppeld van %1 @@ -3560,103 +3555,134 @@ We adviseren deze site niet te gebruiken. De server van account %1 gebruikt een oude versie %2. Het gebruik van deze clientsoftware met niet-ondersteunde server versies is niet getest en mogelijk gevaarlijk. Verdergaan is voor uw eigen risico. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Losgekoppeld van account: - + Account %1: %2 Account %1: %2 - + + Signed out + + + + Account synchronization is disabled Account synchronisatie is uitgeschakeld - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Hervat alle mappen - + Pause all folders Pauzeer alle mappen - + Unpause all synchronization Hervat alle synchronisatie - + Unpause synchronization Hervat synchronisatie - + Pause all synchronization Pauzeer alle synchronisatie - + Pause synchronization Pauzeer synchronisatie - + Log out of all accounts Uitloggen van alle accounts... - + Log in to all accounts... Inloggen op alle accounts... - + New account... Nieuw account... - + Crash now Only shows in debug mode to allow testing the crash handler Crash nu - + No items synced recently Recent niets gesynchroniseerd - + Syncing %1 of %2 (%3 left) Sync %1 van %2 (%3 over) - + Syncing %1 of %2 Synchroniseren %1 van %2 - + Syncing %1 (%2 left) Sync %1 (%2 over) - + Syncing %1 Synchroniseren %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Bijgewerkt diff --git a/translations/client_pl.ts b/translations/client_pl.ts index d2cdd9058..f393bec8f 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -3445,96 +3445,91 @@ Niezalecane jest jego użycie. OCC::ownCloudGui - + Please sign in Proszę się zalogować - + Folder %1: %2 Folder %1: %2 - - No sync folders configured. - Nie skonfigurowano synchronizowanych folderów. - - - + There are no sync folders configured. Nie skonfigurowano żadnych folderów synchronizacji. - + Open in browser Otwórz w przeglądarce - - - + + + Log in... Zaloguj... - - - + + + Log out Wyloguj - + Recent Changes Ostatnie zmiany - + Checking for changes in '%1' Sprawdzanie zmian na '%1' - + Managed Folders: Zarządzane foldery: - + Open folder '%1' Otwórz katalog '%1' - + Open %1 in browser Otwórz %1 w przeglądarce - + Unknown status Nieznany status - + Settings... Ustawienia... - + Details... Szczegóły... - + Help Pomoc - + Quit %1 Wyjdź %1 - + Disconnected from %1 Rozłączony z %1 @@ -3549,103 +3544,134 @@ Niezalecane jest jego użycie. Serwer dla konta %1 uruchomiony jest na starej i niewspieranej wersji %2. Używanie klienta z niewspieranym serwerem nie zostało przetestowane i jest potencjalnie niebezpieczne. Kontynuujesz na własne ryzyko. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Rozłączony z kontami: - + Account %1: %2 Dostęp %1: %2 - + + Signed out + + + + Account synchronization is disabled Konto synchronizacji jest wyłączone - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Wznów wszystkie katalogi - + Pause all folders Wstrzymaj wszystkie katalogi - + Unpause all synchronization Wznów wszystkie synchronizacje - + Unpause synchronization Wznów synchronizację - + Pause all synchronization Wstrzymaj wszystkie synchronizacje - + Pause synchronization Wstrzymaj synchronizację - + Log out of all accounts Wyloguj się się ze wszystkich kont - + Log in to all accounts... Zaloguj się do wszystkich kont - + New account... Nowe konto... - + Crash now Only shows in debug mode to allow testing the crash handler - + No items synced recently Brak ostatnich synchronizacji - + Syncing %1 of %2 (%3 left) Synchronizacja %1 z %2 (%3 pozostało) - + Syncing %1 of %2 Synchronizowanie %1 of %2 - + Syncing %1 (%2 left) Synchronizuję %1 (%2 pozostało) - + Syncing %1 Synchronizowanie %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktualne diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 668590279..7b2fd08c0 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -3452,96 +3452,91 @@ Não é aconselhada a sua utilização. OCC::ownCloudGui - + Please sign in Por favor inicie a sessão - + Folder %1: %2 Pasta %1: %2 - - No sync folders configured. - Nenhuma pasta de sincronização configurada. - - - + There are no sync folders configured. Não há pastas de sincronização configurado. - + Open in browser Abrir no navegador - - - + + + Log in... Iniciar sessão... - - - + + + Log out Terminar sessão - + Recent Changes Alterações recentes - + Checking for changes in '%1' Procurando por alterações em '%1' - + Managed Folders: Pastas Geridas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Estado desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair do %1 - + Disconnected from %1 Desconetado de %1 @@ -3556,103 +3551,134 @@ Não é aconselhada a sua utilização. O servidor na conta %1 está a correr uma versão %2 antiga e não suportada. O uso deste cliente com versões de servidor não suportadas não está testado e é potencialmente perigos. Prossiga por sua conta e risco. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Desconetado das contas: - + Account %1: %2 Conta %1: %2 - + + Signed out + + + + Account synchronization is disabled A sincronização de contas está desactivada - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Continuar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Continuar toda a sincronização - + Unpause synchronization Continuar sincronização - + Pause all synchronization Pausar toda a sincronização - + Pause synchronization Pausar sincronização - + Log out of all accounts Sair de todas as contas - + Log in to all accounts... Entrar em todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Crash agora - + No items synced recently Sem itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 A sincronizar %1 de %2 - + Syncing %1 (%2 left) A sincronizar %1 (%2 em falta) - + Syncing %1 A sincronizar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Atualizado diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index caa81d22a..c996bb44e 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -3449,96 +3449,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Favor conectar - + Folder %1: %2 Pasta %1: %2 - - No sync folders configured. - Pastas de sincronização não configuradas. - - - + There are no sync folders configured. Não há pastas de sincronização configuradas. - + Open in browser Abrir no navegador - - - + + + Log in... Entrar... - - - + + + Log out Sair - + Recent Changes Alterações Recentes - + Checking for changes in '%1' Verificando por alterações em '%1' - + Managed Folders: Pastas Gerenciadas: - + Open folder '%1' Abrir pasta '%1' - + Open %1 in browser Abrir %1 no navegador - + Unknown status Status desconhecido - + Settings... Configurações... - + Details... Detalhes... - + Help Ajuda - + Quit %1 Sair %1 - + Disconnected from %1 Desconectado de %1 @@ -3553,103 +3548,134 @@ It is not advisable to use it. O servidor da conta %1 está executando uma versão %2 antiga e não suportada. Usar esse cliente junto com versões não suportadas e não testadas é potencialmente perigoso. Prossiga por conta própria. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Desconectado de contas: - + Account %1: %2 Conta %1: %2 - + + Signed out + + + + Account synchronization is disabled A sincronização de conta está desativada - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Retomar todas as pastas - + Pause all folders Pausar todas as pastas - + Unpause all synchronization Retomar toda a sincronização - + Unpause synchronization Retomar sincronização - + Pause all synchronization Dar uma pausa em toda a sincronização - + Pause synchronization Dar uma pausa na sincronização - + Log out of all accounts Desconectar todas as contas - + Log in to all accounts... Conectar todas as contas... - + New account... Nova conta... - + Crash now Only shows in debug mode to allow testing the crash handler Quebrar agora - + No items synced recently Não há itens sincronizados recentemente - + Syncing %1 of %2 (%3 left) Sincronizar %1 de %2 (%3 faltando) - + Syncing %1 of %2 Sincronizando %1 de %2 - + Syncing %1 (%2 left) Sincronizando %1 (%2 faltando) - + Syncing %1 Sincronizando %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Até a data diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 25fdda32d..25cfc26ee 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -3449,96 +3449,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пожалуйста войдите в систему - + Folder %1: %2 Каталог %1: %2 - - No sync folders configured. - Нет каталогов для синхронизации. - - - + There are no sync folders configured. Нет настроенных каталогов для синхронизации - + Open in browser Открыть в браузере - - - + + + Log in... Вход... - - - + + + Log out Выйти - + Recent Changes Недавние изменения - + Checking for changes in '%1' Проверка изменений в '%1' - + Managed Folders: Управляемые каталоги: - + Open folder '%1' Открыть каталог '%1' - + Open %1 in browser Открыть %1 в браузере - + Unknown status Неизвестный статус - + Settings... Настройки... - + Details... Детали... - + Help Помощь - + Quit %1 Закрыть %1 - + Disconnected from %1 Отключен от %1 @@ -3553,103 +3548,134 @@ It is not advisable to use it. Сервер для учетной записи %1 использует старую не поддерживаемую версию %2. Использование этого клиента совместно с не поддерживаемым сервером не тестировалось и является потенциально небезопасным. Вы продолжаете на свой страх и риск. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Отключен от учетных записей: - + Account %1: %2 Учетная запись %1: %2 - + + Signed out + + + + Account synchronization is disabled Синхронизация учётной записи отключена - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Снять с паузы все папки - + Pause all folders Поставить на паузу все папки - + Unpause all synchronization Возобновить все синхронизации - + Unpause synchronization Возобновить синхронизацию - + Pause all synchronization Приостановить все синхронизации - + Pause synchronization Приостановить синхронизацию - + Log out of all accounts Выйти из всех учетных записей - + Log in to all accounts... Войти во все учетные записи... - + New account... Новая учётная запись… - + Crash now Only shows in debug mode to allow testing the crash handler Критическая ошибка! - + No items synced recently Недавно ничего не синхронизировалось - + Syncing %1 of %2 (%3 left) Синхронизация %1 из %2 (осталось %3) - + Syncing %1 of %2 Синхронизирую %1 из %2 - + Syncing %1 (%2 left) Синхронизация %1 (осталось %2) - + Syncing %1 Синхронизация %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Актуальная версия diff --git a/translations/client_sk.ts b/translations/client_sk.ts index 047be3298..f84202a14 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -3441,96 +3441,91 @@ Nie je vhodné ju používať. OCC::ownCloudGui - + Please sign in Prihláste sa prosím - + Folder %1: %2 Priečinok %1: %2 - - No sync folders configured. - Nie sú nastavené žiadne synchronizačné priečinky. - - - + There are no sync folders configured. Nie sú nastavené žiadne priečinky na synchronizáciu. - + Open in browser Otvoriť v prehliadači - - - + + + Log in... Prihlásiť sa... - - - + + + Log out Odhlásiť - + Recent Changes Nedávne zmeny - + Checking for changes in '%1' Kontrolujú sa zmeny v „%1“ - + Managed Folders: Spravované priečinky: - + Open folder '%1' Otvoriť priečinok '%1' - + Open %1 in browser Otvoriť %1 v prehliadači - + Unknown status Neznámy stav - + Settings... Nastavenia... - + Details... Podrobnosti... - + Help Pomoc - + Quit %1 Ukončiť %1 - + Disconnected from %1 Odpojený od %1 @@ -3545,103 +3540,134 @@ Nie je vhodné ju používať. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Odpojené od účtov: - + Account %1: %2 Účet %1: %2 - + + Signed out + + + + Account synchronization is disabled Synchronizácia účtu je vypnutá - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Zrušiť pozastavenie všetkých priečinkov - + Pause all folders Pozastaviť všetky priečinky - + Unpause all synchronization Zrušiť pozastavenie všetkej synchronizácie - + Unpause synchronization Zrušiť pozastavenie synchronizácie - + Pause all synchronization Pozastaviť všetku synchronizáciu - + Pause synchronization Pozastaviť synchronizáciu - + Log out of all accounts Odhlásiť sa zo všetkých účtov - + Log in to all accounts... Prihlásiť sa do všetkých účtov... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Zlyhanie - + No items synced recently Žiadne nedávno synchronizované položky - + Syncing %1 of %2 (%3 left) Synchronizuje sa %1 z %2 (zostáva %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Synchronizuje sa %1 (zostáva %2) - + Syncing %1 Synchronizuje sa %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Až do dnešného dňa diff --git a/translations/client_sl.ts b/translations/client_sl.ts index c3b1fa225..83009f209 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -3452,96 +3452,91 @@ Uporaba ni priporočljiva. OCC::ownCloudGui - + Please sign in Pred nadaljevanjem je zahtevana prijava - + Folder %1: %2 Mapa %1: %2 - - No sync folders configured. - Ni nastavljenih map za usklajevanje. - - - + There are no sync folders configured. Ni nastavljenih map za usklajevanje. - + Open in browser Odpri v brskalniku - - - + + + Log in... Prijava ... - - - + + + Log out Odjava - + Recent Changes Nedavne spremembe - + Checking for changes in '%1' Preverjanje za spremembe v '%1' - + Managed Folders: Upravljane mape: - + Open folder '%1' Odpri mapo '%1' - + Open %1 in browser Odpri %1 v brskalniku - + Unknown status Neznano stanje - + Settings... Nastavitve ... - + Details... Podrobnosti ... - + Help Pomoč - + Quit %1 Končaj %1 - + Disconnected from %1 Prekinjena povezava z %1 @@ -3556,103 +3551,134 @@ Uporaba ni priporočljiva. Na strežniku računua %1 teče starejša nepodprta različica %2. Z uporabo trenutno nameščenega odjemalca z nepodporo različico strežnika ni varno. Nadaljujete na lastno odgovornost. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Prekinjena je povezava z računi: - + Account %1: %2 Račun %1: %2 - + + Signed out + + + + Account synchronization is disabled Usklajevanje računa je onemogočeno - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Nadaljuj usklajevanje vseh map - + Pause all folders Ustavi usklajevanje vseh map - + Unpause all synchronization Nadaljuj usklajevanje vsega - + Unpause synchronization Nadaljuj usklajevanje - + Pause all synchronization Ustavi vse usklajevanje - + Pause synchronization Ustavi usklajevanje - + Log out of all accounts Odjavi vse račune - + Log in to all accounts... Prijavi z vsemi računi ... - + New account... Nov račun ... - + Crash now Only shows in debug mode to allow testing the crash handler Sesuj zdaj - + No items synced recently Ni nedavno usklajenih predmetov - + Syncing %1 of %2 (%3 left) Poteka usklajevanje %1 od %2 (preostaja %3) - + Syncing %1 of %2 Poteka usklajevanje %1 od %2 - + Syncing %1 (%2 left) Usklajevanje %1 (%2 do konca) - + Syncing %1 Usklajevanje %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ni posodobitev diff --git a/translations/client_sr.ts b/translations/client_sr.ts index d32f92c17..993070eee 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -3441,96 +3441,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Пријавите се - + Folder %1: %2 Фасцикла %1: %2 - - No sync folders configured. - Нема подешених фасцикли за синхронизацију. - - - + There are no sync folders configured. Нема подешених фасцикли за синхронизацију. - + Open in browser Отвори у прегледачу - - - + + + Log in... Пријави се... - - - + + + Log out Одјава - + Recent Changes Недавне измене - + Checking for changes in '%1' Проверавам измене у „%1“ - + Managed Folders: Управљане фасцикле: - + Open folder '%1' Отвори фасциклу „%1“ - + Open %1 in browser Отвори %1 у прегледачу - + Unknown status Непознато стање - + Settings... Поставке... - + Details... Детаљи... - + Help Помоћ - + Quit %1 Напусти %1 - + Disconnected from %1 Одјављен са %1 @@ -3545,103 +3540,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Одјављен са налога: - + Account %1: %2 Налог %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Одјави се са свих налога - + Log in to all accounts... Пријави се на све налоге... - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler Падни сада - + No items synced recently Ништа није недавно синхронизовано - + Syncing %1 of %2 (%3 left) Синхронизујем %1 од %2 (преостало %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронизујем %1 (преостало %2) - + Syncing %1 Синхронизујем %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Ажурно diff --git a/translations/client_sv.ts b/translations/client_sv.ts index f4283869f..549f750ac 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -3447,96 +3447,91 @@ Det är inte lämpligt använda den. OCC::ownCloudGui - + Please sign in Vänliga logga in - + Folder %1: %2 Mapp %1: %2 - - No sync folders configured. - Ingen synkroniseringsmapp är konfigurerad. - - - + There are no sync folders configured. Det finns inga synkmappar konfigurerade. - + Open in browser Öppna i webbläsare - - - + + + Log in... Logga in... - - - + + + Log out Logga ut - + Recent Changes Senaste ändringar - + Checking for changes in '%1' Kollar efter ändringar i '%1' - + Managed Folders: Hanterade mappar: - + Open folder '%1' Öppna mapp '%1' - + Open %1 in browser Öppna %1 i webbläsaren - + Unknown status Okänd status - + Settings... Inställningar... - + Details... Detaljer... - + Help Hjälp - + Quit %1 Avsluta %1 - + Disconnected from %1 Koppla från %1 @@ -3551,103 +3546,134 @@ Det är inte lämpligt använda den. Servern på konto %1 kör en gammal version %2 som inte längre stöds. Att använda den här klienten med den serverversionen är otestat och potentiellt farligt. Fortsätt på egen risk. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Bortkopplad från dessa konton: - + Account %1: %2 Konto %1: %2 - + + Signed out + + + + Account synchronization is disabled Synkronisering för konto är avstängd - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Sluta pausa alla mappar - + Pause all folders Pausa alla mappar - + Unpause all synchronization Sluta pausa all synkroinisering - + Unpause synchronization Sluta pausa synkronisering - + Pause all synchronization Pausa all synkronisering - + Pause synchronization Pausa synkronisering - + Log out of all accounts Logga ut från alla konton - + Log in to all accounts... Logga in på alla konton... - + New account... Nytt konto... - + Crash now Only shows in debug mode to allow testing the crash handler Krascha nu - + No items synced recently Inga filer har synkroniseras nyligen - + Syncing %1 of %2 (%3 left) Synkroniserar %1 av %2 (%3 kvar) - + Syncing %1 of %2 Synkroniserar %1 av %2 - + Syncing %1 (%2 left) Synkroniserar %1 (%2 kvar) - + Syncing %1 Synkroniserar %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Aktuell version diff --git a/translations/client_th.ts b/translations/client_th.ts index f3b2a6c28..44d4ed4ac 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -3452,96 +3452,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in กรุณาเข้าสู่ระบบ - + Folder %1: %2 โฟลเดอร์ %1: %2 - - No sync folders configured. - ยังไม่มีการกำหนดค่าโฟลเดอร์ที่ต้องการประสานข้อมูล - - - + There are no sync folders configured. ไม่มีการกำหนดค่าการประสานข้อมูลโฟลเดอร์ - + Open in browser เปิดในเบราว์เซอร์ - - - + + + Log in... เข้าสู่ระบบ... - - - + + + Log out ออกจากระบบ - + Recent Changes การเปลี่ยนแปลงล่าสุด - + Checking for changes in '%1' กำลังตรวจสอบการเปลี่ยนแปลงใน '%1' - + Managed Folders: โฟลเดอร์ที่มีการจัดการแล้ว: - + Open folder '%1' เปิดโฟลเดอร์ '%1' - + Open %1 in browser เปิด %1 ในเบราว์เซอร์ - + Unknown status สถานะที่ไม่รู้จัก - + Settings... ตั้งค่า... - + Details... รายละเอียด... - + Help ช่วยเหลือ - + Quit %1 ออก %1 - + Disconnected from %1 ถูกตัดการเชื่อมต่อจาก %1 @@ -3556,103 +3551,134 @@ It is not advisable to use it. เซิฟเวอร์บนบัญชี %1 ได้ใช้งานในรุ่นเก่าและเป็นรุ่นที่ไม่ได้รับการสนับสนุนแล้ว %2 หากใช้งานต่อไปอาจเป็นอันตราย ดำเนินการที่มีความเสี่ยงด้วยตัวคุณเอง - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: ยกเลิกการเชื่อมต่อจากบัญชี: - + Account %1: %2 บัญชี %1: %2 - + + Signed out + + + + Account synchronization is disabled บัญชีประสานข้อมูลถูกปิดใช้งาน - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders ทำโฟลเดอร์ทั้งหมดต่อ - + Pause all folders หยุดโฟลเดอร์ทั้งหมดชั่วคราว - + Unpause all synchronization ประสานข้อมูลทั้งหมดต่อ - + Unpause synchronization ประสานข้อมูลต่อ - + Pause all synchronization หยุดการประสานข้อมูลทั้งหมดชั่วคราว - + Pause synchronization หยุดการประสานข้อมูลชั่วคราว - + Log out of all accounts ออกจากระบบของบัญชีทั้งหมด - + Log in to all accounts... เข้าสู่ระบบของบัญชีทั้งหมด... - + New account... สร้างบัญชีใหม่... - + Crash now Only shows in debug mode to allow testing the crash handler ความผิดพลาดในขณะนี้ - + No items synced recently ไม่มีรายการที่ถูกประสานข้อมูลเมื่อเร็วๆ นี้ - + Syncing %1 of %2 (%3 left) กำลังประสานข้อมูล %1 จาก %2 (เหลือ %3) - + Syncing %1 of %2 กำลังประสานข้อมูล %1 จากทั้งหมด %2 - + Syncing %1 (%2 left) กำลังประสานข้อมูล %1 (เหลือ %2) - + Syncing %1 กำลังประสานข้อมูล %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date ถึงวันที่ diff --git a/translations/client_tr.ts b/translations/client_tr.ts index c0e20beda..3ff18f991 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -3442,96 +3442,91 @@ Kullanmanız önerilmez. OCC::ownCloudGui - + Please sign in Lütfen oturum açın - + Folder %1: %2 Klasör %1: %2 - - No sync folders configured. - Yapılandırılmış eşitleme klasörü yok. - - - + There are no sync folders configured. Yapılandırılmış eşitleme klasörü yok. - + Open in browser Tarayıcıda aç - - - + + + Log in... Giriş yap... - - - + + + Log out Çıkış yap - + Recent Changes Son Değişiklikler - + Checking for changes in '%1' %1 deki değişiklikler denetleniyor - + Managed Folders: Yönetilen Klasörler: - + Open folder '%1' '%1' klasörünü aç - + Open %1 in browser %1'ı tarayıcıda aç - + Unknown status Bilinmeyen durum - + Settings... Ayarlar... - + Details... Ayrıntılar... - + Help Yardım - + Quit %1 %1'tan çık - + Disconnected from %1 %1 ile bağlantı kesildi @@ -3546,103 +3541,134 @@ Kullanmanız önerilmez. %1 hesabındaki sunucu eski ve desteklenmeyen %2 sürümünde. Bu istemciyi desteklenmeyen sunucu sürümlerinde kullanmak test edilmemiş olmasının yanında muhtemelen tehlikeli. Kendi riskinizle devam edin. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: Bu hesapların bağlantıları kesildi: - + Account %1: %2 Hesap %1: %2 - + + Signed out + + + + Account synchronization is disabled Hesap eşitlemesi devre dışı bırakıldı. - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders Tüm klasörleri devam ettir - + Pause all folders Tüm klasörleri durdur - + Unpause all synchronization Tüm eşitlemeleri devam ettir - + Unpause synchronization Eşitlemeyi devam ettir - + Pause all synchronization Tüm eşitlemeleri durdur - + Pause synchronization Eşitlemeyi durdur - + Log out of all accounts Tüm hesaplardan çıkış yap - + Log in to all accounts... Tüm hesaplara giriş yap... - + New account... Yeni hesap... - + Crash now Only shows in debug mode to allow testing the crash handler Şimdi çök - + No items synced recently Yakın zamanda eşitlenen öge yok - + Syncing %1 of %2 (%3 left) Eşitlenen %1/%2 (%3 kaldı) - + Syncing %1 of %2 %2 nin %1 i eşitleniyor - + Syncing %1 (%2 left) Eşitlenen %1 (%2 kaldı) - + Syncing %1 %1 eşitleniyor - + %1 (%2, %3) %1 (%2, %3) - + Up to date Güncel diff --git a/translations/client_uk.ts b/translations/client_uk.ts index b7e17f44d..9d81c2d61 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -3440,96 +3440,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in Увійдіть будь ласка - + Folder %1: %2 Тека %1: %2 - - No sync folders configured. - Жодна тека не налаштована для синхронізації. - - - + There are no sync folders configured. Немає налаштованих тек для синхронізації. - + Open in browser Відкрити у переглядачі - - - + + + Log in... Увійти... - - - + + + Log out Вихід - + Recent Changes Недавні зміни - + Checking for changes in '%1' - + Managed Folders: Керовані теки: - + Open folder '%1' Відкрити теку '%1' - + Open %1 in browser Відкрити %1 в браузері - + Unknown status Невідомий статус - + Settings... Налаштування... - + Details... Деталі... - + Help Допомога - + Quit %1 Закрити %1 - + Disconnected from %1 @@ -3544,103 +3539,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: - + Account %1: %2 Обліковий запис %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts Вийти зі всіх облікових записів - + Log in to all accounts... Увійти до всіх облікових записів... - + New account... Новий обліковий запис... - + Crash now Only shows in debug mode to allow testing the crash handler Критична помилка - + No items synced recently Нещодавно нічого не синхронізувалося - + Syncing %1 of %2 (%3 left) Синхронізовано %1 з %2 (залишилося %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) Синхронізовано %1 (залишилося %2) - + Syncing %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date Оновлено diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index f9f26a20e..573f507f5 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -3451,96 +3451,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 请登录 - + Folder %1: %2 文件夹 %1: %2 - - No sync folders configured. - 没有已配置的同步文件夹。 - - - + There are no sync folders configured. 没有已配置的同步文件夹。 - + Open in browser 在浏览器中打开 - - - + + + Log in... 登录 - - - + + + Log out 注销 - + Recent Changes 最近修改 - + Checking for changes in '%1' 检查 %1 的更改 - + Managed Folders: 管理的文件夹: - + Open folder '%1' 打开文件夹“%1” - + Open %1 in browser 在浏览器中打开%1 - + Unknown status 未知状态 - + Settings... 设置... - + Details... 细节... - + Help 帮助 - + Quit %1 退出 %1 - + Disconnected from %1 已从服务器断开 %1 @@ -3555,103 +3550,134 @@ It is not advisable to use it. 账户 %1 的服务器运行着一个古老而不受支持的版本 %2。使用该客户端未支持的服务器版本未经测试并且可能存在潜在危险。继续操作需要自行承担风险。 - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: 已断开账户: - + Account %1: %2 账户 %1: %2 - + + Signed out + + + + Account synchronization is disabled 帐户同步被禁用 - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders 解除暂停所有文件夹 - + Pause all folders 暂停所有文件夹 - + Unpause all synchronization 解除暂停所有同步 - + Unpause synchronization 解除暂停同步 - + Pause all synchronization 暂停所有同步 - + Pause synchronization 暂停同步 - + Log out of all accounts 注销所有账户 - + Log in to all accounts... 登录所有账户 - + New account... 新账号…… - + Crash now Only shows in debug mode to allow testing the crash handler 发生了崩溃 - + No items synced recently 近期没有项目被同步 - + Syncing %1 of %2 (%3 left) 同步 %2 中的 %1 (剩余 %3) - + Syncing %1 of %2 正在同步 %1,共 %2 - + Syncing %1 (%2 left) 同步 %1 (剩余 %2) - + Syncing %1 正在同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 更新 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index a4df8bc86..a36bd43bf 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -3443,96 +3443,91 @@ It is not advisable to use it. OCC::ownCloudGui - + Please sign in 請登入 - + Folder %1: %2 資料夾 %1: %2 - - No sync folders configured. - 尚未設置同步資料夾。 - - - + There are no sync folders configured. 尚未設置同步資料夾。 - + Open in browser 用瀏覽器開啟 - - - + + + Log in... 登入... - - - + + + Log out 登出 - + Recent Changes 最近的更動 - + Checking for changes in '%1' 檢查 '%1' 的變動 - + Managed Folders: 管理的資料夾: - + Open folder '%1' 開啟 %1 資料夾 - + Open %1 in browser 瀏覽器中開啟 %1 - + Unknown status 未知狀態 - + Settings... 設定… - + Details... 細節… - + Help 說明 - + Quit %1 離開 %1 - + Disconnected from %1 從 %1 斷線 @@ -3547,103 +3542,134 @@ It is not advisable to use it. - + + Disconnected + + + + + Disconnected from some accounts + + + + Disconnected from accounts: 已從帳號離線: - + Account %1: %2 帳號 %1: %2 - + + Signed out + + + + Account synchronization is disabled - + + + Synchronization is paused + + + + + Error during synchronization + + + + + No sync folders configured + + + + Unpause all folders - + Pause all folders - + Unpause all synchronization - + Unpause synchronization - + Pause all synchronization - + Pause synchronization - + Log out of all accounts 登出所有的帳戶 - + Log in to all accounts... 登入所有的帳戶 - + New account... - + Crash now Only shows in debug mode to allow testing the crash handler 發生非預期結果 - + No items synced recently 最近沒有項目被同步 - + Syncing %1 of %2 (%3 left) 同步中 %1 的 %2 (剩餘 %3) - + Syncing %1 of %2 - + Syncing %1 (%2 left) 同步中 %1 (剩餘 %2) - + Syncing %1 同步 %1 - + %1 (%2, %3) %1 (%2, %3) - + Up to date 最新的 From 0a4370236d2172366526182ebb7dcd4d039634f1 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Wed, 11 Oct 2017 02:18:35 +0200 Subject: [PATCH 159/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_ca.ts | 4 ++-- translations/client_cs.ts | 4 ++-- translations/client_de.ts | 4 ++-- translations/client_el.ts | 4 ++-- translations/client_es.ts | 12 ++++++------ translations/client_es_AR.ts | 4 ++-- translations/client_et.ts | 4 ++-- translations/client_eu.ts | 4 ++-- translations/client_fa.ts | 2 +- translations/client_fi.ts | 4 ++-- translations/client_fr.ts | 4 ++-- translations/client_gl.ts | 4 ++-- translations/client_hu.ts | 4 ++-- translations/client_it.ts | 4 ++-- translations/client_ja.ts | 4 ++-- translations/client_nb_NO.ts | 4 ++-- translations/client_nl.ts | 4 ++-- translations/client_pl.ts | 4 ++-- translations/client_pt.ts | 4 ++-- translations/client_pt_BR.ts | 4 ++-- translations/client_ru.ts | 4 ++-- translations/client_sk.ts | 4 ++-- translations/client_sl.ts | 4 ++-- translations/client_sr.ts | 4 ++-- translations/client_sv.ts | 4 ++-- translations/client_th.ts | 4 ++-- translations/client_tr.ts | 4 ++-- translations/client_uk.ts | 4 ++-- translations/client_zh_CN.ts | 4 ++-- translations/client_zh_TW.ts | 4 ++-- 31 files changed, 66 insertions(+), 63 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 06a6a1438..66ecc6410 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -198,6 +198,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_ca.ts b/translations/client_ca.ts index be422a538..1cc21f0d6 100644 --- a/translations/client_ca.ts +++ b/translations/client_ca.ts @@ -3548,7 +3548,7 @@ No és aconsellada usar-la. Disconnected - + Desconnectat @@ -3568,7 +3568,7 @@ No és aconsellada usar-la. Signed out - + S'ha desconnectat diff --git a/translations/client_cs.ts b/translations/client_cs.ts index 401822a68..6c366b938 100644 --- a/translations/client_cs.ts +++ b/translations/client_cs.ts @@ -3551,7 +3551,7 @@ Nedoporučuje se jí používat. Disconnected - + Odpojeno @@ -3571,7 +3571,7 @@ Nedoporučuje se jí používat. Signed out - + Odhlášeno diff --git a/translations/client_de.ts b/translations/client_de.ts index 2e2a49872..5d9abf06f 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -3552,7 +3552,7 @@ Es ist nicht ratsam, diese zu benutzen. Disconnected - + Getrennt @@ -3572,7 +3572,7 @@ Es ist nicht ratsam, diese zu benutzen. Signed out - + Abgemeldet diff --git a/translations/client_el.ts b/translations/client_el.ts index e6ae97d77..a8917a885 100644 --- a/translations/client_el.ts +++ b/translations/client_el.ts @@ -3553,7 +3553,7 @@ It is not advisable to use it. Disconnected - + Αποσυνδεδεμένο @@ -3573,7 +3573,7 @@ It is not advisable to use it. Signed out - + Αποσύνδεση diff --git a/translations/client_es.ts b/translations/client_es.ts index 87cdd54c7..a1692aa70 100644 --- a/translations/client_es.ts +++ b/translations/client_es.ts @@ -3552,12 +3552,12 @@ No se recomienda usarla. Disconnected - + Desconectado Disconnected from some accounts - + Desconectado desde varias cuentas @@ -3572,7 +3572,7 @@ No se recomienda usarla. Signed out - + Cerrar sesión @@ -3583,17 +3583,17 @@ No se recomienda usarla. Synchronization is paused - + La sincronización se ha detenido Error during synchronization - + Error durante la sincronización No sync folders configured - + No hay carpetas sincronizado configuradas diff --git a/translations/client_es_AR.ts b/translations/client_es_AR.ts index 4d3223062..f24f81036 100644 --- a/translations/client_es_AR.ts +++ b/translations/client_es_AR.ts @@ -3538,7 +3538,7 @@ It is not advisable to use it. Disconnected - + Desconectado @@ -3558,7 +3558,7 @@ It is not advisable to use it. Signed out - + Desautentificado diff --git a/translations/client_et.ts b/translations/client_et.ts index 146ae4bf2..c97230a58 100644 --- a/translations/client_et.ts +++ b/translations/client_et.ts @@ -3541,7 +3541,7 @@ Selle kasutamine pole soovitatav. Disconnected - + Lahti ühendatud @@ -3561,7 +3561,7 @@ Selle kasutamine pole soovitatav. Signed out - + Välja logitud diff --git a/translations/client_eu.ts b/translations/client_eu.ts index a28bee453..2e2895d60 100644 --- a/translations/client_eu.ts +++ b/translations/client_eu.ts @@ -3541,7 +3541,7 @@ Ez da gomendagarria erabltzea. Disconnected - + Deskonektatuta @@ -3561,7 +3561,7 @@ Ez da gomendagarria erabltzea. Signed out - + Saioa bukatuta diff --git a/translations/client_fa.ts b/translations/client_fa.ts index 2f4f86451..997445ac4 100644 --- a/translations/client_fa.ts +++ b/translations/client_fa.ts @@ -3558,7 +3558,7 @@ It is not advisable to use it. Signed out - + خارج شد diff --git a/translations/client_fi.ts b/translations/client_fi.ts index 03e7e0728..5605be6a4 100644 --- a/translations/client_fi.ts +++ b/translations/client_fi.ts @@ -3543,7 +3543,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Disconnected - + Yhteys katkaistu @@ -3563,7 +3563,7 @@ Osoitteen käyttäminen ei ole suositeltavaa. Signed out - + Kirjauduttu ulos diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 63ad68bb8..941c2d858 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -3554,7 +3554,7 @@ Il est déconseillé de l'utiliser. Disconnected - + Déconnecté @@ -3574,7 +3574,7 @@ Il est déconseillé de l'utiliser. Signed out - + Session fermée diff --git a/translations/client_gl.ts b/translations/client_gl.ts index 3815c3a86..c7be450b9 100644 --- a/translations/client_gl.ts +++ b/translations/client_gl.ts @@ -3542,7 +3542,7 @@ Recomendámoslle que non o use. Disconnected - + Desconectado @@ -3562,7 +3562,7 @@ Recomendámoslle que non o use. Signed out - + Desconectado diff --git a/translations/client_hu.ts b/translations/client_hu.ts index e2c4bb7d6..c9345924b 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -3539,7 +3539,7 @@ It is not advisable to use it. Disconnected - + Szétcsatlakozva @@ -3559,7 +3559,7 @@ It is not advisable to use it. Signed out - + Kijelentkezve diff --git a/translations/client_it.ts b/translations/client_it.ts index f45cfb7fd..169618012 100644 --- a/translations/client_it.ts +++ b/translations/client_it.ts @@ -3548,7 +3548,7 @@ Non è consigliabile utilizzarlo. Disconnected - + Disconnesso @@ -3568,7 +3568,7 @@ Non è consigliabile utilizzarlo. Signed out - + Disconnesso diff --git a/translations/client_ja.ts b/translations/client_ja.ts index 79bb53d34..fb706cf3e 100644 --- a/translations/client_ja.ts +++ b/translations/client_ja.ts @@ -3549,7 +3549,7 @@ It is not advisable to use it. Disconnected - + 切断しました @@ -3569,7 +3569,7 @@ It is not advisable to use it. Signed out - + サインアウト diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 1aea69e52..1ebf9aaa4 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -3552,7 +3552,7 @@ Det er ikke tilrådelig å bruke den. Disconnected - + Frakoblet @@ -3572,7 +3572,7 @@ Det er ikke tilrådelig å bruke den. Signed out - + Logget ut diff --git a/translations/client_nl.ts b/translations/client_nl.ts index a772826fa..bae7b67e2 100644 --- a/translations/client_nl.ts +++ b/translations/client_nl.ts @@ -3557,7 +3557,7 @@ We adviseren deze site niet te gebruiken. Disconnected - + Niet verbonden @@ -3577,7 +3577,7 @@ We adviseren deze site niet te gebruiken. Signed out - + Afgemeld diff --git a/translations/client_pl.ts b/translations/client_pl.ts index f393bec8f..a2b6321c7 100644 --- a/translations/client_pl.ts +++ b/translations/client_pl.ts @@ -3546,7 +3546,7 @@ Niezalecane jest jego użycie. Disconnected - + Rozłączony @@ -3566,7 +3566,7 @@ Niezalecane jest jego użycie. Signed out - + Odłączony diff --git a/translations/client_pt.ts b/translations/client_pt.ts index 7b2fd08c0..587e49e10 100644 --- a/translations/client_pt.ts +++ b/translations/client_pt.ts @@ -3553,7 +3553,7 @@ Não é aconselhada a sua utilização. Disconnected - + Desligado @@ -3573,7 +3573,7 @@ Não é aconselhada a sua utilização. Signed out - + Sessão terminada diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index c996bb44e..25a22444a 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -3550,7 +3550,7 @@ It is not advisable to use it. Disconnected - + Desconectado @@ -3570,7 +3570,7 @@ It is not advisable to use it. Signed out - + Desconectado diff --git a/translations/client_ru.ts b/translations/client_ru.ts index 25cfc26ee..48473ae35 100644 --- a/translations/client_ru.ts +++ b/translations/client_ru.ts @@ -3550,7 +3550,7 @@ It is not advisable to use it. Disconnected - + Отключено @@ -3570,7 +3570,7 @@ It is not advisable to use it. Signed out - + Вышли из аккаунта diff --git a/translations/client_sk.ts b/translations/client_sk.ts index f84202a14..81edf3b48 100644 --- a/translations/client_sk.ts +++ b/translations/client_sk.ts @@ -3542,7 +3542,7 @@ Nie je vhodné ju používať. Disconnected - + Odpojený @@ -3562,7 +3562,7 @@ Nie je vhodné ju používať. Signed out - + Odhlásený diff --git a/translations/client_sl.ts b/translations/client_sl.ts index 83009f209..4e9686459 100644 --- a/translations/client_sl.ts +++ b/translations/client_sl.ts @@ -3553,7 +3553,7 @@ Uporaba ni priporočljiva. Disconnected - + Brez povezave @@ -3573,7 +3573,7 @@ Uporaba ni priporočljiva. Signed out - + Odjavljeno diff --git a/translations/client_sr.ts b/translations/client_sr.ts index 993070eee..7ba439af9 100644 --- a/translations/client_sr.ts +++ b/translations/client_sr.ts @@ -3542,7 +3542,7 @@ It is not advisable to use it. Disconnected - + Неповезан @@ -3562,7 +3562,7 @@ It is not advisable to use it. Signed out - + Одјављен diff --git a/translations/client_sv.ts b/translations/client_sv.ts index 549f750ac..9b08dfd01 100644 --- a/translations/client_sv.ts +++ b/translations/client_sv.ts @@ -3548,7 +3548,7 @@ Det är inte lämpligt använda den. Disconnected - + Bortkopplad @@ -3568,7 +3568,7 @@ Det är inte lämpligt använda den. Signed out - + Utloggad diff --git a/translations/client_th.ts b/translations/client_th.ts index 44d4ed4ac..9d73f62e7 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -3553,7 +3553,7 @@ It is not advisable to use it. Disconnected - + ยกเลิกการเชื่อมต่อ @@ -3573,7 +3573,7 @@ It is not advisable to use it. Signed out - + ออกจากระบบ diff --git a/translations/client_tr.ts b/translations/client_tr.ts index 3ff18f991..50b0f11dc 100644 --- a/translations/client_tr.ts +++ b/translations/client_tr.ts @@ -3543,7 +3543,7 @@ Kullanmanız önerilmez. Disconnected - + Bağlantı kesildi @@ -3563,7 +3563,7 @@ Kullanmanız önerilmez. Signed out - + Oturum sonlandırıldı diff --git a/translations/client_uk.ts b/translations/client_uk.ts index 9d81c2d61..fdcaa653c 100644 --- a/translations/client_uk.ts +++ b/translations/client_uk.ts @@ -3541,7 +3541,7 @@ It is not advisable to use it. Disconnected - + Від'єднаний @@ -3561,7 +3561,7 @@ It is not advisable to use it. Signed out - + Вийшов diff --git a/translations/client_zh_CN.ts b/translations/client_zh_CN.ts index 573f507f5..6ccee25e8 100644 --- a/translations/client_zh_CN.ts +++ b/translations/client_zh_CN.ts @@ -3552,7 +3552,7 @@ It is not advisable to use it. Disconnected - + 连接已断开 @@ -3572,7 +3572,7 @@ It is not advisable to use it. Signed out - + 已退出 diff --git a/translations/client_zh_TW.ts b/translations/client_zh_TW.ts index a36bd43bf..17235c7dd 100644 --- a/translations/client_zh_TW.ts +++ b/translations/client_zh_TW.ts @@ -3544,7 +3544,7 @@ It is not advisable to use it. Disconnected - + 已經離線 @@ -3564,7 +3564,7 @@ It is not advisable to use it. Signed out - + 已登出 From 94b673dc8ee42b3f87e851bd5ff66aeff8b97ed0 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Thu, 12 Oct 2017 02:18:38 +0200 Subject: [PATCH 160/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_fr.ts | 38 ++++++++++++++++++------------------ translations/client_pt_BR.ts | 8 ++++---- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 66ecc6410..0efafe106 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -201,6 +201,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_fr.ts b/translations/client_fr.ts index 941c2d858..855f2196f 100644 --- a/translations/client_fr.ts +++ b/translations/client_fr.ts @@ -14,7 +14,7 @@ &Choose... - &Sélectionner... + &Choisir @@ -55,7 +55,7 @@ Form - Form + Formulaire @@ -83,12 +83,12 @@ Unknown error: network reply was deleted - + Erreur inconnue : La réponse du réseau a été supprimé Server replied "%1 %2" to "%3 %4" - + Le serveur a répondu "%1 %2" à "%3 %4" @@ -258,7 +258,7 @@ Connecting to %1... - + Connexion à %1 @@ -373,7 +373,7 @@ Maintenance mode - + mode maintenance @@ -388,7 +388,7 @@ Asking Credentials - + informations d'identification demandées @@ -991,7 +991,7 @@ Continuer la synchronisation comme d'habitude fera en sorte que tous les fi There are unresolved conflicts. Click for details. - + Il y a des conflits non résolus. Cliquez pour plus de détails. @@ -1451,7 +1451,7 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Issue - + Incident @@ -1691,12 +1691,12 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp Error returned from the server: <em>%1</em> - + Erreur retournée par le serveur: <em>%1</em> There was an error accessing the 'token' endpoint: <br><em>%1</em> - + Il y a eu une erreur durant l'accès au jeton de destination: <br><em>%1</em> @@ -1706,17 +1706,17 @@ L'option "Autoriser suppression" permet de ne pas bloquer la supp The reply from the server did not contain all expected fields - + La réponse provenant du serveur ne contienne pas tous les champs attendus <h1>Login Error</h1><p>%1</p> - + <h1>Erreur de connexion</h1><p>%1</p> <h1>Wrong user</h1><p>You logged-in with user <em>%1</em>, but must login with user <em>%2</em>.<br>Please log out of %3 in another tab, then <a href='%4'>click here</a> and log in as user %2</p> - + <h1>Mauvais utilisateur</h1><p>Vous êtes connecté avec l'utilisateur <em>%1</em>, mais vous devez vous connecter avec l'utilisateur<em>%2</em>. Veuillez vous déconnecter de %3 l'autre onglet, puis <a href='%4'> cliquez ici</a> et connectez-vous en tant que l'utilisateur </p>%2 @@ -1884,7 +1884,7 @@ L'assistant peut demander des privilèges additionnels durant le processus. Login in your browser - + Connectez vous sur votre navigateur @@ -2119,7 +2119,7 @@ Il est déconseillé de l'utiliser. The download would reduce free local disk space below the limit - + Le téléchargement réduira l'espace disque libre en dessous de la limite @@ -2889,7 +2889,7 @@ Il est déconseillé de l'utiliser. Share... - + partager @@ -3689,7 +3689,7 @@ Il est déconseillé de l'utiliser. <p>Version %2. For more information visit <a href="%3">https://%4</a></p><p>For known issues and help, please visit: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, and others.</small></p><p>Copyright ownCloud GmbH</p><p>Licensed under the GNU General Public License (GPL) Version 2.0<br/>ownCloud and the ownCloud Logo are registered trademarks of ownCloud GmbH in the United States, other countries, or both.</p> - + <p>Version %2. Pour plus d'informations, rendez-vous <a href="%3">https://%4</a></p><p>Pour les incidents connus et de l'aide, cliquez ici: <a href="https://central.owncloud.org/c/desktop-client">https://central.owncloud.org</a></p><p><small>By Klaas Freitag, Daniel Molkentin, Olivier Goffart, Markus Götz, Jan-Christoph Borchardt, et les autres.</small></p><p>Copyright ownCloud GmbH</p><p>Edité sous la licence GNU General Public (GPL) Version 2.0<br/>ownCloud et le logo ownCloud sont enregistrés sous la marque d'ownClouD GmbH aux Etats-Unis, autres pays ou les deux.</p> @@ -3805,7 +3805,7 @@ Il est déconseillé de l'utiliser. An error occured while connecting. Please try again. - + Une erreur s'est produite durant la connexion. Veuillez réessayer plus tard. diff --git a/translations/client_pt_BR.ts b/translations/client_pt_BR.ts index 25a22444a..cd1646820 100644 --- a/translations/client_pt_BR.ts +++ b/translations/client_pt_BR.ts @@ -3555,7 +3555,7 @@ It is not advisable to use it. Disconnected from some accounts - + Desconectado de algumas contas @@ -3581,17 +3581,17 @@ It is not advisable to use it. Synchronization is paused - + A sincronização está pausada Error during synchronization - + Erro durante a sincronização No sync folders configured - + Nenhuma pasta de sincronização configurada From 104c6edcde8cffebb6241872b345fa305c55d546 Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Fri, 13 Oct 2017 02:18:37 +0200 Subject: [PATCH 161/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_hu.ts | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 0efafe106..5fdd7a6f1 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -204,6 +204,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_hu.ts b/translations/client_hu.ts index c9345924b..48382501c 100644 --- a/translations/client_hu.ts +++ b/translations/client_hu.ts @@ -83,12 +83,12 @@ Unknown error: network reply was deleted - + Ismeretlen hiba: hálózati válasz törölve Server replied "%1 %2" to "%3 %4" - + Szerver válasza "%1 %2" "%3 %4"-re @@ -116,17 +116,17 @@ Synchronize all - + Mindent szinkronizál Synchronize none - + Semmit sem szinkronizál Apply manual changes - + Kézi módosítások alkalmazása @@ -173,12 +173,12 @@ Force sync now - + Kényszerített szinkronizálás Restart sync - + Szinkronizálás újraindítása @@ -243,7 +243,7 @@ Server %1 is currently in maintenance mode. - + A(z) %1 szerver jelenleg karbantartási módban van. @@ -253,12 +253,12 @@ Obtaining authorization from the browser. <a href='%1'>Click here</a> to re-open the browser. - + Engedély kérése a böngészőtől. <a href='%1'>Kattintson ide</a> a böngésző újranyitásához. Connecting to %1... - + Csatlakozás ehhez: %1 From 644ddf318c070798f7944c3200f8a48bb09e351c Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sat, 14 Oct 2017 02:18:36 +0200 Subject: [PATCH 162/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mirall.desktop.in b/mirall.desktop.in index 5fdd7a6f1..350300f52 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -207,6 +207,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion From a314eeb8925b1cc7894695c6233fd06735ac131d Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Sun, 15 Oct 2017 02:18:35 +0200 Subject: [PATCH 163/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_de.ts | 46 +++++++++++++++++++-------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 350300f52..9aeff8158 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -210,6 +210,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_de.ts b/translations/client_de.ts index 5d9abf06f..2136331a9 100644 --- a/translations/client_de.ts +++ b/translations/client_de.ts @@ -1705,12 +1705,12 @@ Objekte, bei denen Löschen erlaubt ist, werden gelöscht, wenn sie die Löschun The reply from the server did not contain all expected fields - + Die Antwort des Servers hat nicht alle erwarteten Felder beinhaltet <h1>Login Error</h1><p>%1</p> - + <h1>Anmeldefehler </h1><p>%1</p> @@ -1882,7 +1882,7 @@ for additional privileges during the process. Login in your browser - + Melden Sie sich in Ihrem Browser an @@ -2117,7 +2117,7 @@ Es ist nicht ratsam, diese zu benutzen. The download would reduce free local disk space below the limit - + Das Herunterladen würde den lokalen freien Speicherplatz unter das Limit reduzieren @@ -2304,7 +2304,7 @@ Es ist nicht ratsam, diese zu benutzen. Upload of %1 exceeds the quota for the folder - + Das Hochladen von %1 überschreitet das Speicherkontingent des Ordners @@ -2635,12 +2635,12 @@ Es ist nicht ratsam, diese zu benutzen. Enter a name to create a new public link... - + Einen Namen zum Erstellen eines neuen öffentlichen Link eingeben... &Create new - + Neuen Erstellen @@ -2655,7 +2655,7 @@ Es ist nicht ratsam, diese zu benutzen. Link properties: - + Link-Eigenschaften: @@ -2691,17 +2691,17 @@ Es ist nicht ratsam, diese zu benutzen. %1 link - + %1 - Link Link shares have been disabled - + Das Teilen von Links wurde deaktiviert Create public link share - + Öffentlichen Link zum Teilen erstellen @@ -2764,7 +2764,7 @@ Es ist nicht ratsam, diese zu benutzen. The item is not shared with any users or groups - + Das Element wird mit keinem Benutzer oder Gruppe geteilt @@ -3175,7 +3175,7 @@ Es ist nicht ratsam, diese zu benutzen. %1 (skipped due to earlier error, trying again in %2) - + %1(Übersprungen aufgrund des früheren Fehler,s erneuter Versuch in %2) @@ -3185,7 +3185,7 @@ Es ist nicht ratsam, diese zu benutzen. Folder hierarchy is too deep - + Ordnerhierarchie ist zu tief @@ -3221,7 +3221,7 @@ Es ist nicht ratsam, diese zu benutzen. There is insufficient space available on the server for some uploads. - + Auf dem Server ist für einige Dateien zum Hochladen nicht genug Platz. @@ -3557,12 +3557,12 @@ Es ist nicht ratsam, diese zu benutzen. Disconnected from some accounts - + Verbindungen zu einigen Konnten getrennt Disconnected from accounts: - Getrennt von Konten: + Verbindungen zu Konnten getrennt: @@ -3583,17 +3583,17 @@ Es ist nicht ratsam, diese zu benutzen. Synchronization is paused - + Synchronisation pausiert Error during synchronization - + Fehler bei der Synchronisation No sync folders configured - + Keine Ordner zur Synchronisation konfiguriert @@ -3798,7 +3798,7 @@ Es ist nicht ratsam, diese zu benutzen. Please switch to your browser to proceed. - + Bitte wechseln Sie zum Fortfahren in deinen Browser. @@ -3808,7 +3808,7 @@ Es ist nicht ratsam, diese zu benutzen. Re-open Browser - + Browser erneut öffnen @@ -4140,7 +4140,7 @@ Es ist nicht ratsam, diese zu benutzen. There was an error when launching the browser to go to URL %1. Maybe no default browser is configured? - + Die URL %1 konnte aufgrund eines Fehlers beim Start des Browsers nicht aufgerufen werden. Ist vielleicht kein Standardbrowser konfiguriert? From b4ab53dd32881a1eb1a58bd170a3b301444b340b Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Mon, 16 Oct 2017 02:18:33 +0200 Subject: [PATCH 164/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_nb_NO.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 9aeff8158..8f23c0b5b 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -213,6 +213,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_nb_NO.ts b/translations/client_nb_NO.ts index 1ebf9aaa4..0fcd1fca0 100644 --- a/translations/client_nb_NO.ts +++ b/translations/client_nb_NO.ts @@ -999,7 +999,7 @@ Hvis synkroniseringen fortsetter som normalt, vil alle filene dine bli overskrev Reconciling changes - + Sammenslår endringer From 30957479a389a1a5dad3a3a398c4ebe951bdef7a Mon Sep 17 00:00:00 2001 From: Jenkins for ownCloud Date: Tue, 17 Oct 2017 02:18:34 +0200 Subject: [PATCH 165/166] [tx-robot] updated from transifex --- mirall.desktop.in | 3 +++ translations/client_th.ts | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/mirall.desktop.in b/mirall.desktop.in index 8f23c0b5b..710763723 100644 --- a/mirall.desktop.in +++ b/mirall.desktop.in @@ -216,6 +216,9 @@ X-GNOME-Autostart-Delay=3 # Translations +# Translations + + # Translations Comment[oc]=@APPLICATION_NAME@ sincronizacion del client GenericName[oc]=Dorsièr de Sincronizacion diff --git a/translations/client_th.ts b/translations/client_th.ts index 9d73f62e7..842bb02d1 100644 --- a/translations/client_th.ts +++ b/translations/client_th.ts @@ -3558,7 +3558,7 @@ It is not advisable to use it. Disconnected from some accounts - + ยกเลิกการเชื่อมต่อจากบางบัญชี @@ -3584,17 +3584,17 @@ It is not advisable to use it. Synchronization is paused - + หยุดการประสานข้อมูลแล้ว Error during synchronization - + เกิดข้อผิดพลาดขณะทำการประสานข้อมูล No sync folders configured - + ไม่ได้กำหนดค่าโฟลเดอร์ที่จะประสานข้อมูล From 7f51803d04fb8411b425207763a584406ee04178 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Fri, 22 Sep 2017 11:15:35 +0200 Subject: [PATCH 166/166] Only use $(MAKE) in doc target if make is used as generator The old behavior broke builds with other CMake generators like Ninja as it obviously has no concept of $(MAKE) --- doc/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index f603eac55..f706a701c 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -41,7 +41,13 @@ if(SPHINX_FOUND) -D latex_logo=${LATEX_LOGO} ${CMAKE_CURRENT_SOURCE_DIR} ${SPHINX_PDF_DIR} ) - add_custom_target(doc-pdf $(MAKE) -C ${SPHINX_PDF_DIR} all-pdf + + set(MAKE "make" CACHE FILEPATH "make to be used for documentation generation if not using make as generator anyway") + if(CMAKE_GENERATOR MATCHES "Makefiles") + set(MAKE "$(MAKE)") + endif() + + add_custom_target(doc-pdf ${MAKE} -C ${SPHINX_PDF_DIR} all-pdf DEPENDS doc-latex ) add_dependencies(doc doc-pdf) endif(PDFLATEX_FOUND)